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