ts-safe
Version:
A functional, type-safe utility library for elegant error handling and asynchronous operations in JavaScript/TypeScript.
2 lines (1 loc) • 2.74 kB
JavaScript
;var m=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var E=(e,a)=>{for(var r in a)m(e,r,{get:a[r],enumerable:!0})},R=(e,a,r,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of L(a))!h.call(e,n)&&n!==r&&m(e,n,{get:()=>a[n],enumerable:!(t=A(a,n))||t.enumerable});return e};var I=e=>R(m({},"__esModule",{value:!0}),e);var N={};E(N,{errorIf:()=>v,errorIfEmpty:()=>b,errorIfFalsy:()=>O,errorIfNull:()=>B,retry:()=>g,s:()=>V,safe:()=>c,safePipe:()=>S,watchError:()=>D,watchOk:()=>F});module.exports=I(N);var d=e=>typeof e=="function",i=e=>d(e?.then);var M=e=>{try{return e instanceof Error?e:typeof e=="string"?new Error(e):new Error(JSON.stringify(e))}catch(a){return a}},f=e=>({isOk:!0,error:void 0,value:e}),u=e=>({isOk:!1,error:M(e),value:void 0}),C=(e,a)=>{if(i(e))return e.then(a).then(f,u);try{let r=a(e);return i(r)?r.then(t=>Promise.resolve(f(t)),t=>Promise.resolve(u(t))):f(r)}catch(r){return u(r)}},s={ok:f,fail:u,update:C};var T=e=>{let a=r=>T(s.update(e,r));return{map(r){return a(t=>{if(t.isOk)return r(t.value);throw t.error})},flatMap(r){return a(t=>{if(t.isOk)return r(t.value).unwrap();throw t.error})},effect(r){return a(t=>{if(!t.isOk)throw t.error;let n=r(t.value);return i(n)?n.then(()=>t.value):t.value})},watch(r){return a(t=>{try{r({...t})}catch{}if(t.isOk)return t.value;throw t.error})},catch(r){return a(t=>t.isOk?t.value:r(t.error))},unwrap(){if(i(e))return e.then(r=>{if(r.isOk)return r.value;throw r.error});if(e.isOk)return e.value;throw e.error},isOk:i(e)?e.then(r=>Promise.resolve(r.isOk)):e.isOk,orElse(r){return a(t=>t.isOk?t.value:r).unwrap()}}};function p(e){let a=T(s.ok(void 0));try{return a.map(()=>e)}catch(r){return a.map(()=>{throw r})}}function y(e){let a=T(s.ok(void 0));try{return a.map(()=>e())}catch(r){return a.map(()=>{throw r})}}function k(){return T(s.ok(void 0))}function S(...e){return a=>{let r=p(a);return e.reduce((t,n)=>t.map(n),r)}}var B=(e="Value is null or undefined")=>a=>{if(a==null)throw new Error(e);return a},O=(e="Value is falsy")=>a=>{if(!a)throw new Error(e);return a},b=(e="Value is empty")=>a=>{if(a.length===0)throw new Error(e);return a},v=e=>a=>{let r=e(a);if(r)throw new Error(r);return a};var D=e=>a=>{a.isOk||e(a.error)},F=e=>a=>{a.isOk&&e(a.value)};var g=(e,a)=>{let r=a?.maxTries??3,t=a?.delay??1e3,n=a?.backoff??!1;return async l=>{let P;for(let o=0;o<r;o++)try{return await e(l)}catch(x){if(P=x,o<r-1){let U=n?t*Math.pow(2,o):t;await new Promise(w=>setTimeout(w,U))}}throw P}};function c(e){return e===void 0?k():d(e)?y(e):p(e)}c.pipe=S;var V=c;0&&(module.exports={errorIf,errorIfEmpty,errorIfFalsy,errorIfNull,retry,s,safe,safePipe,watchError,watchOk});