@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/README.md CHANGED
@@ -50,7 +50,7 @@ import * as yup from 'yup';
50
50
  const schema = yup.object().shape({
51
51
  name: yup.string().required(),
52
52
  age: yup.number().required(),
53
- });
53
+ }).required();
54
54
 
55
55
  const App = () => {
56
56
  const { register, handleSubmit } = useForm({
@@ -177,9 +177,9 @@ Vest 🦺 Declarative Validation Testing.
177
177
  ```typescript jsx
178
178
  import { useForm } from 'react-hook-form';
179
179
  import { vestResolver } from '@hookform/resolvers/vest';
180
- import vest, { test, enforce } from 'vest';
180
+ import { create, test, enforce } from 'vest';
181
181
 
182
- const validationSuite = vest.create((data = {}) => {
182
+ const validationSuite = create((data = {}) => {
183
183
  test('username', 'Username is required', () => {
184
184
  enforce(data.username).isNotEmpty();
185
185
  });
@@ -3,6 +3,6 @@ import { ValidatorOptions } from 'class-validator';
3
3
  import { ClassConstructor } from 'class-transformer';
4
4
  export declare type Resolver = <T extends {
5
5
  [_: string]: any;
6
- }, TFieldValues extends FieldValues, TContext>(schema: ClassConstructor<T>, schemaOptions?: ValidatorOptions, resolverOptions?: {
6
+ }>(schema: ClassConstructor<T>, schemaOptions?: ValidatorOptions, resolverOptions?: {
7
7
  mode?: 'async' | 'sync';
8
- }) => (values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
8
+ }) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
- import { useForm } from 'react-hook-form';
4
+ import { SubmitHandler, useForm } from 'react-hook-form';
5
5
  import { classValidatorResolver } from '..';
6
6
  import { IsNotEmpty } from 'class-validator';
7
7
 
@@ -14,7 +14,7 @@ class Schema {
14
14
  }
15
15
 
16
16
  interface Props {
17
- onSubmit: (data: Schema) => void;
17
+ onSubmit: SubmitHandler<FormData>;
18
18
  }
19
19
 
20
20
  function TestComponent({ onSubmit }: Props) {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
- import { useForm } from 'react-hook-form';
4
+ import { SubmitHandler, useForm } from 'react-hook-form';
5
5
  import { classValidatorResolver } from '..';
6
6
  import { IsNotEmpty } from 'class-validator';
7
7
 
@@ -14,7 +14,7 @@ class Schema {
14
14
  }
15
15
 
16
16
  interface Props {
17
- onSubmit: (data: Schema) => void;
17
+ onSubmit: SubmitHandler<FormData>;
18
18
  }
19
19
 
20
20
  function TestComponent({ onSubmit }: Props) {
@@ -7,15 +7,11 @@ import {
7
7
  import { ValidatorOptions } from 'class-validator';
8
8
  import { ClassConstructor } from 'class-transformer';
9
9
 
10
- export type Resolver = <
11
- T extends { [_: string]: any },
12
- TFieldValues extends FieldValues,
13
- TContext,
14
- >(
10
+ export type Resolver = <T extends { [_: string]: any }>(
15
11
  schema: ClassConstructor<T>,
16
12
  schemaOptions?: ValidatorOptions,
17
13
  resolverOptions?: { mode?: 'async' | 'sync' },
18
- ) => (
14
+ ) => <TFieldValues extends FieldValues, TContext>(
19
15
  values: UnpackNestedValue<TFieldValues>,
20
16
  context: TContext | undefined,
21
17
  options: ResolverOptions<TFieldValues>,
@@ -1 +1 @@
1
- {"version":3,"file":"computed-types.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"qCAKMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,kCAIH,SAACY,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,yBAAuB,GAAIH,GAEzD,CACLb,OAAQ,GACRW,OAAQG,0EAEHX,GACP,MAAO,CACLQ,OAAQ,GACRX,OAAQiB,cAAYrB,EAAiBO,GAAQU,OAbnD"}
1
+ {"version":3,"file":"computed-types.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"qCAKMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,kCAIH,SAACY,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,yBAAuB,GAAIH,GAEzD,CACLb,OAAQ,GACRW,OAAQG,0EAEHX,GACP,MAAO,CACLQ,OAAQ,GACRX,OAAQiB,cAAYrB,EAAiBO,GAAQU,OAbnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"computed-types.modern.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","computedTypesResolver","schema","async","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAKA,MAAMA,EAAmB,CACvBC,EACAC,EAA4B,GAC5BC,EAAO,MAECF,EAAmBG,QAAU,IAAIC,OAAO,CAACC,EAAKC,KACpD,MAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,KAAUA,KAAQK,IAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,GAGQY,EACVC,GAAWC,MAAOC,EAAQC,EAAGC,KAC5B,IACE,MAAMC,QAAaL,EAAOE,GAI1B,OAFAE,EAAQE,2BAA6BC,EAAuB,GAAIH,GAEzD,CACLf,OAAQ,GACRa,OAAQG,GAEV,MAAOb,GACP,MAAO,CACLU,OAAQ,GACRb,OAAQmB,EAAYvB,EAAiBO,GAAQY"}
1
+ {"version":3,"file":"computed-types.modern.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","computedTypesResolver","schema","async","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAKA,MAAMA,EAAmB,CACvBC,EACAC,EAA4B,GAC5BC,EAAO,MAECF,EAAmBG,QAAU,IAAIC,OAAO,CAACC,EAAKC,KACpD,MAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,KAAUA,KAAQK,IAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,GAGQY,EACVC,GAAWC,MAAOC,EAAQC,EAAGC,KAC5B,IACE,MAAMC,QAAaL,EAAOE,GAI1B,OAFAE,EAAQE,2BAA6BC,EAAuB,GAAIH,GAEzD,CACLf,OAAQ,GACRa,OAAQG,GAEV,MAAOb,GACP,MAAO,CACLU,OAAQ,GACRb,OAAQmB,EAAYvB,EAAiBO,GAAQY"}
@@ -1 +1 @@
1
- {"version":3,"file":"computed-types.module.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","computedTypesResolver","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAKA,IAAMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,IAGQY,EACX,SAACC,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,EAAuB,GAAIH,GAEzD,CACLd,OAAQ,GACRY,OAAQG,0EAEHZ,GACP,MAAO,CACLS,OAAQ,GACRZ,OAAQkB,EAAYtB,EAAiBO,GAAQW,OAbnD"}
1
+ {"version":3,"file":"computed-types.module.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","computedTypesResolver","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"8EAKA,IAAMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,IAGQY,EACX,SAACC,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,EAAuB,GAAIH,GAEzD,CACLd,OAAQ,GACRY,OAAQG,0EAEHZ,GACP,MAAO,CACLS,OAAQ,GACRZ,OAAQkB,EAAYtB,EAAiBO,GAAQW,OAbnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"computed-types.umd.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"mUAKA,IAAMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,4BAIH,SAACY,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,yBAAuB,GAAIH,GAEzD,CACLb,OAAQ,GACRW,OAAQG,0EAEHX,GACP,MAAO,CACLQ,OAAQ,GACRX,OAAQiB,cAAYrB,EAAiBO,GAAQU,OAbnD"}
1
+ {"version":3,"file":"computed-types.umd.js","sources":["../src/computed-types.ts"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'computed-types';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (\n computedTypesError: ValidationError,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return (computedTypesError.errors || []).reduce((acc, error) => {\n const _currentPath = String(error.path[0]);\n const _path = path ? `${path}.${_currentPath}` : _currentPath;\n\n acc[_path] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n parseErrorSchema(error.error, acc, _path);\n\n return acc;\n }, parsedErrors);\n};\n\nexport const computedTypesResolver: Resolver =\n (schema) => async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n return {\n values: {},\n errors: toNestError(parseErrorSchema(error), options),\n };\n }\n };\n"],"names":["parseErrorSchema","computedTypesError","parsedErrors","path","errors","reduce","acc","error","_currentPath","String","_path","type","name","message","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","toNestError"],"mappings":"mUAKA,IAAMA,EAAmB,SAAnBA,EACJC,EACAC,EACAC,GAEA,gBAHAD,IAAAA,EAA4B,aAC5BC,IAAAA,EAAO,KAECF,EAAmBG,QAAU,IAAIC,OAAO,SAACC,EAAKC,GACpD,IAAMC,EAAeC,OAAOF,EAAMJ,KAAK,IACjCO,EAAQP,EAAUA,MAAQK,EAAiBA,EASjD,OAPAF,EAAII,GAAS,CACXC,KAAMJ,EAAMA,MAAMK,KAClBC,QAASN,EAAMA,MAAMM,SAGvBb,EAAiBO,EAAMA,MAAOD,EAAKI,GAE5BJ,GACNJ,4BAIH,SAACY,mBAAkBC,EAAQC,EAAGC,sEAEPH,EAAOC,kBAApBG,GAIN,OAFAD,EAAQE,2BAA6BC,yBAAuB,GAAIH,GAEzD,CACLb,OAAQ,GACRW,OAAQG,0EAEHX,GACP,MAAO,CACLQ,OAAQ,GACRX,OAAQiB,cAAYrB,EAAiBO,GAAQU,OAbnD"}
@@ -34,7 +34,7 @@ export const computedTypesResolver: Resolver =
34
34
  errors: {},
35
35
  values: data,
36
36
  };
37
- } catch (error) {
37
+ } catch (error: any) {
38
38
  return {
39
39
  values: {},
40
40
  errors: toNestError(parseErrorSchema(error), options),
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues extends FieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"iCAGaA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,MAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,wCCJW,SACzBV,EACAC,GAEAA,EAAQU,2BAA6BZ,EAAuBC,EAAQC,GAEpE,IAAMW,EAAc,GACpB,IAAK,IAAMC,KAAQb,EAAQ,CACzB,IAAMI,EAAQG,MAAIN,EAAQE,OAAQU,GAElCC,MACEF,EACAC,EACAE,OAAOC,OAAOhB,EAAOa,GAAO,CAAER,IAAKD,GAASA,EAAMC,OAItD,OAAOO"}
1
+ {"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"iCAGaA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,MAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,wCCLW,SACzBV,EACAC,GAEAA,EAAQU,2BAA6BZ,EAAuBC,EAAQC,GAEpE,IAAMW,EAAc,GACpB,IAAK,IAAMC,KAAQb,EAAQ,CACzB,IAAMI,EAAQG,MAAIN,EAAQE,OAAQU,GAElCC,MACEF,EACAC,EACAE,OAAOC,OAAOhB,EAAOa,GAAO,CAAER,IAAKD,GAASA,EAAMC,OAItD,OAAOO"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues extends FieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","toNestError","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"+CAGaA,MAAAA,EAAyB,CACpCC,EACAC,KAEA,IAAK,MAAMC,KAAaD,EAAQE,OAAQ,CACtC,MAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,MAAMC,EAAQC,EAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,oBCJHC,EAAc,CACzBX,EACAC,KAEAA,EAAQW,2BAA6Bb,EAAuBC,EAAQC,GAEpE,MAAMY,EAAc,GACpB,IAAK,MAAMC,KAAQd,EAAQ,CACzB,MAAMI,EAAQG,EAAIN,EAAQE,OAAQW,GAElCC,EACEF,EACAC,EACAE,OAAOC,OAAOjB,EAAOc,GAAO,CAAET,IAAKD,GAASA,EAAMC,OAItD,OAAOQ"}
1
+ {"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","toNestError","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"+CAGaA,MAAAA,EAAyB,CACpCC,EACAC,KAEA,IAAK,MAAMC,KAAaD,EAAQE,OAAQ,CACtC,MAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,MAAMC,EAAQC,EAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,oBCLHC,EAAc,CACzBX,EACAC,KAEAA,EAAQW,2BAA6Bb,EAAuBC,EAAQC,GAEpE,MAAMY,EAAc,GACpB,IAAK,MAAMC,KAAQd,EAAQ,CACzB,MAAMI,EAAQG,EAAIN,EAAQE,OAAQW,GAElCC,EACEF,EACAC,EACAE,OAAOC,OAAOjB,EAAOc,GAAO,CAAET,IAAKD,GAASA,EAAMC,OAItD,OAAOQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.module.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues extends FieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","toNestError","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"+CAGaA,IAAAA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,EAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,oBCJHC,EAAc,SACzBX,EACAC,GAEAA,EAAQW,2BAA6Bb,EAAuBC,EAAQC,GAEpE,IAAMY,EAAc,GACpB,IAAK,IAAMC,KAAQd,EAAQ,CACzB,IAAMI,EAAQG,EAAIN,EAAQE,OAAQW,GAElCC,EACEF,EACAC,EACAE,OAAOC,OAAOjB,EAAOc,GAAO,CAAET,IAAKD,GAASA,EAAMC,OAItD,OAAOQ"}
1
+ {"version":3,"file":"resolvers.module.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","toNestError","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"+CAGaA,IAAAA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,EAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,oBCLHC,EAAc,SACzBX,EACAC,GAEAA,EAAQW,2BAA6Bb,EAAuBC,EAAQC,GAEpE,IAAMY,EAAc,GACpB,IAAK,IAAMC,KAAQd,EAAQ,CACzB,IAAMI,EAAQG,EAAIN,EAAQE,OAAQW,GAElCC,EACEF,EACAC,EACAE,OAAOC,OAAOjB,EAAOc,GAAO,CAAET,IAAKD,GAASA,EAAMC,OAItD,OAAOQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.umd.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues extends FieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"8SAGaA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,MAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,kCCJW,SACzBV,EACAC,GAEAA,EAAQU,2BAA6BZ,EAAuBC,EAAQC,GAEpE,IAAMW,EAAc,GACpB,IAAK,IAAMC,KAAQb,EAAQ,CACzB,IAAMI,EAAQG,MAAIN,EAAQE,OAAQU,GAElCC,MACEF,EACAC,EACAE,OAAOC,OAAOhB,EAAOa,GAAO,CAAER,IAAKD,GAASA,EAAMC,OAItD,OAAOO"}
1
+ {"version":3,"file":"resolvers.umd.js","sources":["../src/validateFieldsNatively.ts","../src/toNestError.ts"],"sourcesContent":["import { get, FieldError, ResolverOptions } from 'react-hook-form';\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n\n if (field && field.ref && 'reportValidity' in field.ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n\n field.ref.setCustomValidity((error && error.message) || '');\n\n field.ref.reportValidity();\n }\n }\n};\n","import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n ResolverOptions,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["validateFieldsNatively","errors","options","fieldPath","fields","field","ref","error","get","setCustomValidity","message","reportValidity","shouldUseNativeValidation","fieldErrors","path","set","Object","assign"],"mappings":"8SAGaA,EAAyB,SACpCC,EACAC,GAEA,IAAK,IAAMC,KAAaD,EAAQE,OAAQ,CACtC,IAAMC,EAAQH,EAAQE,OAAOD,GAE7B,GAAIE,GAASA,EAAMC,KAAO,mBAAoBD,EAAMC,IAAK,CACvD,IAAMC,EAAQC,MAAIP,EAAQE,GAE1BE,EAAMC,IAAIG,kBAAmBF,GAASA,EAAMG,SAAY,IAExDL,EAAMC,IAAIK,kCCLW,SACzBV,EACAC,GAEAA,EAAQU,2BAA6BZ,EAAuBC,EAAQC,GAEpE,IAAMW,EAAc,GACpB,IAAK,IAAMC,KAAQb,EAAQ,CACzB,IAAMI,EAAQG,MAAIN,EAAQE,OAAQU,GAElCC,MACEF,EACAC,EACAE,OAAOC,OAAOhB,EAAOa,GAAO,CAAER,IAAKD,GAASA,EAAMC,OAItD,OAAOO"}
@@ -1,2 +1,2 @@
1
- import { FieldError, FieldErrors, ResolverOptions, FieldValues } from 'react-hook-form';
2
- export declare const toNestError: <TFieldValues extends FieldValues>(errors: Record<string, FieldError>, options: ResolverOptions<TFieldValues>) => import("react-hook-form").DeepMap<import("react-hook-form").DeepPartial<TFieldValues>, FieldError>;
1
+ import { FieldError, FieldErrors, ResolverOptions } from 'react-hook-form';
2
+ export declare const toNestError: <TFieldValues>(errors: Record<string, FieldError>, options: ResolverOptions<TFieldValues>) => import("react-hook-form").DeepMap<import("react-hook-form").DeepPartial<import("react-hook-form").UnionLike<TFieldValues>>, FieldError>;
@@ -1,2 +1,2 @@
1
- var e=require("fp-ts/lib/Either"),t=require("fp-ts/function"),r=require("@hookform/resolvers"),n=require("io-ts"),i=require("fp-ts/ReadonlyArray"),o=require("fp-ts/Option"),u=require("fp-ts/Either"),a=require("fp-ts/Semigroup"),f=require("fp-ts/ReadonlyRecord");function p(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var c=p(e),s=p(i),l=p(o),d=p(u),y=p(a),m=p(f);function v(){return(v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var g=function(e){return e.reduce(function(e,r,n){return t.pipe(r,d.fold(function(e){return(n>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},b=["path"],O=function(e){var r,i=t.pipe(r=e.context,s.filterMapWithIndex(function(e,t){var i=e-1;return void 0===r[i]||r[i].type instanceof n.TaggedUnionType||r[i].type instanceof n.UnionType||r[i].type instanceof n.IntersectionType?l.none:l.some(t)}),s.map(function(e){return e.key}),s.map(function(e){return t.pipe(e,function(e){return parseInt(e,10)},d.fromPredicate(t.not(Number.isNaN),function(){return e}))}),s.toArray,g);return{message:t.pipe(e.message,d.fromNullable(e.context),d.mapLeft(t.flow(s.last,l.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),l.getOrElseW(function(){return t.absurd("Error context is missing name")}))),d.getOrElseW(t.identity)),type:t.pipe(e.context,s.last,l.map(function(e){return e.type.name}),l.getOrElse(function(){return"unknown"})),path:i}},h=function(e){return t.pipe(e,s.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return y.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},q={concat:function(e,t){var r;return v({},t,{types:v({},e.types,(r={},r[e.type]=e.message,r[t.type]=t.message,r))})}},N=function(e){return t.pipe(m.fromFoldableMap(q,s.Foldable)(e,function(e){return[e.path,e]}),m.map(function(e){return function(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)t.indexOf(r=o[n])>=0||(i[r]=e[r]);return i}(e,b)}))};exports.ioTsResolver=function(e){return function(n,i,o){return t.pipe(n,e.decode,c.mapLeft((u=!o.shouldUseNativeValidation&&"all"===o.criteriaMode,function(e){var r=u?N:h;return t.pipe(e,s.map(O),r)})),c.mapLeft(function(e){return r.toNestError(e,o)}),c.fold(function(e){return{values:{},errors:e}},function(e){return o.shouldUseNativeValidation&&r.validateFieldsNatively({},o),{values:e,errors:{}}}));var u}};
1
+ var e=require("fp-ts/lib/Either"),t=require("fp-ts/function"),r=require("@hookform/resolvers"),n=require("io-ts"),i=require("fp-ts/ReadonlyArray"),o=require("fp-ts/Option"),u=require("fp-ts/Either"),a=require("fp-ts/Semigroup"),f=require("fp-ts/ReadonlyRecord");function p(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var c=/*#__PURE__*/p(e),s=/*#__PURE__*/p(i),l=/*#__PURE__*/p(o),d=/*#__PURE__*/p(u),y=/*#__PURE__*/p(a),m=/*#__PURE__*/p(f);function v(){return(v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var g=function(e){return e.reduce(function(e,r,n){return t.pipe(r,d.fold(function(e){return(n>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},b=["path"],O=function(e){var r,i=t.pipe(r=e.context,s.filterMapWithIndex(function(e,t){var i=e-1;return void 0===r[i]||r[i].type instanceof n.TaggedUnionType||r[i].type instanceof n.UnionType||r[i].type instanceof n.IntersectionType?l.none:l.some(t)}),s.map(function(e){return e.key}),s.map(function(e){return t.pipe(e,function(e){return parseInt(e,10)},d.fromPredicate(t.not(Number.isNaN),function(){return e}))}),s.toArray,g);return{message:t.pipe(e.message,d.fromNullable(e.context),d.mapLeft(t.flow(s.last,l.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),l.getOrElseW(function(){return t.absurd("Error context is missing name")}))),d.getOrElseW(t.identity)),type:t.pipe(e.context,s.last,l.map(function(e){return e.type.name}),l.getOrElse(function(){return"unknown"})),path:i}},h=function(e){return t.pipe(e,s.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return y.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},q={concat:function(e,t){var r;return v({},t,{types:v({},e.types,(r={},r[e.type]=e.message,r[t.type]=t.message,r))})}},N=function(e){return t.pipe(m.fromFoldableMap(q,s.Foldable)(e,function(e){return[e.path,e]}),m.map(function(e){return function(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)t.indexOf(r=o[n])>=0||(i[r]=e[r]);return i}(e,b)}))};exports.ioTsResolver=function(e){return function(n,i,o){return t.pipe(n,e.decode,c.mapLeft((u=!o.shouldUseNativeValidation&&"all"===o.criteriaMode,function(e){var r=u?N:h;return t.pipe(e,s.map(O),r)})),c.mapLeft(function(e){return r.toNestError(e,o)}),c.fold(function(e){return{values:{},errors:e}},function(e){return o.shouldUseNativeValidation&&r.validateFieldsNatively({},o),{values:e,errors:{}}}));var u}};
2
2
  //# sourceMappingURL=io-ts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"io-ts.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\nimport { FieldErrors } from 'react-hook-form';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {} as FieldErrors<any>,\n };\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"ixBAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,OACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,OADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,mBACvCP,EAAQI,GAAeE,gBAAgBE,aACvCR,EAAQI,GAAeE,gBAAgBG,mBAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,OACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,OACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,OACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,SAAe,qCAIrBpC,EAAOmC,WAAWE,aAUF1B,KAPLZ,OACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,OACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,OACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,8BC3GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClE7D,OACE2D,EACAD,EAAMI,OACN7D,EAAO4B,SD8GRkC,GC5GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD6GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAOxC,OAAKkE,EAAkB3D,EAAcY,IAAIf,GAAcwC,MC/G9D3C,EAAO4B,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/C5D,EAAOC,KACL,SAACuC,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD6FhB,IAACsB"}
1
+ {"version":3,"file":"io-ts.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {},\n } as any;\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"+1BAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,OACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,OADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,mBACvCP,EAAQI,GAAeE,gBAAgBE,aACvCR,EAAQI,GAAeE,gBAAgBG,mBAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,OACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,OACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,OACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,SAAe,qCAIrBpC,EAAOmC,WAAWE,aAUF1B,KAPLZ,OACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,OACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,OACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,8BC5GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClE7D,OACE2D,EACAD,EAAMI,OACN7D,EAAO4B,SD+GRkC,GC7GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD8GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAOxC,OAAKkE,EAAkB3D,EAAcY,IAAIf,GAAcwC,MChH9D3C,EAAO4B,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/C5D,EAAOC,KACL,SAACuC,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD8FhB,IAACsB"}
@@ -1 +1 @@
1
- {"version":3,"file":"io-ts.modern.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\nimport { FieldErrors } from 'react-hook-form';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {} as FieldErrors<any>,\n };\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","ioTsResolver","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"6oBAGA,MAAMA,EAAeC,GACnBA,EAAMC,OACJ,CAACC,EAAUC,EAAMC,IACfC,EACEF,EACAG,EAAOC,KACJC,MAAWJ,EAAQ,EAAI,IAAM,KAAKI,IAClCA,OAAYA,MAEdL,MAAYD,IAAWC,KAE5B,eC4BEM,EAAeC,IACnB,MAAMP,EA1BNE,EADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,CAACT,EAAOU,KACvC,MAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,GACvCP,EAAQI,GAAeE,gBAAgBE,GACvCR,EAAQI,GAAeE,gBAAgBG,EAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,EAAGhB,IAAAA,KAAUA,GAC/BI,EAAcY,IAAKhB,GACjBH,EACEG,EACCiB,GAAMC,SAASD,EAAG,IACnBnB,EAAOqB,cAAcC,EAAYC,OAAOC,OAAQ,IAAMtB,KAG1DI,EAAcmB,QACdhC,GAvBqBY,IAAAA,EAwDvB,MAAO,CAAEqB,QA3BO3B,EACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,EACEvB,EAAcwB,KACdf,EAAOG,IACJV,eACaA,EAAaG,KAAKoB,gBAAgBC,KAAKC,UACjDzB,EAAa0B,WAGnBnB,EAAOoB,WAAW,IAChBC,EAAe,oCAIrBpC,EAAOmC,WAAWE,IAUF1B,KAPLZ,EACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAKV,GAAiBA,EAAaG,KAAKoB,MAC/ChB,EAAOuB,UAAU,IAAM,YAGDzC,KAAAA,IAWpB0C,EACJC,GAEAzC,EACEyC,EACAlC,EAAcY,IAAKuB,KACjB,CAACA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,YAGlBc,GAAWE,EAAUzC,MAdxB0C,OAAQ,CAACC,EAAOC,IAAWC,OAAOC,OAAO,GAAIF,EAAQD,IAcvCF,CAAkD,GAAIF,IAGhEQ,EAA+D,CACnEL,OAAQ,CAACM,EAAGC,SACPA,GACHC,WAAYF,EAAEE,OAAO,CAACF,EAAEtC,MAAOsC,EAAEvB,QAAS,CAACwB,EAAEvC,MAAOuC,EAAExB,aAIpD0B,EACJZ,GAEAzC,EACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACCC,GAAU,CAACA,EAAM5C,KAAM4C,IAE1BY,EAAenC,IAAKsC,sIAESA,OC3GpBC,EAA0BC,GAAU,CAACC,EAAQC,EAAUC,KAClE9D,OAAAA,EACE4D,EACAD,EAAMI,OACN9D,EAAO4B,SD8GRmC,GC5GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,aD6GnDC,IACC,MAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAOxC,EAAKmE,EAAkB5D,EAAcY,IAAIf,GAAcwC,MC/G9D3C,EAAO4B,QAASY,GAAW2B,EAAY3B,EAAQqB,IAC/C7D,EAAOC,KACJuC,KACCmB,OAAQ,GACRnB,OAAAA,IAEDmB,IACCE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD6FfuB,IAAAA"}
1
+ {"version":3,"file":"io-ts.modern.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {},\n } as any;\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","ioTsResolver","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"6oBAGA,MAAMA,EAAeC,GACnBA,EAAMC,OACJ,CAACC,EAAUC,EAAMC,IACfC,EACEF,EACAG,EAAOC,KACJC,MAAWJ,EAAQ,EAAI,IAAM,KAAKI,IAClCA,OAAYA,MAEdL,MAAYD,IAAWC,KAE5B,eC4BEM,EAAeC,IACnB,MAAMP,EA1BNE,EADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,CAACT,EAAOU,KACvC,MAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,GACvCP,EAAQI,GAAeE,gBAAgBE,GACvCR,EAAQI,GAAeE,gBAAgBG,EAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,EAAGhB,IAAAA,KAAUA,GAC/BI,EAAcY,IAAKhB,GACjBH,EACEG,EACCiB,GAAMC,SAASD,EAAG,IACnBnB,EAAOqB,cAAcC,EAAYC,OAAOC,OAAQ,IAAMtB,KAG1DI,EAAcmB,QACdhC,GAvBqBY,IAAAA,EAwDvB,MAAO,CAAEqB,QA3BO3B,EACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,EACEvB,EAAcwB,KACdf,EAAOG,IACJV,eACaA,EAAaG,KAAKoB,gBAAgBC,KAAKC,UACjDzB,EAAa0B,WAGnBnB,EAAOoB,WAAW,IAChBC,EAAe,oCAIrBpC,EAAOmC,WAAWE,IAUF1B,KAPLZ,EACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAKV,GAAiBA,EAAaG,KAAKoB,MAC/ChB,EAAOuB,UAAU,IAAM,YAGDzC,KAAAA,IAWpB0C,EACJC,GAEAzC,EACEyC,EACAlC,EAAcY,IAAKuB,KACjB,CAACA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,YAGlBc,GAAWE,EAAUzC,MAdxB0C,OAAQ,CAACC,EAAOC,IAAWC,OAAOC,OAAO,GAAIF,EAAQD,IAcvCF,CAAkD,GAAIF,IAGhEQ,EAA+D,CACnEL,OAAQ,CAACM,EAAGC,SACPA,GACHC,WAAYF,EAAEE,OAAO,CAACF,EAAEtC,MAAOsC,EAAEvB,QAAS,CAACwB,EAAEvC,MAAOuC,EAAExB,aAIpD0B,EACJZ,GAEAzC,EACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACCC,GAAU,CAACA,EAAM5C,KAAM4C,IAE1BY,EAAenC,IAAKsC,sIAESA,OC5GpBC,EAA0BC,GAAU,CAACC,EAAQC,EAAUC,KAClE9D,OAAAA,EACE4D,EACAD,EAAMI,OACN9D,EAAO4B,SD+GRmC,GC7GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,aD8GnDC,IACC,MAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAOxC,EAAKmE,EAAkB5D,EAAcY,IAAIf,GAAcwC,MChH9D3C,EAAO4B,QAASY,GAAW2B,EAAY3B,EAAQqB,IAC/C7D,EAAOC,KACJuC,KACCmB,OAAQ,GACRnB,OAAAA,IAEDmB,IACCE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD8FfuB,IAAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"io-ts.module.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\nimport { FieldErrors } from 'react-hook-form';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {} as FieldErrors<any>,\n };\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","ioTsResolver","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"6oBAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,EACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,EADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,GACvCP,EAAQI,GAAeE,gBAAgBE,GACvCR,EAAQI,GAAeE,gBAAgBG,EAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,EACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,EAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,EACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,EACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,EAAe,qCAIrBpC,EAAOmC,WAAWE,IAUF1B,KAPLZ,EACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,EACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,EACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,SC3GpBC,EAAyB,SAACC,mBAAWC,EAAQC,EAAUC,UAClE9D,EACE4D,EACAD,EAAMI,OACN9D,EAAO4B,SD8GRmC,GC5GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD6GnDC,GACC,IAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAOxC,EAAKmE,EAAkB5D,EAAcY,IAAIf,GAAcwC,MC/G9D3C,EAAO4B,QAAQ,SAACY,UAAW2B,EAAY3B,EAAQqB,KAC/C7D,EAAOC,KACL,SAACuC,SAAY,CACXmB,OAAQ,GACRnB,OAAAA,IAEF,SAACmB,GAIC,OAHAE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD6FhB,IAACuB"}
1
+ {"version":3,"file":"io-ts.module.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {},\n } as any;\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","ioTsResolver","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"6oBAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,EACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,EADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,GACvCP,EAAQI,GAAeE,gBAAgBE,GACvCR,EAAQI,GAAeE,gBAAgBG,EAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,EACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,EAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,EACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,EACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,EAAe,qCAIrBpC,EAAOmC,WAAWE,IAUF1B,KAPLZ,EACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,EACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,EACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,SC5GpBC,EAAyB,SAACC,mBAAWC,EAAQC,EAAUC,UAClE9D,EACE4D,EACAD,EAAMI,OACN9D,EAAO4B,SD+GRmC,GC7GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD8GnDC,GACC,IAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAOxC,EAAKmE,EAAkB5D,EAAcY,IAAIf,GAAcwC,MChH9D3C,EAAO4B,QAAQ,SAACY,UAAW2B,EAAY3B,EAAQqB,KAC/C7D,EAAOC,KACL,SAACuC,SAAY,CACXmB,OAAQ,GACRnB,OAAAA,IAEF,SAACmB,GAIC,OAHAE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD8FhB,IAACuB"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fp-ts/lib/Either"),require("fp-ts/function"),require("@hookform/resolvers"),require("io-ts"),require("fp-ts/ReadonlyArray"),require("fp-ts/Option"),require("fp-ts/Either"),require("fp-ts/Semigroup"),require("fp-ts/ReadonlyRecord")):"function"==typeof define&&define.amd?define(["exports","fp-ts/lib/Either","fp-ts/function","@hookform/resolvers","io-ts","fp-ts/ReadonlyArray","fp-ts/Option","fp-ts/Either","fp-ts/Semigroup","fp-ts/ReadonlyRecord"],t):t((e||self).hookformResolversIoTs={},e.Either$1,e._function,e.hookformResolvers,e.ioTs,e.ReadonlyArray,e.Option,e.Either,e.SemiGroup,e.ReadonlyRecord)}(this,function(e,t,r,n,o,i,u,f,a,p){function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var c=s(t),l=s(i),d=s(u),y=s(f),m=s(a),v=s(p);function g(){return(g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var h=function(e){return e.reduce(function(e,t,n){return r.pipe(t,y.fold(function(e){return(n>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},b=["path"],O=function(e){var t,n=r.pipe(t=e.context,l.filterMapWithIndex(function(e,r){var n=e-1;return void 0===t[n]||t[n].type instanceof o.TaggedUnionType||t[n].type instanceof o.UnionType||t[n].type instanceof o.IntersectionType?d.none:d.some(r)}),l.map(function(e){return e.key}),l.map(function(e){return r.pipe(e,function(e){return parseInt(e,10)},y.fromPredicate(r.not(Number.isNaN),function(){return e}))}),l.toArray,h);return{message:r.pipe(e.message,y.fromNullable(e.context),y.mapLeft(r.flow(l.last,d.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),d.getOrElseW(function(){return r.absurd("Error context is missing name")}))),y.getOrElseW(r.identity)),type:r.pipe(e.context,l.last,d.map(function(e){return e.type.name}),d.getOrElse(function(){return"unknown"})),path:n}},E=function(e){return r.pipe(e,l.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return m.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},R={concat:function(e,t){var r;return g({},t,{types:g({},e.types,(r={},r[e.type]=e.message,r[t.type]=t.message,r))})}},x=function(e){return r.pipe(v.fromFoldableMap(R,l.Foldable)(e,function(e){return[e.path,e]}),v.map(function(e){return function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)t.indexOf(r=i[n])>=0||(o[r]=e[r]);return o}(e,b)}))};e.ioTsResolver=function(e){return function(t,o,i){return r.pipe(t,e.decode,c.mapLeft((u=!i.shouldUseNativeValidation&&"all"===i.criteriaMode,function(e){var t=u?x:E;return r.pipe(e,l.map(O),t)})),c.mapLeft(function(e){return n.toNestError(e,i)}),c.fold(function(e){return{values:{},errors:e}},function(e){return i.shouldUseNativeValidation&&n.validateFieldsNatively({},i),{values:e,errors:{}}}));var u}}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fp-ts/lib/Either"),require("fp-ts/function"),require("@hookform/resolvers"),require("io-ts"),require("fp-ts/ReadonlyArray"),require("fp-ts/Option"),require("fp-ts/Either"),require("fp-ts/Semigroup"),require("fp-ts/ReadonlyRecord")):"function"==typeof define&&define.amd?define(["exports","fp-ts/lib/Either","fp-ts/function","@hookform/resolvers","io-ts","fp-ts/ReadonlyArray","fp-ts/Option","fp-ts/Either","fp-ts/Semigroup","fp-ts/ReadonlyRecord"],t):t((e||self).hookformResolversIoTs={},e.Either$1,e._function,e.hookformResolvers,e.ioTs,e.ReadonlyArray,e.Option,e.Either,e.SemiGroup,e.ReadonlyRecord)}(this,function(e,t,r,n,o,i,u,f,a,p){function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,t}var c=/*#__PURE__*/s(t),l=/*#__PURE__*/s(i),d=/*#__PURE__*/s(u),y=/*#__PURE__*/s(f),m=/*#__PURE__*/s(a),v=/*#__PURE__*/s(p);function g(){return(g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var h=function(e){return e.reduce(function(e,t,n){return r.pipe(t,y.fold(function(e){return(n>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},b=["path"],O=function(e){var t,n=r.pipe(t=e.context,l.filterMapWithIndex(function(e,r){var n=e-1;return void 0===t[n]||t[n].type instanceof o.TaggedUnionType||t[n].type instanceof o.UnionType||t[n].type instanceof o.IntersectionType?d.none:d.some(r)}),l.map(function(e){return e.key}),l.map(function(e){return r.pipe(e,function(e){return parseInt(e,10)},y.fromPredicate(r.not(Number.isNaN),function(){return e}))}),l.toArray,h);return{message:r.pipe(e.message,y.fromNullable(e.context),y.mapLeft(r.flow(l.last,d.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),d.getOrElseW(function(){return r.absurd("Error context is missing name")}))),y.getOrElseW(r.identity)),type:r.pipe(e.context,l.last,d.map(function(e){return e.type.name}),d.getOrElse(function(){return"unknown"})),path:n}},E=function(e){return r.pipe(e,l.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return m.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},R={concat:function(e,t){var r;return g({},t,{types:g({},e.types,(r={},r[e.type]=e.message,r[t.type]=t.message,r))})}},x=function(e){return r.pipe(v.fromFoldableMap(R,l.Foldable)(e,function(e){return[e.path,e]}),v.map(function(e){return function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)t.indexOf(r=i[n])>=0||(o[r]=e[r]);return o}(e,b)}))};e.ioTsResolver=function(e){return function(t,o,i){return r.pipe(t,e.decode,c.mapLeft((u=!i.shouldUseNativeValidation&&"all"===i.criteriaMode,function(e){var t=u?x:E;return r.pipe(e,l.map(O),t)})),c.mapLeft(function(e){return n.toNestError(e,i)}),c.fold(function(e){return{values:{},errors:e}},function(e){return i.shouldUseNativeValidation&&n.validateFieldsNatively({},i),{values:e,errors:{}}}));var u}}});
2
2
  //# sourceMappingURL=io-ts.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"io-ts.umd.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\nimport { FieldErrors } from 'react-hook-form';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {} as FieldErrors<any>,\n };\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"4wCAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,OACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,OADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,mBACvCP,EAAQI,GAAeE,gBAAgBE,aACvCR,EAAQI,GAAeE,gBAAgBG,mBAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,OACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,OACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,OACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,SAAe,qCAIrBpC,EAAOmC,WAAWE,aAUF1B,KAPLZ,OACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,OACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,OACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,wBC3GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClE7D,OACE2D,EACAD,EAAMI,OACN7D,EAAO4B,SD8GRkC,GC5GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD6GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAOxC,OAAKkE,EAAkB3D,EAAcY,IAAIf,GAAcwC,MC/G9D3C,EAAO4B,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/C5D,EAAOC,KACL,SAACuC,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD6FhB,IAACsB"}
1
+ {"version":3,"file":"io-ts.umd.js","sources":["../src/arrayToPath.ts","../src/errorsToRecord.ts","../src/io-ts.ts"],"sourcesContent":["import * as Either from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nconst arrayToPath = (paths: Either.Either<string, number>[]): string =>\n paths.reduce(\n (previous, path, index) =>\n pipe(\n path,\n Either.fold(\n (key) => `${index > 0 ? '.' : ''}${key}`,\n (key) => `[${key}]`,\n ),\n (path) => `${previous}${path}`,\n ),\n '',\n );\n\nexport default arrayToPath;\n","import * as t from 'io-ts';\nimport {\n IntersectionType,\n TaggedUnionType,\n UnionType,\n ValidationError,\n} from 'io-ts';\nimport { absurd, flow, identity, not, pipe } from 'fp-ts/function';\nimport * as ReadonlyArray from 'fp-ts/ReadonlyArray';\nimport * as Option from 'fp-ts/Option';\nimport * as Either from 'fp-ts/Either';\nimport * as SemiGroup from 'fp-ts/Semigroup';\nimport arrayToPath from './arrayToPath';\nimport * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';\nimport { ErrorObject, FieldErrorWithPath } from './types';\n\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n\n const shouldBeFiltered =\n context[previousIndex] === undefined ||\n context[previousIndex].type instanceof TaggedUnionType ||\n context[previousIndex].type instanceof UnionType ||\n context[previousIndex].type instanceof IntersectionType;\n\n return shouldBeFiltered ? Option.none : Option.some(contextEntry);\n }),\n ReadonlyArray.map(({ key }) => key),\n ReadonlyArray.map((key) =>\n pipe(\n key,\n (k) => parseInt(k, 10),\n Either.fromPredicate(not<number>(Number.isNaN), () => key),\n ),\n ),\n ReadonlyArray.toArray,\n arrayToPath,\n );\n\nconst formatError = (e: t.ValidationError): FieldErrorWithPath => {\n const path = formatErrorPath(e.context);\n\n const message = pipe(\n e.message,\n Either.fromNullable(e.context),\n Either.mapLeft(\n flow(\n ReadonlyArray.last,\n Option.map(\n (contextEntry) =>\n `expected ${contextEntry.type.name} but got ${JSON.stringify(\n contextEntry.actual,\n )}`,\n ),\n Option.getOrElseW(() =>\n absurd<string>('Error context is missing name' as never),\n ),\n ),\n ),\n Either.getOrElseW(identity),\n );\n\n const type = pipe(\n e.context,\n ReadonlyArray.last,\n Option.map((contextEntry) => contextEntry.type.name),\n Option.getOrElse(() => 'unknown'),\n );\n\n return { message, type, path };\n};\n\n// this is almost the same function like Semigroup.getObjectSemigroup but reversed\n// in order to get the first error\nconst getObjectSemigroup = <\n A extends Record<string, unknown> = never,\n>(): SemiGroup.Semigroup<A> => ({\n concat: (first, second) => Object.assign({}, second, first),\n});\n\nconst concatToSingleError = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n errors,\n ReadonlyArray.map((error) => ({\n [error.path]: {\n type: error.type,\n message: error.message,\n },\n })),\n (errors) => SemiGroup.fold(getObjectSemigroup<ErrorObject>())({}, errors),\n );\n\nconst appendSeveralErrors: SemiGroup.Semigroup<FieldErrorWithPath> = {\n concat: (a, b) => ({\n ...b,\n types: { ...a.types, [a.type]: a.message, [b.type]: b.message },\n }),\n};\n\nconst concatToMultipleErrors = (\n errors: ReadonlyArray<FieldErrorWithPath>,\n): ErrorObject =>\n pipe(\n ReadonlyRecord.fromFoldableMap(appendSeveralErrors, ReadonlyArray.Foldable)(\n errors,\n (error) => [error.path, error],\n ),\n ReadonlyRecord.map((errorWithPath) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { path, ...error } = errorWithPath;\n\n return error;\n }),\n );\n\nconst errorsToRecord =\n (validateAllFieldCriteria: boolean) =>\n (validationErrors: ReadonlyArray<ValidationError>): ErrorObject => {\n const concat = validateAllFieldCriteria\n ? concatToMultipleErrors\n : concatToSingleError;\n\n return pipe(validationErrors, ReadonlyArray.map(formatError), concat);\n };\n\nexport default errorsToRecord;\n","import * as Either from 'fp-ts/lib/Either';\nimport { pipe } from 'fp-ts/function';\nimport { toNestError, validateFieldsNatively } from '@hookform/resolvers';\nimport errorsToRecord from './errorsToRecord';\nimport { Resolver } from './types';\n\nexport const ioTsResolver: Resolver = (codec) => (values, _context, options) =>\n pipe(\n values,\n codec.decode,\n Either.mapLeft(\n errorsToRecord(\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n ),\n ),\n Either.mapLeft((errors) => toNestError(errors, options)),\n Either.fold(\n (errors) => ({\n values: {},\n errors,\n }),\n (values) => {\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n values,\n errors: {},\n } as any;\n },\n ),\n );\n"],"names":["arrayToPath","paths","reduce","previous","path","index","pipe","Either","fold","key","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","undefined","type","TaggedUnionType","UnionType","IntersectionType","Option","none","some","map","k","parseInt","fromPredicate","not","Number","isNaN","toArray","message","fromNullable","mapLeft","flow","last","name","JSON","stringify","actual","getOrElseW","absurd","identity","getOrElse","concatToSingleError","errors","error","SemiGroup","concat","first","second","Object","assign","appendSeveralErrors","a","b","types","concatToMultipleErrors","ReadonlyRecord","fromFoldableMap","Foldable","errorWithPath","codec","values","_context","options","decode","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","validationErrors","toNestError","validateFieldsNatively"],"mappings":"01CAGA,IAAMA,EAAc,SAACC,UACnBA,EAAMC,OACJ,SAACC,EAAUC,EAAMC,UACfC,OACEF,EACAG,EAAOC,KACL,SAACC,UAAWJ,EAAQ,EAAI,IAAM,IAAKI,GACnC,SAACA,aAAYA,QAEf,SAACL,YAAYD,EAAWC,KAE5B,gBC4BEM,EAAc,SAACC,GACnB,IA3BuBC,EA2BjBR,EA1BNE,OADuBM,EA2BMD,EAAEC,QAxB7BC,EAAcC,mBAAmB,SAACT,EAAOU,GACvC,IAAMC,EAAgBX,EAAQ,EAQ9B,YAL6BY,IAA3BL,EAAQI,IACRJ,EAAQI,GAAeE,gBAAgBC,mBACvCP,EAAQI,GAAeE,gBAAgBE,aACvCR,EAAQI,GAAeE,gBAAgBG,mBAEfC,EAAOC,KAAOD,EAAOE,KAAKT,KAEtDF,EAAcY,IAAI,qBAAGhB,MACrBI,EAAcY,IAAI,SAAChB,UACjBH,OACEG,EACA,SAACiB,UAAMC,SAASD,EAAG,KACnBnB,EAAOqB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAMtB,OAG1DI,EAAcmB,QACdhC,GAiCF,MAAO,CAAEiC,QA3BO3B,OACdK,EAAEsB,QACF1B,EAAO2B,aAAavB,EAAEC,SACtBL,EAAO4B,QACLC,OACEvB,EAAcwB,KACdf,EAAOG,IACL,SAACV,qBACaA,EAAaG,KAAKoB,iBAAgBC,KAAKC,UACjDzB,EAAa0B,UAGnBnB,EAAOoB,WAAW,kBAChBC,SAAe,qCAIrBpC,EAAOmC,WAAWE,aAUF1B,KAPLZ,OACXK,EAAEC,QACFC,EAAcwB,KACdf,EAAOG,IAAI,SAACV,UAAiBA,EAAaG,KAAKoB,OAC/ChB,EAAOuB,UAAU,iBAAM,aAGDzC,KAAAA,IAWpB0C,EAAsB,SAC1BC,UAEAzC,OACEyC,EACAlC,EAAcY,IAAI,SAACuB,sBAChBA,EAAM5C,MAAO,CACZc,KAAM8B,EAAM9B,KACZe,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAUzC,KAfM,CAC9B0C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAEtC,MAAOsC,EAAEvB,UAAUwB,EAAEvC,MAAOuC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEAzC,OACEsD,EAAeC,gBAAgBN,EAAqB1C,EAAciD,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAM5C,KAAM4C,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,wBC5GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClE7D,OACE2D,EACAD,EAAMI,OACN7D,EAAO4B,SD+GRkC,GC7GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD8GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAOxC,OAAKkE,EAAkB3D,EAAcY,IAAIf,GAAcwC,MChH9D3C,EAAO4B,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/C5D,EAAOC,KACL,SAACuC,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD8FhB,IAACsB"}
@@ -1,6 +1,6 @@
1
1
  import * as t from 'io-ts';
2
- import { FieldError, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
3
- export declare type Resolver = <TFieldValues, TInput extends unknown = unknown, TContext extends object = object>(codec: t.Decoder<TInput, UnpackNestedValue<TFieldValues>>) => (values: TInput, _context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
2
+ import { FieldError, FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
3
+ export declare type Resolver = <T, TFieldValues, TContext>(codec: t.Decoder<FieldValues, T>) => (values: UnpackNestedValue<TFieldValues>, _context: TContext | undefined, options: ResolverOptions<TFieldValues>) => ResolverResult<TFieldValues>;
4
4
  export declare type ErrorObject = Record<string, FieldError>;
5
5
  export declare type FieldErrorWithPath = FieldError & {
6
6
  path: string;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
- import { SubmitHandler, useForm } from 'react-hook-form';
4
+ import { useForm } from 'react-hook-form';
5
5
  import * as t from 'io-ts';
6
6
  import * as tt from 'io-ts-types';
7
7
  import { ioTsResolver } from '..';
@@ -15,16 +15,16 @@ const schema = t.type({
15
15
  });
16
16
 
17
17
  interface FormData {
18
- username: tt.NonEmptyString;
19
- password: tt.NonEmptyString;
18
+ username: string;
19
+ password: string;
20
20
  }
21
21
 
22
22
  interface Props {
23
- onSubmit: SubmitHandler<FormData>;
23
+ onSubmit: (data: FormData) => void;
24
24
  }
25
25
 
26
26
  function TestComponent({ onSubmit }: Props) {
27
- const { register, handleSubmit } = useForm({
27
+ const { register, handleSubmit } = useForm<FormData>({
28
28
  resolver: ioTsResolver(schema),
29
29
  shouldUseNativeValidation: true,
30
30
  });
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen, act } from '@testing-library/react';
3
3
  import user from '@testing-library/user-event';
4
- import { NestedValue, SubmitHandler, useForm } from 'react-hook-form';
4
+ import { useForm } from 'react-hook-form';
5
5
  import * as t from 'io-ts';
6
6
  import * as tt from 'io-ts-types';
7
7
  import { ioTsResolver } from '..';
@@ -18,12 +18,12 @@ const schema = t.type({
18
18
  });
19
19
 
20
20
  interface FormData {
21
- username: NestedValue<tt.NonEmptyString>;
22
- password: NestedValue<tt.NonEmptyString>;
21
+ username: string;
22
+ password: string;
23
23
  }
24
24
 
25
25
  interface Props {
26
- onSubmit: SubmitHandler<FormData>;
26
+ onSubmit: (data: FormData) => void;
27
27
  }
28
28
 
29
29
  function TestComponent({ onSubmit }: Props) {
@@ -32,7 +32,7 @@ function TestComponent({ onSubmit }: Props) {
32
32
  formState: { errors },
33
33
  handleSubmit,
34
34
  } = useForm<FormData>({
35
- resolver: ioTsResolver<FormData>(schema),
35
+ resolver: ioTsResolver(schema),
36
36
  criteriaMode: 'all',
37
37
  });
38
38
 
@@ -3,7 +3,6 @@ import { pipe } from 'fp-ts/function';
3
3
  import { toNestError, validateFieldsNatively } from '@hookform/resolvers';
4
4
  import errorsToRecord from './errorsToRecord';
5
5
  import { Resolver } from './types';
6
- import { FieldErrors } from 'react-hook-form';
7
6
 
8
7
  export const ioTsResolver: Resolver = (codec) => (values, _context, options) =>
9
8
  pipe(
@@ -26,8 +25,8 @@ export const ioTsResolver: Resolver = (codec) => (values, _context, options) =>
26
25
 
27
26
  return {
28
27
  values,
29
- errors: {} as FieldErrors<any>,
30
- };
28
+ errors: {},
29
+ } as any;
31
30
  },
32
31
  ),
33
32
  );
@@ -1,20 +1,16 @@
1
- /* eslint-disable @typescript-eslint/ban-types */
2
1
  import * as t from 'io-ts';
3
2
  import {
4
3
  FieldError,
4
+ FieldValues,
5
5
  ResolverOptions,
6
6
  ResolverResult,
7
7
  UnpackNestedValue,
8
8
  } from 'react-hook-form';
9
9
 
10
- export type Resolver = <
11
- TFieldValues,
12
- TInput extends unknown = unknown,
13
- TContext extends object = object,
14
- >(
15
- codec: t.Decoder<TInput, UnpackNestedValue<TFieldValues>>,
10
+ export type Resolver = <T, TFieldValues, TContext>(
11
+ codec: t.Decoder<FieldValues, T>,
16
12
  ) => (
17
- values: TInput,
13
+ values: UnpackNestedValue<TFieldValues>,
18
14
  _context: TContext | undefined,
19
15
  options: ResolverOptions<TFieldValues>,
20
16
  ) => ResolverResult<TFieldValues>;
@@ -1,5 +1,5 @@
1
- import { ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
1
+ import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
2
2
  import type { AsyncValidationOptions, Schema } from 'joi';
3
- export declare type Resolver = <T extends Schema, TFieldValues, TContext>(schema: T, schemaOptions?: AsyncValidationOptions, factoryOptions?: {
3
+ export declare type Resolver = <T extends Schema>(schema: T, schemaOptions?: AsyncValidationOptions, factoryOptions?: {
4
4
  mode?: 'async' | 'sync';
5
- }) => (values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
5
+ }) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;