@rexform/validation
Version:
A monad for incremental validation without information loss.
3 lines (2 loc) • 3.91 kB
JavaScript
;const r=(r,t)=>void 0===t?t=>r(t):r(t),t=r=>[].concat(r);var e;!function(r){r.Valid="Valid",r.Invalid="Invalid"}(e||(e={}));class n{constructor(r){this.variant=e.Valid,this.value=r}isValid(){return!0}isInvalid(){return!1}errorsOr(r){return r}empty(){return x()}concat(r){return m(r,O(t,this))}concatErr(r){return V(r,this)}map(r){return O(r,this)}mapErrors(r){return y(r,this)}mapError(r){return I(r,this)}ap(r){return P(r,this)}chain(r){return w(r,this)}fold(r,t){return A(r,t,this)}validateEither(r){return L(this,r)}validateEitherList(r){return b(this,r)}validate(r){return g(this,r)}validateAll(r){return j(this,r)}}class i{constructor(r,t){if(this.variant=e.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 f(r,this)}empty(){return x()}concat(r){return m(r,O(t,this))}concatErr(r){return V(r,this)}map(r){return O(r,this)}mapErrors(r){return y(r,this)}mapError(r){return I(r,this)}ap(r){return P(r,this)}chain(r){return w(r,this)}fold(r,t){return A(r,t,this)}validateEither(r){return L(this,r)}validateEitherList(r){return b(this,r)}validate(r){return g(this,r)}validateAll(r){return j(this,r)}}const a=r=>new n(r);function o(e,n){return r(r=>new i(e,t(r)),n)}function s(r){return r.variant===e.Valid}function u(r){return r.variant===e.Invalid}const l=(r,t)=>r instanceof n||r instanceof i?r:t&&t.length>0?o(r,t):a(r);function c(t,e){return r(r=>r.fold(o(t),a),e)}function d(t,e){return r(r=>null==r[t]?o(r[t],`Property "${t}" not found or null.`):a(r[t]),e)}const p=r=>Object.keys(r).reduce((t,e)=>t.chain(t=>r[e].fold((r,t)=>o(void 0,r),a).map(((r,t)=>e=>void 0===e?r:{...r,[t]:e})(t,e))),a({}));function v(t,e){return r(r=>Object.keys(t).reduce((e,n)=>({...e,[n]:d(n,r).chain(t[n])}),{}),e)}function h(t,e){return r(r=>e=>r(e)?a(e):o(e,t(e)),e)}function f(t,e){return r(r=>r.isValid()?t:r.errors,e)}function x(){return a([])}function m(t,e){return r(r=>t.concatErr(r).map(r.isValid()?r=>[...t.value,...r]:()=>t.value),e)}const E=r=>r.reduce((r,t)=>t.concat(r),x());function V(t,e){return r(r=>{const e=t.isValid()&&r.isValid();return e?t:o(t.value,[...r.errorsOr([]),...t.errorsOr([])])},e)}function O(t,e){return r(r=>r.isValid()?a(t(r.value)):o(t(r.value),r.errors),e)}function y(t,e){return r(r=>r.isValid()?r:o(r.value,t(r.errorsOr([]))),e)}function I(t,e){return r(r=>y(r=>r.map(t),r),e)}function P(t,e){return r(r=>{const e=r.isValid()&&t.isValid();return e?a(t.value(r.value)):o(t.value(r.value),[...r.errorsOr([]),...t.errorsOr([])])},e)}function w(t,e){return r(r=>{const e=t(r.value);return V(e,r)},e)}function A(t,e,n){return r(r=>r.isValid()?e(r.value):t(r.errors,r.value),n)}function L(e,n){return r(r=>{const n=r.fold(r=>o(e.value,t(r)),r=>a(r));return V(n,e)},n)}function b(t,e){return r(r=>r.reduce((r,t)=>L(r,t),t),e)}function g(t,e){return r(r=>L(t,r(t.value)),e)}function j(t,e){return r(r=>r.reduce((r,t)=>g(r,t),t),e)}const k={Variant:e,Valid:n,Invalid:i,valid:a,invalid:o,isValid:s,isInvalid:u,of:l,fromEither:c,property:d,allProperties:p,validateProperties:v,fromPredicateOr:h,errorsOr:f,empty:x,concat:m,sequence:E,concatErr:V,map:O,mapErrors:y,mapError:I,ap:P,chain:w,fold:A,validateEither:L,validateEitherList:b,validate:g,validateAll:j};exports.Validation=k,exports.allProperties=p,exports.ap=P,exports.chain=w,exports.concat=m,exports.concatErr=V,exports.default=k,exports.empty=x,exports.errorsOr=f,exports.fold=A,exports.fromEither=c,exports.fromPredicateOr=h,exports.invalid=o,exports.isInvalid=u,exports.isValid=s,exports.map=O,exports.mapError=I,exports.mapErrors=y,exports.of=l,exports.property=d,exports.sequence=E,exports.valid=a,exports.validate=g,exports.validateAll=j,exports.validateEither=L,exports.validateEitherList=b,exports.validateProperties=v;
//# sourceMappingURL=rexformvalidation.cjs.production.js.map