@hookform/resolvers 2.8.1 → 2.8.5

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 (78) hide show
  1. package/README.md +3 -3
  2. package/class-validator/dist/types.d.ts +2 -2
  3. package/class-validator/src/__tests__/Form-native-validation.tsx +2 -2
  4. package/class-validator/src/__tests__/Form.tsx +2 -2
  5. package/class-validator/src/types.ts +2 -6
  6. package/computed-types/dist/computed-types.js.map +1 -1
  7. package/computed-types/dist/computed-types.modern.js.map +1 -1
  8. package/computed-types/dist/computed-types.module.js.map +1 -1
  9. package/computed-types/dist/computed-types.umd.js.map +1 -1
  10. package/computed-types/src/computed-types.ts +1 -1
  11. package/dist/resolvers.js.map +1 -1
  12. package/dist/resolvers.mjs.map +1 -1
  13. package/dist/resolvers.module.js.map +1 -1
  14. package/dist/resolvers.umd.js.map +1 -1
  15. package/dist/toNestError.d.ts +2 -2
  16. package/io-ts/dist/io-ts.js +1 -1
  17. package/io-ts/dist/io-ts.js.map +1 -1
  18. package/io-ts/dist/io-ts.modern.js.map +1 -1
  19. package/io-ts/dist/io-ts.module.js.map +1 -1
  20. package/io-ts/dist/io-ts.umd.js +1 -1
  21. package/io-ts/dist/io-ts.umd.js.map +1 -1
  22. package/io-ts/dist/types.d.ts +2 -2
  23. package/io-ts/src/__tests__/Form-native-validation.tsx +5 -5
  24. package/io-ts/src/__tests__/Form.tsx +5 -5
  25. package/io-ts/src/io-ts.ts +2 -3
  26. package/io-ts/src/types.ts +4 -8
  27. package/joi/dist/types.d.ts +3 -3
  28. package/joi/src/types.ts +3 -2
  29. package/nope/dist/types.d.ts +2 -2
  30. package/nope/src/types.ts +3 -6
  31. package/package.json +24 -24
  32. package/superstruct/dist/superstruct.js.map +1 -1
  33. package/superstruct/dist/superstruct.modern.js.map +1 -1
  34. package/superstruct/dist/superstruct.module.js.map +1 -1
  35. package/superstruct/dist/superstruct.umd.js.map +1 -1
  36. package/superstruct/dist/types.d.ts +2 -2
  37. package/superstruct/src/__tests__/Form.tsx +1 -1
  38. package/superstruct/src/superstruct.ts +3 -6
  39. package/superstruct/src/types.ts +11 -10
  40. package/typanion/dist/typanion.js.map +1 -1
  41. package/typanion/dist/typanion.modern.js.map +1 -1
  42. package/typanion/dist/typanion.module.js.map +1 -1
  43. package/typanion/dist/typanion.umd.js.map +1 -1
  44. package/typanion/dist/types.d.ts +4 -4
  45. package/typanion/src/__tests__/Form-native-validation.tsx +2 -3
  46. package/typanion/src/__tests__/Form.tsx +2 -6
  47. package/typanion/src/typanion.ts +2 -5
  48. package/typanion/src/types.ts +8 -16
  49. package/vest/dist/vest.js +1 -1
  50. package/vest/dist/vest.js.map +1 -1
  51. package/vest/dist/vest.umd.js +1 -1
  52. package/vest/dist/vest.umd.js.map +1 -1
  53. package/vest/src/__tests__/Form-native-validation.tsx +1 -1
  54. package/vest/src/__tests__/Form.tsx +1 -1
  55. package/vest/src/types.ts +3 -2
  56. package/yup/dist/types.d.ts +3 -3
  57. package/yup/dist/yup.js +1 -1
  58. package/yup/dist/yup.js.map +1 -1
  59. package/yup/dist/yup.mjs +1 -1
  60. package/yup/dist/yup.modern.js +1 -1
  61. package/yup/dist/yup.modern.js.map +1 -1
  62. package/yup/dist/yup.module.js +1 -1
  63. package/yup/dist/yup.module.js.map +1 -1
  64. package/yup/dist/yup.umd.js +1 -1
  65. package/yup/dist/yup.umd.js.map +1 -1
  66. package/yup/src/__tests__/Form-native-validation.tsx +1 -1
  67. package/yup/src/__tests__/Form.tsx +1 -1
  68. package/yup/src/types.ts +11 -10
  69. package/yup/src/yup.ts +25 -22
  70. package/zod/dist/types.d.ts +3 -3
  71. package/zod/dist/zod.js.map +1 -1
  72. package/zod/dist/zod.modern.js.map +1 -1
  73. package/zod/dist/zod.module.js.map +1 -1
  74. package/zod/dist/zod.umd.js.map +1 -1
  75. package/zod/src/__tests__/Form.tsx +1 -1
  76. package/zod/src/__tests__/zod.ts +1 -1
  77. package/zod/src/types.ts +11 -10
  78. package/zod/src/zod.ts +8 -8
package/joi/src/types.ts CHANGED
@@ -1,15 +1,16 @@
1
1
  import {
2
+ FieldValues,
2
3
  ResolverOptions,
3
4
  ResolverResult,
4
5
  UnpackNestedValue,
5
6
  } from 'react-hook-form';
6
7
  import type { AsyncValidationOptions, Schema } from 'joi';
7
8
 
8
- export type Resolver = <T extends Schema, TFieldValues, TContext>(
9
+ export type Resolver = <T extends Schema>(
9
10
  schema: T,
10
11
  schemaOptions?: AsyncValidationOptions,
11
12
  factoryOptions?: { mode?: 'async' | 'sync' },
12
- ) => (
13
+ ) => <TFieldValues extends FieldValues, TContext>(
13
14
  values: UnpackNestedValue<TFieldValues>,
14
15
  context: TContext | undefined,
15
16
  options: ResolverOptions<TFieldValues>,
@@ -1,6 +1,6 @@
1
- import type { ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
1
+ import type { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
2
2
  import type { NopeObject } from 'nope-validator/lib/cjs/NopeObject';
3
3
  declare type ValidateOptions = Parameters<NopeObject['validate']>[2];
4
4
  declare type Context = Parameters<NopeObject['validate']>[1];
5
- export declare type Resolver = <T extends NopeObject, TFieldValues, TContext extends Context>(schema: T, schemaOptions?: ValidateOptions) => (values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
5
+ export declare type Resolver = <T extends NopeObject>(schema: T, schemaOptions?: ValidateOptions) => <TFieldValues extends FieldValues, TContext extends Context>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
6
6
  export {};
package/nope/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ FieldValues,
2
3
  ResolverOptions,
3
4
  ResolverResult,
4
5
  UnpackNestedValue,
@@ -8,14 +9,10 @@ import type { NopeObject } from 'nope-validator/lib/cjs/NopeObject';
8
9
  type ValidateOptions = Parameters<NopeObject['validate']>[2];
9
10
  type Context = Parameters<NopeObject['validate']>[1];
10
11
 
11
- export type Resolver = <
12
- T extends NopeObject,
13
- TFieldValues,
14
- TContext extends Context,
15
- >(
12
+ export type Resolver = <T extends NopeObject>(
16
13
  schema: T,
17
14
  schemaOptions?: ValidateOptions,
18
- ) => (
15
+ ) => <TFieldValues extends FieldValues, TContext extends Context>(
19
16
  values: UnpackNestedValue<TFieldValues>,
20
17
  context: TContext | undefined,
21
18
  options: ResolverOptions<TFieldValues>,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "2.8.1",
4
+ "version": "2.8.5",
5
5
  "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types and Typanion",
6
6
  "main": "dist/resolvers.js",
7
7
  "module": "dist/resolvers.module.js",
@@ -76,7 +76,7 @@
76
76
  "require": "./typanion/dist/typanion.js"
77
77
  },
78
78
  "./package.json": "./package.json",
79
- "./": "./"
79
+ "./*": "./*"
80
80
  },
81
81
  "files": [
82
82
  "dist",
@@ -164,27 +164,27 @@
164
164
  },
165
165
  "homepage": "https://react-hook-form.com",
166
166
  "devDependencies": {
167
- "@testing-library/jest-dom": "^5.12.0",
168
- "@testing-library/react": "^12.0.0",
169
- "@testing-library/user-event": "^13.2.1",
170
- "@types/jest": "^27.0.0",
171
- "@types/react": "^17.0.17",
172
- "@typescript-eslint/eslint-plugin": "^4.25.0",
173
- "@typescript-eslint/parser": "^4.25.0",
174
- "check-export-map": "^1.1.1",
167
+ "@testing-library/jest-dom": "^5.15.0",
168
+ "@testing-library/react": "^12.1.2",
169
+ "@testing-library/user-event": "^13.5.0",
170
+ "@types/jest": "^27.0.2",
171
+ "@types/react": "^17.0.33",
172
+ "@typescript-eslint/eslint-plugin": "^5.3.0",
173
+ "@typescript-eslint/parser": "^5.3.0",
174
+ "check-export-map": "^1.2.0",
175
175
  "class-transformer": "^0.4.0",
176
176
  "class-validator": "^0.13.1",
177
- "computed-types": "^1.7.0",
177
+ "computed-types": "^1.11.1",
178
178
  "eslint": "^7.27.0",
179
179
  "eslint-config-prettier": "^8.3.0",
180
- "fp-ts": "^2.11.1",
181
- "husky": "^7.0.1",
180
+ "fp-ts": "^2.11.5",
181
+ "husky": "^7.0.4",
182
182
  "io-ts": "^2.0.0",
183
183
  "io-ts-types": "^0.5.16",
184
- "jest": "^27.0.6",
184
+ "jest": "^27.3.1",
185
185
  "joi": "^17.4.2",
186
- "lint-staged": "^11.1.2",
187
- "microbundle": "^0.13.3",
186
+ "lint-staged": "^11.2.6",
187
+ "microbundle": "^0.14.1",
188
188
  "monocle-ts": "^2.3.10",
189
189
  "newtype-ts": "^0.3.4",
190
190
  "nope-validator": "^1.0.0",
@@ -192,15 +192,15 @@
192
192
  "prettier": "^2.3.2",
193
193
  "react": "^17.0.2",
194
194
  "react-dom": "^17.0.2",
195
- "react-hook-form": "7.15.0",
195
+ "react-hook-form": "7.20.4",
196
196
  "reflect-metadata": "^0.1.13",
197
- "superstruct": "^0.15.2",
198
- "ts-jest": "^27.0.4",
199
- "typanion": "^3.3.2",
200
- "typescript": "^4.3.2",
201
- "vest": "^3.2.5",
202
- "yup": "^0.32.9",
203
- "zod": "^3.7.1"
197
+ "superstruct": "^0.15.3",
198
+ "ts-jest": "^27.0.7",
199
+ "typanion": "^3.7.1",
200
+ "typescript": "^4.4.4",
201
+ "vest": "^3.2.8",
202
+ "yup": "^0.32.11",
203
+ "zod": "^3.11.6"
204
204
  },
205
205
  "peerDependencies": {
206
206
  "react-hook-form": "^7.0.0"
@@ -1 +1 @@
1
- {"version":3,"file":"superstruct.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError, FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(result[0]),\n options,\n ) as FieldErrors<any>,\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {} as FieldErrors<any>,\n };\n };\n"],"names":["schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"0FAiBE,SAACA,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,WAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,eAjBUJ,EAkBCC,EAAO,GAjBhCD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAYMR,KAKNA,EAAQa,2BAA6BC,yBAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
1
+ {"version":3,"file":"superstruct.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(result[0]), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {},\n };\n };\n"],"names":["schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"0FAiBE,SAACA,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,WAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,eAjBUJ,EAiBmBC,EAAO,GAhBlDD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAUqDR,KAIrDA,EAAQa,2BAA6BC,yBAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"superstruct.modern.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError, FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(result[0]),\n options,\n ) as FieldErrors<any>,\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {} as FieldErrors<any>,\n };\n };\n"],"names":["superstructResolver","schema","resolverOptions","values","_","options","result","validate","errors","toNestError","error","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qHAMA,MAUaA,EACX,CAACC,EAAQC,IAAoB,CAACC,EAAQC,EAAGC,KACvC,MAAMC,EAASC,EAASJ,EAAQF,EAAQC,GAExC,OAAII,EAAO,GACF,CACLH,OAAQ,GACRK,OAAQC,GAjBUC,EAkBCJ,EAAO,GAjBhCI,EAAMC,WAAWC,OACf,CAACC,EAAUH,KACRG,EAASH,EAAMI,KAAKC,KAAK,MAAQ,CAChCC,QAASN,EAAMM,QACfC,KAAMP,EAAMO,QACRJ,EACR,KAYMR,KAKNA,EAAQa,2BAA6BC,EAAuB,GAAId,GAEzD,CACLF,OAAQG,EAAO,GACfE,OAAQ,KA5BYE,IAAAA"}
1
+ {"version":3,"file":"superstruct.modern.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(result[0]), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {},\n };\n };\n"],"names":["superstructResolver","schema","resolverOptions","values","_","options","result","validate","errors","toNestError","error","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qHAMA,MAUaA,EACX,CAACC,EAAQC,IAAoB,CAACC,EAAQC,EAAGC,KACvC,MAAMC,EAASC,EAASJ,EAAQF,EAAQC,GAExC,OAAII,EAAO,GACF,CACLH,OAAQ,GACRK,OAAQC,GAjBUC,EAiBmBJ,EAAO,GAhBlDI,EAAMC,WAAWC,OACf,CAACC,EAAUH,KACRG,EAASH,EAAMI,KAAKC,KAAK,MAAQ,CAChCC,QAASN,EAAMM,QACfC,KAAMP,EAAMO,QACRJ,EACR,KAUqDR,KAIrDA,EAAQa,2BAA6BC,EAAuB,GAAId,GAEzD,CACLF,OAAQG,EAAO,GACfE,OAAQ,KAzBYE,IAAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"superstruct.module.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError, FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(result[0]),\n options,\n ) as FieldErrors<any>,\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {} as FieldErrors<any>,\n };\n };\n"],"names":["superstructResolver","schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qHAMA,IAUaA,EACX,SAACC,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,EAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,GAjBUJ,EAkBCC,EAAO,GAjBhCD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAYMR,KAKNA,EAAQa,2BAA6BC,EAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
1
+ {"version":3,"file":"superstruct.module.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(result[0]), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {},\n };\n };\n"],"names":["superstructResolver","schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qHAMA,IAUaA,EACX,SAACC,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,EAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,GAjBUJ,EAiBmBC,EAAO,GAhBlDD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAUqDR,KAIrDA,EAAQa,2BAA6BC,EAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"superstruct.umd.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError, FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(result[0]),\n options,\n ) as FieldErrors<any>,\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {} as FieldErrors<any>,\n };\n };\n"],"names":["schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"4YAiBE,SAACA,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,WAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,eAjBUJ,EAkBCC,EAAO,GAjBhCD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAYMR,KAKNA,EAAQa,2BAA6BC,yBAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
1
+ {"version":3,"file":"superstruct.umd.js","sources":["../src/superstruct.ts"],"sourcesContent":["import { FieldError } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\n\nimport { StructError, validate } from 'superstruct';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (error: StructError) =>\n error.failures().reduce<Record<string, FieldError>>(\n (previous, error) =>\n (previous[error.path.join('.')] = {\n message: error.message,\n type: error.type,\n }) && previous,\n {},\n );\n\nexport const superstructResolver: Resolver =\n (schema, resolverOptions) => (values, _, options) => {\n const result = validate(values, schema, resolverOptions);\n\n if (result[0]) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(result[0]), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result[1],\n errors: {},\n };\n };\n"],"names":["schema","resolverOptions","values","_","options","error","result","validate","errors","toNestError","failures","reduce","previous","path","join","message","type","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"4YAiBE,SAACA,EAAQC,mBAAqBC,EAAQC,EAAGC,GACvC,IAZsBC,EAYhBC,EAASC,WAASL,EAAQF,EAAQC,GAExC,OAAIK,EAAO,GACF,CACLJ,OAAQ,GACRM,OAAQC,eAjBUJ,EAiBmBC,EAAO,GAhBlDD,EAAMK,WAAWC,OACf,SAACC,EAAUP,UACRO,EAASP,EAAMQ,KAAKC,KAAK,MAAQ,CAChCC,QAASV,EAAMU,QACfC,KAAMX,EAAMW,QACRJ,GACR,KAUqDR,KAIrDA,EAAQa,2BAA6BC,yBAAuB,GAAId,GAEzD,CACLF,OAAQI,EAAO,GACfE,OAAQ"}
@@ -1,5 +1,5 @@
1
- import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form';
1
+ import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
2
2
  import { validate, Struct } from 'superstruct';
3
3
  declare type Options = Parameters<typeof validate>[2];
4
- export declare type Resolver = <TFieldValues extends FieldValues, TContext extends object = object>(schema: Struct<TFieldValues, any>, factoryOptions?: Options) => (values: unknown, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
4
+ export declare type Resolver = <T extends Struct<any, any>>(schema: T, factoryOtions?: Options) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
5
5
  export {};
@@ -21,7 +21,7 @@ function TestComponent({ onSubmit }: Props) {
21
21
  register,
22
22
  formState: { errors },
23
23
  handleSubmit,
24
- } = useForm({
24
+ } = useForm<FormData>({
25
25
  resolver: superstructResolver(schema), // Useful to check TypeScript regressions
26
26
  });
27
27
 
@@ -1,4 +1,4 @@
1
- import { FieldError, FieldErrors } from 'react-hook-form';
1
+ import { FieldError } from 'react-hook-form';
2
2
  import { toNestError, validateFieldsNatively } from '@hookform/resolvers';
3
3
 
4
4
  import { StructError, validate } from 'superstruct';
@@ -21,10 +21,7 @@ export const superstructResolver: Resolver =
21
21
  if (result[0]) {
22
22
  return {
23
23
  values: {},
24
- errors: toNestError(
25
- parseErrorSchema(result[0]),
26
- options,
27
- ) as FieldErrors<any>,
24
+ errors: toNestError(parseErrorSchema(result[0]), options),
28
25
  };
29
26
  }
30
27
 
@@ -32,6 +29,6 @@ export const superstructResolver: Resolver =
32
29
 
33
30
  return {
34
31
  values: result[1],
35
- errors: {} as FieldErrors<any>,
32
+ errors: {},
36
33
  };
37
34
  };
@@ -1,17 +1,18 @@
1
- /* eslint-disable @typescript-eslint/ban-types */
2
- import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form';
1
+ import {
2
+ FieldValues,
3
+ ResolverOptions,
4
+ ResolverResult,
5
+ UnpackNestedValue,
6
+ } from 'react-hook-form';
3
7
  import { validate, Struct } from 'superstruct';
4
8
 
5
9
  type Options = Parameters<typeof validate>[2];
6
10
 
7
- export type Resolver = <
8
- TFieldValues extends FieldValues,
9
- TContext extends object = object,
10
- >(
11
- schema: Struct<TFieldValues, any>,
12
- factoryOptions?: Options,
13
- ) => (
14
- values: unknown,
11
+ export type Resolver = <T extends Struct<any, any>>(
12
+ schema: T,
13
+ factoryOtions?: Options,
14
+ ) => <TFieldValues extends FieldValues, TContext>(
15
+ values: UnpackNestedValue<TFieldValues>,
15
16
  context: TContext | undefined,
16
17
  options: ResolverOptions<TFieldValues>,
17
18
  ) => ResolverResult<TFieldValues>;
@@ -1 +1 @@
1
- {"version":3,"file":"typanion.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} as FieldErrors<any> };\n }\n\n return {\n values: {},\n errors: toNestError(parsedErrors, options) as FieldErrors<any>,\n };\n };\n"],"names":["validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8DAiBE,SAACA,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,yBAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CACLP,OAAQ,GACRO,OAAQa,cAAYZ,EAAcN"}
1
+ {"version":3,"file":"typanion.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} };\n }\n\n return { values: {}, errors: toNestError(parsedErrors, options) };\n };\n"],"names":["validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8DAiBE,SAACA,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,yBAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CAAEP,OAAQ,GAAIO,OAAQa,cAAYZ,EAAcN"}
@@ -1 +1 @@
1
- {"version":3,"file":"typanion.modern.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} as FieldErrors<any> };\n }\n\n return {\n values: {},\n errors: toNestError(parsedErrors, options) as FieldErrors<any>,\n };\n };\n"],"names":["typanionResolver","validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAIA,MAYaA,EACX,CAACC,EAAWC,EAAmB,KAC/B,CAACC,EAAQC,EAAGC,KACV,MAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,EAACD,EAAkBC,EAA4B,KAC1DD,EAAOE,OAAO,CAACC,EAAKC,KACzB,MAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,EAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CACLP,OAAQ,GACRO,OAAQa,EAAYZ,EAAcN"}
1
+ {"version":3,"file":"typanion.modern.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} };\n }\n\n return { values: {}, errors: toNestError(parsedErrors, options) };\n };\n"],"names":["typanionResolver","validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAIA,MAYaA,EACX,CAACC,EAAWC,EAAmB,KAC/B,CAACC,EAAQC,EAAGC,KACV,MAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,EAACD,EAAkBC,EAA4B,KAC1DD,EAAOE,OAAO,CAACC,EAAKC,KACzB,MAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,EAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CAAEP,OAAQ,GAAIO,OAAQa,EAAYZ,EAAcN"}
@@ -1 +1 @@
1
- {"version":3,"file":"typanion.module.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} as FieldErrors<any> };\n }\n\n return {\n values: {},\n errors: toNestError(parsedErrors, options) as FieldErrors<any>,\n };\n };\n"],"names":["typanionResolver","validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAIA,IAYaA,EACX,SAACC,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,EAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CACLP,OAAQ,GACRO,OAAQa,EAAYZ,EAAcN"}
1
+ {"version":3,"file":"typanion.module.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} };\n }\n\n return { values: {}, errors: toNestError(parsedErrors, options) };\n };\n"],"names":["typanionResolver","validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAIA,IAYaA,EACX,SAACC,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,EAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CAAEP,OAAQ,GAAIO,OAAQa,EAAYZ,EAAcN"}
@@ -1 +1 @@
1
- {"version":3,"file":"typanion.umd.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} as FieldErrors<any> };\n }\n\n return {\n values: {},\n errors: toNestError(parsedErrors, options) as FieldErrors<any>,\n };\n };\n"],"names":["validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"iVAiBE,SAACA,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,yBAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CACLP,OAAQ,GACRO,OAAQa,cAAYZ,EAAcN"}
1
+ {"version":3,"file":"typanion.umd.js","sources":["../src/typanion.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { Resolver } from './types';\n\nconst parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {\n return errors.reduce((acc, error) => {\n const e = error.split(':');\n\n acc[e[0].slice(1)] = {\n message: e[1].trim(),\n };\n\n return acc;\n }, parsedErrors);\n};\n\nexport const typanionResolver: Resolver =\n (validator, validatorOptions = {}) =>\n (values, _, options) => {\n const rawErrors: string[] = [];\n const isValid = validator(\n values,\n Object.assign(\n {},\n {\n errors: rawErrors,\n },\n validatorOptions,\n ),\n );\n const parsedErrors = parseErrors(rawErrors);\n\n if (isValid) {\n options.shouldUseNativeValidation &&\n validateFieldsNatively(parsedErrors, options);\n\n return { values, errors: {} };\n }\n\n return { values: {}, errors: toNestError(parsedErrors, options) };\n };\n"],"names":["validator","validatorOptions","values","_","options","rawErrors","isValid","Object","assign","errors","parsedErrors","reduce","acc","error","e","split","slice","message","trim","parseErrors","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"iVAiBE,SAACA,EAAWC,mBAAAA,IAAAA,EAAmB,aAC9BC,EAAQC,EAAGC,GACV,IAAMC,EAAsB,GACtBC,EAAUN,EACdE,EACAK,OAAOC,OACL,GACA,CACEC,OAAQJ,GAEVJ,IAGES,EA1BU,SAACD,EAAkBC,GACrC,gBADqCA,IAAAA,EAA4B,IAC1DD,EAAOE,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAID,EAAME,MAAM,KAMtB,OAJAH,EAAIE,EAAE,GAAGE,MAAM,IAAM,CACnBC,QAASH,EAAE,GAAGI,QAGTN,GACNF,GAiBoBS,CAAYd,GAEjC,OAAIC,GACFF,EAAQgB,2BACNC,yBAAuBX,EAAcN,GAEhC,CAAEF,OAAAA,EAAQO,OAAQ,KAGpB,CAAEP,OAAQ,GAAIO,OAAQa,cAAYZ,EAAcN"}
@@ -1,6 +1,6 @@
1
- import type { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form';
2
- import { ValidationState, StrictValidator } from 'typanion';
1
+ import type { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
2
+ import { ValidationState, AnyStrictValidator } from 'typanion';
3
3
  declare type ValidateOptions = Pick<ValidationState, 'coercions' | 'coercion'>;
4
- declare type RHFResolver<TFieldValues extends FieldValues, TInput = unknown, TContext extends Object = object> = (values: TInput, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
5
- export declare type Resolver = <TInput extends FieldValues = FieldValues, TFieldValues extends TInput = TInput, TContext extends object = object>(validator: StrictValidator<TInput, TFieldValues>, validatorOptions?: ValidateOptions) => RHFResolver<TFieldValues, TInput, TContext>;
4
+ declare type RHFResolver = <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
5
+ export declare type Resolver = <UnknownValidator extends AnyStrictValidator>(validator: UnknownValidator, validatorOptions?: ValidateOptions) => RHFResolver;
6
6
  export {};
@@ -5,8 +5,7 @@ import { useForm } from 'react-hook-form';
5
5
  import * as t from 'typanion';
6
6
  import { typanionResolver } from '..';
7
7
 
8
- const ERROR_MESSAGE =
9
- 'Expected to have a length of at least 1 elements (got 0)';
8
+ const ERROR_MESSAGE = 'Expected to have a length of at least 1 elements (got 0)';
10
9
 
11
10
  const schema = t.isObject({
12
11
  username: t.applyCascade(t.isString(), [t.hasMinLength(1)]),
@@ -24,7 +23,7 @@ interface Props {
24
23
  }
25
24
 
26
25
  function TestComponent({ onSubmit }: Props) {
27
- const { register, handleSubmit } = useForm({
26
+ const { register, handleSubmit } = useForm<FormData>({
28
27
  resolver: typanionResolver(schema),
29
28
  shouldUseNativeValidation: true,
30
29
  });
@@ -25,7 +25,7 @@ function TestComponent({ onSubmit }: Props) {
25
25
  register,
26
26
  formState: { errors },
27
27
  handleSubmit,
28
- } = useForm({
28
+ } = useForm<FormData>({
29
29
  resolver: typanionResolver(schema), // Useful to check TypeScript regressions
30
30
  });
31
31
 
@@ -52,10 +52,6 @@ test("form's validation with Typanion and TypeScript's integration", async () =>
52
52
  user.click(screen.getByText(/submit/i));
53
53
  });
54
54
 
55
- expect(
56
- screen.getAllByText(
57
- 'Expected to have a length of at least 1 elements (got 0)',
58
- ),
59
- ).toHaveLength(2);
55
+ expect(screen.getAllByText('Expected to have a length of at least 1 elements (got 0)')).toHaveLength(2);
60
56
  expect(handleSubmit).not.toHaveBeenCalled();
61
57
  });
@@ -34,11 +34,8 @@ export const typanionResolver: Resolver =
34
34
  options.shouldUseNativeValidation &&
35
35
  validateFieldsNatively(parsedErrors, options);
36
36
 
37
- return { values, errors: {} as FieldErrors<any> };
37
+ return { values, errors: {} };
38
38
  }
39
39
 
40
- return {
41
- values: {},
42
- errors: toNestError(parsedErrors, options) as FieldErrors<any>,
43
- };
40
+ return { values: {}, errors: toNestError(parsedErrors, options) };
44
41
  };
@@ -1,28 +1,20 @@
1
- /* eslint-disable @typescript-eslint/ban-types */
2
1
  import type {
3
2
  FieldValues,
4
3
  ResolverOptions,
5
4
  ResolverResult,
5
+ UnpackNestedValue,
6
6
  } from 'react-hook-form';
7
- import { ValidationState, StrictValidator } from 'typanion';
7
+ import { ValidationState, AnyStrictValidator} from 'typanion'
8
8
 
9
- type ValidateOptions = Pick<ValidationState, 'coercions' | 'coercion'>;
9
+ type ValidateOptions = Pick<ValidationState, 'coercions' | 'coercion'>
10
10
 
11
- type RHFResolver<
12
- TFieldValues extends FieldValues,
13
- TInput = unknown,
14
- TContext extends Object = object,
15
- > = (
16
- values: TInput,
11
+ type RHFResolver = <TFieldValues extends FieldValues, TContext>(
12
+ values: UnpackNestedValue<TFieldValues>,
17
13
  context: TContext | undefined,
18
14
  options: ResolverOptions<TFieldValues>,
19
15
  ) => ResolverResult<TFieldValues>;
20
16
 
21
- export type Resolver = <
22
- TInput extends FieldValues = FieldValues,
23
- TFieldValues extends TInput = TInput,
24
- TContext extends object = object,
25
- >(
26
- validator: StrictValidator<TInput, TFieldValues>,
17
+ export type Resolver = <UnknownValidator extends AnyStrictValidator>(
18
+ validator: UnknownValidator,
27
19
  validatorOptions?: ValidateOptions,
28
- ) => RHFResolver<TFieldValues, TInput, TContext>;
20
+ )=> RHFResolver
package/vest/dist/vest.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=r(require("vest/promisify")),o=function(e,r){var t={};for(var o in e)t[o]||(t[o]={message:e[o][0],type:""}),r&&(t[o].types=e[o].reduce(function(e,r,t){return(e[t]=r)&&e},{}));return t};exports.vestResolver=function(r,s,i){return void 0===i&&(i={}),function(s,n,a){try{var u=function(r){return r.hasErrors()?{values:{},errors:e.toNestError(o(r.getErrors(),!a.shouldUseNativeValidation&&"all"===a.criteriaMode),a)}:(a.shouldUseNativeValidation&&e.validateFieldsNatively({},a),{values:s,errors:{}})};return Promise.resolve("sync"===i.mode?u(r(s)):Promise.resolve(t.default(r)(s)).then(u))}catch(e){return Promise.reject(e)}}};
1
+ var e=require("@hookform/resolvers");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/r(require("vest/promisify")),o=function(e,r){var t={};for(var o in e)t[o]||(t[o]={message:e[o][0],type:""}),r&&(t[o].types=e[o].reduce(function(e,r,t){return(e[t]=r)&&e},{}));return t};exports.vestResolver=function(r,s,i){return void 0===i&&(i={}),function(s,n,a){try{var u=function(r){return r.hasErrors()?{values:{},errors:e.toNestError(o(r.getErrors(),!a.shouldUseNativeValidation&&"all"===a.criteriaMode),a)}:(a.shouldUseNativeValidation&&e.validateFieldsNatively({},a),{values:s,errors:{}})};return Promise.resolve("sync"===i.mode?u(r(s)):Promise.resolve(t.default(r)(s)).then(u))}catch(e){return Promise.reject(e)}}};
2
2
  //# sourceMappingURL=vest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vest.js","sources":["../src/vest.ts"],"sourcesContent":["import { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport { FieldError } from 'react-hook-form';\nimport promisify from 'vest/promisify';\nimport type { VestErrors, Resolver } from './types';\n\nconst parseErrorSchema = (\n vestError: VestErrors,\n validateAllFieldCriteria: boolean,\n) => {\n const errors: Record<string, FieldError> = {};\n for (const path in vestError) {\n if (!errors[path]) {\n errors[path] = { message: vestError[path][0], type: '' };\n }\n\n if (validateAllFieldCriteria) {\n errors[path].types = vestError[path].reduce<Record<number, string>>(\n (acc, message, index) => (acc[index] = message) && acc,\n {},\n );\n }\n }\n return errors;\n};\n\nexport const vestResolver: Resolver =\n (schema, _, resolverOptions = {}) =>\n async (values, _context, options) => {\n const result =\n resolverOptions.mode === 'sync'\n ? schema(values)\n : await promisify(schema)(values);\n\n if (result.hasErrors()) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n result.getErrors(),\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrorSchema","vestError","validateAllFieldCriteria","errors","path","message","type","types","reduce","acc","index","schema","_","resolverOptions","values","_context","options","result","hasErrors","toNestError","getErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","mode","promisify"],"mappings":"gJAKMA,EAAmB,SACvBC,EACAC,GAEA,IAAMC,EAAqC,GAC3C,IAAK,IAAMC,KAAQH,EACZE,EAAOC,KACVD,EAAOC,GAAQ,CAAEC,QAASJ,EAAUG,GAAM,GAAIE,KAAM,KAGlDJ,IACFC,EAAOC,GAAMG,MAAQN,EAAUG,GAAMI,OACnC,SAACC,EAAKJ,EAASK,UAAWD,EAAIC,GAASL,IAAYI,GACnD,KAIN,OAAON,wBAIP,SAACQ,EAAQC,EAAGC,mBAAAA,IAAAA,EAAkB,aACvBC,EAAQC,EAAUC,sBACjBC,GAKN,OAAIA,EAAOC,YACF,CACLJ,OAAQ,GACRX,OAAQgB,cACNnB,EACEiB,EAAOG,aACNJ,EAAQK,2BACkB,QAAzBL,EAAQM,cAEZN,KAKNA,EAAQK,2BAA6BE,yBAAuB,GAAIP,GAEzD,CAAEF,OAAAA,EAAQX,OAAQ,6BApBE,SAAzBU,EAAgBW,OACZb,EAAOG,oBACDW,UAAUd,EAAVc,CAAkBX,aALhC"}
1
+ {"version":3,"file":"vest.js","sources":["../src/vest.ts"],"sourcesContent":["import { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport { FieldError } from 'react-hook-form';\nimport promisify from 'vest/promisify';\nimport type { VestErrors, Resolver } from './types';\n\nconst parseErrorSchema = (\n vestError: VestErrors,\n validateAllFieldCriteria: boolean,\n) => {\n const errors: Record<string, FieldError> = {};\n for (const path in vestError) {\n if (!errors[path]) {\n errors[path] = { message: vestError[path][0], type: '' };\n }\n\n if (validateAllFieldCriteria) {\n errors[path].types = vestError[path].reduce<Record<number, string>>(\n (acc, message, index) => (acc[index] = message) && acc,\n {},\n );\n }\n }\n return errors;\n};\n\nexport const vestResolver: Resolver =\n (schema, _, resolverOptions = {}) =>\n async (values, _context, options) => {\n const result =\n resolverOptions.mode === 'sync'\n ? schema(values)\n : await promisify(schema)(values);\n\n if (result.hasErrors()) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n result.getErrors(),\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrorSchema","vestError","validateAllFieldCriteria","errors","path","message","type","types","reduce","acc","index","schema","_","resolverOptions","values","_context","options","result","hasErrors","toNestError","getErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","mode","promisify"],"mappings":"6JAKMA,EAAmB,SACvBC,EACAC,GAEA,IAAMC,EAAqC,GAC3C,IAAK,IAAMC,KAAQH,EACZE,EAAOC,KACVD,EAAOC,GAAQ,CAAEC,QAASJ,EAAUG,GAAM,GAAIE,KAAM,KAGlDJ,IACFC,EAAOC,GAAMG,MAAQN,EAAUG,GAAMI,OACnC,SAACC,EAAKJ,EAASK,UAAWD,EAAIC,GAASL,IAAYI,GACnD,KAIN,OAAON,wBAIP,SAACQ,EAAQC,EAAGC,mBAAAA,IAAAA,EAAkB,aACvBC,EAAQC,EAAUC,sBACjBC,GAKN,OAAIA,EAAOC,YACF,CACLJ,OAAQ,GACRX,OAAQgB,cACNnB,EACEiB,EAAOG,aACNJ,EAAQK,2BACkB,QAAzBL,EAAQM,cAEZN,KAKNA,EAAQK,2BAA6BE,yBAAuB,GAAIP,GAEzD,CAAEF,OAAAA,EAAQX,OAAQ,6BApBE,SAAzBU,EAAgBW,OACZb,EAAOG,oBACDW,UAAUd,EAAVc,CAAkBX,aALhC"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("vest/promisify")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","vest/promisify"],r):r((e||self).hookformResolversVest={},e.hookformResolvers,e.promisify)}(this,function(e,r,o){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=t(o),i=function(e,r){var o={};for(var t in e)o[t]||(o[t]={message:e[t][0],type:""}),r&&(o[t].types=e[t].reduce(function(e,r,o){return(e[o]=r)&&e},{}));return o};e.vestResolver=function(e,o,t){return void 0===t&&(t={}),function(o,n,f){try{var u=function(e){return e.hasErrors()?{values:{},errors:r.toNestError(i(e.getErrors(),!f.shouldUseNativeValidation&&"all"===f.criteriaMode),f)}:(f.shouldUseNativeValidation&&r.validateFieldsNatively({},f),{values:o,errors:{}})};return Promise.resolve("sync"===t.mode?u(e(o)):Promise.resolve(s.default(e)(o)).then(u))}catch(e){return Promise.reject(e)}}}});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("vest/promisify")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","vest/promisify"],r):r((e||self).hookformResolversVest={},e.hookformResolvers,e.promisify)}(this,function(e,r,o){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=/*#__PURE__*/t(o),i=function(e,r){var o={};for(var t in e)o[t]||(o[t]={message:e[t][0],type:""}),r&&(o[t].types=e[t].reduce(function(e,r,o){return(e[o]=r)&&e},{}));return o};e.vestResolver=function(e,o,t){return void 0===t&&(t={}),function(o,n,f){try{var u=function(e){return e.hasErrors()?{values:{},errors:r.toNestError(i(e.getErrors(),!f.shouldUseNativeValidation&&"all"===f.criteriaMode),f)}:(f.shouldUseNativeValidation&&r.validateFieldsNatively({},f),{values:o,errors:{}})};return Promise.resolve("sync"===t.mode?u(e(o)):Promise.resolve(s.default(e)(o)).then(u))}catch(e){return Promise.reject(e)}}}});
2
2
  //# sourceMappingURL=vest.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vest.umd.js","sources":["../src/vest.ts"],"sourcesContent":["import { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport { FieldError } from 'react-hook-form';\nimport promisify from 'vest/promisify';\nimport type { VestErrors, Resolver } from './types';\n\nconst parseErrorSchema = (\n vestError: VestErrors,\n validateAllFieldCriteria: boolean,\n) => {\n const errors: Record<string, FieldError> = {};\n for (const path in vestError) {\n if (!errors[path]) {\n errors[path] = { message: vestError[path][0], type: '' };\n }\n\n if (validateAllFieldCriteria) {\n errors[path].types = vestError[path].reduce<Record<number, string>>(\n (acc, message, index) => (acc[index] = message) && acc,\n {},\n );\n }\n }\n return errors;\n};\n\nexport const vestResolver: Resolver =\n (schema, _, resolverOptions = {}) =>\n async (values, _context, options) => {\n const result =\n resolverOptions.mode === 'sync'\n ? schema(values)\n : await promisify(schema)(values);\n\n if (result.hasErrors()) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n result.getErrors(),\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrorSchema","vestError","validateAllFieldCriteria","errors","path","message","type","types","reduce","acc","index","schema","_","resolverOptions","values","_context","options","result","hasErrors","toNestError","getErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","mode","promisify"],"mappings":"scAKMA,EAAmB,SACvBC,EACAC,GAEA,IAAMC,EAAqC,GAC3C,IAAK,IAAMC,KAAQH,EACZE,EAAOC,KACVD,EAAOC,GAAQ,CAAEC,QAASJ,EAAUG,GAAM,GAAIE,KAAM,KAGlDJ,IACFC,EAAOC,GAAMG,MAAQN,EAAUG,GAAMI,OACnC,SAACC,EAAKJ,EAASK,UAAWD,EAAIC,GAASL,IAAYI,GACnD,KAIN,OAAON,kBAIP,SAACQ,EAAQC,EAAGC,mBAAAA,IAAAA,EAAkB,aACvBC,EAAQC,EAAUC,sBACjBC,GAKN,OAAIA,EAAOC,YACF,CACLJ,OAAQ,GACRX,OAAQgB,cACNnB,EACEiB,EAAOG,aACNJ,EAAQK,2BACkB,QAAzBL,EAAQM,cAEZN,KAKNA,EAAQK,2BAA6BE,yBAAuB,GAAIP,GAEzD,CAAEF,OAAAA,EAAQX,OAAQ,6BApBE,SAAzBU,EAAgBW,OACZb,EAAOG,oBACDW,UAAUd,EAAVc,CAAkBX,aALhC"}
1
+ {"version":3,"file":"vest.umd.js","sources":["../src/vest.ts"],"sourcesContent":["import { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport { FieldError } from 'react-hook-form';\nimport promisify from 'vest/promisify';\nimport type { VestErrors, Resolver } from './types';\n\nconst parseErrorSchema = (\n vestError: VestErrors,\n validateAllFieldCriteria: boolean,\n) => {\n const errors: Record<string, FieldError> = {};\n for (const path in vestError) {\n if (!errors[path]) {\n errors[path] = { message: vestError[path][0], type: '' };\n }\n\n if (validateAllFieldCriteria) {\n errors[path].types = vestError[path].reduce<Record<number, string>>(\n (acc, message, index) => (acc[index] = message) && acc,\n {},\n );\n }\n }\n return errors;\n};\n\nexport const vestResolver: Resolver =\n (schema, _, resolverOptions = {}) =>\n async (values, _context, options) => {\n const result =\n resolverOptions.mode === 'sync'\n ? schema(values)\n : await promisify(schema)(values);\n\n if (result.hasErrors()) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n result.getErrors(),\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrorSchema","vestError","validateAllFieldCriteria","errors","path","message","type","types","reduce","acc","index","schema","_","resolverOptions","values","_context","options","result","hasErrors","toNestError","getErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","mode","promisify"],"mappings":"mdAKMA,EAAmB,SACvBC,EACAC,GAEA,IAAMC,EAAqC,GAC3C,IAAK,IAAMC,KAAQH,EACZE,EAAOC,KACVD,EAAOC,GAAQ,CAAEC,QAASJ,EAAUG,GAAM,GAAIE,KAAM,KAGlDJ,IACFC,EAAOC,GAAMG,MAAQN,EAAUG,GAAMI,OACnC,SAACC,EAAKJ,EAASK,UAAWD,EAAIC,GAASL,IAAYI,GACnD,KAIN,OAAON,kBAIP,SAACQ,EAAQC,EAAGC,mBAAAA,IAAAA,EAAkB,aACvBC,EAAQC,EAAUC,sBACjBC,GAKN,OAAIA,EAAOC,YACF,CACLJ,OAAQ,GACRX,OAAQgB,cACNnB,EACEiB,EAAOG,aACNJ,EAAQK,2BACkB,QAAzBL,EAAQM,cAEZN,KAKNA,EAAQK,2BAA6BE,yBAAuB,GAAIP,GAEzD,CAAEF,OAAAA,EAAQX,OAAQ,6BApBE,SAAzBU,EAAgBW,OACZb,EAAOG,oBACDW,UAAUd,EAAVc,CAAkBX,aALhC"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
4
  import { useForm } from 'react-hook-form';
5
- import vest from 'vest';
5
+ import * as vest from 'vest';
6
6
  import { vestResolver } from '..';
7
7
 
8
8
  const USERNAME_REQUIRED_MESSAGE = 'username field is required';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
4
  import { useForm } from 'react-hook-form';
5
- import vest from 'vest';
5
+ import * as vest from 'vest';
6
6
  import { vestResolver } from '..';
7
7
 
8
8
  interface FormData {
package/vest/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ FieldValues,
2
3
  ResolverOptions,
3
4
  ResolverResult,
4
5
  UnpackNestedValue,
@@ -7,11 +8,11 @@ import * as Vest from 'vest';
7
8
 
8
9
  export type ICreateResult = ReturnType<typeof Vest.create>;
9
10
 
10
- export type Resolver = <TFieldValues, TContext>(
11
+ export type Resolver = (
11
12
  schema: ICreateResult,
12
13
  schemaOptions?: never,
13
14
  factoryOptions?: { mode?: 'async' | 'sync' },
14
- ) => (
15
+ ) => <TFieldValues extends FieldValues, TContext>(
15
16
  values: UnpackNestedValue<TFieldValues>,
16
17
  context: TContext | undefined,
17
18
  options: ResolverOptions<TFieldValues>,
@@ -1,8 +1,8 @@
1
- import { ResolverOptions, ResolverResult } from 'react-hook-form';
1
+ import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
2
2
  import * as Yup from 'yup';
3
3
  import type Lazy from 'yup/lib/Lazy';
4
4
  declare type Options<T extends Yup.AnyObjectSchema | Lazy<any>> = Parameters<T['validate']>[1];
5
- export declare type Resolver = <T extends Yup.AnyObjectSchema | Lazy<any>, TContext extends object = object>(schema: T, schemaOptions?: Options<T>, factoryOptions?: {
5
+ export declare type Resolver = <T extends Yup.AnyObjectSchema | Lazy<any>>(schema: T, schemaOptions?: Options<T>, factoryOptions?: {
6
6
  mode?: 'async' | 'sync';
7
- }) => (values: unknown, context: TContext | undefined, options: ResolverOptions<Yup.InferType<T>>) => Promise<ResolverResult<Yup.InferType<T>>>;
7
+ }) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
8
8
  export {};
package/yup/dist/yup.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers"),t=require("react-hook-form");exports.yupResolver=function(r,o,n){return void 0===o&&(o={}),void 0===n&&(n={}),function(s,a,i){try{return Promise.resolve(function(t,u){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({abortEarly:!1},o,{context:a}))).then(function(t){return i.shouldUseNativeValidation&&e.validateFieldsNatively({},i),{values:t,errors:{}}}))}catch(e){return u(e)}return c&&c.then?c.then(void 0,u):c}(0,function(r){return{values:{},errors:e.toNestError((o=r,n=!i.shouldUseNativeValidation&&"all"===i.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.appendErrors(r.path,n,e,r.type,s?[].concat(s,r.message):r.message)}return e},{})),i)};var o,n}))}catch(e){return Promise.reject(e)}}};
1
+ var e=require("@hookform/resolvers"),t=require("react-hook-form");exports.yupResolver=function(r,o,n){return void 0===o&&(o={}),void 0===n&&(n={}),function(s,a,i){try{return Promise.resolve(function(t,u){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({abortEarly:!1},o,{context:a}))).then(function(t){return i.shouldUseNativeValidation&&e.validateFieldsNatively({},i),{values:t,errors:{}}}))}catch(e){return u(e)}return c&&c.then?c.then(void 0,u):c}(0,function(r){return{values:{},errors:e.toNestError((o=r,n=!i.shouldUseNativeValidation&&"all"===i.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.appendErrors(r.path,n,e,r.type,s?[].concat(s,r.message):r.message)}return e},{})),i)};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, { ValidationError } from 'yup';\nimport { toNestError, validateFieldsNatively } 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, schemaOptions = {}, 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 ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n e as ValidationError,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","result","shouldUseNativeValidation","validateFieldsNatively","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat"],"mappings":"sFAsCE,SAACA,EAAQC,EAAoBC,mBAApBD,IAAAA,EAAgB,aAAIC,IAAAA,EAAkB,aACxCC,EAAQC,EAASC,uDAEhBJ,EAAcG,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBV,EACM,SAAzBE,EAAgBS,KAAkB,eAAiB,YAEnDR,EACAS,OAAOC,OAAO,CAAEC,YAAY,GAASb,EAAe,CAAEG,QAAAA,oBAJlDW,GASN,OAFAV,EAAQW,2BAA6BC,yBAAuB,GAAIZ,GAEzD,CACLF,OAAQY,EACRG,OAAQ,4EAEHC,GACP,MAAO,CACLhB,OAAQ,GACRe,OAAQE,eAtDdC,EAwDUF,EAvDVG,GAwDWjB,EAAQW,2BACkB,QAAzBX,EAAQkB,aAvDbF,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,KAoCKrB,IA7De,IACvBgB,EACAC,KA2BA"}
1
+ {"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError, validateFieldsNatively } 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>>(\n (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 );\n};\n\nexport const yupResolver: Resolver =\n (schema, schemaOptions = {}, 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 ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: result,\n errors: {},\n };\n } catch (e: any) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","result","shouldUseNativeValidation","validateFieldsNatively","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat"],"mappings":"sFAyCE,SAACA,EAAQC,EAAoBC,mBAApBD,IAAAA,EAAgB,aAAIC,IAAAA,EAAkB,aACxCC,EAAQC,EAASC,uDAEhBJ,EAAcG,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBV,EACM,SAAzBE,EAAgBS,KAAkB,eAAiB,YAEnDR,EACAS,OAAOC,OAAO,CAAEC,YAAY,GAASb,EAAe,CAAEG,QAAAA,oBAJlDW,GASN,OAFAV,EAAQW,2BAA6BC,yBAAuB,GAAIZ,GAEzD,CACLF,OAAQY,EACRG,OAAQ,4EAEHC,GACP,MAAO,CACLhB,OAAQ,GACRe,OAAQE,eAzDdC,EA2DUF,EA1DVG,GA2DWjB,EAAQW,2BACkB,QAAzBX,EAAQkB,cA1DZF,EAAMG,OAAS,IAAIC,OACzB,SAACC,EAAUL,GAKT,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,GAET,KAqCMrB,IAhEe,IACvBgB,EACAC,KA8BA"}
package/yup/dist/yup.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{validateFieldsNatively as e,toNestError as t}from"@hookform/resolvers";import{appendErrors as r}from"react-hook-form";var o=function(o,n,a){return void 0===n&&(n={}),void 0===a&&(a={}),function(s,i,c){try{return Promise.resolve(function(t,r){try{var u=(n.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(o["sync"===a.mode?"validateSync":"validate"](s,Object.assign({abortEarly:!1},n,{context:i}))).then(function(t){return c.shouldUseNativeValidation&&e({},c),{values:t,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){return{values:{},errors:t((o=e,n=!c.shouldUseNativeValidation&&"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,a=o&&o[t.type];e[t.path]=r(t.path,n,e,t.type,a?[].concat(a,t.message):t.message)}return e},{})),c)};var o,n}))}catch(e){return Promise.reject(e)}}};export{o as yupResolver};
1
+ import{validateFieldsNatively as e,toNestError as t}from"@hookform/resolvers";import{appendErrors as r}from"react-hook-form";var o=function(o,n,a){return void 0===n&&(n={}),void 0===a&&(a={}),function(s,i,c){try{return Promise.resolve(function(t,r){try{var u=(n.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(o["sync"===a.mode?"validateSync":"validate"](s,Object.assign({abortEarly:!1},n,{context:i}))).then(function(t){return c.shouldUseNativeValidation&&e({},c),{values:t,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){return{values:{},errors:t((o=e,n=!c.shouldUseNativeValidation&&"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,a=o&&o[t.type];e[t.path]=r(t.path,n,e,t.type,a?[].concat(a,t.message):t.message)}return e},{})),c)};var o,n}))}catch(e){return Promise.reject(e)}}};export{o as yupResolver};
2
2
  //# sourceMappingURL=yup.module.js.map
@@ -1,2 +1,2 @@
1
- import{validateFieldsNatively as e,toNestError as t}from"@hookform/resolvers";import{appendErrors as o}from"react-hook-form";const a=(a,s={},r={})=>async(n,c,i)=>{try{s.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead");const t=await a["sync"===r.mode?"validateSync":"validate"](n,Object.assign({abortEarly:!1},s,{context:c}));return i.shouldUseNativeValidation&&e({},i),{values:t,errors:{}}}catch(e){return{values:{},errors:t((p=e,l=!i.shouldUseNativeValidation&&"all"===i.criteriaMode,p.inner.reduce((e,t)=>{if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),l){const a=e[t.path].types,s=a&&a[t.type];e[t.path]=o(t.path,l,e,t.type,s?[].concat(s,t.message):t.message)}return e},{})),i)}}var p,l};export{a as yupResolver};
1
+ import{validateFieldsNatively as e,toNestError as t}from"@hookform/resolvers";import{appendErrors as o}from"react-hook-form";const a=(a,s={},r={})=>async(n,c,i)=>{try{s.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead");const t=await a["sync"===r.mode?"validateSync":"validate"](n,Object.assign({abortEarly:!1},s,{context:c}));return i.shouldUseNativeValidation&&e({},i),{values:t,errors:{}}}catch(e){return{values:{},errors:t((p=e,l=!i.shouldUseNativeValidation&&"all"===i.criteriaMode,(p.inner||[]).reduce((e,t)=>{if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),l){const a=e[t.path].types,s=a&&a[t.type];e[t.path]=o(t.path,l,e,t.type,s?[].concat(s,t.message):t.message)}return e},{})),i)}}var p,l};export{a as yupResolver};
2
2
  //# sourceMappingURL=yup.modern.js.map