result-guard
Version:
Type-safe error handling with discriminated unions and type guards for TypeScript
2 lines (1 loc) • 2.89 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function P(t){return t instanceof Error?t:typeof t=="string"?new Error(t):new Error(`Non-error value thrown: ${v(t)}`)}function v(t){if(t===null)return"null";if(t===void 0)return"undefined";try{return JSON.stringify(t)}catch{return String(t)}}function m(t){return{data:t,error:null,isError:!1}}function w(t){return{data:null,error:t,isError:!0}}function h(t){return t instanceof Error?t:P(t)}async function g(t){try{const r=await t;return m(r)}catch(r){return w(h(r))}}function I(t){return Promise.resolve(t).catch(r=>{throw h(r)})}function S(t){return!t.isError}function y(t){return t.isError}function p(t,r){return new Promise((o,i)=>{const e=setTimeout(()=>{i(new Error(`${r} after ${t}ms`))},t);Promise.prototype.cancel=()=>clearTimeout(e)})}function d(t,r,o="Operation timed out"){const i=p(r,o);return Promise.race([t,i]).finally(()=>{var e;(e=i.cancel)==null||e.call(i)})}function C(t,r,o={}){const{errorEvent:i="error",timeout:e,cleanup:s}=o;return f(async()=>{let u=!1;const n=async()=>{if(!u){u=!0,t.removeAllListeners(i);try{await(s==null?void 0:s())}catch{}}};try{const a=new Promise((R,E)=>{t.once(i,E)}),l=[r(),a];return e&&l.push(p(e,"Operation timed out")),await Promise.race(l)}finally{await n()}})}async function O(t,r={}){const{timeout:o,maxItems:i,onItem:e}=r;return f(async()=>{const s=[],u=async()=>{var n;try{await((n=t.return)==null?void 0:n.call(t))}catch{}};try{const n=(async()=>{for(;;){let a;try{a=await t.next()}catch(c){throw await u(),c}if(a.done||e&&!await e(a.value)||(s.push(a.value),i&&s.length>=i))break}return s})();return o?await d(n,o,"Iterator timed out"):await n}finally{await u()}})}function b(t,r={}){return f(async()=>new Promise((o,i)=>{let e=()=>{};if(e=t({resolve:n=>{e(),o(n)},reject:n=>{e(),i(n)}})||(()=>{}),r.timeout){const n=setTimeout(()=>{e(),i(new Error(`Operation timed out after ${r.timeout}ms`))},r.timeout),a=e;e=()=>{clearTimeout(n),a()}}}))}async function k(t,r={}){const{maxConcurrent:o=1/0,timeout:i,stopOnError:e=!1}=r,s=n=>f(async()=>{const a=n();return i?await d(a,i,"Operation timed out"):await a});if(o===1/0||t.length<=o){const n=await Promise.all(t.map(s));return e&&n.some(a=>a.isError)?[n.find(a=>a.isError)]:n}const u=[];for(let n=0;n<t.length;n+=o){const a=t.slice(n,n+o),c=await Promise.all(a.map(s));if(u.push(...c),e&&c.some(l=>l.isError))return[c.find(l=>l.isError)]}return u}async function T(t,r){let o=t;for(const i of r){const e=await Promise.resolve(i(o));if(y(e))return e;o=e.data}return{data:o,error:null,isError:!1}}function f(t){try{const r=t();return r instanceof Promise?g(I(r)):m(r)}catch(r){return w(h(r))}}exports.concurrent=k;exports.createFailure=w;exports.createSuccess=m;exports.isFailure=y;exports.isSuccess=S;exports.pipe=T;exports.tryCatch=f;exports.withCallbacks=b;exports.withEvents=C;exports.withIterator=O;