UNPKG

@rexform/validation

Version:

A monad for incremental validation without information loss.

3 lines (2 loc) 3.95 kB
!function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(r=r||self,t(r["@rexform/validation"]={}))}(this,function(r){"use strict";const t=(r,t)=>void 0===t?t=>r(t):r(t),e=r=>[].concat(r);var n;!function(r){r.Valid="Valid",r.Invalid="Invalid"}(n||(n={}));class i{constructor(r){this.variant=n.Valid,this.value=r}isValid(){return!0}isInvalid(){return!1}errorsOr(r){return r}empty(){return E()}concat(r){return V(r,I(e,this))}concatErr(r){return O(r,this)}map(r){return I(r,this)}mapErrors(r){return P(r,this)}mapError(r){return w(r,this)}ap(r){return x(r,this)}chain(r){return A(r,this)}fold(r,t){return L(r,t,this)}validateEither(r){return b(this,r)}validateEitherList(r){return j(this,r)}validate(r){return g(this,r)}validateAll(r){return k(this,r)}}class a{constructor(r,t){if(this.variant=n.Invalid,0===t.length)throw new Error("Tried to construct `Invalid` with an empty array of errors");this.errors=t,this.value=r}isValid(){return!1}isInvalid(){return!0}errorsOr(r){return m(r,this)}empty(){return E()}concat(r){return V(r,I(e,this))}concatErr(r){return O(r,this)}map(r){return I(r,this)}mapErrors(r){return P(r,this)}mapError(r){return w(r,this)}ap(r){return x(r,this)}chain(r){return A(r,this)}fold(r,t){return L(r,t,this)}validateEither(r){return b(this,r)}validateEitherList(r){return j(this,r)}validate(r){return g(this,r)}validateAll(r){return k(this,r)}}const o=r=>new i(r);function u(r,n){return t(t=>new a(r,e(t)),n)}function s(r){return r.variant===n.Valid}function l(r){return r.variant===n.Invalid}const c=(r,t)=>r instanceof i||r instanceof a?r:t&&t.length>0?u(r,t):o(r);function d(r,e){return t(t=>t.fold(u(r),o),e)}function v(r,e){return t(t=>null==t[r]?u(t[r],`Property "${r}" not found or null.`):o(t[r]),e)}const f=r=>Object.keys(r).reduce((t,e)=>t.chain(t=>r[e].fold((r,t)=>u(void 0,r),o).map(((r,t)=>e=>void 0===e?r:{...r,[t]:e})(t,e))),o({}));function h(r,e){return t(t=>Object.keys(r).reduce((e,n)=>({...e,[n]:v(n,t).chain(r[n])}),{}),e)}function p(r,e){return t(t=>e=>t(e)?o(e):u(e,r(e)),e)}function m(r,e){return t(t=>t.isValid()?r:t.errors,e)}function E(){return o([])}function V(r,e){return t(t=>r.concatErr(t).map(t.isValid()?t=>[...r.value,...t]:()=>r.value),e)}const y=r=>r.reduce((r,t)=>t.concat(r),E());function O(r,e){return t(t=>{const e=r.isValid()&&t.isValid();return e?r:u(r.value,[...t.errorsOr([]),...r.errorsOr([])])},e)}function I(r,e){return t(t=>t.isValid()?o(r(t.value)):u(r(t.value),t.errors),e)}function P(r,e){return t(t=>t.isValid()?t:u(t.value,r(t.errorsOr([]))),e)}function w(r,e){return t(t=>P(t=>t.map(r),t),e)}function x(r,e){return t(t=>{const e=t.isValid()&&r.isValid();return e?o(r.value(t.value)):u(r.value(t.value),[...t.errorsOr([]),...r.errorsOr([])])},e)}function A(r,e){return t(t=>{const e=r(t.value);return O(e,t)},e)}function L(r,e,n){return t(t=>t.isValid()?e(t.value):r(t.errors,t.value),n)}function b(r,n){return t(t=>{const n=t.fold(t=>u(r.value,e(t)),r=>o(r));return O(n,r)},n)}function j(r,e){return t(t=>t.reduce((r,t)=>b(r,t),r),e)}function g(r,e){return t(t=>b(r,t(r.value)),e)}function k(r,e){return t(t=>t.reduce((r,t)=>g(r,t),r),e)}const q={Variant:n,Valid:i,Invalid:a,valid:o,invalid:u,isValid:s,isInvalid:l,of:c,fromEither:d,property:v,allProperties:f,validateProperties:h,fromPredicateOr:p,errorsOr:m,empty:E,concat:V,sequence:y,concatErr:O,map:I,mapErrors:P,mapError:w,ap:x,chain:A,fold:L,validateEither:b,validateEitherList:j,validate:g,validateAll:k};r.Validation=q,r.allProperties=f,r.ap=x,r.chain=A,r.concat=V,r.concatErr=O,r.default=q,r.empty=E,r.errorsOr=m,r.fold=L,r.fromEither=d,r.fromPredicateOr=p,r.invalid=u,r.isInvalid=l,r.isValid=s,r.map=I,r.mapError=w,r.mapErrors=P,r.of=c,r.property=v,r.sequence=y,r.valid=o,r.validate=g,r.validateAll=k,r.validateEither=b,r.validateEitherList=j,r.validateProperties=h}); //# sourceMappingURL=rexformvalidation.umd.production.js.map