functype 0.48.0 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/Brand-BJIRbUKB.d.ts +54 -0
- package/dist/{Typeable-lfO2nRVW.d.ts → Tuple-DmywDCE9.d.ts} +75 -1
- package/dist/Tuple-eVwTSeSr.js +1 -0
- package/dist/branded/index.d.ts +1 -53
- package/dist/cli/exports.js +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/do/index.d.ts +2 -184
- package/dist/do/index.js +1 -1
- package/dist/either/index.d.ts +1 -187
- package/dist/either/index.js +1 -2
- package/dist/{full-interfaces-DXVOawTK.js → full-interfaces-DVRjnPWW.js} +13 -1
- package/dist/{Functype-rgysbeU6.d.ts → index-OdnROQtM.d.ts} +915 -8
- package/dist/index.d.ts +4 -12
- package/dist/index.js +1 -1
- package/dist/list/index.d.ts +1 -84
- package/dist/list/index.js +1 -2
- package/dist/map/index.d.ts +1 -72
- package/dist/map/index.js +1 -2
- package/dist/option/index.d.ts +1 -242
- package/dist/option/index.js +1 -2
- package/dist/set/index.d.ts +1 -53
- package/dist/set/index.js +1 -2
- package/dist/src-ByDeJzWj.js +19 -0
- package/dist/try/index.d.ts +1 -96
- package/dist/try/index.js +1 -2
- package/dist/tuple/index.d.ts +1 -76
- package/dist/tuple/index.js +1 -1
- package/package.json +11 -12
- package/dist/Companion-VlxcFhzb.js +0 -1
- package/dist/Valuable-CXh58HBk.js +0 -13
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{Brand as e}from"./branded/index.js";import{i as t,n,r,t as i}from"./Tuple-eVwTSeSr.js";const a=e=>{let t=Error(e);return t.name=`ParseError`,t},o=(e,t)=>({toJSON:()=>JSON.stringify({_tag:e,value:t}),toYAML:()=>`_tag: ${e}\nvalue: ${n(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:e,value:t})).toString(`base64`)}),s=e=>({toJSON:()=>JSON.stringify(e),toYAML:()=>Object.entries(e).map(([e,t])=>`${e}: ${n(t)}`).join(`
|
|
2
|
+
`),toBinary:()=>Buffer.from(JSON.stringify(e)).toString(`base64`)}),c=(e,t)=>t(JSON.parse(e)),l=(e,t)=>{let n=e.split(`
|
|
3
|
+
`),r={};for(let e of n){let t=e.indexOf(`: `);if(t===-1)continue;let n=e.substring(0,t),i=e.substring(t+2);if(!i){r[n]=null;continue}try{r[n]=i===`null`?null:JSON.parse(i)}catch{r[n]=i}}return t(r)},u=(e,t)=>c(Buffer.from(e,`base64`).toString(),t),ee=e=>({fromJSON:t=>c(t,e),fromYAML:t=>l(t,e),fromBinary:t=>u(t,e)}),d=e=>({[Symbol.toStringTag]:`Option`,_tag:`Some`,value:e,isEmpty:!1,isSome(){return!0},isNone(){return!1},orElse:()=>e,orThrow:()=>e,or:t=>d(e),orNull:()=>e,orUndefined:()=>e,map:t=>d(t(e)),ap:t=>t._tag===`Some`&&t.value?d(t.value(e)):f,filter(t){return t(e)?d(e):f},count:t=>t(e)?1:0,find:t=>t(e)?d(e):f,exists:t=>t(e),forEach:t=>t(e),fold:(t,n)=>n(e),match:t=>t.Some(e),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),reduce:t=>t(void 0,e),reduceRight:t=>t(void 0,e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toList:()=>w([e]),contains:t=>t===e,size:1,toOption:()=>d(e),toEither:t=>T(e),toTry:()=>S(()=>e),toPromise:()=>Promise.resolve(e),toString:()=>`Some(${n(e)})`,toValue:()=>({_tag:`Some`,value:e}),pipe:t=>t(e),serialize:()=>o(`Some`,e),doUnwrap(){return{ok:!0,value:e}}}),f={[Symbol.toStringTag]:`Option`,_tag:`None`,value:void 0,isEmpty:!0,isSome(){return!1},isNone(){return!0},orElse:e=>e,orThrow(e){throw e??Error(`Cannot extract value from None`)},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:e=>f,ap:e=>f,filter(e){return f},count:e=>0,find:e=>f,exists:e=>!1,forEach:e=>{},flatMap:e=>f,flatMapAsync:e=>Promise.resolve(f),reduce:()=>void 0,reduceRight:()=>void 0,fold:(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>w([]),contains:()=>!1,size:0,toOption:()=>f,toEither:e=>E(e),toTry:()=>S(()=>{throw Error(`None`)}),toPromise:()=>Promise.reject(Error(`Cannot convert None to Promise`)),toString:()=>`None`,toValue:()=>({_tag:`None`,value:void 0}),pipe:e=>e(void 0),serialize:()=>o(`None`,null),doUnwrap(){return{ok:!1,empty:!0}}},p=()=>f,te=e=>e==null?p():d(e),ne={from:e=>m(e),none:()=>p(),isSome:e=>e.isSome(),isNone:e=>e.isNone(),fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Some`?d(t.value):p()},fromYAML:e=>{let t=e.split(`
|
|
4
|
+
`),n=t[0]?.split(`: `)[1],r=t[1]?.split(`: `)[1];if(!n||!r)return p();let i=r===`null`?null:JSON.parse(r);return n===`Some`?d(i):p()},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ne.fromJSON(t)}},m=r(te,ne),h=globalThis.Set,g=e=>{let t=new h(e),n={[Symbol.toStringTag]:`FunctypeSet`,_tag:`Set`,[Symbol.iterator]:()=>t[Symbol.iterator](),add:e=>g([...t,e]),remove:e=>{let n=new h(t);return n.delete(e),g(n)},contains:e=>t.has(e),has:e=>t.has(e),map:e=>g(Array.from(t).map(e)),ap:e=>{let n=new h;for(let r of t)for(let t of e)n.add(t(r));return g(n)},flatMap:e=>{let n=new h;for(let r of t)for(let t of e(r))n.add(t);return g(n)},flatMapAsync:async e=>{let n=new h;for(let r of t){let t=await e(r);for(let e of t)n.add(e)}return g(n)},fold:(e,n)=>{if(t.size===0)return e();let r=Array.from(t);if(r.length===0)return e();let i=r[0];return i===void 0?e():n(i)},foldLeft:e=>n=>{let r=e;for(let e of t)r=n(r,e);return r},foldRight:e=>n=>Array.from(t).reduceRight((e,t)=>n(t,e),e),get size(){return t.size},get isEmpty(){return t.size===0},reduce:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduce empty Set`);return n.reduce(e)},reduceRight:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduceRight empty Set`);return n.reduceRight(e)},count:e=>{let n=0;for(let r of t)e(r)&&n++;return n},find:e=>{for(let n of t)if(e(n))return m(n);return m(null)},exists:e=>{for(let n of t)if(e(n))return!0;return!1},forEach:e=>{t.forEach(e)},filter:e=>{let n=new h;for(let r of t)e(r)&&n.add(r);return g(n)},filterNot:e=>{let n=new h;for(let r of t)e(r)||n.add(r);return g(n)},drop:e=>g(Array.from(t).slice(e)),dropRight:e=>g(Array.from(t).slice(0,-e)),dropWhile:e=>{let n=Array.from(t),r=n.findIndex(t=>!e(t));return g(r===-1?[]:n.slice(r))},flatten:()=>{let e=new h;for(let n of t)if(Array.isArray(n))for(let t of n)e.add(t);else if(n&&typeof n==`object`&&Symbol.iterator in n)for(let t of n)e.add(t);else e.add(n);return g(e)},get head(){return Array.from(t)[0]},get headOption(){let e=Array.from(t)[0];return m(e)},take:e=>g(Array.from(t).slice(0,Math.max(0,e))),takeWhile:e=>{let n=Array.from(t),r=[];for(let t of n){if(!e(t))break;r.push(t)}return g(r)},takeRight:e=>{let n=Array.from(t);return g(e<=0?[]:n.slice(-e))},get last(){let e=Array.from(t);return e[e.length-1]},get lastOption(){let e=Array.from(t);return m(e[e.length-1])},get tail(){return g(Array.from(t).slice(1))},get init(){let e=Array.from(t);return g(e.length===0?[]:e.slice(0,-1))},toList:()=>w(Array.from(t)),toSet:()=>n,toArray:()=>Array.from(t),toString:()=>`Set(${Array.from(t).toString()})`,toValue:()=>({_tag:`Set`,value:Array.from(t)}),pipe:e=>e(Array.from(t)),serialize:()=>o(`Set`,Array.from(t))};return n},re=e=>g(e),ie=g([]),ae={empty:()=>ie,of:(...e)=>g(e),fromJSON:e=>oe(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
|
|
5
|
+
`)[1]?.split(`: `)[1];return oe(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ae.fromJSON(t)}},oe=r(re,ae),se=e=>{let t=e;return{get(){return t},set(e){t=e},update(e){t=e(t)},getAndSet(e){let n=t;return t=e,n},updateAndGet(e){return t=e(t),t},getAndUpdate(e){let n=t;return t=e(t),n},compareAndSet(e,n){return t===e?(t=n,!0):!1},modify(e){let[n,r]=e(t);return t=n,r}}},_=r(se,{of:e=>se(e)}),v=(e=0)=>{let t=_(e),n=e;return{get:()=>t.get(),set:e=>t.set(e),increment:()=>t.updateAndGet(e=>e+1),decrement:()=>t.updateAndGet(e=>e-1),reset:()=>t.set(n),compareAndSet:(e,n)=>t.compareAndSet(e,n)}},ce=()=>{let e=_([]);return{add:t=>e.update(e=>[...e,t]),addAll:t=>e.update(e=>[...e,...t]),build:()=>e.get(),clear:()=>e.set([]),size:()=>e.get().length}},y=e=>{let t={[Symbol.toStringTag]:`LazyList`,_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>y((function*(){for(let n of e)yield t(n)})()),flatMap:t=>y((function*(){for(let n of e)yield*t(n)})()),filter:t=>y((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>y((function*(){let n=v(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>y((function*(){let n=v(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>y((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>y((function*(){let n=_(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>y((function*(){yield*e,yield*t})()),zip:t=>y((function*(){let n=e[Symbol.iterator](),r=t[Symbol.iterator]();for(;;){let e=n.next(),t=r.next();if(e.done||t.done)break;yield[e.value,t.value]}})()),toList:()=>w(Array.from(e)),toArray:()=>Array.from(e),forEach:t=>{for(let n of e)t(n)},reduce:(t,n)=>{let r=_(n);for(let n of e)r.set(t(r.get(),n));return r.get()},find:t=>{for(let n of e)if(t(n))return m(n);return m.none()},some:t=>{for(let n of e)if(t(n))return!0;return!1},every:t=>{for(let n of e)if(!t(n))return!1;return!0},count:()=>{let t=v(0);for(let n of e)t.increment();return t.get()},get head(){let t=e[Symbol.iterator]().next();return t.done?void 0:t.value},get headOption(){let t=e[Symbol.iterator]().next();return t.done?m.none():m(t.value)},get last(){let t;for(let n of e)t=n;return t},get lastOption(){let t=_(void 0),n=_(!1);for(let r of e)t.set(r),n.set(!0);return n.get()?m(t.get()):m.none()},get tail(){return y((function*(){let t=e[Symbol.iterator]();t.next();let n=t.next();for(;!n.done;)yield n.value,n=t.next()})())},get init(){let t=Array.from(e);return y(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return y(t<=0?[]:n.slice(-t))},reverse:()=>y(Array.from(e).reverse()),distinct:()=>y((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>y((function*(){let t=v(0);for(let n of e)yield[n,t.get()],t.increment()})()),fold:(t,n)=>{let r=e[Symbol.iterator]().next();return r.done?t():n(r.value)},foldLeft:t=>n=>{let r=_(t);for(let t of e)r.set(n(r.get(),t));return r.get()},foldRight:t=>n=>Array.from(e).reduceRight((e,t)=>n(t,e),t),pipe:e=>e(t),serialize:()=>{let t=Array.from(e);return{toJSON:()=>JSON.stringify({_tag:`LazyList`,value:t}),toYAML:()=>`_tag: LazyList\nvalue: ${n(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`LazyList`,value:t})).toString(`base64`)}},toString:()=>{let t=[],n=v(0),r=_(!1);for(let i of e)if(n.get()<10)t.push(i),n.increment();else{r.set(!0);break}let i=t.map(e=>String(e)).join(`, `);return r.get()?`LazyList(${i}, ...)`:`LazyList(${i})`}};return t},le=r(e=>y(e),{empty:()=>y([]),of:e=>y([e]),from:(...e)=>y(e),iterate:(e,t)=>y((function*(){let n=_(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>y((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>y((function*(){if(n===0)throw Error(`Step cannot be zero`);let r=_(e);if(n>0)for(;r.get()<t;)yield r.get(),r.set(r.get()+n);else for(;r.get()>t;)yield r.get(),r.set(r.get()+n)})()),repeat:(e,t)=>y((function*(){if(t===void 0)for(;;)yield e;else{let n=v(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>y((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())}),b=e=>({[Symbol.toStringTag]:`Try`,_tag:`Success`,error:void 0,isSuccess(){return!0},isFailure(){return!1},orElse:t=>e,orThrow:t=>e,or:t=>b(e),orNull:()=>e,orUndefined:()=>e,toEither:t=>T(e),map:t=>S(()=>t(e)),ap:t=>t.map(t=>t(e)),flatMap:t=>t(e),flatMapAsync:async t=>t(e),fold:(t,n)=>n(e),match:t=>t.Success(e),recover:t=>b(e),recoverWith:t=>b(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toString:()=>`Success(${n(e)})`,toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Success`,value:e}),toOption:()=>d(e),toList:()=>w([e]),toTry:()=>b(e),pipe:t=>t(e),serialize:()=>o(`Success`,e),get size(){return 1},get isEmpty(){return!1},contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?m(e):m(void 0),exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),x=e=>({[Symbol.toStringTag]:`Try`,_tag:`Failure`,error:e,isSuccess(){return!1},isFailure(){return!0},orElse:e=>e,orThrow:t=>{throw t??e},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:t=>E(e),map:t=>x(e),ap:t=>x(e),flatMap:t=>x(e),flatMapAsync:t=>Promise.resolve(x(e)),fold:(t,n)=>t(e),match:t=>t.Failure(e),recover:t=>S(()=>t(e)),recoverWith:t=>{try{return t(e)}catch(e){return x(e instanceof Error?e:Error(String(e)))}},foldLeft:e=>t=>e,foldRight:e=>t=>e,toString:()=>`Failure(${n(e)}))`,toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Failure`,value:e}),toOption:()=>p(),toList:()=>w([]),toTry:()=>x(e),pipe:t=>{throw e},serialize:()=>s({_tag:`Failure`,error:e.message,stack:e.stack}),get size(){return 0},get isEmpty(){return!0},contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce a Failure`)},reduceRight:e=>{throw Error(`Cannot reduceRight a Failure`)},count:e=>0,find:e=>m(null),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),ue=e=>{try{return b(e())}catch(e){return x(e instanceof Error?e:Error(String(e)))}},de={success:e=>b(e),failure:e=>x(typeof e==`string`?Error(e):e),fromPromise:e=>e.then(e=>b(e)).catch(e=>x(e instanceof Error?e:Error(String(e)))),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),fromJSON:e=>{let t=JSON.parse(e);if(t._tag===`Success`)return b(t.value);{let e=Error(t.error);return t.stack&&(e.stack=t.stack),x(e)}},fromYAML:e=>{let t=e.split(`
|
|
6
|
+
`),n=t[0]?.split(`: `)[1];if(!n)return x(Error(`Invalid YAML format for Try`));if(n===`Success`){let e=t[1]?.split(`: `)[1];return e?b(JSON.parse(e)):x(Error(`Invalid YAML format for Try Success`))}else{let e=t[1]?.split(`: `)[1];if(!e)return x(Error(`Invalid YAML format for Try Failure`));let n=t[2]?.split(`: `),r=n&&n.length>1?n.slice(1).join(`: `):void 0,i=Error(e);return r&&(i.stack=r),x(i)}},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return de.fromJSON(t)}},S=r(ue,de);function fe({_tag:e,impl:t}){return{...t,_tag:e}}function pe(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:t?e._tag===t:!0}const C=e=>{let t=Array.from(e??[]),r={[Symbol.toStringTag]:`List`,_tag:`List`,[Symbol.iterator]:()=>t[Symbol.iterator](),get size(){return t.length},get length(){return t.length},map:e=>C(t.map(e)),ap:e=>C(t.flatMap(t=>Array.from(e).map(e=>e(t)))),flatMap:e=>C(t.flatMap(t=>Array.from(e(t)))),flatMapAsync:async e=>C((await Promise.all(t.map(async t=>await e(t)))).flatMap(e=>Array.from(e))),forEach:e=>t.forEach(e),contains:e=>t.includes(e),count:e=>t.filter(e).length,exists:e=>t.some(e),filter:e=>C(t.filter(e)),filterNot:e=>C(t.filter(t=>!e(t))),filterType:e=>C(t.filter(t=>pe(t,e))),find:(e,n)=>m(t.find(t=>e(t)&&(n?pe(t,n):!0))),get head(){return t[0]},get headOption(){return t.length>0?m(t[0]):p()},get isEmpty(){return t.length===0},toArray:()=>[...t],reduce:e=>t.reduce(e),reduceRight:e=>t.reduceRight(e),fold:(e,n)=>{if(t.length===0)return e();let r=t[0];return n(r)},foldLeft:e=>n=>t.reduce(n,e),foldRight:e=>n=>t.reduceRight((e,t)=>n(t,e),e),match:e=>t.length===0?e.Empty():e.NonEmpty([...t]),remove:e=>C(t.filter(t=>t!==e)),removeAt:e=>e<0||e>=t.length?r:C([...t.slice(0,e),...t.slice(e+1)]),add:e=>C([...t,e]),get:e=>m(t[e]),concat:e=>C([...t,...e.toArray()]),take:e=>C(t.slice(0,Math.max(0,e))),takeWhile:e=>{let n=[];for(let r of t){if(!e(r))break;n.push(r)}return C(n)},takeRight:e=>C(e<=0?[]:t.slice(-e)),get last(){return t[t.length-1]},get lastOption(){return t.length>0?m(t[t.length-1]):p()},get tail(){return C(t.slice(1))},get init(){return C(t.length===0?[]:t.slice(0,-1))},reverse:()=>C([...t].reverse()),indexOf:e=>t.indexOf(e),prepend:e=>C([e,...t]),distinct:()=>{let e=new globalThis.Set,n=[];for(let r of t)e.has(r)||(e.add(r),n.push(r));return C(n)},sorted:e=>C([...t].sort(e)),sortBy:(e,n)=>C([...t].sort((t,r)=>{let i=e(t),a=e(r);return n?n(i,a):i<a?-1:i>a?1:0})),zip:e=>{let n=e.toArray(),r=Math.min(t.length,n.length),i=[];for(let e=0;e<r;e++)i.push([t[e],n[e]]);return C(i)},zipWithIndex:()=>C(t.map((e,t)=>[e,t])),groupBy:e=>{let n=new globalThis.Map;for(let r of t){let t=e(r),i=n.get(t)??[];i.push(r),n.set(t,i)}let r=new globalThis.Map;for(let[e,t]of n)r.set(e,C(t));return r},partition:e=>{let n=[],r=[];for(let i of t)e(i)?n.push(i):r.push(i);return[C(n),C(r)]},span:e=>{let n=t.findIndex(t=>!e(t));return n===-1?[C([...t]),C([])]:[C(t.slice(0,n)),C(t.slice(n))]},slice:(e,n)=>C(t.slice(e,n)),drop:e=>C(t.slice(e)),dropRight:e=>C(t.slice(0,-e)),dropWhile:e=>C(t.slice(t.findIndex(t=>!e(t)))),flatten:()=>C(t.flatMap(e=>Array.isArray(e)?e:[e])),toList:()=>r,toSet:()=>oe(t),toOption:()=>t.length>0?m(t[0]):p(),toEither:e=>t.length>0?T(t[0]):E(e),toTry:()=>t.length>0?S(()=>t[0]):S(()=>{throw Error(`Empty list`)}),toString:()=>`List(${n(t)})`,toValue:()=>({_tag:`List`,value:t}),pipe:e=>e([...t]),serialize:()=>o(`List`,t),doUnwrap(){return t.length===0?{ok:!1,empty:!0}:{ok:!0,value:t[0]}}};return r},me=e=>C(e),he=C([]),ge={empty:()=>he,of:(...e)=>C(e),fromJSON:e=>w(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
|
|
7
|
+
`)[1]?.split(`: `)[1];return w(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ge.fromJSON(t)}},w=r(me,ge),_e=e=>({[Symbol.toStringTag]:`Either`,_tag:`Right`,value:e,isLeft(){return!1},isRight(){return!0},orElse:t=>e,orThrow:()=>e,or:t=>T(e),orNull:()=>e,orUndefined:()=>e,map:t=>T(t(e)),ap:t=>t._tag===`Right`?T(t.value(e)):E(t.value),mapAsync:t=>t(e).then(e=>T(e)).catch(e=>Promise.resolve(E(e))),merge:t=>t.isLeft()?E(t.value):T([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(e=>E(e)),toOption:()=>d(e),toList:()=>w([e]),toEither:t=>T(e),toTry:()=>S(()=>e),toJSON(){return{_tag:`Right`,value:e}},toString:()=>`Right(${n(e)})`,*[Symbol.iterator](){yield e},*yield(){yield e},traverse:t=>{let n=t(e);return n.isLeft()?E(n.value):T([n.value])},*lazyMap(t){yield T(t(e))},tap:t=>(t(e),T(e)),tapLeft:t=>T(e),mapLeft:t=>T(e),bimap:(t,n)=>T(n(e)),fold:(t,n)=>n(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),match:t=>t.Right(e),swap:()=>E(e),toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Right`,value:e}),pipeEither:(t,n)=>n(e),pipe:t=>t(e),serialize:()=>o(`Right`,e),get size(){return 1},get isEmpty(){return!1},contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?d(e):p(),exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),ve=e=>({[Symbol.toStringTag]:`Either`,_tag:`Left`,value:e,isLeft(){return!0},isRight(){return!1},orElse:e=>e,orThrow:t=>{throw t??e},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:t=>E(e),ap:t=>E(e),mapAsync:t=>Promise.resolve(E(e)),merge:t=>E(e),flatMap:t=>E(e),flatMapAsync:t=>Promise.resolve(E(e)),toOption:()=>p(),toList:()=>w(),toEither:e=>E(e),toTry:()=>S(()=>{throw Error(String(e))}),toJSON(){return{_tag:`Left`,value:e}},toString:()=>`Left(${n(e)})`,*[Symbol.iterator](){},*yield(){},traverse:t=>E(e),*lazyMap(t){yield E(e)},tap:t=>E(e),tapLeft:t=>(t(e),E(e)),mapLeft:t=>E(t(e)),bimap:(t,n)=>E(t(e)),fold:(t,n)=>t(e),foldLeft:e=>t=>e,foldRight:e=>t=>e,match:t=>t.Left(e),swap:()=>T(e),toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Left`,value:e}),pipeEither:(t,n)=>t(e),pipe:t=>t(e),serialize:()=>o(`Left`,e),get size(){return 0},get isEmpty(){return!0},contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce a Left`)},reduceRight:e=>{throw Error(`Cannot reduceRight a Left`)},count:e=>0,find:e=>p(),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),T=e=>_e(e),E=e=>ve(e),ye=e=>e.isRight(),be=e=>e.isLeft(),xe=(e,t)=>{try{return T(e())}catch(e){return E(t(e))}},Se=e=>_e(e);console.assert(Se);const Ce=e=>ve(e);console.assert(Ce);const we=async(e,t)=>{try{return T(await e())}catch(e){return E(t(e))}},Te=(e,t)=>t?T(e):E(e),Ee={left:e=>E(e),right:e=>T(e),isRight:e=>e.isRight(),isLeft:e=>e.isLeft(),sequence:e=>e.reduce((e,t)=>e.isLeft()?e:t.isLeft()?E(t.value):e.map(e=>[...e,t.value]),T([])),traverse:(e,t)=>Ee.sequence(e.map(t)),fromNullable:(e,t)=>e==null?E(t):T(e),fromPredicate:(e,t,n)=>t(e)?T(e):E(n),ap:(e,t)=>e.flatMap(e=>t.map(e)),fromPromise:async(e,t)=>{try{return T(await e)}catch(e){return E(t(e))}},fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Right`?T(t.value):E(t.value)},fromYAML:e=>{let t=e.split(`
|
|
8
|
+
`),n=t[0]?.split(`: `)[1],r=t[1]?.split(`: `)[1];if(!n||!r)throw Error(`Invalid YAML format for Either`);let i=JSON.parse(r);return n===`Right`?T(i):E(i)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return Ee.fromJSON(t)}},De=r(Te,Ee);function D(t,n){return{brand:t,validate:n,of:r=>n(r)?m(e(t,r)):m.none(),from:r=>n(r)?T(e(t,r)):E(`Invalid ${t}: validation failed`),unsafeOf:r=>{if(!n(r))throw Error(`Invalid ${t}: validation failed`);return e(t,r)},is:e=>{try{return n(e)}catch{return!1}},unwrap:e=>e,refine:(e,t)=>D(e,e=>n(e)&&t(e))}}const Oe=D(`PositiveNumber`,e=>e>0),ke=D(`NonNegativeNumber`,e=>e>=0),Ae=D(`IntegerNumber`,e=>Number.isInteger(e)),je=Oe.refine(`PositiveInteger`,e=>Number.isInteger(e)),Me=D(`NonEmptyString`,e=>e.length>0),Ne=D(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),Pe=D(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),Fe=D(`UUID`,e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)),Ie=D(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function Le(e,t,n){return D(e,e=>e>=t&&e<=n)}function Re(e,t,n){return D(e,e=>e.length>=t&&e.length<=n)}function ze(e,t){return D(e,e=>t.test(e))}const Be=e=>typeof e==`function`&&Object.keys(e).length>0,Ve=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Ve({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Ve({resolved:!0,value:t(i)}):n,else:n=>e.resolved?e.value:t(n),orThrow:()=>{if(!e.resolved)throw Error(`Conditional expression has no matching condition`);return e.value}};return n},He=()=>Ve({resolved:!1}),Ue=r(He,{of:()=>He(),match:e=>t=>{let n=t[e];if(n===void 0)throw Error(`No case defined for value: ${String(e)}`);return typeof n==`function`?n():n},lazy:()=>{let e={resolved:!1},t={when:(n,r)=>(e.resolved||n()&&(e.resolved=!0,e.value=r()),t),elseWhen:(n,r)=>(e.resolved||n()&&(e.resolved=!0,e.value=r()),t),else:t=>e.resolved?e.value:t()};return t}}),O=(e,t)=>t===e?!0:typeof t==`function`?t(e):t&&typeof t==`object`&&`_`in t?t._(e):typeof t==`object`&&t&&typeof e==`object`&&e?Object.entries(t).every(([t,n])=>{let r=e[t];return O(r,n)}):!1,k=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(O(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:O(e.value,n)?k({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):k({...e,patterns:[...e.patterns,{pattern:n,result:i}]}),caseValue:(t,n)=>{if(e.resolved)return r;if(e.value===t){let t=typeof n==`function`?n():n;return k({value:e.value,resolved:!0,result:t,patterns:[]})}return r},caseValues:(t,n)=>{if(e.resolved)return r;if(t.includes(e.value)){let t=typeof n==`function`?n():n;return k({value:e.value,resolved:!0,result:t,patterns:[]})}return r},when:(e,t)=>r.case(e,t),caseAny:(n,i)=>{if(e.resolved)return r;for(let r of n)if(O(e.value,r))return k({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return k({...e,patterns:[...e.patterns,...n.map(e=>({pattern:e,result:i}))]})},default:n=>e.resolved?e.result:t(n,e.value),exhaustive:()=>{if(e.resolved)return e.result;let t=n();if(!t.matched)throw Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(e.value)}`);return t.result},orThrow:t=>{if(e.resolved)return e.result;let r=n();if(!r.matched)throw Error(t??`No matching pattern for value: ${JSON.stringify(e.value)}`);return r.result},toOption:()=>{if(e.resolved)return m(e.result);let t=n();return t.matched?m(t.result):m.none()}};return r},We=e=>{let t=(e,t)=>typeof e==`function`?e(t):e;return{case:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return O(e,n)?k({...i,resolved:!0,result:t(r,e)}):k(i)},caseValue:(t,n)=>k(e===t?{value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}:{value:e,resolved:!1,patterns:[]}),caseValues:(t,n)=>t.includes(e)?k({value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}):k({value:e,resolved:!1,patterns:[]}),when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?k({...i,resolved:!0,result:t(r,e)}):k(i)},caseAny:(n,r)=>{for(let i of n)if(O(e,i))return k({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return k({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},Ge=r(e=>We(e),{exhaustive:e=>t=>{let n=e[t];if(n===void 0)throw Error(`No case defined for value: ${String(t)}`);return n},partial:e=>({withDefault:t=>n=>{let r=e[n];return r===void 0?typeof t==`function`?t(n):t:typeof r==`function`?r(n):r}}),withGuards:e=>({withDefault:t=>n=>{for(let[t,r]of e)if(t(n))return typeof r==`function`?r(n):r;return typeof t==`function`?t(n):t}}),struct:()=>{let e=[],t={case:(n,r)=>(e.push({pattern:n,handler:r}),t),build:()=>t=>{for(let{pattern:n,handler:r}of e)if(O(t,n))return r(t);throw Error(`No matching pattern for value: ${JSON.stringify(t)}`)}};return t},builder:()=>{let e=[],t,n={case:(t,r)=>(e.push({pattern:t,result:r}),n),when:(t,r)=>(e.push({pattern:t,result:r}),n),default:n=>(t=n,{build:()=>n=>{for(let{pattern:t,result:r}of e)if(O(n,t))return typeof r==`function`?r(n):r;if(t!==void 0)return typeof t==`function`?t(n):t;throw Error(`No matching pattern for value: ${JSON.stringify(n)}`)}})};return n}});function Ke(e,t){return{...fe({_tag:e,impl:t}),toString(){return`${e}()`},doUnwrap(){if(`isSome`in t&&`isNone`in t){if(typeof t.isSome==`function`&&t.isSome()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isNone==`function`&&t.isNone())return{ok:!1,empty:!0}}if(`isLeft`in t&&`isRight`in t){if(typeof t.isRight==`function`&&t.isRight()&&`value`in t)return{ok:!0,value:t.value};if(typeof t.isLeft==`function`&&t.isLeft()&&`value`in t)return{ok:!1,empty:!1,error:t.value}}if(`isSuccess`in t&&`isFailure`in t){if(typeof t.isSuccess==`function`&&t.isSuccess()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isFailure==`function`&&t.isFailure()&&`getError`in t&&typeof t.getError==`function`)return{ok:!1,empty:!1,error:t.getError()}}if(`isEmpty`in t&&`head`in t){if(typeof t.isEmpty==`function`&&t.isEmpty())return{ok:!1,empty:!0};if(typeof t.head==`function`)return{ok:!0,value:t.head()};if(`head`in t)return{ok:!0,value:t.head}}return{ok:!0,value:t}}}}const qe=`Throwable`;var Je=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=qe,this.name=t?.taskInfo?.name??`Throwable`,Object.defineProperties(this,{_tag:{value:qe,writable:!1,configurable:!1},data:{value:t?.data,writable:!1,configurable:!1},taskInfo:{value:t?.taskInfo,writable:!1,configurable:!1},name:{value:t?.taskInfo?.name??`Throwable`,writable:!1,configurable:!1}}),t?.cause&&Object.defineProperty(this,`cause`,{value:t.cause,writable:!1,configurable:!1}),t?.stack?this.stack=t.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static apply(t,n,r){if(t instanceof Error){let i=new e(t.message,{data:n,cause:t.cause??void 0,stack:t.stack??void 0,taskInfo:r});for(let e of Object.keys(t))if(!(e in i)){let n=i;n[e]=t[e]}return i}if(t&&typeof t==`object`){let i=t,a=new e(typeof i.message==`string`?i.message:typeof i.error==`string`?i.error:`Object error: ${JSON.stringify(i,Object.getOwnPropertyNames(i).filter(e=>i[e]!==void 0))}`,{data:n??i,taskInfo:r});for(let e of Object.keys(i))if(!(e in a)){let t=a;t[e]=i[e]}return a}if(typeof t==`function`){let i=t.name??`anonymous function`,a=t.toString().substring(0,100)+(t.toString().length>100?`...`:``);return new e(`Function error: ${i}`,{data:n??{functionType:typeof t,functionName:i,functionString:a},taskInfo:r})}let i=typeof t,a=t===null?`null`:t===void 0?`undefined`:String(t);if(i===`number`){let a=t;return new e(Number.isNaN(a)?`Number error: NaN`:Number.isFinite(a)?`Number error: ${a}`:`Number error: ${a>0?`Infinity`:`-Infinity`}`,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}if(i===`bigint`)return new e(`BigInt error: ${t}n`,{data:n??{errorType:i,errorValue:String(t),originalError:t},taskInfo:r});if(i===`boolean`)return new e(`Boolean error: ${t}`,{data:n??{errorType:i,errorValue:t,originalError:t},taskInfo:r});if(i===`symbol`){let a=t.description??`unnamed symbol`;return new e(`Symbol error: Symbol(${a})`,{data:n??{errorType:i,symbolDescription:a,originalError:t},taskInfo:r})}return new e(typeof t==`string`?t:`${i.charAt(0).toUpperCase()+i.slice(1)} error: ${a}`,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}};function Ye(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const Xe=(e,t)=>{if(e.isRight())return j(e.orThrow(),t);if(e.isLeft())return A(e.fold(e=>e,()=>Error(`Unexpected right value`)),void 0,t);throw Error(`Unrecognized task outcome`)},A=(e,t,r)=>{let i={name:r?.name??`Task`,description:r?.description??``},a=Je.apply(e,t,i),o={...Ke(`Err`,{error:a,meta:i}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Err`,_meta:i,value:void 0,error:a,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>A(a,t,r),flatMap:e=>A(a,t,r),ap:e=>A(a,t,r),mapAsync:e=>Promise.resolve(A(a,t,r)),flatMapAsync:e=>Promise.resolve(A(a,t,r)),mapError:e=>A(e(a),t,r),recover:e=>j(e,r),recoverWith:e=>j(e(a),r),orThrow:e=>{throw e??a},orElse:e=>e,or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:()=>E(a),toTry:()=>S(()=>{throw a}),toOption:()=>p(),toList:()=>w([]),fold:(e,t)=>e(a),match:e=>e.Err(a),foldLeft:e=>t=>e,foldRight:e=>t=>e,size:0,isEmpty:!0,contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce empty Err`)},reduceRight:e=>{throw Error(`Cannot reduceRight empty Err`)},count:e=>0,find:e=>p(),exists:e=>!1,forEach:e=>{},toPromise:()=>Promise.reject(a),doUnwrap(){return{ok:!1,empty:!1,error:a}},serialize:()=>({toJSON:()=>n({_tag:`Err`,error:a.message??a.toString()})??`{}`,toYAML:()=>`_tag: Err\nerror: ${a.message??a.toString()}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Err`,error:a.message??a.toString()})).toString(`base64`)}),pipe:e=>e(o)};return o},j=(e,t)=>{let r={name:t?.name??`Task`,description:t?.description??``},i={...Ke(`Ok`,{value:e,meta:r}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Ok`,_meta:r,value:e,error:void 0,isSuccess(){return!0},isFailure(){return!1},isOk(){return!0},isErr(){return!1},map:n=>j(n(e),t),flatMap:n=>{let r=n(e);return r&&typeof r==`object`&&`isLeft`in r&&`isRight`in r?Xe(r,t):r},ap:n=>n.isOk()?j(n.value(e),t):A(n.error,void 0,t),mapAsync:async n=>j(await n(e),t),flatMapAsync:async t=>await t(e),mapError:n=>j(e,t),recover:n=>j(e,t),recoverWith:n=>j(e,t),orThrow:t=>e,orElse:t=>e,or:n=>j(e,t),orNull:()=>e,orUndefined:()=>e,toEither:()=>T(e),toTry:()=>S(()=>e),toOption:()=>d(e),toList:()=>w([e]),fold:(t,n)=>n(e),match:t=>t.Ok(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),size:1,isEmpty:!1,contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?d(e):p(),exists:t=>t(e),forEach:t=>t(e),toPromise:()=>Promise.resolve(e),doUnwrap(){return{ok:!0,value:e}},serialize:()=>({toJSON:()=>n({_tag:`Ok`,value:e})??`{}`,toYAML:()=>`_tag: Ok\nvalue: ${n(e)??`undefined`}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Ok`,value:e})).toString(`base64`)}),pipe:e=>e(i)};return i},Ze=()=>{let e=new AbortController,t=ce();return{token:{get isCancelled(){return e.signal.aborted},get signal(){return e.signal},onCancel(n){e.signal.aborted?n():t.add(n)}},cancel(){e.signal.aborted||(e.abort(),t.build().forEach(e=>{try{e()}catch(e){console.error(`Error in cancellation callback:`,e)}}))}}},Qe=e=>{let t=e?.name??`Task`,n=e?.description??``,r={Async:(e,r=e=>e,i=()=>{},a)=>new Promise(o=>{(async()=>{let s=_(!1),c=_(null),l=_(()=>{});if(a){if(a.isCancelled){try{await i()}catch(e){o(A(e,void 0,{name:t,description:n}));return}o(A(Error(`Task was cancelled before execution started`),void 0,{name:t,description:n}));return}a.onCancel(()=>{s.set(!0),c.set(Error(`Task was cancelled during execution`))}),l.set(()=>{})}try{let r=await e();try{await i()}catch(e){o(A(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(A(c.get(),void 0,{name:t,description:n})):o(A(Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}if(r&&typeof r==`object`&&`_tag`in r){let e=r;e._tag===`Ok`||e._tag===`Err`?o(e):o(j(r,{name:t,description:n}))}else o(j(r,{name:t,description:n}))}catch(e){try{await i()}catch(e){o(A(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(A(c.get(),void 0,{name:t,description:n})):o(A(Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}try{if(e instanceof Error&&Ye(e)){let i=Error(`${t}: ${e.message}`),a=Je.apply(i,void 0,{name:t,description:n});Object.defineProperty(a,`cause`,{value:e,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{r(e)}catch(e){console.error(`Error in error handler:`,e)}}),o(A(a,void 0,{name:t,description:n}))}else{let i=await r(e);if(i&&typeof i==`object`&&`_tag`in i){let e=i;e._tag===`Ok`||e._tag===`Err`?o(e):o(A(i,void 0,{name:t,description:n}))}else o(A(i,void 0,{name:t,description:n}))}}catch(e){o(A(e,void 0,{name:t,description:n}))}}finally{l.get()()}})().catch(e=>o(A(e,void 0,{name:t,description:n})))}),Sync:(e,r=e=>e,i=()=>{})=>{try{return j(e(),{name:t,description:n})}catch(e){return A(r(e),void 0,{name:t,description:n})}finally{i()}},AsyncWithProgress:(e,t,n=e=>e,i=()=>{},a)=>{let o=e=>{let n=Math.max(0,Math.min(100,e));n<=100&&t(n)};return r.Async(()=>e(o),n,i,a)}};return{...Ke(`Task`,r),_type:`Task`}},$e={success:(e,t)=>j(e,t),fail:(e,t,n)=>A(e,t,n),ok:(e,t)=>j(e,t),err:(e,t,n)=>A(e,t,n),fromEither:(e,t)=>Xe(e,t),fromTry:(e,t)=>e.isSuccess()?j(e.orThrow(),t):A(e.fold(e=>e,()=>Error(`Unexpected success`)),void 0,t),getErrorChain:e=>{if(!e)return[];let t=ce();t.add(e);let n=_(e);for(;n.get()&&n.get().cause;){let{cause:e}=n.get();if(e)t.add(e),n.set(e);else break;if(t.size()>100)break}return t.build()},formatErrorChain:(e,t)=>{let n=$e.getErrorChain(e),r=t?.separator??`
|
|
9
|
+
`;return n.map((e,n)=>{if(!e)return`${n>0?`↳ `:``}Unknown error`;let{taskInfo:r}=e,i=t?.includeTasks&&r?.name?`[${r.name}] `:``,a=e.message??`No message`,o=_(`${n>0?`↳ `:``}${i}${a}`);return t?.includeStackTrace&&e.stack&&o.set(`${o.get()}\n${e.stack.split(`
|
|
10
|
+
`).slice(1).join(`
|
|
11
|
+
`)}`),o.get()}).join(r)},fromPromise:(e,t)=>(...n)=>M(t??{name:`PromiseTask`,description:`Task from Promise`}).Async(()=>e(...n),e=>e),toPromise:e=>new Promise((t,n)=>{e.isSuccess()?t(e.orThrow()):n(e.error)}),race:(e,t,n)=>M({name:n?.name??`TaskRace`,description:n?.description??`Race between multiple tasks`}).Async(async()=>{let n=ce();e.forEach(e=>n.add(e));let r=_(void 0);if(typeof t==`number`&&t>0){let e=new Promise((e,n)=>{r.set(setTimeout(()=>{n(Error(`Task race timed out after ${t}ms`))},t))});n.add(e)}try{return await new Promise((e,t)=>{n.build().forEach(n=>{n.then(n=>{if(n&&typeof n==`object`&&`_tag`in n){let r=n;r._tag===`Ok`?e(r.orThrow()):r._tag===`Err`?t(r.error):e(n)}else e(n)},e=>t(e))})})}finally{r.get()&&clearTimeout(r.get())}},e=>e),fromNodeCallback:(e,t)=>{let n={name:t?.name??`NodeCallbackTask`,description:t?.description??`Task from Node.js callback function`};return(...t)=>M(n).Async(()=>new Promise((n,r)=>{try{e(...t,(e,t)=>{e?r(e):n(t)})}catch(e){r(e)}}),e=>e)},createCancellationTokenSource:Ze,cancellable:(e,t)=>{let n=Ze();return{task:M(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=Ze(),i=_(0),a=e=>{i.set(Math.max(0,Math.min(100,e))),t(i.get())};return{task:M(n).Async(()=>e(a,r.token),e=>e,()=>{},r.token),cancel:()=>r.cancel(),currentProgress:()=>i.get()}}},M=r(Qe,$e);function et(e){if(!e||typeof e!=`object`||!(`_tag`in e))return`unknown`;switch(e._tag){case`Some`:case`None`:return`Option`;case`Left`:case`Right`:return`Either`;case`List`:return`List`;case`Success`:case`Failure`:return`Try`;default:return`unknown`}}const tt={Option:{of:e=>m(e),empty:()=>m.none()},Either:{of:e=>T(e),empty:e=>E(e)},List:{of:e=>w([e]),empty:()=>w([])},Try:{of:e=>S(()=>e),empty:e=>S(()=>{throw e??Error(`Try failed`)})}};function nt(e){let t=e(),n=null,r;function i(a){let o=t.next(a);if(o.done)return r?r.of(o.value):w([o.value]);let s=o.value;if(typeof s!=`object`||!s)throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`);if(!n&&`_tag`in s&&(n=et(s),n!==`unknown`&&n in tt&&(r=tt[n]),n===`List`))return rt(e);if(`doUnwrap`in s){let e=s.doUnwrap();if(!e.ok){if(!r)return w([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`)}return i()}function rt(e){function t(e){if(typeof e!=`object`||!e||!(`doUnwrap`in e))return[e];let t=e;if(`toArray`in t){let e=t.toArray();return e.length===0?[]:e}let n=t.doUnwrap();return n.ok?[n.value]:[]}function n(r){let i=e(),a=[],o=[],s=0;function c(e){let l=i.next(e);if(l.done){a.push(l.value);return}if(s<r.length){let e=r[s];o.push(e),s++,c(e);return}let u=t(l.value);if(u.length!==0)if(u.length>1){let e=u.flatMap(e=>n([...o,e]));a.push(...e)}else o.push(u[0]),s++,c(u[0])}return c(void 0),a}return w(n([]))}async function it(e){let t=e(),n=null,r;async function i(e){let a=await t.next(e);if(a.done)return r?r.of(a.value):w([a.value]);let o=await Promise.resolve(a.value);if(typeof o!=`object`||!o)return i(o);if(!n&&`_tag`in o&&(n=et(o),n!==`unknown`&&n in tt&&(r=tt[n])),`doUnwrap`in o){let e=o.doUnwrap();if(!e.ok){if(!r)return w([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}return i(o)}return i()}function at(e){return typeof e==`object`&&!!e&&`doUnwrap`in e&&typeof e.doUnwrap==`function`}function ot(e){let t=e.doUnwrap();if(t.ok)return t.value;throw`error`in t?t.error:Error(`Cannot unwrap empty monad`)}function*st(e){return yield e}const ct=(e=`Cannot unwrap None in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`NoneError`,n},lt=(e,t=`Cannot unwrap Left in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`LeftError`,r.value=e,r},ut=(e=`Cannot unwrap empty List in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`EmptyListError`,n},dt=(e,t=`Cannot unwrap Failure in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`FailureError`,r.cause=e,r},ft={includeTasks:!0,includeStackTrace:!1,separator:`
|
|
12
|
+
`,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function pt(e){let t=new WeakSet;return JSON.stringify(e,(e,n)=>{if(typeof n==`bigint`)return`${n.toString()}n`;if(typeof n==`object`&&n){if(t.has(n))return`[Circular Reference]`;t.add(n)}return e===`stack`&&typeof n==`string`?mt(n):n},2)}function mt(e){if(e===void 0||e===``)return``;let t=e.split(`
|
|
13
|
+
`);return[t[0],...t.slice(1).map(e=>e.trim())].join(`
|
|
14
|
+
`)}function ht(e,t){let n={...ft,...t},r=e instanceof Error?e:Je.apply(e),i=M?.getErrorChain?M.getErrorChain(r):[r],a=`${n.colors?`\x1b[31m${n.title}:\x1b[0m ${r.message}`:`${n.title}: ${r.message}`}\n\n${i.map((e,t)=>{let r=` `.repeat(t),i=t>0?`↳ `:``,{taskInfo:a}=e,o=`${r}${i}${n.includeTasks&&a?.name?n.colors?`\x1b[36m[${a.name}]\x1b[0m `:`[${a.name}] `:``}${e.message}`;if(n.includeStackTrace&&e.stack){let t=mt(e.stack).split(`
|
|
15
|
+
`).slice(1),i=n.maxStackFrames??ft.maxStackFrames??3,a=t.slice(0,i).map(e=>`${r} ${n.colors?`\x1B[90m`:``}${e}${n.colors?`\x1B[0m`:``}`).join(`
|
|
16
|
+
`);o+=`\n${a}`,t.length>i&&(o+=`\n${r} ${n.colors?`\x1B[90m`:``}...${t.length-i} more stack frames${n.colors?`\x1B[0m`:``}`)}return o}).join(n.separator)}`;if(n.includeData){let{data:e}=r;if(e){let t=n.colors?`\n\n\x1b[33mContext:\x1b[0m\n${pt(e)}`:`\n\nContext:\n${pt(e)}`;a+=t}}return a}function gt(){return function(e){if(!e)return e;let t=e instanceof Error?e:Error(String(e)),n={message:t.message,name:t.name||`Error`,stack:t.stack?mt(t.stack):void 0};if(t.taskInfo&&(n.taskInfo=t.taskInfo),t.data&&(n.data=t.data),typeof M?.getErrorChain==`function`)try{let e=M.getErrorChain(t);e.length>1&&(n.errorChain=M.formatErrorChain(t,{includeTasks:!0}),n.structuredErrorChain=e.map(e=>({message:e.message,name:e.name,taskInfo:e.taskInfo,stack:e.stack?mt(e.stack):void 0})))}catch{}return Object.getOwnPropertyNames(t).forEach(e=>{n[e]||(n[e]=t[e])}),n}}const N=(e,n,r,i)=>t(Je.apply(n,r,{name:e,description:n}),{code:e,message:n,status:_t(e),context:r,timestamp:new Date().toISOString(),traceId:i?.traceId}),_t=e=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[e],P=Object.assign(N,{validation:(e,t,n)=>N(`VALIDATION_FAILED`,`Validation failed: ${e} ${n}`,{field:e,value:t,rule:n}),network:(e,t,n)=>N(`NETWORK_ERROR`,`Network error: ${t} ${e}${n?` (${n})`:``}`,{url:e,method:t,statusCode:n}),auth:(e,t)=>N(`AUTH_REQUIRED`,`Authentication required: ${e}${t?` (role: ${t})`:``}`,{resource:e,requiredRole:t}),notFound:(e,t)=>N(`NOT_FOUND`,`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,n)=>N(`PERMISSION_DENIED`,`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:n}),rateLimit:(e,t,n)=>N(`RATE_LIMITED`,`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:n}),internal:e=>N(`INTERNAL_ERROR`,`Internal server error: ${e}`,{errorId:e,timestamp:new Date().toISOString()}),badRequest:(e,t)=>N(`BAD_REQUEST`,`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>N(`CONFLICT`,`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>N(`TIMEOUT`,`Request timeout: ${t} exceeded ${e}ms`,{duration:e,operation:t}),isTypedError:e=>typeof e==`object`&&!!e&&`code`in e&&`message`in e&&`status`in e&&`context`in e&&`_tag`in e&&e._tag===`Throwable`,hasCode:(e,t)=>e.code===t}),F={rule:e=>t=>{if(e===`email`)return typeof t!=`string`||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?E(P.validation(`value`,t,`must be a valid email`)):T(t);if(e===`url`)try{return new URL(String(t)),T(t)}catch{return E(P.validation(`value`,t,`must be a valid URL`))}if(e===`uuid`)return typeof t!=`string`||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)?E(P.validation(`value`,t,`must be a valid UUID`)):T(t);if(e===`required`)return t==null||t===``?E(P.validation(`value`,t,`is required`)):T(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?E(P.validation(`value`,t,`must be numeric`)):T(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?E(P.validation(`value`,t,`must contain only letters`)):T(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?E(P.validation(`value`,t,`must be alphanumeric`)):T(t);if(e.startsWith(`min:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r<n?E(P.validation(`value`,t,`must be at least ${n}`)):T(t)}if(e.startsWith(`max:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r>n?E(P.validation(`value`,t,`must be at most ${n}`)):T(t)}if(e.startsWith(`minLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length<n?E(P.validation(`value`,t,`must be at least ${n} characters`)):T(t)}if(e.startsWith(`maxLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length>n?E(P.validation(`value`,t,`must be at most ${n} characters`)):T(t)}if(e.startsWith(`pattern:`)){let n=e.substring(8);return new RegExp(n).test(String(t))?T(t):E(P.validation(`value`,t,`must match pattern ${n}`))}if(e.startsWith(`in:`)){let n=e.substring(3).split(`,`);return n.includes(String(t))?T(t):E(P.validation(`value`,t,`must be one of: ${n.join(`, `)}`))}if(e.startsWith(`notIn:`)){let n=e.substring(6).split(`,`);return n.includes(String(t))?E(P.validation(`value`,t,`must not be one of: ${n.join(`, `)}`)):T(t)}if(e===`date`){let e=new Date(String(t));return isNaN(e.getTime())?E(P.validation(`value`,t,`must be a valid date`)):T(t)}if(e===`future`){let e=new Date(String(t));return isNaN(e.getTime())||e<=new Date?E(P.validation(`value`,t,`must be a future date`)):T(t)}if(e===`past`){let e=new Date(String(t));return isNaN(e.getTime())||e>=new Date?E(P.validation(`value`,t,`must be a past date`)):T(t)}return T(t)},combine:(...e)=>t=>{for(let n of e){let e=n(t);if(e.isLeft())return e}return T(t)},custom:(e,t)=>n=>e(n)?T(n):E(P.validation(`value`,n,t)),form:(e,t)=>{let n=[],r={};for(let[i,a]of Object.entries(e)){let e=t[i],o=a(e);if(o.isLeft()){let t=o.fold(e=>e,()=>{throw Error(`Should not be left`)}),r=P.validation(i,e,t.context.rule);n.push(r)}else r[i]=o.orThrow()}return n.length>0?E(w(n)):T(r)}},vt={...F,validators:{email:F.rule(`email`),url:F.rule(`url`),uuid:F.rule(`uuid`),required:F.rule(`required`),numeric:F.rule(`numeric`),positiveNumber:F.combine(F.rule(`numeric`),F.rule(`min:0`)),nonEmptyString:F.combine(F.rule(`required`),F.custom(e=>typeof e==`string`&&e.trim().length>0,`must not be empty`))}},yt=t(F.rule,vt);function bt(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function xt(e){return bt(e)&&`orElse`in e&&typeof e.orElse==`function`&&`or`in e&&typeof e.or==`function`&&`orNull`in e&&typeof e.orNull==`function`&&`orUndefined`in e&&typeof e.orUndefined==`function`}const St={toOption:e=>e.fold(()=>p(),e=>d(e)),toList:e=>e.fold(()=>w([]),e=>w([e])),toEither:(e,t)=>e.fold(()=>E(t),e=>T(e)),isEmpty:e=>e.fold(()=>!0,()=>!1),size:e=>e.fold(()=>0,()=>1)},I=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),L=e=>typeof e==`object`&&!!e&&e._tag===`List`,Ct=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),wt=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),R=()=>{let e=(e,t)=>{if(I(e)||L(e)||Ct(e)||wt(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(I(e))return e.orThrow();if(L(e)){let t=e.toArray();if(t.length>0&&L(t[0])){let e=[];for(let n of t)L(n)&&e.push(...n.toArray());return w(e)}return e.flatten()}if(Ct(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(wt(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(I(e)||L(e)||Ct(e)||wt(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(I(e)&&I(t)||L(e)&&L(t)||Ct(e)&&Ct(t)||wt(e)&&wt(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},i=e=>{if(I(e)){let t=e;if(t.isEmpty)return w([m.none()]);let n=t.orThrow();if(L(n))return n.map(e=>m(e));throw Error(`Unsupported inner container type for sequence`)}if(L(e)){let t=e.toArray();if(t.length===0)return m.none();let n=t[0];if(I(n)){for(let e of t)if(e.isEmpty)return m.none();return m(w(t.map(e=>e.orThrow())))}throw Error(`Unsupported inner container type for sequence`)}throw Error(`Unsupported outer container type for sequence: ${JSON.stringify(e)}`)};return{_tag:`HKT`,map:e,flatten:t,flatMap:n,ap:r,sequence:i,traverse:(t,n)=>i(e(t,e=>n(e))),_type:`HKT`}},Tt=R();R.map=(e,t)=>Tt.map(e,t),R.flatten=e=>Tt.flatten(e),R.flatMap=(e,t)=>Tt.flatMap(e,t),R.ap=(e,t)=>Tt.ap(e,t),R.sequence=e=>Tt.sequence(e),R.traverse=(e,t)=>Tt.traverse(e,t),R.isOption=I,R.isList=L,R.isEither=Ct,R.isTry=wt;const Et=e=>({id:e,isSame:t=>t.id===e}),Dt=r(Et,{of:e=>Et(e),pure:e=>Et(e)}),Ot=e=>({_tag:`Context`,services:e,get(t){let n=e.get(t.id);return n===void 0?p():d(n)},unsafeGet(t){let n=e.get(t.id);if(n===void 0)throw Error(`Service not found: ${t.id}`);return n},has(t){return e.has(t.id)},add(t,n){let r=new Map(e);return r.set(t.id,n),Ot(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return Ot(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),z={empty:()=>Ot(new Map),make:(e,t)=>{let n=new Map;return n.set(e.id,t),Ot(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},B=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,isSuccess(){return!0},isFailure(){return!1},isInterrupted(){return!1},map(t){return B(t(e))},mapError(t){return B(e)},mapBoth(t,n){return B(n(e))},flatMap(t){return t(e)},fold(t,n,r){return n(e)},match(t){return t.Success(e)},orThrow(){return e},orElse(t){return e},toOption(){return d(e)},toEither(){return T(e)},toValue(){return{_tag:`Success`,value:e}},toString(){return`Exit.Success(${n(e)})`},toJSON(){return{_tag:`Success`,value:e}}}),kt=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,isSuccess(){return!1},isFailure(){return!0},isInterrupted(){return!1},map(t){return kt(e)},mapError(t){return kt(t(e))},mapBoth(t,n){return kt(t(e))},flatMap(t){return kt(e)},fold(t,n,r){return t(e)},match(t){return t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return p()},toEither(){return E(e)},toValue(){return{_tag:`Failure`,error:e}},toString(){return`Exit.Failure(${n(e)})`},toJSON(){return{_tag:`Failure`,error:e}}}),At=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,isSuccess(){return!1},isFailure(){return!1},isInterrupted(){return!0},map(t){return At(e)},mapError(t){return At(e)},mapBoth(t,n){return At(e)},flatMap(t){return At(e)},fold(t,n,r){if(r)return r(e);throw Error(`Effect was interrupted: ${e}`)},match(t){return t.Interrupted(e)},orThrow(){throw Error(`Effect was interrupted: ${e}`)},orElse(e){return e},toOption(){return p()},toEither(){throw Error(`Cannot convert Interrupted Exit to Either: ${e}`)},toValue(){return{_tag:`Interrupted`,fiberId:e}},toString(){return`Exit.Interrupted(${e})`},toJSON(){return{_tag:`Interrupted`,fiberId:e}}}),V=r(e=>B(e),{succeed:e=>B(e),fail:e=>kt(e),interrupt:e=>At(e),interrupted:()=>At(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?B(e.value):kt(e.value),fromOption:(e,t)=>e.isSome()?B(e.value):kt(t()),zip:(e,t)=>e.isInterrupted()?e:t.isInterrupted()?t:e.isFailure()?e:t.isFailure()?t:B([e.orThrow(),t.orThrow()]),all:e=>{let t=[];for(let n of e){if(n.isInterrupted()||n.isFailure())return n;t.push(n.orThrow())}return B(t)}}),H=e=>e;var jt=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},Mt=class extends Error{constructor(e){super(e??`Effect was interrupted`),this._tag=`InterruptedError`,this.name=`InterruptedError`}};const U=e=>{let t={[Symbol.toStringTag]:`IO`,_effect:e,map(e){return U(H({_tag:`Map`,effect:t,f:e}))},flatMap(e){return U(H({_tag:`FlatMap`,effect:t,f:e}))},tap(e){return t.map(t=>(e(t),t))},tapEffect(e){return t.flatMap(t=>e(t).map(()=>t))},mapError(e){return U(H({_tag:`MapError`,effect:t,f:e}))},tapError(e){return t.mapError(t=>(e(t),t))},recover(e){return U(H({_tag:`Recover`,effect:t,fallback:e}))},recoverWith(e){return U(H({_tag:`RecoverWith`,effect:t,f:e}))},fold(e,n){return U(H({_tag:`Fold`,effect:t,onFailure:e,onSuccess:n}))},match(e){return t.fold(e.failure,e.success)},catchTag(e,n){return U(H({_tag:`RecoverWith`,effect:t,f:t=>typeof t==`object`&&t&&`_tag`in t&&t._tag===e?H(n(t)):H(K.fail(t))}))},catchAll(e){return t.recoverWith(e)},retry(e){return e<=0?t:t.recoverWith(()=>t.retry(e-1))},retryWithDelay(e,n){return e<=0?t:t.recoverWith(()=>K.sleep(n).flatMap(()=>t.retryWithDelay(e-1,n)))},zipRight(e){return t.flatMap(()=>e)},zipLeft(e){return t.flatMap(t=>e.map(()=>t))},zip(e){return t.flatMap(t=>e.map(e=>[t,e]))},flatten(){return this.flatMap(e=>e)},provideContext(e){return U(H({_tag:`ProvideContext`,effect:t,context:e}))},provideService(e,n){return U(H({_tag:`ProvideContext`,effect:t,context:z.make(e,n)}))},provideLayer(e){return H(H(K.async(async()=>{let t=z.empty();return await e.build(H(t))})).flatMap(e=>U(H({_tag:`ProvideContext`,effect:t,context:e}))))},async run(){let e=await G(this._effect);return e.isSuccess()?T(e.orThrow()):E(e.isFailure()?e.toValue().error:new Mt)},async runOrThrow(){let e=await G(this._effect);if(e.isSuccess())return e.orThrow();throw e.isFailure()?e.toValue().error:new Mt},runSync(){try{return T(W(this._effect))}catch(e){return E(e)}},runSyncOrThrow(){return W(this._effect)},async runExit(){return G(this._effect)},async runOption(){let e=await G(this._effect);return e.isSuccess()?d(e.orThrow()):p()},async runTry(){let e=await G(this._effect);if(e.isSuccess())return H(S(()=>e.orThrow()));let t=e.isFailure()?e.toValue().error:Error(`Effect was interrupted`);return H(S(()=>{throw t}))},pipe(e){return e(t)},delay(e){return H(K.async(()=>new Promise(t=>setTimeout(t,e))).flatMap(()=>t))},timeout(e){return U(H({_tag:`Timeout`,effect:t,duration:e}))},timeoutTo(e,n){return H(t.timeout(e).recover(H(n)))},toString(){return`IO(${n(e._tag)})`},toJSON(){return{_tag:`IO`,effect:e._tag}},*[Symbol.iterator](){return yield t}};return t},W=(e,t=z.empty())=>{switch(e._tag){case`Succeed`:return e.value;case`Fail`:throw e.error;case`Die`:throw e.defect;case`Sync`:return e.thunk();case`Async`:throw Error(`Cannot run async effect synchronously`);case`Auto`:{let t=e.thunk();if(t instanceof Promise)throw Error(`Cannot run async effect synchronously`);return t}case`Map`:{let n=W(e.effect._effect,t);return e.f(n)}case`FlatMap`:{let n=W(e.effect._effect,t);return W(e.f(n)._effect,t)}case`MapError`:try{return W(e.effect._effect,t)}catch(t){throw e.f(t)}case`Recover`:try{return W(e.effect._effect,t)}catch{return e.fallback}case`RecoverWith`:try{return W(e.effect._effect,t)}catch(n){return W(e.f(n)._effect,t)}case`Fold`:try{let n=W(e.effect._effect,t);return e.onSuccess(n)}catch(t){return e.onFailure(t)}case`Service`:{let n=t.get(e.tag);if(n.isNone())throw Error(`Service not found: ${e.tag.id}`);return n.orThrow()}case`ProvideContext`:{let n=t.merge(e.context);return W(e.effect._effect,n)}case`Interrupt`:throw new Mt;case`Bracket`:{let n=W(e.acquire._effect,t);try{return W(e.use(n)._effect,t)}finally{W(e.release(n)._effect,t)}}case`Race`:throw Error(`Cannot run race effect synchronously`);case`Timeout`:throw Error(`Cannot run timeout effect synchronously`)}},G=async(e,t=z.empty())=>{try{switch(e._tag){case`Succeed`:return H(V.succeed(e.value));case`Fail`:return H(V.fail(e.error));case`Die`:throw e.defect;case`Sync`:return H(V.succeed(e.thunk()));case`Async`:{let t=await e.thunk();return H(V.succeed(t))}case`Auto`:{let t=e.thunk();return t instanceof Promise?H(V.succeed(await t)):H(V.succeed(t))}case`Map`:{let n=await G(e.effect._effect,t);return n.isSuccess()?H(V.succeed(e.f(n.orThrow()))):H(n)}case`FlatMap`:{let n=await G(e.effect._effect,t);return n.isSuccess()?G(e.f(n.orThrow())._effect,t):H(n)}case`MapError`:{let n=await G(e.effect._effect,t);return n.isSuccess()?H(n):n.isFailure()?H(V.fail(e.f(n.toValue().error))):H(n)}case`Recover`:{let n=await G(e.effect._effect,t);return n.isSuccess()?n:V.succeed(e.fallback)}case`RecoverWith`:{let n=await G(e.effect._effect,t);return n.isSuccess()?n:n.isFailure()?G(e.f(n.toValue().error)._effect,t):n}case`Fold`:{let n=await G(e.effect._effect,t);return n.isSuccess()?V.succeed(e.onSuccess(n.orThrow())):n.isFailure()?V.succeed(e.onFailure(n.toValue().error)):n}case`Service`:{let n=t.get(e.tag);return n.isNone()?V.fail(Error(`Service not found: ${e.tag.id}`)):V.succeed(n.orThrow())}case`ProvideContext`:{let n=t.merge(e.context);return G(e.effect._effect,n)}case`Interrupt`:return V.interrupted();case`Bracket`:{let n=await G(e.acquire._effect,t);if(!n.isSuccess())return n;let r=n.orThrow();try{return await G(e.use(r)._effect,t)}finally{await G(e.release(r)._effect,t)}}case`Race`:return e.effects.length===0?V.fail(Error(`No effects to race`)):await Promise.race(e.effects.map(e=>G(e._effect,t)));case`Timeout`:{let n=new Promise(t=>setTimeout(()=>t(V.fail(new jt(e.duration))),e.duration)),r=G(e.effect._effect,t);return Promise.race([r,n])}}}catch(e){return V.fail(e)}},K={sync:e=>U({_tag:`Sync`,thunk:e}),succeed:e=>U({_tag:`Succeed`,value:e}),fail:e=>U({_tag:`Fail`,error:e}),die:e=>U({_tag:`Die`,defect:e}),async:e=>U(H({_tag:`Async`,thunk:e})),tryPromise:e=>U({_tag:`Async`,thunk:e.try}).mapError(e.catch),tryCatch:(e,t)=>K.sync(()=>{try{return e()}catch(e){throw t(e)}}),liftSync:e=>(...t)=>K.sync(()=>e(...t)),liftPromise:e=>(...t)=>K.async(()=>e(...t)),fromEither:e=>H(e.isRight()?K.succeed(e.value):K.fail(e.value)),fromOption:e=>H(e.isSome()?K.succeed(e.value):K.fail(void 0)),fromOptionOrFail:(e,t)=>H(e.isSome()?K.succeed(e.value):K.fail(t())),fromTry:e=>H(e.isSuccess()?K.succeed(e.orThrow()):K.fail(e.error)),fromResult:e=>H(e.error?K.fail(e.error):K.succeed(m(e.data))),tryAsync:(e,t,n)=>n?.aborted?H(K.fail(t(n.reason??new DOMException(`Aborted`,`AbortError`)))):K.async(()=>e(n)).mapError(t),asyncResult:(e,t,n)=>{let r=n?.dataKey??`data`,i=n?.errorKey??`error`;return K.tryAsync(t=>e(t),t,n?.signal).flatMap(e=>K.fromResult({data:e[r],error:e[i]}))},service:e=>U({_tag:`Service`,tag:e}),serviceWith:(e,t)=>K.service(e).map(t),serviceWithIO:(e,t)=>K.service(e).flatMap(t),withServices:(e,t)=>{let n=Object.entries(e);if(n.length===0)return H(U({_tag:`Auto`,thunk:()=>t({})}));let r=H(K.succeed({}));return H(n.reduce((e,[t,n])=>H(e.flatMap(e=>K.service(n).map(n=>({...e,[t]:n})))),r).flatMap(e=>U({_tag:`Auto`,thunk:()=>t(e)})))},all:e=>{if(e.length===0)return H(K.succeed([]));let t=H(K.succeed([]));return H(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),t))},firstSuccessOf:e=>e.length===0?H(K.fail(Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),sleep:e=>H(K.async(()=>new Promise(t=>setTimeout(t,e)))),never:()=>H(K.async(()=>new Promise(()=>{}))),get unit(){return H(U({_tag:`Succeed`,value:void 0}))},fromNullable:e=>H(e==null?K.fail(void 0):K.succeed(e)),interrupt:()=>U({_tag:`Interrupt`}),bracket:(e,t,n)=>U({_tag:`Bracket`,acquire:e,use:t,release:n}),acquireRelease:(e,t,n)=>K.bracket(e,t,n),race:e=>U({_tag:`Race`,effects:e}),any:e=>e.length===0?H(K.fail(Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),forEach:(e,t)=>{if(e.length===0)return H(K.succeed([]));let n=H(K.succeed([]));return H(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),n))},forEachPar:(e,t)=>K.forEach(e,t),timeout:(e,t)=>U(H({_tag:`Timeout`,effect:e,duration:t})),gen:e=>H(K.sync(()=>{let t=e(),n=e=>{let r=t.next(e);return r.done?H(K.succeed(r.value)):H(r.value.flatMap(e=>n(e)))};return n(void 0)}).flatMap(e=>e)),get Do(){return Nt(K.succeed({}))}},Nt=e=>({effect:e,bind(t,n){return Nt(e.flatMap(e=>n(e).map(n=>({...e,[t]:n}))))},let(t,n){return Nt(e.map(e=>({...e,[t]:n(e)})))},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return Nt(e.tap(t))},tapEffect(t){return Nt(e.tapEffect(t))},done(){return e}}),q=r(e=>U(H({_tag:`Auto`,thunk:e})),K),J=(e,t)=>({_tag:`Layer`,build:e,provideToAndMerge(t){return J(async n=>{let r=await e(n),i=n.merge(r),a=await t.build(i);return r.merge(a)})},merge(t){return J(async n=>{let[r,i]=await Promise.all([e(n),t.build(n)]);return r.merge(i)})},map(t){return J(async n=>t(await e(n)))},toString(){return`Layer(${t??`anonymous`})`}}),Pt={succeed:(e,t)=>J(()=>Promise.resolve(z.make(e,t)),e.id),effect:(e,t)=>J(async()=>{let n=await t();return z.make(e,n)},e.id),sync:(e,t)=>J(()=>Promise.resolve(z.make(e,t())),e.id),fromService:(e,t,n)=>J(r=>{let i=r.unsafeGet(t);return Promise.resolve(z.make(e,n(i)))},e.id),fromServiceEffect:(e,t,n)=>J(async r=>{let i=await n(r.unsafeGet(t));return z.make(e,i)},e.id),fromContext:e=>J(()=>Promise.resolve(e)),empty:()=>J(()=>Promise.resolve(z.empty()),`empty`),mergeAll:(...e)=>J(async t=>(await Promise.all(e.map(e=>e.build(t)))).reduce((e,t)=>e.merge(t),z.empty()))},Ft=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),It=()=>{let e=0,t=[],n=async()=>{for(t.sort((e,t)=>e.time-t.time);t.length>0&&t[0]!==void 0&&t[0].time<=e;){let e=t.shift();e&&(e.resolve(),await Promise.resolve())}};return{get currentTime(){return e},async advance(t){e+=t,await n()},async setTime(t){e=t,await n()},async runAll(){if(t.length>0){let n=t[t.length-1];n&&(e=n.time)}await n()},get pendingCount(){return t.length},sleep(n){return new Promise(r=>{t.push({time:e+n,resolve:r})})}}},Y=Ft(`TestClock`),Lt={make:It,tag:Y,test:async e=>e(It()),get:q.service(Y),advance:e=>q.serviceWithIO(Y,t=>q.async(()=>t.advance(e))),setTime:e=>q.serviceWithIO(Y,t=>q.async(()=>t.setTime(e))),runAll:q.serviceWithIO(Y,e=>q.async(()=>e.runAll())),context:()=>{let e=It();return{clock:e,context:z.make(Y,e)}}},Rt={make:()=>{let e=It(),t=z.empty(),n={get context(){return t},get clock(){return e},withService(e,r){return t=t.add(e,r),n},async run(e){return e.provideContext(t).runOrThrow()}};return n},withClock:()=>{let e=It();return Rt.make().withService(Y,e)}},X=e=>{let t=!1,r,i,a=!1,o=()=>{if(!t)try{r=e(),t=!0}catch(e){throw i=e,a=!0,t=!0,e}if(a)throw i;return r};return{[Symbol.toStringTag]:`Lazy`,_tag:`Lazy`,get isEvaluated(){return t},orElse:e=>{try{return o()}catch{return e}},orNull:()=>{try{return o()}catch{return null}},orThrow:e=>{try{return o()}catch(t){throw e??t}},or:e=>Z(()=>{try{return o()}catch{return e.orThrow()}}),orUndefined:()=>{try{return o()}catch{return}},map:e=>Z(()=>e(o())),ap:e=>Z(()=>e.orThrow()(o())),mapAsync:async e=>{let t=await e(o());return Z(()=>t)},flatMap:e=>Z(()=>e(o()).orThrow()),flatMapAsync:async e=>{let t=await e(o());return Z(()=>t.orThrow())},filter:e=>Z(()=>{let t=o();return e(t)?d(t):p}),recover:e=>Z(()=>{try{return o()}catch(t){return e(t)}}),recoverWith:e=>Z(()=>{try{return o()}catch(t){return e(t).orThrow()}}),toOption:()=>{try{return d(o())}catch{return p}},toEither:()=>{try{return T(o())}catch(e){return E(e)}},toEitherWith:e=>{try{return T(o())}catch(t){return E(e(t))}},toTry:()=>S(()=>o()),tap:e=>Z(()=>{let t=o();return e(t),t}),tapError:e=>Z(()=>{try{return o()}catch(t){throw e(t),t}}),fold:e=>e(o()),foldWith:(e,t)=>{try{return t(o())}catch(t){return e(t)}},foldLeft:e=>t=>t(e,o()),foldRight:e=>t=>t(o(),e),match:e=>e.Lazy(o()),toString:()=>t&&!a?`Lazy(${n(r)})`:t&&a?`Lazy(<error: ${i instanceof Error?i.message:String(i)}>)`:`Lazy(<not evaluated>)`,toValue:()=>t&&!a?{_tag:`Lazy`,evaluated:!0,value:r}:{_tag:`Lazy`,evaluated:!1},get size(){try{return o(),1}catch{return 0}},get isEmpty(){try{return o(),!1}catch{return!0}},contains:e=>{try{return o()===e}catch{return!1}},reduce:e=>o(),reduceRight:e=>o(),count:e=>{try{return e(o())?1:0}catch{return 0}},find:e=>{try{let t=o();return e(t)?d(t):p}catch{return p}},exists:e=>{try{return e(o())}catch{return!1}},forEach:e=>{try{e(o())}catch{}},pipe:e=>e(o()),serialize:()=>({toJSON:()=>JSON.stringify(t&&!a?{_tag:`Lazy`,evaluated:!0,value:r}:{_tag:`Lazy`,evaluated:!1}),toYAML:()=>t&&!a?`_tag: Lazy\nevaluated: true\nvalue: ${n(r)}`:`_tag: Lazy
|
|
17
|
+
evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(t&&!a?{_tag:`Lazy`,evaluated:!0,value:r}:{_tag:`Lazy`,evaluated:!1})).toString(`base64`)}),typeable:`Lazy`}},Z=r(X,{of:e=>X(e),fromValue:e=>X(()=>e),fromOption:(e,t)=>X(()=>e._tag===`Some`?e.value:t()),fromTry:e=>X(()=>e.orThrow()),fromEither:e=>X(()=>e.fold(e=>{throw e},e=>e)),fromPromise:e=>X(()=>{throw Error(`Promise not yet resolved. Use await on the promise before creating Lazy.`)}),fail:e=>X(()=>{throw e})}),zt=Map,Q=e=>{let t={values:new zt(e)},n=()=>Array.from(t.values.entries()).map(([e,t])=>i([e,t])),r=e=>Q(new zt(t.values).set(e.toArray()[0],e.toArray()[1]).entries()),a=e=>{let n=new zt(t.values);return n.delete(e)?Q(n.entries()):Q(t.values.entries())},s=e=>{let n=e.toArray();return t.values.get(n[0])===n[1]},c=()=>t.values.size,l=e=>Q(Array.from(t.values.entries()).map(([t,n])=>[t,e(n)])),u=e=>Q(Q(t.values.entries()).toList().flatMap(e).toArray()),ee=e=>{let n=[];for(let[r,i]of t.values.entries()){let t=e.get(r);t._tag===`Some`&&t.value&&n.push([r,t.value(i)])}return Q(n)},d=async e=>{let n=new zt;for(let[r,i]of t.values.entries()){let t=await e(i);for(let e of t.toList()){let[t,r]=e.toArray();n.set(t,r)}}return Q(n.entries())},f=e=>w(n()).reduce(e),p=e=>w(n()).reduceRight(e),te=e=>t=>w(n()).foldLeft(e)(t),ne=e=>t=>w(n()).foldRight(e)(t),h=e=>m(t.values.get(e)),g=(e,n)=>m(t.values.get(e)).orElse(n),re=()=>t.values.size===0,ie=(e,n)=>m(t.values.get(e)).or(n),ae=(e,t)=>{if(re())return e();let r=n();if(r.length===0)return e();let i=r[0];return i===void 0?e():t(i)},se=()=>w(n()),_=()=>oe(n()),v=()=>`Map(${n().toString()})`,ce=e=>re()?e.Empty():e.NonEmpty(n());return{[Symbol.toStringTag]:`FunctypeMap`,_tag:`Map`,[Symbol.iterator]:()=>t.values.entries(),add:r,remove:a,contains:s,get size(){return c()},map:l,ap:ee,flatMap:u,flatMapAsync:d,reduce:f,reduceRight:p,foldLeft:te,foldRight:ne,fold:ae,match:ce,get:h,getOrElse:g,get isEmpty(){return re()},orElse:ie,toList:se,toSet:_,toString:v,toValue:()=>({_tag:`Map`,value:Array.from(t.values.entries())}),pipe:e=>e(Array.from(t.values.entries())),serialize:()=>o(`Map`,Array.from(t.values.entries()))}},Bt=e=>Q(e),Vt=Q([]),Ht={empty:()=>Vt,of:(...e)=>Q(e),fromJSON:e=>Ut(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
|
|
18
|
+
`)[1]?.split(`: `)[1];return Ut(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return Ht.fromJSON(t)}},Ut=r(Bt,Ht),Wt={default:e=>t=>e(t),when:(e,t)=>n=>e(n)?t(n):void 0},$=(e=[])=>{let t=[...e],r=()=>t.length,i=()=>t.length===0,a=e=>t.includes(e),o=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduce(e)},s=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduceRight(e)},c=e=>$([...t,e]),l=()=>{if(i())return[$([]),m(null)];let e=[...t],n=e.pop();return[$(e),m(n)]},u=()=>i()?m(null):m(t[t.length-1]),ee=e=>$(t.map(e)),d=e=>i()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),f=e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},p=async e=>i()?$([]):(await Promise.all(t.map(async t=>await e(t)))).reduce((e,t)=>t.toArray().reduce((e,t)=>e.push(t),e),$([])),te=()=>w(t),ne=()=>[...t],h=()=>`Stack(${t.join(`, `)})`,g=(e,n)=>{if(i())return e();let r=t[t.length-1];return r===void 0?e():n(r)},re=e=>n=>t.reduce(n,e),ie=e=>n=>t.reduceRight((e,t)=>n(t,e),e),ae=e=>i()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return r()},get isEmpty(){return i()},contains:a,reduce:o,reduceRight:s,push:c,pop:l,peek:u,map:ee,flatMap:d,ap:f,flatMapAsync:p,toList:te,toArray:ne,toString:h,fold:g,foldLeft:re,foldRight:ie,match:ae,toValue:()=>({_tag:`Stack`,value:t}),pipe:e=>e([...t]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:`Stack`,value:t}),toYAML:()=>`_tag: Stack\nvalue: ${n(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Stack`,value:t})).toString(`base64`)})}},Gt=(e=[])=>$(e),Kt={empty:()=>$([]),of:e=>$([e]),fromJSON:e=>qt(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
|
|
19
|
+
`)[1]?.split(`: `)[1];return qt(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return Kt.fromJSON(t)}},qt=r(Gt,Kt);function Jt(e){let t=fe({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{ke as $,ut as A,c as At,Ye as B,gt as C,m as Ct,st as D,ee as Dt,pt as E,s as Et,ot as F,Ue as G,Je as H,A as I,Re as J,Be as K,j as L,lt as M,a as Mt,ct as N,nt as O,o as Ot,at as P,Me as Q,M as R,P as S,p as St,mt as T,d as Tt,Ke as U,qe as V,Ge as W,Ie as X,Ne as Y,Ae as Z,Dt as _,pe as _t,zt as a,D as at,xt as b,_ as bt,Y as c,T as ct,Pt as d,be as dt,ze as et,q as f,ye as ft,z as g,fe as gt,V as h,w as ht,Ut as i,Pe as it,dt as j,l as jt,it as k,u as kt,Rt as l,Ce as lt,jt as m,we as mt,qt as n,Oe as nt,Z as o,De as ot,Mt as p,xe as pt,Le as q,Wt as r,Fe as rt,Lt as s,E as st,Jt as t,je as tt,Ft as u,Se as ut,R as v,S as vt,ht as w,te as wt,yt as x,oe as xt,St as y,le as yt,Ze as z};
|
package/dist/try/index.d.ts
CHANGED
|
@@ -1,97 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { l as Type, s as Pipe } from "../Typeable-lfO2nRVW.js";
|
|
3
|
-
import { Option } from "../option/index.js";
|
|
4
|
-
import { List } from "../list/index.js";
|
|
5
|
-
import { Either } from "../either/index.js";
|
|
6
|
-
|
|
7
|
-
//#region src/try/Try.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Possible types of Try instances
|
|
10
|
-
*/
|
|
11
|
-
type TypeNames = "Success" | "Failure";
|
|
12
|
-
interface Try<T> extends FunctypeBase<T, TypeNames>, Extractable<T>, Pipe<T>, Promisable<T>, Doable<T>, Reshapeable<T> {
|
|
13
|
-
readonly _tag: TypeNames;
|
|
14
|
-
readonly error: Error | undefined;
|
|
15
|
-
isSuccess(): this is Try<T> & {
|
|
16
|
-
readonly _tag: "Success";
|
|
17
|
-
error: undefined;
|
|
18
|
-
};
|
|
19
|
-
isFailure(): this is Try<T> & {
|
|
20
|
-
readonly _tag: "Failure";
|
|
21
|
-
error: Error;
|
|
22
|
-
};
|
|
23
|
-
orElse: (defaultValue: T) => T;
|
|
24
|
-
orThrow: (error?: Error) => T;
|
|
25
|
-
or: (alternative: Try<T>) => Try<T>;
|
|
26
|
-
orNull: () => T | null;
|
|
27
|
-
orUndefined: () => T | undefined;
|
|
28
|
-
toOption: () => Option<T>;
|
|
29
|
-
toEither: <E extends Type>(leftValue: E) => Either<E, T>;
|
|
30
|
-
toList: () => List<T>;
|
|
31
|
-
toTry: () => Try<T>;
|
|
32
|
-
map: <U>(f: (value: T) => U) => Try<U>;
|
|
33
|
-
ap: <U>(ff: Try<(value: T) => U>) => Try<U>;
|
|
34
|
-
flatMap: <U>(f: (value: T) => Try<U>) => Try<U>;
|
|
35
|
-
flatMapAsync: <U>(f: (value: T) => Promise<Try<U>>) => Promise<Try<U>>;
|
|
36
|
-
/**
|
|
37
|
-
* Pattern matches over the Try, applying onFailure if Failure and onSuccess if Success
|
|
38
|
-
* @param onFailure - Function to apply if the Try is Failure
|
|
39
|
-
* @param onSuccess - Function to apply if the Try is Success
|
|
40
|
-
* @returns The result of applying the appropriate function
|
|
41
|
-
*/
|
|
42
|
-
fold: <U extends Type>(onFailure: (error: Error) => U, onSuccess: (value: T) => U) => U;
|
|
43
|
-
toString: () => string;
|
|
44
|
-
/**
|
|
45
|
-
* Pattern matches over the Try, applying a handler function based on the variant
|
|
46
|
-
* @param patterns - Object with handler functions for Success and Failure variants
|
|
47
|
-
* @returns The result of applying the matching handler function
|
|
48
|
-
*/
|
|
49
|
-
match<R>(patterns: {
|
|
50
|
-
Success: (value: T) => R;
|
|
51
|
-
Failure: (error: Error) => R;
|
|
52
|
-
}): R;
|
|
53
|
-
toValue(): {
|
|
54
|
-
_tag: TypeNames;
|
|
55
|
-
value: T | Error;
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
declare const Try: (<T>(f: () => T) => Try<T>) & {
|
|
59
|
-
/**
|
|
60
|
-
* Type guard to check if a Try is Success
|
|
61
|
-
* @param tryValue - The Try to check
|
|
62
|
-
* @returns True if Try is Success
|
|
63
|
-
*/
|
|
64
|
-
isSuccess: <T>(tryValue: Try<T>) => tryValue is Try<T> & {
|
|
65
|
-
readonly _tag: "Success";
|
|
66
|
-
error: undefined;
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Type guard to check if a Try is Failure
|
|
70
|
-
* @param tryValue - The Try to check
|
|
71
|
-
* @returns True if Try is Failure
|
|
72
|
-
*/
|
|
73
|
-
isFailure: <T>(tryValue: Try<T>) => tryValue is Try<T> & {
|
|
74
|
-
readonly _tag: "Failure";
|
|
75
|
-
error: Error;
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Creates a Try from JSON string
|
|
79
|
-
* @param json - The JSON string
|
|
80
|
-
* @returns Try instance
|
|
81
|
-
*/
|
|
82
|
-
fromJSON: <T>(json: string) => Try<T>;
|
|
83
|
-
/**
|
|
84
|
-
* Creates a Try from YAML string
|
|
85
|
-
* @param yaml - The YAML string
|
|
86
|
-
* @returns Try instance
|
|
87
|
-
*/
|
|
88
|
-
fromYAML: <T>(yaml: string) => Try<T>;
|
|
89
|
-
/**
|
|
90
|
-
* Creates a Try from binary string
|
|
91
|
-
* @param binary - The binary string
|
|
92
|
-
* @returns Try instance
|
|
93
|
-
*/
|
|
94
|
-
fromBinary: <T>(binary: string) => Try<T>;
|
|
95
|
-
};
|
|
96
|
-
//#endregion
|
|
1
|
+
import { Mn as Try, Nn as TypeNames } from "../index-OdnROQtM.js";
|
|
97
2
|
export { Try, TypeNames };
|
package/dist/try/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`),n=t[0]?.split(`: `)[1];if(!n)return d(Error(`Invalid YAML format for Try`));if(n===`Success`){let e=t[1]?.split(`: `)[1];return e?u(JSON.parse(e)):d(Error(`Invalid YAML format for Try Success`))}else{let e=t[1]?.split(`: `)[1];if(!e)return d(Error(`Invalid YAML format for Try Failure`));let n=t[2]?.split(`: `),r=n&&n.length>1?n.slice(1).join(`: `):void 0,i=Error(e);return r&&(i.stack=r),d(i)}},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return p.fromJSON(t)}},m=n(f,p);export{m as Try};
|
|
1
|
+
import{vt as e}from"../src-ByDeJzWj.js";export{e as Try};
|
package/dist/tuple/index.d.ts
CHANGED
|
@@ -1,77 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
//#region src/tuple/Tuple.d.ts
|
|
4
|
-
interface Tuple<T extends Type[]> extends Foldable<T[number]>, Pipe<Tuple<T>>, Serializable<Tuple<T>>, Typeable<"Tuple"> {
|
|
5
|
-
readonly [Symbol.toStringTag]: string;
|
|
6
|
-
get<K extends number>(index: K): T[K];
|
|
7
|
-
map<U extends Type[]>(f: (value: T) => U): Tuple<U>;
|
|
8
|
-
flatMap<U extends Type[]>(f: (value: T) => Tuple<U>): Tuple<U>;
|
|
9
|
-
toArray(): T;
|
|
10
|
-
length: number;
|
|
11
|
-
[Symbol.iterator](): Iterator<T[number]>;
|
|
12
|
-
toString(): string;
|
|
13
|
-
toValue(): {
|
|
14
|
-
_tag: "Tuple";
|
|
15
|
-
value: T;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Tuple provides a type-safe, fixed-length array with functional operations.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* // Creating tuples
|
|
23
|
-
* const t1 = Tuple([1, "hello", true])
|
|
24
|
-
* const t2 = Tuple.of(1, "hello", true)
|
|
25
|
-
* const pair = Tuple.pair("key", 42)
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* // Type-safe access
|
|
29
|
-
* const triple = Tuple.triple("x", 10, true)
|
|
30
|
-
* const first = triple.get(0) // string
|
|
31
|
-
* const second = triple.get(1) // number
|
|
32
|
-
* const third = triple.get(2) // boolean
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* // Functional operations
|
|
36
|
-
* const doubled = Tuple([1, 2, 3])
|
|
37
|
-
* .map(arr => arr.map(x => x * 2))
|
|
38
|
-
* .toArray() // [2, 4, 6]
|
|
39
|
-
*/
|
|
40
|
-
declare const Tuple: (<T extends Type[]>(values: T) => Tuple<T>) & {
|
|
41
|
-
/**
|
|
42
|
-
* Create a Tuple from multiple arguments
|
|
43
|
-
* @example
|
|
44
|
-
* const t = Tuple.of(1, "hello", true)
|
|
45
|
-
* // TypeScript infers: Tuple<[number, string, boolean]>
|
|
46
|
-
*/
|
|
47
|
-
of: <T extends Type[]>(...values: T) => Tuple<T>;
|
|
48
|
-
/**
|
|
49
|
-
* Create a Tuple of size 2 (pair)
|
|
50
|
-
* @example
|
|
51
|
-
* const pair = Tuple.pair("key", 42)
|
|
52
|
-
* // TypeScript infers: Tuple<[string, number]>
|
|
53
|
-
*/
|
|
54
|
-
pair: <A extends Type, B extends Type>(first: A, second: B) => Tuple<[A, B]>;
|
|
55
|
-
/**
|
|
56
|
-
* Create a Tuple of size 3 (triple)
|
|
57
|
-
* @example
|
|
58
|
-
* const triple = Tuple.triple("x", 10, true)
|
|
59
|
-
* // TypeScript infers: Tuple<[string, number, boolean]>
|
|
60
|
-
*/
|
|
61
|
-
triple: <A extends Type, B extends Type, C extends Type>(first: A, second: B, third: C) => Tuple<[A, B, C]>;
|
|
62
|
-
/**
|
|
63
|
-
* Create an empty Tuple
|
|
64
|
-
* @example
|
|
65
|
-
* const empty = Tuple.empty()
|
|
66
|
-
* // TypeScript infers: Tuple<[]>
|
|
67
|
-
*/
|
|
68
|
-
empty: () => Tuple<[]>;
|
|
69
|
-
/**
|
|
70
|
-
* Create a Tuple from an array (alias for constructor)
|
|
71
|
-
* @example
|
|
72
|
-
* const t = Tuple.from([1, 2, 3])
|
|
73
|
-
*/
|
|
74
|
-
from: <T extends Type[]>(values: T) => Tuple<T>;
|
|
75
|
-
};
|
|
76
|
-
//#endregion
|
|
1
|
+
import { t as Tuple } from "../Tuple-DmywDCE9.js";
|
|
77
2
|
export { Tuple };
|
package/dist/tuple/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../
|
|
1
|
+
import{t as e}from"../Tuple-eVwTSeSr.js";export{e as Tuple};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functype",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A functional programming library for TypeScript, using immutable data structures and type classes",
|
|
6
6
|
"author": "jordan.burke@gmail.com",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"homepage": "https://functype.org/",
|
|
13
13
|
"url": "https://github.com/jordanburke/functype",
|
|
14
14
|
"scripts": {
|
|
15
|
+
"prevalidate": "bash scripts/version-check.sh",
|
|
15
16
|
"validate": "ts-builds validate",
|
|
16
17
|
"validate:core": "ts-builds validate:core",
|
|
17
18
|
"validate:site": "ts-builds validate:site",
|
|
@@ -41,17 +42,18 @@
|
|
|
41
42
|
"site:dev": "cd site && pnpm dev",
|
|
42
43
|
"site:build": "cd site && pnpm build",
|
|
43
44
|
"site:preview": "cd site && pnpm preview",
|
|
44
|
-
"cli-example": "npx . Option"
|
|
45
|
+
"cli-example": "npx . Option",
|
|
46
|
+
"version:bump": "bash scripts/version-bump.sh"
|
|
45
47
|
},
|
|
46
48
|
"devDependencies": {
|
|
47
|
-
"@eslint/compat": "^2.0.
|
|
48
|
-
"@types/node": "~24.10.
|
|
49
|
+
"@eslint/compat": "^2.0.3",
|
|
50
|
+
"@types/node": "~24.10.15",
|
|
49
51
|
"eslint-config-functype": "2.0.0",
|
|
50
52
|
"eslint-plugin-functional": "^9.0.4",
|
|
51
|
-
"fast-check": "^4.
|
|
52
|
-
"globals": "^17.
|
|
53
|
-
"ts-builds": "^2.
|
|
54
|
-
"tsdown": "^0.
|
|
53
|
+
"fast-check": "^4.6.0",
|
|
54
|
+
"globals": "^17.4.0",
|
|
55
|
+
"ts-builds": "^2.5.2",
|
|
56
|
+
"tsdown": "^0.21.4",
|
|
55
57
|
"tsx": "^4.21.0",
|
|
56
58
|
"typedoc": "^0.28.17"
|
|
57
59
|
},
|
|
@@ -165,9 +167,6 @@
|
|
|
165
167
|
"files": [
|
|
166
168
|
"dist"
|
|
167
169
|
],
|
|
168
|
-
"dependencies": {
|
|
169
|
-
"safe-stable-stringify": "^2.5.0"
|
|
170
|
-
},
|
|
171
170
|
"sideEffects": false,
|
|
172
|
-
"packageManager": "pnpm@10.
|
|
171
|
+
"packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be"
|
|
173
172
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(e,t){return Object.assign(e,t)}function t(t,n){return e(t,n)}export{e as n,t};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import{Brand as e}from"./branded/index.js";import{n as t,t as n}from"./Companion-VlxcFhzb.js";import{None as r,Option as i,Some as a}from"./option/index.js";import{Try as o}from"./try/index.js";import{List as s}from"./list/index.js";import{Left as c,Right as l}from"./either/index.js";import u from"safe-stable-stringify";const d=e=>{let t=Error(e);return t.name=`ParseError`,t},ee=(e,t)=>({toJSON:()=>JSON.stringify({_tag:e,value:t}),toYAML:()=>`_tag: ${e}\nvalue: ${u(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:e,value:t})).toString(`base64`)}),te=e=>({toJSON:()=>JSON.stringify(e),toYAML:()=>Object.entries(e).map(([e,t])=>`${e}: ${u(t)}`).join(`
|
|
2
|
-
`),toBinary:()=>Buffer.from(JSON.stringify(e)).toString(`base64`)}),f=(e,t)=>t(JSON.parse(e)),ne=(e,t)=>{let n=e.split(`
|
|
3
|
-
`),r={};for(let e of n){let t=e.indexOf(`: `);if(t===-1)continue;let n=e.substring(0,t),i=e.substring(t+2);if(!i){r[n]=null;continue}try{r[n]=i===`null`?null:JSON.parse(i)}catch{r[n]=i}}return t(r)},re=(e,t)=>f(Buffer.from(e,`base64`).toString(),t),ie=e=>({fromJSON:t=>f(t,e),fromYAML:t=>ne(t,e),fromBinary:t=>re(t,e)}),ae=e=>{let t=e;return{get(){return t},set(e){t=e},update(e){t=e(t)},getAndSet(e){let n=t;return t=e,n},updateAndGet(e){return t=e(t),t},getAndUpdate(e){let n=t;return t=e(t),n},compareAndSet(e,n){return t===e?(t=n,!0):!1},modify(e){let[n,r]=e(t);return t=n,r}}},p=n(ae,{of:e=>ae(e)}),m=(e=0)=>{let t=p(e),n=e;return{get:()=>t.get(),set:e=>t.set(e),increment:()=>t.updateAndGet(e=>e+1),decrement:()=>t.updateAndGet(e=>e-1),reset:()=>t.set(n),compareAndSet:(e,n)=>t.compareAndSet(e,n)}},h=()=>{let e=p([]);return{add:t=>e.update(e=>[...e,t]),addAll:t=>e.update(e=>[...e,...t]),build:()=>e.get(),clear:()=>e.set([]),size:()=>e.get().length}},g=e=>{let t={[Symbol.toStringTag]:`LazyList`,_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>g((function*(){for(let n of e)yield t(n)})()),flatMap:t=>g((function*(){for(let n of e)yield*t(n)})()),filter:t=>g((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>g((function*(){let n=m(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>g((function*(){let n=m(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>g((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>g((function*(){let n=p(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>g((function*(){yield*e,yield*t})()),zip:t=>g((function*(){let n=e[Symbol.iterator](),r=t[Symbol.iterator]();for(;;){let e=n.next(),t=r.next();if(e.done||t.done)break;yield[e.value,t.value]}})()),toList:()=>s(Array.from(e)),toArray:()=>Array.from(e),forEach:t=>{for(let n of e)t(n)},reduce:(t,n)=>{let r=p(n);for(let n of e)r.set(t(r.get(),n));return r.get()},find:t=>{for(let n of e)if(t(n))return i(n);return i.none()},some:t=>{for(let n of e)if(t(n))return!0;return!1},every:t=>{for(let n of e)if(!t(n))return!1;return!0},count:()=>{let t=m(0);for(let n of e)t.increment();return t.get()},get head(){let t=e[Symbol.iterator]().next();return t.done?void 0:t.value},get headOption(){let t=e[Symbol.iterator]().next();return t.done?i.none():i(t.value)},get last(){let t;for(let n of e)t=n;return t},get lastOption(){let t=p(void 0),n=p(!1);for(let r of e)t.set(r),n.set(!0);return n.get()?i(t.get()):i.none()},get tail(){return g((function*(){let t=e[Symbol.iterator]();t.next();let n=t.next();for(;!n.done;)yield n.value,n=t.next()})())},get init(){let t=Array.from(e);return g(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return g(t<=0?[]:n.slice(-t))},reverse:()=>g(Array.from(e).reverse()),distinct:()=>g((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>g((function*(){let t=m(0);for(let n of e)yield[n,t.get()],t.increment()})()),fold:(t,n)=>{let r=e[Symbol.iterator]().next();return r.done?t():n(r.value)},foldLeft:t=>n=>{let r=p(t);for(let t of e)r.set(n(r.get(),t));return r.get()},foldRight:t=>n=>Array.from(e).reduceRight((e,t)=>n(t,e),t),pipe:e=>e(t),serialize:()=>{let t=Array.from(e);return{toJSON:()=>JSON.stringify({_tag:`LazyList`,value:t}),toYAML:()=>`_tag: LazyList\nvalue: ${u(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`LazyList`,value:t})).toString(`base64`)}},toString:()=>{let t=[],n=m(0),r=p(!1);for(let i of e)if(n.get()<10)t.push(i),n.increment();else{r.set(!0);break}let i=t.map(e=>String(e)).join(`, `);return r.get()?`LazyList(${i}, ...)`:`LazyList(${i})`}};return t},oe=n(e=>g(e),{empty:()=>g([]),of:e=>g([e]),from:(...e)=>g(e),iterate:(e,t)=>g((function*(){let n=p(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>g((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>g((function*(){if(n===0)throw Error(`Step cannot be zero`);let r=p(e);if(n>0)for(;r.get()<t;)yield r.get(),r.set(r.get()+n);else for(;r.get()>t;)yield r.get(),r.set(r.get()+n)})()),repeat:(e,t)=>g((function*(){if(t===void 0)for(;;)yield e;else{let n=m(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>g((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())});function se({_tag:e,impl:t}){return{...t,_tag:e}}function ce(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:t?e._tag===t:!0}function _(t,n){return{brand:t,validate:n,of:r=>n(r)?i(e(t,r)):i.none(),from:r=>n(r)?l(e(t,r)):c(`Invalid ${t}: validation failed`),unsafeOf:r=>{if(!n(r))throw Error(`Invalid ${t}: validation failed`);return e(t,r)},is:e=>{try{return n(e)}catch{return!1}},unwrap:e=>e,refine:(e,t)=>_(e,e=>n(e)&&t(e))}}const le=_(`PositiveNumber`,e=>e>0),ue=_(`NonNegativeNumber`,e=>e>=0),de=_(`IntegerNumber`,e=>Number.isInteger(e)),fe=le.refine(`PositiveInteger`,e=>Number.isInteger(e)),pe=_(`NonEmptyString`,e=>e.length>0),me=_(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),he=_(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),ge=_(`UUID`,e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)),_e=_(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function ve(e,t,n){return _(e,e=>e>=t&&e<=n)}function ye(e,t,n){return _(e,e=>e.length>=t&&e.length<=n)}function be(e,t){return _(e,e=>t.test(e))}const xe=e=>typeof e==`function`&&Object.keys(e).length>0,Se=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Se({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Se({resolved:!0,value:t(i)}):n,else:n=>e.resolved?e.value:t(n),orThrow:()=>{if(!e.resolved)throw Error(`Conditional expression has no matching condition`);return e.value}};return n},Ce=()=>Se({resolved:!1}),we=n(Ce,{of:()=>Ce(),match:e=>t=>{let n=t[e];if(n===void 0)throw Error(`No case defined for value: ${String(e)}`);return typeof n==`function`?n():n},lazy:()=>{let e={resolved:!1},t={when:(n,r)=>(e.resolved||n()&&(e.resolved=!0,e.value=r()),t),elseWhen:(n,r)=>(e.resolved||n()&&(e.resolved=!0,e.value=r()),t),else:t=>e.resolved?e.value:t()};return t}}),v=(e,t)=>t===e?!0:typeof t==`function`?t(e):t&&typeof t==`object`&&`_`in t?t._(e):typeof t==`object`&&t&&typeof e==`object`&&e?Object.entries(t).every(([t,n])=>{let r=e[t];return v(r,n)}):!1,y=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(v(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:v(e.value,n)?y({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):y({...e,patterns:[...e.patterns,{pattern:n,result:i}]}),caseValue:(t,n)=>{if(e.resolved)return r;if(e.value===t){let t=typeof n==`function`?n():n;return y({value:e.value,resolved:!0,result:t,patterns:[]})}return r},caseValues:(t,n)=>{if(e.resolved)return r;if(t.includes(e.value)){let t=typeof n==`function`?n():n;return y({value:e.value,resolved:!0,result:t,patterns:[]})}return r},when:(e,t)=>r.case(e,t),caseAny:(n,i)=>{if(e.resolved)return r;for(let r of n)if(v(e.value,r))return y({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return y({...e,patterns:[...e.patterns,...n.map(e=>({pattern:e,result:i}))]})},default:n=>e.resolved?e.result:t(n,e.value),exhaustive:()=>{if(e.resolved)return e.result;let t=n();if(!t.matched)throw Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(e.value)}`);return t.result},orThrow:t=>{if(e.resolved)return e.result;let r=n();if(!r.matched)throw Error(t??`No matching pattern for value: ${JSON.stringify(e.value)}`);return r.result},toOption:()=>{if(e.resolved)return i(e.result);let t=n();return t.matched?i(t.result):i.none()}};return r},Te=e=>{let t=(e,t)=>typeof e==`function`?e(t):e;return{case:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return v(e,n)?y({...i,resolved:!0,result:t(r,e)}):y(i)},caseValue:(t,n)=>y(e===t?{value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}:{value:e,resolved:!1,patterns:[]}),caseValues:(t,n)=>t.includes(e)?y({value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}):y({value:e,resolved:!1,patterns:[]}),when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?y({...i,resolved:!0,result:t(r,e)}):y(i)},caseAny:(n,r)=>{for(let i of n)if(v(e,i))return y({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return y({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},Ee=n(e=>Te(e),{exhaustive:e=>t=>{let n=e[t];if(n===void 0)throw Error(`No case defined for value: ${String(t)}`);return n},partial:e=>({withDefault:t=>n=>{let r=e[n];return r===void 0?typeof t==`function`?t(n):t:typeof r==`function`?r(n):r}}),withGuards:e=>({withDefault:t=>n=>{for(let[t,r]of e)if(t(n))return typeof r==`function`?r(n):r;return typeof t==`function`?t(n):t}}),struct:()=>{let e=[],t={case:(n,r)=>(e.push({pattern:n,handler:r}),t),build:()=>t=>{for(let{pattern:n,handler:r}of e)if(v(t,n))return r(t);throw Error(`No matching pattern for value: ${JSON.stringify(t)}`)}};return t},builder:()=>{let e=[],t,n={case:(t,r)=>(e.push({pattern:t,result:r}),n),when:(t,r)=>(e.push({pattern:t,result:r}),n),default:n=>(t=n,{build:()=>n=>{for(let{pattern:t,result:r}of e)if(v(n,t))return typeof r==`function`?r(n):r;if(t!==void 0)return typeof t==`function`?t(n):t;throw Error(`No matching pattern for value: ${JSON.stringify(n)}`)}})};return n}});function De(e,t){return{...se({_tag:e,impl:t}),toString(){return`${e}()`},doUnwrap(){if(`isSome`in t&&`isNone`in t){if(typeof t.isSome==`function`&&t.isSome()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isNone==`function`&&t.isNone())return{ok:!1,empty:!0}}if(`isLeft`in t&&`isRight`in t){if(typeof t.isRight==`function`&&t.isRight()&&`value`in t)return{ok:!0,value:t.value};if(typeof t.isLeft==`function`&&t.isLeft()&&`value`in t)return{ok:!1,empty:!1,error:t.value}}if(`isSuccess`in t&&`isFailure`in t){if(typeof t.isSuccess==`function`&&t.isSuccess()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isFailure==`function`&&t.isFailure()&&`getError`in t&&typeof t.getError==`function`)return{ok:!1,empty:!1,error:t.getError()}}if(`isEmpty`in t&&`head`in t){if(typeof t.isEmpty==`function`&&t.isEmpty())return{ok:!1,empty:!0};if(typeof t.head==`function`)return{ok:!0,value:t.head()};if(`head`in t)return{ok:!0,value:t.head}}return{ok:!0,value:t}}}}const b=`Throwable`;var x=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=b,this.name=t?.taskInfo?.name??b,Object.defineProperties(this,{_tag:{value:b,writable:!1,configurable:!1},data:{value:t?.data,writable:!1,configurable:!1},taskInfo:{value:t?.taskInfo,writable:!1,configurable:!1},name:{value:t?.taskInfo?.name??b,writable:!1,configurable:!1}}),t?.cause&&Object.defineProperty(this,`cause`,{value:t.cause,writable:!1,configurable:!1}),t?.stack?this.stack=t.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static apply(t,n,r){if(t instanceof Error){let i=new e(t.message,{data:n,cause:t.cause??void 0,stack:t.stack??void 0,taskInfo:r});for(let e of Object.keys(t))if(!(e in i)){let n=i;n[e]=t[e]}return i}if(t&&typeof t==`object`){let i=t,a=new e(typeof i.message==`string`?i.message:typeof i.error==`string`?i.error:`Object error: ${JSON.stringify(i,Object.getOwnPropertyNames(i).filter(e=>i[e]!==void 0))}`,{data:n??i,taskInfo:r});for(let e of Object.keys(i))if(!(e in a)){let t=a;t[e]=i[e]}return a}if(typeof t==`function`){let i=t.name??`anonymous function`,a=t.toString().substring(0,100)+(t.toString().length>100?`...`:``);return new e(`Function error: ${i}`,{data:n??{functionType:typeof t,functionName:i,functionString:a},taskInfo:r})}let i=typeof t,a=t===null?`null`:t===void 0?`undefined`:String(t);if(i===`number`){let a=t;return new e(Number.isNaN(a)?`Number error: NaN`:Number.isFinite(a)?`Number error: ${a}`:`Number error: ${a>0?`Infinity`:`-Infinity`}`,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}if(i===`bigint`)return new e(`BigInt error: ${t}n`,{data:n??{errorType:i,errorValue:String(t),originalError:t},taskInfo:r});if(i===`boolean`)return new e(`Boolean error: ${t}`,{data:n??{errorType:i,errorValue:t,originalError:t},taskInfo:r});if(i===`symbol`){let a=t.description??`unnamed symbol`;return new e(`Symbol error: Symbol(${a})`,{data:n??{errorType:i,symbolDescription:a,originalError:t},taskInfo:r})}return new e(typeof t==`string`?t:`${i.charAt(0).toUpperCase()+i.slice(1)} error: ${a}`,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}};function Oe(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const ke=(e,t)=>{if(e.isRight())return C(e.orThrow(),t);if(e.isLeft())return S(e.fold(e=>e,()=>Error(`Unexpected right value`)),void 0,t);throw Error(`Unrecognized task outcome`)},S=(e,t,n)=>{let i={name:n?.name??`Task`,description:n?.description??``},a=x.apply(e,t,i),l={...De(`Err`,{error:a,meta:i}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Err`,_meta:i,value:void 0,error:a,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>S(a,t,n),flatMap:e=>S(a,t,n),ap:e=>S(a,t,n),mapAsync:e=>Promise.resolve(S(a,t,n)),flatMapAsync:e=>Promise.resolve(S(a,t,n)),mapError:e=>S(e(a),t,n),recover:e=>C(e,n),recoverWith:e=>C(e(a),n),orThrow:e=>{throw e??a},orElse:e=>e,or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:()=>c(a),toTry:()=>o(()=>{throw a}),toOption:()=>r(),toList:()=>s([]),fold:(e,t)=>e(a),match:e=>e.Err(a),foldLeft:e=>t=>e,foldRight:e=>t=>e,size:0,isEmpty:!0,contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce empty Err`)},reduceRight:e=>{throw Error(`Cannot reduceRight empty Err`)},count:e=>0,find:e=>r(),exists:e=>!1,forEach:e=>{},toPromise:()=>Promise.reject(a),doUnwrap(){return{ok:!1,empty:!1,error:a}},serialize:()=>({toJSON:()=>u({_tag:`Err`,error:a.message??a.toString()})??`{}`,toYAML:()=>`_tag: Err\nerror: ${a.message??a.toString()}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Err`,error:a.message??a.toString()})).toString(`base64`)}),pipe:e=>e(l)};return l},C=(e,t)=>{let n={name:t?.name??`Task`,description:t?.description??``},i={...De(`Ok`,{value:e,meta:n}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Ok`,_meta:n,value:e,error:void 0,isSuccess(){return!0},isFailure(){return!1},isOk(){return!0},isErr(){return!1},map:n=>C(n(e),t),flatMap:n=>{let r=n(e);return r&&typeof r==`object`&&`isLeft`in r&&`isRight`in r?ke(r,t):r},ap:n=>n.isOk()?C(n.value(e),t):S(n.error,void 0,t),mapAsync:async n=>C(await n(e),t),flatMapAsync:async t=>await t(e),mapError:n=>C(e,t),recover:n=>C(e,t),recoverWith:n=>C(e,t),orThrow:t=>e,orElse:t=>e,or:n=>C(e,t),orNull:()=>e,orUndefined:()=>e,toEither:()=>l(e),toTry:()=>o(()=>e),toOption:()=>a(e),toList:()=>s([e]),fold:(t,n)=>n(e),match:t=>t.Ok(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),size:1,isEmpty:!1,contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?a(e):r(),exists:t=>t(e),forEach:t=>t(e),toPromise:()=>Promise.resolve(e),doUnwrap(){return{ok:!0,value:e}},serialize:()=>({toJSON:()=>u({_tag:`Ok`,value:e})??`{}`,toYAML:()=>`_tag: Ok\nvalue: ${u(e)??`undefined`}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Ok`,value:e})).toString(`base64`)}),pipe:e=>e(i)};return i},w=()=>{let e=new AbortController,t=h();return{token:{get isCancelled(){return e.signal.aborted},get signal(){return e.signal},onCancel(n){e.signal.aborted?n():t.add(n)}},cancel(){e.signal.aborted||(e.abort(),t.build().forEach(e=>{try{e()}catch(e){console.error(`Error in cancellation callback:`,e)}}))}}},Ae=e=>{let t=e?.name??`Task`,n=e?.description??``,r={Async:(e,r=e=>e,i=()=>{},a)=>new Promise(o=>{(async()=>{let s=p(!1),c=p(null),l=p(()=>{});if(a){if(a.isCancelled){try{await i()}catch(e){o(S(e,void 0,{name:t,description:n}));return}o(S(Error(`Task was cancelled before execution started`),void 0,{name:t,description:n}));return}a.onCancel(()=>{s.set(!0),c.set(Error(`Task was cancelled during execution`))}),l.set(()=>{})}try{let r=await e();try{await i()}catch(e){o(S(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(S(c.get(),void 0,{name:t,description:n})):o(S(Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}if(r&&typeof r==`object`&&`_tag`in r){let e=r;e._tag===`Ok`||e._tag===`Err`?o(e):o(C(r,{name:t,description:n}))}else o(C(r,{name:t,description:n}))}catch(e){try{await i()}catch(e){o(S(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(S(c.get(),void 0,{name:t,description:n})):o(S(Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}try{if(e instanceof Error&&Oe(e)){let i=Error(`${t}: ${e.message}`),a=x.apply(i,void 0,{name:t,description:n});Object.defineProperty(a,`cause`,{value:e,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{r(e)}catch(e){console.error(`Error in error handler:`,e)}}),o(S(a,void 0,{name:t,description:n}))}else{let i=await r(e);if(i&&typeof i==`object`&&`_tag`in i){let e=i;e._tag===`Ok`||e._tag===`Err`?o(e):o(S(i,void 0,{name:t,description:n}))}else o(S(i,void 0,{name:t,description:n}))}}catch(e){o(S(e,void 0,{name:t,description:n}))}}finally{l.get()()}})().catch(e=>o(S(e,void 0,{name:t,description:n})))}),Sync:(e,r=e=>e,i=()=>{})=>{try{return C(e(),{name:t,description:n})}catch(e){return S(r(e),void 0,{name:t,description:n})}finally{i()}},AsyncWithProgress:(e,t,n=e=>e,i=()=>{},a)=>{let o=e=>{let n=Math.max(0,Math.min(100,e));n<=100&&t(n)};return r.Async(()=>e(o),n,i,a)}};return{...De(`Task`,r),_type:`Task`}},je={success:(e,t)=>C(e,t),fail:(e,t,n)=>S(e,t,n),ok:(e,t)=>C(e,t),err:(e,t,n)=>S(e,t,n),fromEither:(e,t)=>ke(e,t),fromTry:(e,t)=>e.isSuccess()?C(e.orThrow(),t):S(e.fold(e=>e,()=>Error(`Unexpected success`)),void 0,t),getErrorChain:e=>{if(!e)return[];let t=h();t.add(e);let n=p(e);for(;n.get()&&n.get().cause;){let{cause:e}=n.get();if(e)t.add(e),n.set(e);else break;if(t.size()>100)break}return t.build()},formatErrorChain:(e,t)=>{let n=je.getErrorChain(e),r=t?.separator??`
|
|
4
|
-
`;return n.map((e,n)=>{if(!e)return`${n>0?`↳ `:``}Unknown error`;let{taskInfo:r}=e,i=t?.includeTasks&&r?.name?`[${r.name}] `:``,a=e.message??`No message`,o=p(`${n>0?`↳ `:``}${i}${a}`);return t?.includeStackTrace&&e.stack&&o.set(`${o.get()}\n${e.stack.split(`
|
|
5
|
-
`).slice(1).join(`
|
|
6
|
-
`)}`),o.get()}).join(r)},fromPromise:(e,t)=>(...n)=>T(t??{name:`PromiseTask`,description:`Task from Promise`}).Async(()=>e(...n),e=>e),toPromise:e=>new Promise((t,n)=>{e.isSuccess()?t(e.orThrow()):n(e.error)}),race:(e,t,n)=>T({name:n?.name??`TaskRace`,description:n?.description??`Race between multiple tasks`}).Async(async()=>{let n=h();e.forEach(e=>n.add(e));let r=p(void 0);if(typeof t==`number`&&t>0){let e=new Promise((e,n)=>{r.set(setTimeout(()=>{n(Error(`Task race timed out after ${t}ms`))},t))});n.add(e)}try{return await new Promise((e,t)=>{n.build().forEach(n=>{n.then(n=>{if(n&&typeof n==`object`&&`_tag`in n){let r=n;r._tag===`Ok`?e(r.orThrow()):r._tag===`Err`?t(r.error):e(n)}else e(n)},e=>t(e))})})}finally{r.get()&&clearTimeout(r.get())}},e=>e),fromNodeCallback:(e,t)=>{let n={name:t?.name??`NodeCallbackTask`,description:t?.description??`Task from Node.js callback function`};return(...t)=>T(n).Async(()=>new Promise((n,r)=>{try{e(...t,(e,t)=>{e?r(e):n(t)})}catch(e){r(e)}}),e=>e)},createCancellationTokenSource:w,cancellable:(e,t)=>{let n=w();return{task:T(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=w(),i=p(0),a=e=>{i.set(Math.max(0,Math.min(100,e))),t(i.get())};return{task:T(n).Async(()=>e(a,r.token),e=>e,()=>{},r.token),cancel:()=>r.cancel(),currentProgress:()=>i.get()}}},T=n(Ae,je),Me={includeTasks:!0,includeStackTrace:!1,separator:`
|
|
7
|
-
`,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function Ne(e){let t=new WeakSet;return JSON.stringify(e,(e,n)=>{if(typeof n==`bigint`)return`${n.toString()}n`;if(typeof n==`object`&&n){if(t.has(n))return`[Circular Reference]`;t.add(n)}return e===`stack`&&typeof n==`string`?E(n):n},2)}function E(e){if(e===void 0||e===``)return``;let t=e.split(`
|
|
8
|
-
`);return[t[0],...t.slice(1).map(e=>e.trim())].join(`
|
|
9
|
-
`)}function Pe(e,t){let n={...Me,...t},r=e instanceof Error?e:x.apply(e),i=T?.getErrorChain?T.getErrorChain(r):[r],a=`${n.colors?`\x1b[31m${n.title}:\x1b[0m ${r.message}`:`${n.title}: ${r.message}`}\n\n${i.map((e,t)=>{let r=` `.repeat(t),i=t>0?`↳ `:``,{taskInfo:a}=e,o=`${r}${i}${n.includeTasks&&a?.name?n.colors?`\x1b[36m[${a.name}]\x1b[0m `:`[${a.name}] `:``}${e.message}`;if(n.includeStackTrace&&e.stack){let t=E(e.stack).split(`
|
|
10
|
-
`).slice(1),i=n.maxStackFrames??Me.maxStackFrames??3,a=t.slice(0,i).map(e=>`${r} ${n.colors?`\x1B[90m`:``}${e}${n.colors?`\x1B[0m`:``}`).join(`
|
|
11
|
-
`);o+=`\n${a}`,t.length>i&&(o+=`\n${r} ${n.colors?`\x1B[90m`:``}...${t.length-i} more stack frames${n.colors?`\x1B[0m`:``}`)}return o}).join(n.separator)}`;if(n.includeData){let{data:e}=r;if(e){let t=n.colors?`\n\n\x1b[33mContext:\x1b[0m\n${Ne(e)}`:`\n\nContext:\n${Ne(e)}`;a+=t}}return a}function Fe(){return function(e){if(!e)return e;let t=e instanceof Error?e:Error(String(e)),n={message:t.message,name:t.name||`Error`,stack:t.stack?E(t.stack):void 0};if(t.taskInfo&&(n.taskInfo=t.taskInfo),t.data&&(n.data=t.data),typeof T?.getErrorChain==`function`)try{let e=T.getErrorChain(t);e.length>1&&(n.errorChain=T.formatErrorChain(t,{includeTasks:!0}),n.structuredErrorChain=e.map(e=>({message:e.message,name:e.name,taskInfo:e.taskInfo,stack:e.stack?E(e.stack):void 0})))}catch{}return Object.getOwnPropertyNames(t).forEach(e=>{n[e]||(n[e]=t[e])}),n}}const D=(e,n,r,i)=>t(x.apply(n,r,{name:e,description:n}),{code:e,message:n,status:Ie(e),context:r,timestamp:new Date().toISOString(),traceId:i?.traceId}),Ie=e=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[e],O=Object.assign(D,{validation:(e,t,n)=>D(`VALIDATION_FAILED`,`Validation failed: ${e} ${n}`,{field:e,value:t,rule:n}),network:(e,t,n)=>D(`NETWORK_ERROR`,`Network error: ${t} ${e}${n?` (${n})`:``}`,{url:e,method:t,statusCode:n}),auth:(e,t)=>D(`AUTH_REQUIRED`,`Authentication required: ${e}${t?` (role: ${t})`:``}`,{resource:e,requiredRole:t}),notFound:(e,t)=>D(`NOT_FOUND`,`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,n)=>D(`PERMISSION_DENIED`,`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:n}),rateLimit:(e,t,n)=>D(`RATE_LIMITED`,`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:n}),internal:e=>D(`INTERNAL_ERROR`,`Internal server error: ${e}`,{errorId:e,timestamp:new Date().toISOString()}),badRequest:(e,t)=>D(`BAD_REQUEST`,`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>D(`CONFLICT`,`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>D(`TIMEOUT`,`Request timeout: ${t} exceeded ${e}ms`,{duration:e,operation:t}),isTypedError:e=>typeof e==`object`&&!!e&&`code`in e&&`message`in e&&`status`in e&&`context`in e&&`_tag`in e&&e._tag===`Throwable`,hasCode:(e,t)=>e.code===t}),k={rule:e=>t=>{if(e===`email`)return typeof t!=`string`||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?c(O.validation(`value`,t,`must be a valid email`)):l(t);if(e===`url`)try{return new URL(String(t)),l(t)}catch{return c(O.validation(`value`,t,`must be a valid URL`))}if(e===`uuid`)return typeof t!=`string`||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)?c(O.validation(`value`,t,`must be a valid UUID`)):l(t);if(e===`required`)return t==null||t===``?c(O.validation(`value`,t,`is required`)):l(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?c(O.validation(`value`,t,`must be numeric`)):l(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?c(O.validation(`value`,t,`must contain only letters`)):l(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?c(O.validation(`value`,t,`must be alphanumeric`)):l(t);if(e.startsWith(`min:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r<n?c(O.validation(`value`,t,`must be at least ${n}`)):l(t)}if(e.startsWith(`max:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r>n?c(O.validation(`value`,t,`must be at most ${n}`)):l(t)}if(e.startsWith(`minLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length<n?c(O.validation(`value`,t,`must be at least ${n} characters`)):l(t)}if(e.startsWith(`maxLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length>n?c(O.validation(`value`,t,`must be at most ${n} characters`)):l(t)}if(e.startsWith(`pattern:`)){let n=e.substring(8);return new RegExp(n).test(String(t))?l(t):c(O.validation(`value`,t,`must match pattern ${n}`))}if(e.startsWith(`in:`)){let n=e.substring(3).split(`,`);return n.includes(String(t))?l(t):c(O.validation(`value`,t,`must be one of: ${n.join(`, `)}`))}if(e.startsWith(`notIn:`)){let n=e.substring(6).split(`,`);return n.includes(String(t))?c(O.validation(`value`,t,`must not be one of: ${n.join(`, `)}`)):l(t)}if(e===`date`){let e=new Date(String(t));return isNaN(e.getTime())?c(O.validation(`value`,t,`must be a valid date`)):l(t)}if(e===`future`){let e=new Date(String(t));return isNaN(e.getTime())||e<=new Date?c(O.validation(`value`,t,`must be a future date`)):l(t)}if(e===`past`){let e=new Date(String(t));return isNaN(e.getTime())||e>=new Date?c(O.validation(`value`,t,`must be a past date`)):l(t)}return l(t)},combine:(...e)=>t=>{for(let n of e){let e=n(t);if(e.isLeft())return e}return l(t)},custom:(e,t)=>n=>e(n)?l(n):c(O.validation(`value`,n,t)),form:(e,t)=>{let n=[],r={};for(let[i,a]of Object.entries(e)){let e=t[i],o=a(e);if(o.isLeft()){let t=o.fold(e=>e,()=>{throw Error(`Should not be left`)}),r=O.validation(i,e,t.context.rule);n.push(r)}else r[i]=o.orThrow()}return n.length>0?c(s(n)):l(r)}},Le={...k,validators:{email:k.rule(`email`),url:k.rule(`url`),uuid:k.rule(`uuid`),required:k.rule(`required`),numeric:k.rule(`numeric`),positiveNumber:k.combine(k.rule(`numeric`),k.rule(`min:0`)),nonEmptyString:k.combine(k.rule(`required`),k.custom(e=>typeof e==`string`&&e.trim().length>0,`must not be empty`))}},Re=t(k.rule,Le);function ze(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function Be(e){return ze(e)&&`orElse`in e&&typeof e.orElse==`function`&&`or`in e&&typeof e.or==`function`&&`orNull`in e&&typeof e.orNull==`function`&&`orUndefined`in e&&typeof e.orUndefined==`function`}const Ve={toOption:e=>e.fold(()=>r(),e=>a(e)),toList:e=>e.fold(()=>s([]),e=>s([e])),toEither:(e,t)=>e.fold(()=>c(t),e=>l(e)),isEmpty:e=>e.fold(()=>!0,()=>!1),size:e=>e.fold(()=>0,()=>1)},A=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),j=e=>typeof e==`object`&&!!e&&e._tag===`List`,M=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),N=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),P=()=>{let e=(e,t)=>{if(A(e)||j(e)||M(e)||N(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(A(e))return e.orThrow();if(j(e)){let t=e.toArray();if(t.length>0&&j(t[0])){let e=[];for(let n of t)j(n)&&e.push(...n.toArray());return s(e)}return e.flatten()}if(M(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(N(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(A(e)||j(e)||M(e)||N(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(A(e)&&A(t)||j(e)&&j(t)||M(e)&&M(t)||N(e)&&N(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},a=e=>{if(A(e)){let t=e;if(t.isEmpty)return s([i.none()]);let n=t.orThrow();if(j(n))return n.map(e=>i(e));throw Error(`Unsupported inner container type for sequence`)}if(j(e)){let t=e.toArray();if(t.length===0)return i.none();let n=t[0];if(A(n)){for(let e of t)if(e.isEmpty)return i.none();return i(s(t.map(e=>e.orThrow())))}throw Error(`Unsupported inner container type for sequence`)}throw Error(`Unsupported outer container type for sequence: ${JSON.stringify(e)}`)};return{_tag:`HKT`,map:e,flatten:t,flatMap:n,ap:r,sequence:a,traverse:(t,n)=>a(e(t,e=>n(e))),_type:`HKT`}},F=P();P.map=(e,t)=>F.map(e,t),P.flatten=e=>F.flatten(e),P.flatMap=(e,t)=>F.flatMap(e,t),P.ap=(e,t)=>F.ap(e,t),P.sequence=e=>F.sequence(e),P.traverse=(e,t)=>F.traverse(e,t),P.isOption=A,P.isList=j,P.isEither=M,P.isTry=N;const He=e=>({id:e,isSame:t=>t.id===e}),Ue=n(He,{of:e=>He(e),pure:e=>He(e)}),We=e=>({_tag:`Context`,services:e,get(t){let n=e.get(t.id);return n===void 0?r():a(n)},unsafeGet(t){let n=e.get(t.id);if(n===void 0)throw Error(`Service not found: ${t.id}`);return n},has(t){return e.has(t.id)},add(t,n){let r=new Map(e);return r.set(t.id,n),We(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return We(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>We(new Map),make:(e,t)=>{let n=new Map;return n.set(e.id,t),We(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},L=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,isSuccess(){return!0},isFailure(){return!1},isInterrupted(){return!1},map(t){return L(t(e))},mapError(t){return L(e)},mapBoth(t,n){return L(n(e))},flatMap(t){return t(e)},fold(t,n,r){return n(e)},match(t){return t.Success(e)},orThrow(){return e},orElse(t){return e},toOption(){return a(e)},toEither(){return l(e)},toValue(){return{_tag:`Success`,value:e}},toString(){return`Exit.Success(${u(e)})`},toJSON(){return{_tag:`Success`,value:e}}}),R=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,isSuccess(){return!1},isFailure(){return!0},isInterrupted(){return!1},map(t){return R(e)},mapError(t){return R(t(e))},mapBoth(t,n){return R(t(e))},flatMap(t){return R(e)},fold(t,n,r){return t(e)},match(t){return t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return r()},toEither(){return c(e)},toValue(){return{_tag:`Failure`,error:e}},toString(){return`Exit.Failure(${u(e)})`},toJSON(){return{_tag:`Failure`,error:e}}}),z=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,isSuccess(){return!1},isFailure(){return!1},isInterrupted(){return!0},map(t){return z(e)},mapError(t){return z(e)},mapBoth(t,n){return z(e)},flatMap(t){return z(e)},fold(t,n,r){if(r)return r(e);throw Error(`Effect was interrupted: ${e}`)},match(t){return t.Interrupted(e)},orThrow(){throw Error(`Effect was interrupted: ${e}`)},orElse(e){return e},toOption(){return r()},toEither(){throw Error(`Cannot convert Interrupted Exit to Either: ${e}`)},toValue(){return{_tag:`Interrupted`,fiberId:e}},toString(){return`Exit.Interrupted(${e})`},toJSON(){return{_tag:`Interrupted`,fiberId:e}}}),B=n(e=>L(e),{succeed:e=>L(e),fail:e=>R(e),interrupt:e=>z(e),interrupted:()=>z(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?L(e.value):R(e.value),fromOption:(e,t)=>e.isSome()?L(e.value):R(t()),zip:(e,t)=>e.isInterrupted()?e:t.isInterrupted()?t:e.isFailure()?e:t.isFailure()?t:L([e.orThrow(),t.orThrow()]),all:e=>{let t=[];for(let n of e){if(n.isInterrupted()||n.isFailure())return n;t.push(n.orThrow())}return L(t)}}),V=e=>e;var Ge=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},Ke=class extends Error{constructor(e){super(e??`Effect was interrupted`),this._tag=`InterruptedError`,this.name=`InterruptedError`}};const H=e=>{let t={[Symbol.toStringTag]:`IO`,_effect:e,map(e){return H(V({_tag:`Map`,effect:t,f:e}))},flatMap(e){return H(V({_tag:`FlatMap`,effect:t,f:e}))},tap(e){return t.map(t=>(e(t),t))},tapEffect(e){return t.flatMap(t=>e(t).map(()=>t))},mapError(e){return H(V({_tag:`MapError`,effect:t,f:e}))},tapError(e){return t.mapError(t=>(e(t),t))},recover(e){return H(V({_tag:`Recover`,effect:t,fallback:e}))},recoverWith(e){return H(V({_tag:`RecoverWith`,effect:t,f:e}))},fold(e,n){return H(V({_tag:`Fold`,effect:t,onFailure:e,onSuccess:n}))},match(e){return t.fold(e.failure,e.success)},catchTag(e,n){return H(V({_tag:`RecoverWith`,effect:t,f:t=>typeof t==`object`&&t&&`_tag`in t&&t._tag===e?V(n(t)):V(G.fail(t))}))},catchAll(e){return t.recoverWith(e)},retry(e){return e<=0?t:t.recoverWith(()=>t.retry(e-1))},retryWithDelay(e,n){return e<=0?t:t.recoverWith(()=>G.sleep(n).flatMap(()=>t.retryWithDelay(e-1,n)))},zipRight(e){return t.flatMap(()=>e)},zipLeft(e){return t.flatMap(t=>e.map(()=>t))},zip(e){return t.flatMap(t=>e.map(e=>[t,e]))},flatten(){return this.flatMap(e=>e)},provideContext(e){return H(V({_tag:`ProvideContext`,effect:t,context:e}))},provideService(e,n){return H(V({_tag:`ProvideContext`,effect:t,context:I.make(e,n)}))},provideLayer(e){return V(V(G.async(async()=>{let t=I.empty();return await e.build(V(t))})).flatMap(e=>H(V({_tag:`ProvideContext`,effect:t,context:e}))))},async run(){let e=await W(this._effect);return e.isSuccess()?l(e.orThrow()):c(e.isFailure()?e.toValue().error:new Ke)},async runOrThrow(){let e=await W(this._effect);if(e.isSuccess())return e.orThrow();throw e.isFailure()?e.toValue().error:new Ke},runSync(){try{return l(U(this._effect))}catch(e){return c(e)}},runSyncOrThrow(){return U(this._effect)},async runExit(){return W(this._effect)},async runOption(){let e=await W(this._effect);return e.isSuccess()?a(e.orThrow()):r()},async runTry(){let e=await W(this._effect);if(e.isSuccess())return V(o(()=>e.orThrow()));let t=e.isFailure()?e.toValue().error:Error(`Effect was interrupted`);return V(o(()=>{throw t}))},pipe(e){return e(t)},delay(e){return V(G.async(()=>new Promise(t=>setTimeout(t,e))).flatMap(()=>t))},timeout(e){return H(V({_tag:`Timeout`,effect:t,duration:e}))},timeoutTo(e,n){return V(t.timeout(e).recover(V(n)))},toString(){return`IO(${u(e._tag)})`},toJSON(){return{_tag:`IO`,effect:e._tag}},*[Symbol.iterator](){return yield t}};return t},U=(e,t=I.empty())=>{switch(e._tag){case`Succeed`:return e.value;case`Fail`:throw e.error;case`Die`:throw e.defect;case`Sync`:return e.thunk();case`Async`:throw Error(`Cannot run async effect synchronously`);case`Auto`:{let t=e.thunk();if(t instanceof Promise)throw Error(`Cannot run async effect synchronously`);return t}case`Map`:{let n=U(e.effect._effect,t);return e.f(n)}case`FlatMap`:{let n=U(e.effect._effect,t);return U(e.f(n)._effect,t)}case`MapError`:try{return U(e.effect._effect,t)}catch(t){throw e.f(t)}case`Recover`:try{return U(e.effect._effect,t)}catch{return e.fallback}case`RecoverWith`:try{return U(e.effect._effect,t)}catch(n){return U(e.f(n)._effect,t)}case`Fold`:try{let n=U(e.effect._effect,t);return e.onSuccess(n)}catch(t){return e.onFailure(t)}case`Service`:{let n=t.get(e.tag);if(n.isNone())throw Error(`Service not found: ${e.tag.id}`);return n.orThrow()}case`ProvideContext`:{let n=t.merge(e.context);return U(e.effect._effect,n)}case`Interrupt`:throw new Ke;case`Bracket`:{let n=U(e.acquire._effect,t);try{return U(e.use(n)._effect,t)}finally{U(e.release(n)._effect,t)}}case`Race`:throw Error(`Cannot run race effect synchronously`);case`Timeout`:throw Error(`Cannot run timeout effect synchronously`)}},W=async(e,t=I.empty())=>{try{switch(e._tag){case`Succeed`:return V(B.succeed(e.value));case`Fail`:return V(B.fail(e.error));case`Die`:throw e.defect;case`Sync`:return V(B.succeed(e.thunk()));case`Async`:{let t=await e.thunk();return V(B.succeed(t))}case`Auto`:{let t=e.thunk();return t instanceof Promise?V(B.succeed(await t)):V(B.succeed(t))}case`Map`:{let n=await W(e.effect._effect,t);return n.isSuccess()?V(B.succeed(e.f(n.orThrow()))):V(n)}case`FlatMap`:{let n=await W(e.effect._effect,t);return n.isSuccess()?W(e.f(n.orThrow())._effect,t):V(n)}case`MapError`:{let n=await W(e.effect._effect,t);return n.isSuccess()?V(n):n.isFailure()?V(B.fail(e.f(n.toValue().error))):V(n)}case`Recover`:{let n=await W(e.effect._effect,t);return n.isSuccess()?n:B.succeed(e.fallback)}case`RecoverWith`:{let n=await W(e.effect._effect,t);return n.isSuccess()?n:n.isFailure()?W(e.f(n.toValue().error)._effect,t):n}case`Fold`:{let n=await W(e.effect._effect,t);return n.isSuccess()?B.succeed(e.onSuccess(n.orThrow())):n.isFailure()?B.succeed(e.onFailure(n.toValue().error)):n}case`Service`:{let n=t.get(e.tag);return n.isNone()?B.fail(Error(`Service not found: ${e.tag.id}`)):B.succeed(n.orThrow())}case`ProvideContext`:{let n=t.merge(e.context);return W(e.effect._effect,n)}case`Interrupt`:return B.interrupted();case`Bracket`:{let n=await W(e.acquire._effect,t);if(!n.isSuccess())return n;let r=n.orThrow();try{return await W(e.use(r)._effect,t)}finally{await W(e.release(r)._effect,t)}}case`Race`:return e.effects.length===0?B.fail(Error(`No effects to race`)):await Promise.race(e.effects.map(e=>W(e._effect,t)));case`Timeout`:{let n=new Promise(t=>setTimeout(()=>t(B.fail(new Ge(e.duration))),e.duration)),r=W(e.effect._effect,t);return Promise.race([r,n])}}}catch(e){return B.fail(e)}},G={sync:e=>H({_tag:`Sync`,thunk:e}),succeed:e=>H({_tag:`Succeed`,value:e}),fail:e=>H({_tag:`Fail`,error:e}),die:e=>H({_tag:`Die`,defect:e}),async:e=>H(V({_tag:`Async`,thunk:e})),tryPromise:e=>H({_tag:`Async`,thunk:e.try}).mapError(e.catch),tryCatch:(e,t)=>G.sync(()=>{try{return e()}catch(e){throw t(e)}}),liftSync:e=>(...t)=>G.sync(()=>e(...t)),liftPromise:e=>(...t)=>G.async(()=>e(...t)),fromEither:e=>V(e.isRight()?G.succeed(e.value):G.fail(e.value)),fromOption:e=>V(e.isSome()?G.succeed(e.value):G.fail(void 0)),fromOptionOrFail:(e,t)=>V(e.isSome()?G.succeed(e.value):G.fail(t())),fromTry:e=>V(e.isSuccess()?G.succeed(e.orThrow()):G.fail(e.error)),fromResult:e=>V(e.error?G.fail(e.error):G.succeed(i(e.data))),tryAsync:(e,t,n)=>n?.aborted?V(G.fail(t(n.reason??new DOMException(`Aborted`,`AbortError`)))):G.async(()=>e(n)).mapError(t),asyncResult:(e,t,n)=>{let r=n?.dataKey??`data`,i=n?.errorKey??`error`;return G.tryAsync(t=>e(t),t,n?.signal).flatMap(e=>G.fromResult({data:e[r],error:e[i]}))},service:e=>H({_tag:`Service`,tag:e}),serviceWith:(e,t)=>G.service(e).map(t),serviceWithIO:(e,t)=>G.service(e).flatMap(t),withServices:(e,t)=>{let n=Object.entries(e);if(n.length===0)return V(H({_tag:`Auto`,thunk:()=>t({})}));let r=V(G.succeed({}));return V(n.reduce((e,[t,n])=>V(e.flatMap(e=>G.service(n).map(n=>({...e,[t]:n})))),r).flatMap(e=>H({_tag:`Auto`,thunk:()=>t(e)})))},all:e=>{if(e.length===0)return V(G.succeed([]));let t=V(G.succeed([]));return V(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),t))},firstSuccessOf:e=>e.length===0?V(G.fail(Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),sleep:e=>V(G.async(()=>new Promise(t=>setTimeout(t,e)))),never:()=>V(G.async(()=>new Promise(()=>{}))),get unit(){return V(H({_tag:`Succeed`,value:void 0}))},fromNullable:e=>V(e==null?G.fail(void 0):G.succeed(e)),interrupt:()=>H({_tag:`Interrupt`}),bracket:(e,t,n)=>H({_tag:`Bracket`,acquire:e,use:t,release:n}),acquireRelease:(e,t,n)=>G.bracket(e,t,n),race:e=>H({_tag:`Race`,effects:e}),any:e=>e.length===0?V(G.fail(Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),forEach:(e,t)=>{if(e.length===0)return V(G.succeed([]));let n=V(G.succeed([]));return V(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),n))},forEachPar:(e,t)=>G.forEach(e,t),timeout:(e,t)=>H(V({_tag:`Timeout`,effect:e,duration:t})),gen:e=>V(G.sync(()=>{let t=e(),n=e=>{let r=t.next(e);return r.done?V(G.succeed(r.value)):V(r.value.flatMap(e=>n(e)))};return n(void 0)}).flatMap(e=>e)),get Do(){return K(G.succeed({}))}},K=e=>({effect:e,bind(t,n){return K(e.flatMap(e=>n(e).map(n=>({...e,[t]:n}))))},let(t,n){return K(e.map(e=>({...e,[t]:n(e)})))},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return K(e.tap(t))},tapEffect(t){return K(e.tapEffect(t))},done(){return e}}),q=n(e=>H(V({_tag:`Auto`,thunk:e})),G),J=(e,t)=>({_tag:`Layer`,build:e,provideToAndMerge(t){return J(async n=>{let r=await e(n),i=n.merge(r),a=await t.build(i);return r.merge(a)})},merge(t){return J(async n=>{let[r,i]=await Promise.all([e(n),t.build(n)]);return r.merge(i)})},map(t){return J(async n=>t(await e(n)))},toString(){return`Layer(${t??`anonymous`})`}}),qe={succeed:(e,t)=>J(()=>Promise.resolve(I.make(e,t)),e.id),effect:(e,t)=>J(async()=>{let n=await t();return I.make(e,n)},e.id),sync:(e,t)=>J(()=>Promise.resolve(I.make(e,t())),e.id),fromService:(e,t,n)=>J(r=>{let i=r.unsafeGet(t);return Promise.resolve(I.make(e,n(i)))},e.id),fromServiceEffect:(e,t,n)=>J(async r=>{let i=await n(r.unsafeGet(t));return I.make(e,i)},e.id),fromContext:e=>J(()=>Promise.resolve(e)),empty:()=>J(()=>Promise.resolve(I.empty()),`empty`),mergeAll:(...e)=>J(async t=>(await Promise.all(e.map(e=>e.build(t)))).reduce((e,t)=>e.merge(t),I.empty()))},Je=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),Y=()=>{let e=0,t=[],n=async()=>{for(t.sort((e,t)=>e.time-t.time);t.length>0&&t[0]!==void 0&&t[0].time<=e;){let e=t.shift();e&&(e.resolve(),await Promise.resolve())}};return{get currentTime(){return e},async advance(t){e+=t,await n()},async setTime(t){e=t,await n()},async runAll(){if(t.length>0){let n=t[t.length-1];n&&(e=n.time)}await n()},get pendingCount(){return t.length},sleep(n){return new Promise(r=>{t.push({time:e+n,resolve:r})})}}},X=Je(`TestClock`),Ye={make:Y,tag:X,test:async e=>e(Y()),get:q.service(X),advance:e=>q.serviceWithIO(X,t=>q.async(()=>t.advance(e))),setTime:e=>q.serviceWithIO(X,t=>q.async(()=>t.setTime(e))),runAll:q.serviceWithIO(X,e=>q.async(()=>e.runAll())),context:()=>{let e=Y();return{clock:e,context:I.make(X,e)}}},Xe={make:()=>{let e=Y(),t=I.empty(),n={get context(){return t},get clock(){return e},withService(e,r){return t=t.add(e,r),n},async run(e){return e.provideContext(t).runOrThrow()}};return n},withClock:()=>{let e=Y();return Xe.make().withService(X,e)}},Z=e=>{let t=!1,n,i,s=!1,d=()=>{if(!t)try{n=e(),t=!0}catch(e){throw i=e,s=!0,t=!0,e}if(s)throw i;return n};return{[Symbol.toStringTag]:`Lazy`,_tag:`Lazy`,get isEvaluated(){return t},orElse:e=>{try{return d()}catch{return e}},orNull:()=>{try{return d()}catch{return null}},orThrow:e=>{try{return d()}catch(t){throw e??t}},or:e=>Q(()=>{try{return d()}catch{return e.orThrow()}}),orUndefined:()=>{try{return d()}catch{return}},map:e=>Q(()=>e(d())),ap:e=>Q(()=>e.orThrow()(d())),mapAsync:async e=>{let t=await e(d());return Q(()=>t)},flatMap:e=>Q(()=>e(d()).orThrow()),flatMapAsync:async e=>{let t=await e(d());return Q(()=>t.orThrow())},filter:e=>Q(()=>{let t=d();return e(t)?a(t):r}),recover:e=>Q(()=>{try{return d()}catch(t){return e(t)}}),recoverWith:e=>Q(()=>{try{return d()}catch(t){return e(t).orThrow()}}),toOption:()=>{try{return a(d())}catch{return r}},toEither:()=>{try{return l(d())}catch(e){return c(e)}},toEitherWith:e=>{try{return l(d())}catch(t){return c(e(t))}},toTry:()=>o(()=>d()),tap:e=>Q(()=>{let t=d();return e(t),t}),tapError:e=>Q(()=>{try{return d()}catch(t){throw e(t),t}}),fold:e=>e(d()),foldWith:(e,t)=>{try{return t(d())}catch(t){return e(t)}},foldLeft:e=>t=>t(e,d()),foldRight:e=>t=>t(d(),e),match:e=>e.Lazy(d()),toString:()=>t&&!s?`Lazy(${u(n)})`:t&&s?`Lazy(<error: ${i instanceof Error?i.message:String(i)}>)`:`Lazy(<not evaluated>)`,toValue:()=>t&&!s?{_tag:`Lazy`,evaluated:!0,value:n}:{_tag:`Lazy`,evaluated:!1},get size(){try{return d(),1}catch{return 0}},get isEmpty(){try{return d(),!1}catch{return!0}},contains:e=>{try{return d()===e}catch{return!1}},reduce:e=>d(),reduceRight:e=>d(),count:e=>{try{return e(d())?1:0}catch{return 0}},find:e=>{try{let t=d();return e(t)?a(t):r}catch{return r}},exists:e=>{try{return e(d())}catch{return!1}},forEach:e=>{try{e(d())}catch{}},pipe:e=>e(d()),serialize:()=>({toJSON:()=>JSON.stringify(t&&!s?{_tag:`Lazy`,evaluated:!0,value:n}:{_tag:`Lazy`,evaluated:!1}),toYAML:()=>t&&!s?`_tag: Lazy\nevaluated: true\nvalue: ${u(n)}`:`_tag: Lazy
|
|
12
|
-
evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(t&&!s?{_tag:`Lazy`,evaluated:!0,value:n}:{_tag:`Lazy`,evaluated:!1})).toString(`base64`)}),typeable:`Lazy`}},Q=n(Z,{of:e=>Z(e),fromValue:e=>Z(()=>e),fromOption:(e,t)=>Z(()=>e._tag===`Some`?e.value:t()),fromTry:e=>Z(()=>e.orThrow()),fromEither:e=>Z(()=>e.fold(e=>{throw e},e=>e)),fromPromise:e=>Z(()=>{throw Error(`Promise not yet resolved. Use await on the promise before creating Lazy.`)}),fail:e=>Z(()=>{throw e})}),Ze=Map,Qe={default:e=>t=>e(t),when:(e,t)=>n=>e(n)?t(n):void 0},$=(e=[])=>{let t=[...e],n=()=>t.length,r=()=>t.length===0,a=e=>t.includes(e),o=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduce(e)},c=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduceRight(e)},l=e=>$([...t,e]),u=()=>{if(r())return[$([]),i(null)];let e=[...t],n=e.pop();return[$(e),i(n)]},d=()=>r()?i(null):i(t[t.length-1]),ee=e=>$(t.map(e)),te=e=>r()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),f=e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},ne=async e=>r()?$([]):(await Promise.all(t.map(async t=>await e(t)))).reduce((e,t)=>t.toArray().reduce((e,t)=>e.push(t),e),$([])),re=()=>s(t),ie=()=>[...t],ae=()=>`Stack(${t.join(`, `)})`,p=(e,n)=>{if(r())return e();let i=t[t.length-1];return i===void 0?e():n(i)},m=e=>n=>t.reduce(n,e),h=e=>n=>t.reduceRight((e,t)=>n(t,e),e),g=e=>r()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return n()},get isEmpty(){return r()},contains:a,reduce:o,reduceRight:c,push:l,pop:u,peek:d,map:ee,flatMap:te,ap:f,flatMapAsync:ne,toList:re,toArray:ie,toString:ae,fold:p,foldLeft:m,foldRight:h,match:g,toValue:()=>({_tag:`Stack`,value:t}),pipe:e=>e([...t]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:`Stack`,value:t}),toYAML:()=>`_tag: Stack\nvalue: ${JSON.stringify(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Stack`,value:t})).toString(`base64`)})}},$e=(e=[])=>$(e),et={empty:()=>$([]),of:e=>$([e]),fromJSON:e=>tt(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
|
|
13
|
-
`)[1]?.split(`: `)[1];return tt(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return et.fromJSON(t)}},tt=n($e,et);function nt(e){let t=se({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{p as $,Oe as A,_e as B,Pe as C,C as D,S as E,we as F,fe as G,pe as H,xe as I,he as J,le as K,ve as L,x as M,De as N,T as O,Ee as P,oe as Q,ye as R,Fe as S,Ne as T,ue as U,de as V,be as W,se as X,_ as Y,ce as Z,P as _,Q as a,ne as at,Re as b,Xe as c,q as d,te as et,Ke as f,Ue as g,I as h,Ze as i,f as it,b as j,w as k,Je as l,B as m,tt as n,ee as nt,Ye as o,d as ot,Ge as p,ge as q,Qe as r,re as rt,X as s,nt as t,ie as tt,qe as u,Ve as v,E as w,O as x,Be as y,me as z};
|