@hookform/resolvers 2.9.10 → 2.9.11
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.
- package/README.md +2 -2
- package/io-ts/dist/io-ts.js +1 -1
- package/io-ts/dist/io-ts.js.map +1 -1
- package/io-ts/dist/io-ts.mjs +1 -1
- package/io-ts/dist/io-ts.modern.js +1 -1
- package/io-ts/dist/io-ts.modern.js.map +1 -1
- package/io-ts/dist/io-ts.module.js +1 -1
- package/io-ts/dist/io-ts.module.js.map +1 -1
- package/io-ts/dist/io-ts.umd.js +1 -1
- package/io-ts/dist/io-ts.umd.js.map +1 -1
- package/io-ts/src/__tests__/errorsToRecord.ts +47 -0
- package/io-ts/src/errorsToRecord.ts +7 -6
- package/package.json +1 -1
- package/vest/dist/index.d.ts +1 -0
- package/vest/dist/types.d.ts +8 -0
- package/vest/src/index.ts +1 -0
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## Install
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
npm install @hookform/resolvers
|
|
22
22
|
|
|
23
23
|
## Links
|
|
24
24
|
|
|
@@ -272,7 +272,7 @@ import React from 'react';
|
|
|
272
272
|
import { useForm } from 'react-hook-form';
|
|
273
273
|
import { ioTsResolver } from '@hookform/resolvers/io-ts';
|
|
274
274
|
import t from 'io-ts';
|
|
275
|
-
// you don't have to use io-ts-types but it's very useful
|
|
275
|
+
// you don't have to use io-ts-types, but it's very useful
|
|
276
276
|
import tt from 'io-ts-types';
|
|
277
277
|
|
|
278
278
|
const schema = t.type({
|
package/io-ts/dist/io-ts.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("fp-ts/Either"),t=require("fp-ts/function"),r=require("@hookform/resolvers"),n=require("io-ts"),o=require("fp-ts/ReadonlyArray"),u=require("fp-ts/Option"),i=require("fp-ts/Semigroup"),a=require("fp-ts/ReadonlyRecord");function f(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 p=/*#__PURE__*/f(e),c=/*#__PURE__*/f(o),s=/*#__PURE__*/f(u),l=/*#__PURE__*/f(i),d=/*#__PURE__*/f(a);function
|
|
1
|
+
var e=require("fp-ts/Either"),t=require("fp-ts/function"),r=require("@hookform/resolvers"),n=require("io-ts"),o=require("fp-ts/ReadonlyArray"),u=require("fp-ts/Option"),i=require("fp-ts/Semigroup"),a=require("fp-ts/ReadonlyRecord");function f(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 p=/*#__PURE__*/f(e),c=/*#__PURE__*/f(o),s=/*#__PURE__*/f(u),l=/*#__PURE__*/f(i),d=/*#__PURE__*/f(a);function m(){return(m=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 y=function(e){return e.reduce(function(e,r,n){return t.pipe(r,p.fold(function(e){return(n>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},v=["path"],g=[n.TaggedUnionType,n.UnionType,n.IntersectionType,n.ExactType,n.RefinementType],O=function(e){var r,n=t.pipe(r=e.context,c.filterMapWithIndex(function(e,t){var n=e-1,o=-1===n?void 0:r[n];return void 0===o||g.some(function(e){return o.type instanceof e})?s.none:s.some(t)}),c.map(function(e){return e.key}),c.map(function(e){return t.pipe(e,function(e){return parseInt(e,10)},p.fromPredicate(t.not(Number.isNaN),function(){return e}))}),c.toArray,y);return{message:t.pipe(e.message,p.fromNullable(e.context),p.mapLeft(t.flow(c.last,s.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),s.getOrElseW(function(){return t.absurd("Error context is missing name")}))),p.getOrElseW(t.identity)),type:t.pipe(e.context,c.last,s.map(function(e){return e.type.name}),s.getOrElse(function(){return"unknown"})),path:n}},b=function(e){return t.pipe(e,c.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return l.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},h={concat:function(e,t){var r;return m({},t,{types:m({},e.types,(r={},r[e.type]=e.message,r[t.type]=t.message,r))})}},x=function(e){return t.pipe(d.fromFoldableMap(h,c.Foldable)(e,function(e){return[e.path,e]}),d.map(function(e){return function(e,t){if(null==e)return{};var r,n,o={},u=Object.keys(e);for(n=0;n<u.length;n++)t.indexOf(r=u[n])>=0||(o[r]=e[r]);return o}(e,v)}))};exports.ioTsResolver=function(e){return function(n,o,u){return t.pipe(n,e.decode,p.mapLeft((i=!u.shouldUseNativeValidation&&"all"===u.criteriaMode,function(e){var r=i?x:b;return t.pipe(e,c.map(O),r)})),p.mapLeft(function(e){return r.toNestError(e,u)}),p.fold(function(e){return{values:{},errors:e}},function(e){return u.shouldUseNativeValidation&&r.validateFieldsNatively({},u),{values:e,errors:{}}}));var i}};
|
|
2
2
|
//# sourceMappingURL=io-ts.js.map
|
package/io-ts/dist/io-ts.js.map
CHANGED
|
@@ -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
|
|
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 ExactType,\n IntersectionType,\n RefinementType,\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 INSTANCE_TYPES_TO_FILTER = [TaggedUnionType, UnionType, IntersectionType, ExactType, RefinementType];\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n const previousContextEntry = previousIndex === -1 ? undefined : context[previousIndex];\n const shouldBeFiltered =\n previousContextEntry === undefined ||\n INSTANCE_TYPES_TO_FILTER.some((type) => previousContextEntry.type instanceof type)\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/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","INSTANCE_TYPES_TO_FILTER","TaggedUnionType","UnionType","IntersectionType","ExactType","RefinementType","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","previousContextEntry","undefined","some","type","Option","none","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":"6yBAGA,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,gBCIEM,EAA2B,CAACC,kBAAiBC,YAAWC,mBAAkBC,YAAWC,kBAyBrFC,EAAc,SAACC,GACnB,IAzBuBC,EAyBjBd,EAxBNE,OADuBY,EAyBMD,EAAEC,QAtB7BC,EAAcC,mBAAmB,SAACf,EAAOgB,GACvC,IAAMC,EAAgBjB,EAAQ,EACxBkB,GAA0C,IAAnBD,OAAuBE,EAAYN,EAAQI,GAKxE,YAH2BE,IAAzBD,GACAb,EAAyBe,KAAK,SAACC,UAASH,EAAqBG,gBAAgBA,IAErDC,EAAOC,KAAOD,EAAOF,KAAKJ,KAEtDF,EAAcU,IAAI,qBAAGpB,MACrBU,EAAcU,IAAI,SAACpB,UACjBH,OACEG,EACA,SAACqB,UAAMC,SAASD,EAAG,KACnBvB,EAAOyB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAM1B,OAG1DU,EAAciB,QACdpC,GAiCF,MAAO,CAAEqC,QA3BO/B,OACdW,EAAEoB,QACF9B,EAAO+B,aAAarB,EAAEC,SACtBX,EAAOgC,QACLC,OACErB,EAAcsB,KACdd,EAAOE,IACL,SAACR,qBACaA,EAAaK,KAAKgB,iBAAgBC,KAAKC,UACjDvB,EAAawB,UAGnBlB,EAAOmB,WAAW,kBAChBC,SAAe,qCAIrBxC,EAAOuC,WAAWE,aAUFtB,KAPLpB,OACXW,EAAEC,QACFC,EAAcsB,KACdd,EAAOE,IAAI,SAACR,UAAiBA,EAAaK,KAAKgB,OAC/Cf,EAAOsB,UAAU,iBAAM,aAGD7C,KAAAA,IAWpB8C,EAAsB,SAC1BC,UAEA7C,OACE6C,EACAhC,EAAcU,IAAI,SAACuB,sBAChBA,EAAMhD,MAAO,CACZsB,KAAM0B,EAAM1B,KACZW,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAU7C,KAfM,CAC9B8C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAElC,MAAOkC,EAAEvB,UAAUwB,EAAEnC,MAAOmC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEA7C,OACE0D,EAAeC,gBAAgBN,EAAqBxC,EAAc+C,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAMhD,KAAMgD,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,8BC7GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClEjE,OACE+D,EACAD,EAAMI,OACNjE,EAAOgC,SDgHRkC,GC9GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD+GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAO5C,OAAKsE,EAAkBzD,EAAcU,IAAIb,GAAcsC,MCjH9D/C,EAAOgC,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/ChE,EAAOC,KACL,SAAC2C,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD+FhB,IAACsB"}
|
package/io-ts/dist/io-ts.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as t from"fp-ts/Either";import{pipe as n,not as r,flow as e,absurd as o,identity as u}from"fp-ts/function";import{toNestError as a,validateFieldsNatively as i}from"@hookform/resolvers";import{TaggedUnionType as f,UnionType as s,IntersectionType as c}from"io-ts";import*as
|
|
1
|
+
import*as t from"fp-ts/Either";import{pipe as n,not as r,flow as e,absurd as o,identity as u}from"fp-ts/function";import{toNestError as a,validateFieldsNatively as i}from"@hookform/resolvers";import{TaggedUnionType as f,UnionType as s,IntersectionType as c,ExactType as p,RefinementType as m}from"io-ts";import*as l from"fp-ts/ReadonlyArray";import*as d from"fp-ts/Option";import*as y from"fp-ts/Semigroup";import*as v from"fp-ts/ReadonlyRecord";function g(){return(g=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t}).apply(this,arguments)}var h=function(r){return r.reduce(function(r,e,o){return n(e,t.fold(function(t){return(o>0?".":"")+t},function(t){return"["+t+"]"}),function(t){return""+r+t})},"")},O=["path"],b=[f,s,c,p,m],x=function(a){var i,f=n(i=a.context,l.filterMapWithIndex(function(t,n){var r=t-1,e=-1===r?void 0:i[r];return void 0===e||b.some(function(t){return e.type instanceof t})?d.none:d.some(n)}),l.map(function(t){return t.key}),l.map(function(e){return n(e,function(t){return parseInt(t,10)},t.fromPredicate(r(Number.isNaN),function(){return e}))}),l.toArray,h);return{message:n(a.message,t.fromNullable(a.context),t.mapLeft(e(l.last,d.map(function(t){return"expected "+t.type.name+" but got "+JSON.stringify(t.actual)}),d.getOrElseW(function(){return o("Error context is missing name")}))),t.getOrElseW(u)),type:n(a.context,l.last,d.map(function(t){return t.type.name}),d.getOrElse(function(){return"unknown"})),path:f}},N=function(t){return n(t,l.map(function(t){var n;return(n={})[t.path]={type:t.type,message:t.message},n}),function(t){return y.fold({concat:function(t,n){return Object.assign({},n,t)}})({},t)})},E={concat:function(t,n){var r;return g({},n,{types:g({},t.types,(r={},r[t.type]=t.message,r[n.type]=n.message,r))})}},j=function(t){return n(v.fromFoldableMap(E,l.Foldable)(t,function(t){return[t.path,t]}),v.map(function(t){return function(t,n){if(null==t)return{};var r,e,o={},u=Object.keys(t);for(e=0;e<u.length;e++)n.indexOf(r=u[e])>=0||(o[r]=t[r]);return o}(t,O)}))},k=function(r){return function(e,o,u){return n(e,r.decode,t.mapLeft((f=!u.shouldUseNativeValidation&&"all"===u.criteriaMode,function(t){var r=f?j:N;return n(t,l.map(x),r)})),t.mapLeft(function(t){return a(t,u)}),t.fold(function(t){return{values:{},errors:t}},function(t){return u.shouldUseNativeValidation&&i({},u),{values:t,errors:{}}}));var f}};export{k as ioTsResolver};
|
|
2
2
|
//# sourceMappingURL=io-ts.module.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as e from"fp-ts/Either";import{pipe as t,not as r,flow as o,absurd as a,identity as s}from"fp-ts/function";import{toNestError as n,validateFieldsNatively as p}from"@hookform/resolvers";import{TaggedUnionType as
|
|
1
|
+
import*as e from"fp-ts/Either";import{pipe as t,not as r,flow as o,absurd as a,identity as s}from"fp-ts/function";import{toNestError as n,validateFieldsNatively as p}from"@hookform/resolvers";import{TaggedUnionType as m,UnionType as i,IntersectionType as f,ExactType as l,RefinementType as c}from"io-ts";import*as u from"fp-ts/ReadonlyArray";import*as d from"fp-ts/Option";import*as y from"fp-ts/Semigroup";import*as g from"fp-ts/ReadonlyRecord";function h(){return(h=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}const v=r=>r.reduce((r,o,a)=>t(o,e.fold(e=>`${a>0?".":""}${e}`,e=>`[${e}]`),e=>`${r}${e}`),""),O=["path"],b=[m,i,f,l,c],x=n=>{const p=t(m=n.context,u.filterMapWithIndex((e,t)=>{const r=e-1,o=-1===r?void 0:m[r];return void 0===o||b.some(e=>o.type instanceof e)?d.none:d.some(t)}),u.map(({key:e})=>e),u.map(o=>t(o,e=>parseInt(e,10),e.fromPredicate(r(Number.isNaN),()=>o))),u.toArray,v);var m;return{message:t(n.message,e.fromNullable(n.context),e.mapLeft(o(u.last,d.map(e=>`expected ${e.type.name} but got ${JSON.stringify(e.actual)}`),d.getOrElseW(()=>a("Error context is missing name")))),e.getOrElseW(s)),type:t(n.context,u.last,d.map(e=>e.type.name),d.getOrElse(()=>"unknown")),path:p}},N=e=>t(e,u.map(e=>({[e.path]:{type:e.type,message:e.message}})),e=>y.fold({concat:(e,t)=>Object.assign({},t,e)})({},e)),$={concat:(e,t)=>h({},t,{types:h({},e.types,{[e.type]:e.message,[t.type]:t.message})})},E=e=>t(g.fromFoldableMap($,u.Foldable)(e,e=>[e.path,e]),g.map(e=>function(e,t){if(null==e)return{};var r,o,a={},s=Object.keys(e);for(o=0;o<s.length;o++)t.indexOf(r=s[o])>=0||(a[r]=e[r]);return a}(e,O))),j=r=>(o,a,s)=>{return t(o,r.decode,e.mapLeft((m=!s.shouldUseNativeValidation&&"all"===s.criteriaMode,e=>{const r=m?E:N;return t(e,u.map(x),r)})),e.mapLeft(e=>n(e,s)),e.fold(e=>({values:{},errors:e}),e=>(s.shouldUseNativeValidation&&p({},s),{values:e,errors:{}})));var m};export{j as ioTsResolver};
|
|
2
2
|
//# sourceMappingURL=io-ts.modern.js.map
|
|
@@ -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
|
|
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 ExactType,\n IntersectionType,\n RefinementType,\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 INSTANCE_TYPES_TO_FILTER = [TaggedUnionType, UnionType, IntersectionType, ExactType, RefinementType];\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n const previousContextEntry = previousIndex === -1 ? undefined : context[previousIndex];\n const shouldBeFiltered =\n previousContextEntry === undefined ||\n INSTANCE_TYPES_TO_FILTER.some((type) => previousContextEntry.type instanceof type)\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/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","INSTANCE_TYPES_TO_FILTER","TaggedUnionType","UnionType","IntersectionType","ExactType","RefinementType","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","previousContextEntry","undefined","some","type","Option","none","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,eCIEM,EAA2B,CAACC,EAAiBC,EAAWC,EAAkBC,EAAWC,GAyBrFC,EAAeC,IACnB,MAAMb,EAxBNE,EADuBY,EAyBMD,EAAEC,QAtB7BC,EAAcC,mBAAmB,CAACf,EAAOgB,KACvC,MAAMC,EAAgBjB,EAAQ,EACxBkB,GAA0C,IAAnBD,OAAuBE,EAAYN,EAAQI,GAKxE,YAH2BE,IAAzBD,GACAb,EAAyBe,KAAMC,GAASH,EAAqBG,gBAAgBA,GAErDC,EAAOC,KAAOD,EAAOF,KAAKJ,KAEtDF,EAAcU,IAAI,EAAGpB,IAAAA,KAAUA,GAC/BU,EAAcU,IAAKpB,GACjBH,EACEG,EACCqB,GAAMC,SAASD,EAAG,IACnBvB,EAAOyB,cAAcC,EAAYC,OAAOC,OAAQ,IAAM1B,KAG1DU,EAAciB,QACdpC,GArBqBkB,IAAAA,EAsDvB,MAAO,CAAEmB,QA3BO/B,EACdW,EAAEoB,QACF9B,EAAO+B,aAAarB,EAAEC,SACtBX,EAAOgC,QACLC,EACErB,EAAcsB,KACdd,EAAOE,IACJR,eACaA,EAAaK,KAAKgB,gBAAgBC,KAAKC,UACjDvB,EAAawB,WAGnBlB,EAAOmB,WAAW,IAChBC,EAAe,oCAIrBxC,EAAOuC,WAAWE,IAUFtB,KAPLpB,EACXW,EAAEC,QACFC,EAAcsB,KACdd,EAAOE,IAAKR,GAAiBA,EAAaK,KAAKgB,MAC/Cf,EAAOsB,UAAU,IAAM,YAGD7C,KAAAA,IAWpB8C,EACJC,GAEA7C,EACE6C,EACAhC,EAAcU,IAAKuB,KACjB,CAACA,EAAMhD,MAAO,CACZsB,KAAM0B,EAAM1B,KACZW,QAASe,EAAMf,YAGlBc,GAAWE,EAAU7C,MAdxB8C,OAAQ,CAACC,EAAOC,IAAWC,OAAOC,OAAO,GAAIF,EAAQD,IAcvCF,CAAkD,GAAIF,IAGhEQ,EAA+D,CACnEL,OAAQ,CAACM,EAAGC,SACPA,GACHC,WAAYF,EAAEE,OAAO,CAACF,EAAElC,MAAOkC,EAAEvB,QAAS,CAACwB,EAAEnC,MAAOmC,EAAExB,aAIpD0B,EACJZ,GAEA7C,EACE0D,EAAeC,gBAAgBN,EAAqBxC,EAAc+C,SAAlEF,CACEb,EACCC,GAAU,CAACA,EAAMhD,KAAMgD,IAE1BY,EAAenC,IAAKsC,sIAESA,OC7GpBC,EAA0BC,GAAU,CAACC,EAAQC,EAAUC,KAClElE,OAAAA,EACEgE,EACAD,EAAMI,OACNlE,EAAOgC,SDgHRmC,GC9GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,aD+GnDC,IACC,MAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAO5C,EAAKuE,EAAkB1D,EAAcU,IAAIb,GAAcsC,MCjH9D/C,EAAOgC,QAASY,GAAW2B,EAAY3B,EAAQqB,IAC/CjE,EAAOC,KACJ2C,KACCmB,OAAQ,GACRnB,OAAAA,IAEDmB,IACCE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD+FfuB,IAAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as t from"fp-ts/Either";import{pipe as n,not as r,flow as e,absurd as o,identity as u}from"fp-ts/function";import{toNestError as a,validateFieldsNatively as i}from"@hookform/resolvers";import{TaggedUnionType as f,UnionType as s,IntersectionType as c}from"io-ts";import*as
|
|
1
|
+
import*as t from"fp-ts/Either";import{pipe as n,not as r,flow as e,absurd as o,identity as u}from"fp-ts/function";import{toNestError as a,validateFieldsNatively as i}from"@hookform/resolvers";import{TaggedUnionType as f,UnionType as s,IntersectionType as c,ExactType as p,RefinementType as m}from"io-ts";import*as l from"fp-ts/ReadonlyArray";import*as d from"fp-ts/Option";import*as y from"fp-ts/Semigroup";import*as v from"fp-ts/ReadonlyRecord";function g(){return(g=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t}).apply(this,arguments)}var h=function(r){return r.reduce(function(r,e,o){return n(e,t.fold(function(t){return(o>0?".":"")+t},function(t){return"["+t+"]"}),function(t){return""+r+t})},"")},O=["path"],b=[f,s,c,p,m],x=function(a){var i,f=n(i=a.context,l.filterMapWithIndex(function(t,n){var r=t-1,e=-1===r?void 0:i[r];return void 0===e||b.some(function(t){return e.type instanceof t})?d.none:d.some(n)}),l.map(function(t){return t.key}),l.map(function(e){return n(e,function(t){return parseInt(t,10)},t.fromPredicate(r(Number.isNaN),function(){return e}))}),l.toArray,h);return{message:n(a.message,t.fromNullable(a.context),t.mapLeft(e(l.last,d.map(function(t){return"expected "+t.type.name+" but got "+JSON.stringify(t.actual)}),d.getOrElseW(function(){return o("Error context is missing name")}))),t.getOrElseW(u)),type:n(a.context,l.last,d.map(function(t){return t.type.name}),d.getOrElse(function(){return"unknown"})),path:f}},N=function(t){return n(t,l.map(function(t){var n;return(n={})[t.path]={type:t.type,message:t.message},n}),function(t){return y.fold({concat:function(t,n){return Object.assign({},n,t)}})({},t)})},E={concat:function(t,n){var r;return g({},n,{types:g({},t.types,(r={},r[t.type]=t.message,r[n.type]=n.message,r))})}},j=function(t){return n(v.fromFoldableMap(E,l.Foldable)(t,function(t){return[t.path,t]}),v.map(function(t){return function(t,n){if(null==t)return{};var r,e,o={},u=Object.keys(t);for(e=0;e<u.length;e++)n.indexOf(r=u[e])>=0||(o[r]=t[r]);return o}(t,O)}))},k=function(r){return function(e,o,u){return n(e,r.decode,t.mapLeft((f=!u.shouldUseNativeValidation&&"all"===u.criteriaMode,function(t){var r=f?j:N;return n(t,l.map(x),r)})),t.mapLeft(function(t){return a(t,u)}),t.fold(function(t){return{values:{},errors:t}},function(t){return u.shouldUseNativeValidation&&i({},u),{values:t,errors:{}}}));var f}};export{k as ioTsResolver};
|
|
2
2
|
//# sourceMappingURL=io-ts.module.js.map
|
|
@@ -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
|
|
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 ExactType,\n IntersectionType,\n RefinementType,\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 INSTANCE_TYPES_TO_FILTER = [TaggedUnionType, UnionType, IntersectionType, ExactType, RefinementType];\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n const previousContextEntry = previousIndex === -1 ? undefined : context[previousIndex];\n const shouldBeFiltered =\n previousContextEntry === undefined ||\n INSTANCE_TYPES_TO_FILTER.some((type) => previousContextEntry.type instanceof type)\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/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","INSTANCE_TYPES_TO_FILTER","TaggedUnionType","UnionType","IntersectionType","ExactType","RefinementType","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","previousContextEntry","undefined","some","type","Option","none","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,gBCIEM,EAA2B,CAACC,EAAiBC,EAAWC,EAAkBC,EAAWC,GAyBrFC,EAAc,SAACC,GACnB,IAzBuBC,EAyBjBd,EAxBNE,EADuBY,EAyBMD,EAAEC,QAtB7BC,EAAcC,mBAAmB,SAACf,EAAOgB,GACvC,IAAMC,EAAgBjB,EAAQ,EACxBkB,GAA0C,IAAnBD,OAAuBE,EAAYN,EAAQI,GAKxE,YAH2BE,IAAzBD,GACAb,EAAyBe,KAAK,SAACC,UAASH,EAAqBG,gBAAgBA,IAErDC,EAAOC,KAAOD,EAAOF,KAAKJ,KAEtDF,EAAcU,IAAI,qBAAGpB,MACrBU,EAAcU,IAAI,SAACpB,UACjBH,EACEG,EACA,SAACqB,UAAMC,SAASD,EAAG,KACnBvB,EAAOyB,cAAcC,EAAYC,OAAOC,OAAQ,kBAAM1B,OAG1DU,EAAciB,QACdpC,GAiCF,MAAO,CAAEqC,QA3BO/B,EACdW,EAAEoB,QACF9B,EAAO+B,aAAarB,EAAEC,SACtBX,EAAOgC,QACLC,EACErB,EAAcsB,KACdd,EAAOE,IACL,SAACR,qBACaA,EAAaK,KAAKgB,iBAAgBC,KAAKC,UACjDvB,EAAawB,UAGnBlB,EAAOmB,WAAW,kBAChBC,EAAe,qCAIrBxC,EAAOuC,WAAWE,IAUFtB,KAPLpB,EACXW,EAAEC,QACFC,EAAcsB,KACdd,EAAOE,IAAI,SAACR,UAAiBA,EAAaK,KAAKgB,OAC/Cf,EAAOsB,UAAU,iBAAM,aAGD7C,KAAAA,IAWpB8C,EAAsB,SAC1BC,UAEA7C,EACE6C,EACAhC,EAAcU,IAAI,SAACuB,sBAChBA,EAAMhD,MAAO,CACZsB,KAAM0B,EAAM1B,KACZW,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAU7C,KAfM,CAC9B8C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAElC,MAAOkC,EAAEvB,UAAUwB,EAAEnC,MAAOmC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEA7C,EACE0D,EAAeC,gBAAgBN,EAAqBxC,EAAc+C,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAMhD,KAAMgD,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,SC7GpBC,EAAyB,SAACC,mBAAWC,EAAQC,EAAUC,UAClElE,EACEgE,EACAD,EAAMI,OACNlE,EAAOgC,SDgHRmC,GC9GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD+GnDC,GACC,IAAMvB,EAASoB,EACXX,EACAb,EAEJ,OAAO5C,EAAKuE,EAAkB1D,EAAcU,IAAIb,GAAcsC,MCjH9D/C,EAAOgC,QAAQ,SAACY,UAAW2B,EAAY3B,EAAQqB,KAC/CjE,EAAOC,KACL,SAAC2C,SAAY,CACXmB,OAAQ,GACRnB,OAAAA,IAEF,SAACmB,GAIC,OAHAE,EAAQG,2BACNI,EAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAnB,OAAQ,OD+FhB,IAACuB"}
|
package/io-ts/dist/io-ts.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fp-ts/Either"),require("fp-ts/function"),require("@hookform/resolvers"),require("io-ts"),require("fp-ts/ReadonlyArray"),require("fp-ts/Option"),require("fp-ts/Semigroup"),require("fp-ts/ReadonlyRecord")):"function"==typeof define&&define.amd?define(["exports","fp-ts/Either","fp-ts/function","@hookform/resolvers","io-ts","fp-ts/ReadonlyArray","fp-ts/Option","fp-ts/Semigroup","fp-ts/ReadonlyRecord"],t):t((e||self).hookformResolversIoTs={},e.Either,e._function,e.hookformResolvers,e.ioTs,e.ReadonlyArray,e.Option,e.SemiGroup,e.ReadonlyRecord)}(this,function(e,t,n,r,o,i,u,f,a){function p(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var s=/*#__PURE__*/p(t),c=/*#__PURE__*/p(i),l=/*#__PURE__*/p(u),d=/*#__PURE__*/p(f),y=/*#__PURE__*/p(a);function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var v=function(e){return e.reduce(function(e,t,r){return n.pipe(t,s.fold(function(e){return(r>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},g=["path"],h=function(e){var t,r=n.pipe(t=e.context,c.filterMapWithIndex(function(e,n){var r=e-1
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fp-ts/Either"),require("fp-ts/function"),require("@hookform/resolvers"),require("io-ts"),require("fp-ts/ReadonlyArray"),require("fp-ts/Option"),require("fp-ts/Semigroup"),require("fp-ts/ReadonlyRecord")):"function"==typeof define&&define.amd?define(["exports","fp-ts/Either","fp-ts/function","@hookform/resolvers","io-ts","fp-ts/ReadonlyArray","fp-ts/Option","fp-ts/Semigroup","fp-ts/ReadonlyRecord"],t):t((e||self).hookformResolversIoTs={},e.Either,e._function,e.hookformResolvers,e.ioTs,e.ReadonlyArray,e.Option,e.SemiGroup,e.ReadonlyRecord)}(this,function(e,t,n,r,o,i,u,f,a){function p(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var s=/*#__PURE__*/p(t),c=/*#__PURE__*/p(i),l=/*#__PURE__*/p(u),d=/*#__PURE__*/p(f),y=/*#__PURE__*/p(a);function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var v=function(e){return e.reduce(function(e,t,r){return n.pipe(t,s.fold(function(e){return(r>0?".":"")+e},function(e){return"["+e+"]"}),function(t){return""+e+t})},"")},g=["path"],h=[o.TaggedUnionType,o.UnionType,o.IntersectionType,o.ExactType,o.RefinementType],b=function(e){var t,r=n.pipe(t=e.context,c.filterMapWithIndex(function(e,n){var r=e-1,o=-1===r?void 0:t[r];return void 0===o||h.some(function(e){return o.type instanceof e})?l.none:l.some(n)}),c.map(function(e){return e.key}),c.map(function(e){return n.pipe(e,function(e){return parseInt(e,10)},s.fromPredicate(n.not(Number.isNaN),function(){return e}))}),c.toArray,v);return{message:n.pipe(e.message,s.fromNullable(e.context),s.mapLeft(n.flow(c.last,l.map(function(e){return"expected "+e.type.name+" but got "+JSON.stringify(e.actual)}),l.getOrElseW(function(){return n.absurd("Error context is missing name")}))),s.getOrElseW(n.identity)),type:n.pipe(e.context,c.last,l.map(function(e){return e.type.name}),l.getOrElse(function(){return"unknown"})),path:r}},O=function(e){return n.pipe(e,c.map(function(e){var t;return(t={})[e.path]={type:e.type,message:e.message},t}),function(e){return d.fold({concat:function(e,t){return Object.assign({},t,e)}})({},e)})},R={concat:function(e,t){var n;return m({},t,{types:m({},e.types,(n={},n[e.type]=e.message,n[t.type]=t.message,n))})}},x=function(e){return n.pipe(y.fromFoldableMap(R,c.Foldable)(e,function(e){return[e.path,e]}),y.map(function(e){return function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}(e,g)}))};e.ioTsResolver=function(e){return function(t,o,i){return n.pipe(t,e.decode,s.mapLeft((u=!i.shouldUseNativeValidation&&"all"===i.criteriaMode,function(e){var t=u?x:O;return n.pipe(e,c.map(b),t)})),s.mapLeft(function(e){return r.toNestError(e,i)}),s.fold(function(e){return{values:{},errors:e}},function(e){return i.shouldUseNativeValidation&&r.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
|
|
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 ExactType,\n IntersectionType,\n RefinementType,\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 INSTANCE_TYPES_TO_FILTER = [TaggedUnionType, UnionType, IntersectionType, ExactType, RefinementType];\nconst formatErrorPath = (context: t.Context): string =>\n pipe(\n context,\n ReadonlyArray.filterMapWithIndex((index, contextEntry) => {\n const previousIndex = index - 1;\n const previousContextEntry = previousIndex === -1 ? undefined : context[previousIndex];\n const shouldBeFiltered =\n previousContextEntry === undefined ||\n INSTANCE_TYPES_TO_FILTER.some((type) => previousContextEntry.type instanceof type)\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/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","INSTANCE_TYPES_TO_FILTER","TaggedUnionType","UnionType","IntersectionType","ExactType","RefinementType","formatError","e","context","ReadonlyArray","filterMapWithIndex","contextEntry","previousIndex","previousContextEntry","undefined","some","type","Option","none","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":"0wCAGA,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,gBCIEM,EAA2B,CAACC,kBAAiBC,YAAWC,mBAAkBC,YAAWC,kBAyBrFC,EAAc,SAACC,GACnB,IAzBuBC,EAyBjBd,EAxBNE,OADuBY,EAyBMD,EAAEC,QAtB7BC,EAAcC,mBAAmB,SAACf,EAAOgB,GACvC,IAAMC,EAAgBjB,EAAQ,EACxBkB,GAA0C,IAAnBD,OAAuBE,EAAYN,EAAQI,GAKxE,YAH2BE,IAAzBD,GACAb,EAAyBe,KAAK,SAACC,UAASH,EAAqBG,gBAAgBA,IAErDC,EAAOC,KAAOD,EAAOF,KAAKJ,KAEtDF,EAAcU,IAAI,qBAAGpB,MACrBU,EAAcU,IAAI,SAACpB,UACjBH,OACEG,EACA,SAACqB,UAAMC,SAASD,EAAG,KACnBvB,EAAOyB,cAAcC,MAAYC,OAAOC,OAAQ,kBAAM1B,OAG1DU,EAAciB,QACdpC,GAiCF,MAAO,CAAEqC,QA3BO/B,OACdW,EAAEoB,QACF9B,EAAO+B,aAAarB,EAAEC,SACtBX,EAAOgC,QACLC,OACErB,EAAcsB,KACdd,EAAOE,IACL,SAACR,qBACaA,EAAaK,KAAKgB,iBAAgBC,KAAKC,UACjDvB,EAAawB,UAGnBlB,EAAOmB,WAAW,kBAChBC,SAAe,qCAIrBxC,EAAOuC,WAAWE,aAUFtB,KAPLpB,OACXW,EAAEC,QACFC,EAAcsB,KACdd,EAAOE,IAAI,SAACR,UAAiBA,EAAaK,KAAKgB,OAC/Cf,EAAOsB,UAAU,iBAAM,aAGD7C,KAAAA,IAWpB8C,EAAsB,SAC1BC,UAEA7C,OACE6C,EACAhC,EAAcU,IAAI,SAACuB,sBAChBA,EAAMhD,MAAO,CACZsB,KAAM0B,EAAM1B,KACZW,QAASe,EAAMf,aAGnB,SAACc,UAAWE,EAAU7C,KAfM,CAC9B8C,OAAQ,SAACC,EAAOC,UAAWC,OAAOC,OAAO,GAAIF,EAAQD,KAcvCF,CAAkD,GAAIF,MAGhEQ,EAA+D,CACnEL,OAAQ,SAACM,EAAGC,qBACPA,GACHC,WAAYF,EAAEE,cAAQF,EAAElC,MAAOkC,EAAEvB,UAAUwB,EAAEnC,MAAOmC,EAAExB,gBAIpD0B,EAAyB,SAC7BZ,UAEA7C,OACE0D,EAAeC,gBAAgBN,EAAqBxC,EAAc+C,SAAlEF,CACEb,EACA,SAACC,SAAU,CAACA,EAAMhD,KAAMgD,KAE1BY,EAAenC,IAAI,SAACsC,GAIlB,0IAF2BA,wBC7GK,SAACC,mBAAWC,EAAQC,EAAUC,UAClEjE,OACE+D,EACAD,EAAMI,OACNjE,EAAOgC,SDgHRkC,GC9GMF,EAAQG,2BAAsD,QAAzBH,EAAQI,sBD+GnDC,GACC,IAAMtB,EAASmB,EACXV,EACAb,EAEJ,OAAO5C,OAAKsE,EAAkBzD,EAAcU,IAAIb,GAAcsC,MCjH9D/C,EAAOgC,QAAQ,SAACY,UAAW0B,cAAY1B,EAAQoB,KAC/ChE,EAAOC,KACL,SAAC2C,SAAY,CACXkB,OAAQ,GACRlB,OAAAA,IAEF,SAACkB,GAIC,OAHAE,EAAQG,2BACNI,yBAAuB,GAAIP,GAEtB,CACLF,OAAAA,EACAlB,OAAQ,OD+FhB,IAACsB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as t from 'io-ts';
|
|
2
|
+
import { isLeft } from 'fp-ts/Either';
|
|
3
|
+
import errorsToRecord from '../errorsToRecord';
|
|
4
|
+
|
|
5
|
+
const assertLeft = <T>(result: t.Validation<T>) => {
|
|
6
|
+
expect(isLeft(result)).toBe(true);
|
|
7
|
+
if (!isLeft(result)) {throw new Error('panic! error is not of the "left" type, should be unreachable');}
|
|
8
|
+
return result.left;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const FIRST_NAME_FIELD_PATH = 'firstName' as const;
|
|
12
|
+
const FIRST_NAME_ERROR_SHAPE = {message: 'expected string but got undefined', type: 'string'};
|
|
13
|
+
describe('errorsToRecord', () => {
|
|
14
|
+
it('should return a correct error for an exact intersection type error object', () => {
|
|
15
|
+
// a recommended pattern from https://github.com/gcanti/io-ts/blob/master/index.md#mixing-required-and-optional-props
|
|
16
|
+
const schema = t.exact(t.intersection([
|
|
17
|
+
t.type({
|
|
18
|
+
[FIRST_NAME_FIELD_PATH]: t.string
|
|
19
|
+
}),
|
|
20
|
+
t.partial({
|
|
21
|
+
lastName: t.string
|
|
22
|
+
})
|
|
23
|
+
]));
|
|
24
|
+
const error = assertLeft(schema.decode({}));
|
|
25
|
+
const record = errorsToRecord(false)(error);
|
|
26
|
+
expect(record[FIRST_NAME_FIELD_PATH]).toMatchObject(FIRST_NAME_ERROR_SHAPE);
|
|
27
|
+
});
|
|
28
|
+
it('should return a correct error for a branded intersection', () => {
|
|
29
|
+
interface Brand {
|
|
30
|
+
readonly Brand: unique symbol
|
|
31
|
+
}
|
|
32
|
+
const schema = t.brand(t.intersection([
|
|
33
|
+
t.type({
|
|
34
|
+
[FIRST_NAME_FIELD_PATH]: t.string
|
|
35
|
+
}),
|
|
36
|
+
t.type({
|
|
37
|
+
lastName: t.string
|
|
38
|
+
})
|
|
39
|
+
]),
|
|
40
|
+
(_x): _x is t.Branded<typeof _x, Brand> => true,
|
|
41
|
+
'Brand'
|
|
42
|
+
);
|
|
43
|
+
const error = assertLeft(schema.decode({}));
|
|
44
|
+
const record = errorsToRecord(false)(error);
|
|
45
|
+
expect(record[FIRST_NAME_FIELD_PATH]).toMatchObject(FIRST_NAME_ERROR_SHAPE);
|
|
46
|
+
})
|
|
47
|
+
});
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as t from 'io-ts';
|
|
2
2
|
import {
|
|
3
|
+
ExactType,
|
|
3
4
|
IntersectionType,
|
|
5
|
+
RefinementType,
|
|
4
6
|
TaggedUnionType,
|
|
5
7
|
UnionType,
|
|
6
|
-
ValidationError
|
|
8
|
+
ValidationError
|
|
7
9
|
} from 'io-ts';
|
|
8
10
|
import { absurd, flow, identity, not, pipe } from 'fp-ts/function';
|
|
9
11
|
import * as ReadonlyArray from 'fp-ts/ReadonlyArray';
|
|
@@ -14,17 +16,16 @@ import arrayToPath from './arrayToPath';
|
|
|
14
16
|
import * as ReadonlyRecord from 'fp-ts/ReadonlyRecord';
|
|
15
17
|
import { ErrorObject, FieldErrorWithPath } from './types';
|
|
16
18
|
|
|
19
|
+
const INSTANCE_TYPES_TO_FILTER = [TaggedUnionType, UnionType, IntersectionType, ExactType, RefinementType];
|
|
17
20
|
const formatErrorPath = (context: t.Context): string =>
|
|
18
21
|
pipe(
|
|
19
22
|
context,
|
|
20
23
|
ReadonlyArray.filterMapWithIndex((index, contextEntry) => {
|
|
21
24
|
const previousIndex = index - 1;
|
|
22
|
-
|
|
25
|
+
const previousContextEntry = previousIndex === -1 ? undefined : context[previousIndex];
|
|
23
26
|
const shouldBeFiltered =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
context[previousIndex].type instanceof UnionType ||
|
|
27
|
-
context[previousIndex].type instanceof IntersectionType;
|
|
27
|
+
previousContextEntry === undefined ||
|
|
28
|
+
INSTANCE_TYPES_TO_FILTER.some((type) => previousContextEntry.type instanceof type)
|
|
28
29
|
|
|
29
30
|
return shouldBeFiltered ? Option.none : Option.some(contextEntry);
|
|
30
31
|
}),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hookform/resolvers",
|
|
3
3
|
"amdName": "hookformResolvers",
|
|
4
|
-
"version": "2.9.
|
|
4
|
+
"version": "2.9.11",
|
|
5
5
|
"description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types and Typanion",
|
|
6
6
|
"main": "dist/resolvers.js",
|
|
7
7
|
"module": "dist/resolvers.module.js",
|
package/vest/dist/index.d.ts
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form';
|
|
2
|
+
import * as Vest from 'vest';
|
|
3
|
+
export declare type ICreateResult = ReturnType<typeof Vest.create>;
|
|
4
|
+
export declare type Resolver = (schema: ICreateResult, schemaOptions?: never, factoryOptions?: {
|
|
5
|
+
mode?: 'async' | 'sync';
|
|
6
|
+
rawValues?: boolean;
|
|
7
|
+
}) => <TFieldValues extends FieldValues, TContext>(values: TFieldValues, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
|
|
8
|
+
export declare type VestErrors = Record<string, string[]>;
|
package/vest/src/index.ts
CHANGED