UNPKG

ts-safe

Version:

A functional, type-safe utility library for elegant error handling and asynchronous operations in JavaScript/TypeScript.

2 lines (1 loc) 2.9 kB
"use strict";var d=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var E=(e,a)=>{for(var n in a)d(e,n,{get:a[n],enumerable:!0})},R=(e,a,n,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of L(a))!h.call(e,t)&&t!==n&&d(e,t,{get:()=>a[t],enumerable:!(r=A(a,t))||r.enumerable});return e};var I=e=>R(d({},"__esModule",{value:!0}),e);var N={};E(N,{errorIf:()=>b,errorIfEmpty:()=>v,errorIfFalsy:()=>O,errorIfNull:()=>B,retry:()=>g,s:()=>V,safe:()=>P,safePipe:()=>p,watchError:()=>F,watchOk:()=>D});module.exports=I(N);var S=e=>typeof e=="function",i=e=>S(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 n=a(e);return i(n)?n.then(r=>Promise.resolve(f(r)),r=>Promise.resolve(u(r))):f(n)}catch(n){return u(n)}},s={ok:f,fail:u,update:C};var T=e=>{let a=n=>T(s.update(e,n));return{map(n){return a(r=>{if(r.isOk)return n(r.value);throw r.error})},flatMap(n){return a(r=>{if(r.isOk)return n(r.value).unwrap();throw r.error})},effect(n){return a(r=>{if(!r.isOk)throw r.error;let t=n(r.value);return i(t)?t.then(()=>r.value):r.value})},ifOk(n){return a(r=>{if(!r.isOk)throw r.error;let t=n(r.value);return i(t)?t.then(()=>r.value):r.value})},watch(n){return a(r=>{try{n({...r})}catch{}if(r.isOk)return r.value;throw r.error})},catch(n){return a(r=>r.isOk?r.value:n(r.error))},ifFail(n){return a(r=>r.isOk?r.value:n(r.error))},unwrap(){if(i(e))return e.then(n=>{if(n.isOk)return n.value;throw n.error});if(e.isOk)return e.value;throw e.error},isOk:i(e)?e.then(n=>Promise.resolve(n.isOk)):e.isOk,orElse(n){return a(r=>r.isOk?r.value:n).unwrap()}}};function m(e){let a=T(s.ok(void 0));try{return a.map(()=>e)}catch(n){return a.map(()=>{throw n})}}function k(e){let a=T(s.ok(void 0));try{return a.map(()=>e())}catch(n){return a.map(()=>{throw n})}}function x(){return T(s.ok(void 0))}function p(...e){return a=>{let n=m(a);return e.reduce((r,t)=>r.map(t),n)}}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},v=(e="Value is empty")=>a=>{if(a.length===0)throw new Error(e);return a},b=e=>a=>{let n=e(a);if(n)throw new Error(n);return a};var F=e=>a=>{a.isOk||e(a.error)},D=e=>a=>{a.isOk&&e(a.value)};var g=(e,a)=>{let n=a?.maxTries??3,r=a?.delay??1e3,t=a?.backoff??!1;return async c=>{let y;for(let o=0;o<n;o++)try{return await e(c)}catch(U){if(y=U,o<n-1){let l=t?r*Math.pow(2,o):r;await new Promise(w=>setTimeout(w,l))}}throw y}};function P(e){return e===void 0?x():S(e)?k(e):m(e)}P.pipe=p;var V=P;0&&(module.exports={errorIf,errorIfEmpty,errorIfFalsy,errorIfNull,retry,s,safe,safePipe,watchError,watchOk});