functype 0.47.1 → 0.49.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 CHANGED
@@ -22,6 +22,7 @@ npx functype --json # JSON output for programmatic use
22
22
 
23
23
  ## Core Principles
24
24
 
25
+ - **Zero Dependencies**: No third-party runtime dependencies — just TypeScript
25
26
  - **Immutability**: All data structures are immutable, promoting predictable and side-effect-free code
26
27
  - **Type Safety**: Leverages TypeScript's type system to ensure compile-time safety
27
28
  - **Composability**: Provides abstractions for building complex programs from simple components
@@ -120,6 +120,7 @@ declare function isExtractable<T extends Type>(value: unknown): value is Extract
120
120
  * .toArray() // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
121
121
  */
122
122
  interface LazyList<A extends Type> extends Foldable<A>, Pipe<LazyList<A>>, Serializable<LazyList<A>>, Typeable<"LazyList"> {
123
+ readonly [Symbol.toStringTag]: string;
123
124
  [Symbol.iterator](): Iterator<A>;
124
125
  map<B extends Type>(f: (a: A) => B): LazyList<B>;
125
126
  flatMap<B extends Type>(f: (a: A) => LazyList<B>): LazyList<B>;
@@ -2003,6 +2004,7 @@ type ExitTag = "Success" | "Failure" | "Interrupted";
2003
2004
  * - Interrupted: The effect was cancelled/interrupted
2004
2005
  */
2005
2006
  interface Exit<E extends Type, A extends Type> {
2007
+ readonly [Symbol.toStringTag]: string;
2006
2008
  readonly _tag: ExitTag;
2007
2009
  /**
2008
2010
  * Type guard to check if this is a Success
@@ -2403,6 +2405,7 @@ type IOEffect<R, E, A> = {
2403
2405
  * @typeParam A - Success type (value produced on success)
2404
2406
  */
2405
2407
  interface IO<R extends Type, E extends Type, A extends Type> {
2408
+ readonly [Symbol.toStringTag]: string;
2406
2409
  /**
2407
2410
  * Internal effect representation
2408
2411
  * @internal
@@ -3647,6 +3650,7 @@ type Valuable<Tag extends string, V, T = object> = Typeable<Tag, T> & {
3647
3650
  * Implements the Traversable interface for working with ordered collections
3648
3651
  */
3649
3652
  type Stack<A extends Type> = {
3653
+ readonly [Symbol.toStringTag]: string;
3650
3654
  /**
3651
3655
  * Push a value onto the top of the stack
3652
3656
  * @param value - The value to push
@@ -3775,6 +3779,7 @@ interface Collection<A> {
3775
3779
  */
3776
3780
  interface FunctypeBase<A, Tag extends string = string> extends AsyncMonad<A>, Traversable<A>, Serializable<A>, Foldable<A>, Typeable<Tag>, ContainerOps<A> {
3777
3781
  readonly _tag: Tag;
3782
+ readonly [Symbol.toStringTag]: string;
3778
3783
  }
3779
3784
  /**
3780
3785
  * Interface for single-value containers like Option, Either, Try.
@@ -0,0 +1,13 @@
1
+ import{Brand as e}from"./branded/index.js";import{n as t,r as n,t as r}from"./stringify-DepodSy0.js";import{None as i,Option as a,Some as o}from"./option/index.js";import{Try as s}from"./try/index.js";import{List as c}from"./list/index.js";import{Left as l,Right as u}from"./either/index.js";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: ${r(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}: ${r(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=t(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)}},oe=()=>{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}},h=e=>{let t={[Symbol.toStringTag]:`LazyList`,_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>h((function*(){for(let n of e)yield t(n)})()),flatMap:t=>h((function*(){for(let n of e)yield*t(n)})()),filter:t=>h((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>h((function*(){let n=m(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>h((function*(){let n=m(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>h((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>h((function*(){let n=p(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>h((function*(){yield*e,yield*t})()),zip:t=>h((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:()=>c(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 a(n);return a.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?a.none():a(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()?a(t.get()):a.none()},get tail(){return h((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 h(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return h(t<=0?[]:n.slice(-t))},reverse:()=>h(Array.from(e).reverse()),distinct:()=>h((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>h((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: ${r(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},se=t(e=>h(e),{empty:()=>h([]),of:e=>h([e]),from:(...e)=>h(e),iterate:(e,t)=>h((function*(){let n=p(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>h((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>h((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)=>h((function*(){if(t===void 0)for(;;)yield e;else{let n=m(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>h((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())});function ce({_tag:e,impl:t}){return{...t,_tag:e}}function le(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:t?e._tag===t:!0}function g(t,n){return{brand:t,validate:n,of:r=>n(r)?a(e(t,r)):a.none(),from:r=>n(r)?u(e(t,r)):l(`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)=>g(e,e=>n(e)&&t(e))}}const ue=g(`PositiveNumber`,e=>e>0),de=g(`NonNegativeNumber`,e=>e>=0),fe=g(`IntegerNumber`,e=>Number.isInteger(e)),pe=ue.refine(`PositiveInteger`,e=>Number.isInteger(e)),me=g(`NonEmptyString`,e=>e.length>0),he=g(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),ge=g(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),_e=g(`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)),ve=g(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function ye(e,t,n){return g(e,e=>e>=t&&e<=n)}function be(e,t,n){return g(e,e=>e.length>=t&&e.length<=n)}function xe(e,t){return g(e,e=>t.test(e))}const Se=e=>typeof e==`function`&&Object.keys(e).length>0,Ce=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Ce({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Ce({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},we=()=>Ce({resolved:!1}),Te=t(we,{of:()=>we(),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}}),_=(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 _(r,n)}):!1,v=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(_(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:_(e.value,n)?v({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):v({...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 v({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 v({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(_(e.value,r))return v({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return v({...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 a(e.result);let t=n();return t.matched?a(t.result):a.none()}};return r},Ee=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 _(e,n)?v({...i,resolved:!0,result:t(r,e)}):v(i)},caseValue:(t,n)=>v(e===t?{value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}:{value:e,resolved:!1,patterns:[]}),caseValues:(t,n)=>t.includes(e)?v({value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}):v({value:e,resolved:!1,patterns:[]}),when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?v({...i,resolved:!0,result:t(r,e)}):v(i)},caseAny:(n,r)=>{for(let i of n)if(_(e,i))return v({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return v({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},De=t(e=>Ee(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(_(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(_(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 y(e,t){return{...ce({_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 a={name:n?.name??`Task`,description:n?.description??``},o=x.apply(e,t,a),u={...y(`Err`,{error:o,meta:a}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Err`,_meta:a,value:void 0,error:o,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>S(o,t,n),flatMap:e=>S(o,t,n),ap:e=>S(o,t,n),mapAsync:e=>Promise.resolve(S(o,t,n)),flatMapAsync:e=>Promise.resolve(S(o,t,n)),mapError:e=>S(e(o),t,n),recover:e=>C(e,n),recoverWith:e=>C(e(o),n),orThrow:e=>{throw e??o},orElse:e=>e,or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:()=>l(o),toTry:()=>s(()=>{throw o}),toOption:()=>i(),toList:()=>c([]),fold:(e,t)=>e(o),match:e=>e.Err(o),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=>i(),exists:e=>!1,forEach:e=>{},toPromise:()=>Promise.reject(o),doUnwrap(){return{ok:!1,empty:!1,error:o}},serialize:()=>({toJSON:()=>r({_tag:`Err`,error:o.message??o.toString()})??`{}`,toYAML:()=>`_tag: Err\nerror: ${o.message??o.toString()}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Err`,error:o.message??o.toString()})).toString(`base64`)}),pipe:e=>e(u)};return u},C=(e,t)=>{let n={name:t?.name??`Task`,description:t?.description??``},a={...y(`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:()=>u(e),toTry:()=>s(()=>e),toOption:()=>o(e),toList:()=>c([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)?o(e):i(),exists:t=>t(e),forEach:t=>t(e),toPromise:()=>Promise.resolve(e),doUnwrap(){return{ok:!0,value:e}},serialize:()=>({toJSON:()=>r({_tag:`Ok`,value:e})??`{}`,toYAML:()=>`_tag: Ok\nvalue: ${r(e)??`undefined`}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Ok`,value:e})).toString(`base64`)}),pipe:e=>e(a)};return a},w=()=>{let e=new AbortController,t=oe();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{...y(`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=oe();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=oe();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=t(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,t,r,i)=>n(x.apply(t,r,{name:e,description:t}),{code:e,message:t,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)?l(O.validation(`value`,t,`must be a valid email`)):u(t);if(e===`url`)try{return new URL(String(t)),u(t)}catch{return l(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)?l(O.validation(`value`,t,`must be a valid UUID`)):u(t);if(e===`required`)return t==null||t===``?l(O.validation(`value`,t,`is required`)):u(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?l(O.validation(`value`,t,`must be numeric`)):u(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?l(O.validation(`value`,t,`must contain only letters`)):u(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?l(O.validation(`value`,t,`must be alphanumeric`)):u(t);if(e.startsWith(`min:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r<n?l(O.validation(`value`,t,`must be at least ${n}`)):u(t)}if(e.startsWith(`max:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r>n?l(O.validation(`value`,t,`must be at most ${n}`)):u(t)}if(e.startsWith(`minLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length<n?l(O.validation(`value`,t,`must be at least ${n} characters`)):u(t)}if(e.startsWith(`maxLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length>n?l(O.validation(`value`,t,`must be at most ${n} characters`)):u(t)}if(e.startsWith(`pattern:`)){let n=e.substring(8);return new RegExp(n).test(String(t))?u(t):l(O.validation(`value`,t,`must match pattern ${n}`))}if(e.startsWith(`in:`)){let n=e.substring(3).split(`,`);return n.includes(String(t))?u(t):l(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))?l(O.validation(`value`,t,`must not be one of: ${n.join(`, `)}`)):u(t)}if(e===`date`){let e=new Date(String(t));return isNaN(e.getTime())?l(O.validation(`value`,t,`must be a valid date`)):u(t)}if(e===`future`){let e=new Date(String(t));return isNaN(e.getTime())||e<=new Date?l(O.validation(`value`,t,`must be a future date`)):u(t)}if(e===`past`){let e=new Date(String(t));return isNaN(e.getTime())||e>=new Date?l(O.validation(`value`,t,`must be a past date`)):u(t)}return u(t)},combine:(...e)=>t=>{for(let n of e){let e=n(t);if(e.isLeft())return e}return u(t)},custom:(e,t)=>n=>e(n)?u(n):l(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?l(c(n)):u(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=n(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(()=>i(),e=>o(e)),toList:e=>e.fold(()=>c([]),e=>c([e])),toEither:(e,t)=>e.fold(()=>l(t),e=>u(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 c(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)}`)},i=e=>{if(A(e)){let t=e;if(t.isEmpty)return c([a.none()]);let n=t.orThrow();if(j(n))return n.map(e=>a(e));throw Error(`Unsupported inner container type for sequence`)}if(j(e)){let t=e.toArray();if(t.length===0)return a.none();let n=t[0];if(A(n)){for(let e of t)if(e.isEmpty)return a.none();return a(c(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`}},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=t(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?i():o(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 o(e)},toEither(){return u(e)},toValue(){return{_tag:`Success`,value:e}},toString(){return`Exit.Success(${r(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 i()},toEither(){return l(e)},toValue(){return{_tag:`Failure`,error:e}},toString(){return`Exit.Failure(${r(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 i()},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=t(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()?u(e.orThrow()):l(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 u(U(this._effect))}catch(e){return l(e)}},runSyncOrThrow(){return U(this._effect)},async runExit(){return W(this._effect)},async runOption(){let e=await W(this._effect);return e.isSuccess()?o(e.orThrow()):i()},async runTry(){let e=await W(this._effect);if(e.isSuccess())return V(s(()=>e.orThrow()));let t=e.isFailure()?e.toValue().error:Error(`Effect was interrupted`);return V(s(()=>{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(${r(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(a(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=t(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,a,c=!1,d=()=>{if(!t)try{n=e(),t=!0}catch(e){throw a=e,c=!0,t=!0,e}if(c)throw a;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)?o(t):i}),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 o(d())}catch{return i}},toEither:()=>{try{return u(d())}catch(e){return l(e)}},toEitherWith:e=>{try{return u(d())}catch(t){return l(e(t))}},toTry:()=>s(()=>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&&!c?`Lazy(${r(n)})`:t&&c?`Lazy(<error: ${a instanceof Error?a.message:String(a)}>)`:`Lazy(<not evaluated>)`,toValue:()=>t&&!c?{_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)?o(t):i}catch{return i}},exists:e=>{try{return e(d())}catch{return!1}},forEach:e=>{try{e(d())}catch{}},pipe:e=>e(d()),serialize:()=>({toJSON:()=>JSON.stringify(t&&!c?{_tag:`Lazy`,evaluated:!0,value:n}:{_tag:`Lazy`,evaluated:!1}),toYAML:()=>t&&!c?`_tag: Lazy\nevaluated: true\nvalue: ${r(n)}`:`_tag: Lazy
12
+ evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(t&&!c?{_tag:`Lazy`,evaluated:!0,value:n}:{_tag:`Lazy`,evaluated:!1})).toString(`base64`)}),typeable:`Lazy`}},Q=t(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,i=()=>t.length===0,o=e=>t.includes(e),s=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduce(e)},l=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduceRight(e)},u=e=>$([...t,e]),d=()=>{if(i())return[$([]),a(null)];let e=[...t],n=e.pop();return[$(e),a(n)]},ee=()=>i()?a(null):a(t[t.length-1]),te=e=>$(t.map(e)),f=e=>i()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),ne=e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},re=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),$([])),ie=()=>c(t),ae=()=>[...t],p=()=>`Stack(${t.join(`, `)})`,m=(e,n)=>{if(i())return e();let r=t[t.length-1];return r===void 0?e():n(r)},oe=e=>n=>t.reduce(n,e),h=e=>n=>t.reduceRight((e,t)=>n(t,e),e),se=e=>i()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return n()},get isEmpty(){return i()},contains:o,reduce:s,reduceRight:l,push:u,pop:d,peek:ee,map:te,flatMap:f,ap:ne,flatMapAsync:re,toList:ie,toArray:ae,toString:p,fold:m,foldLeft:oe,foldRight:h,match:se,toValue:()=>({_tag:`Stack`,value:t}),pipe:e=>e([...t]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:`Stack`,value:t}),toYAML:()=>`_tag: Stack\nvalue: ${r(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=t($e,et);function nt(e){let t=ce({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{p as $,Oe as A,ve as B,Pe as C,C as D,S as E,Te as F,pe as G,me as H,Se as I,ge as J,ue as K,ye as L,x as M,y as N,T as O,De as P,se as Q,be as R,Fe as S,Ne as T,de as U,fe as V,xe as W,ce as X,g as Y,le 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,_e 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,he as z};
@@ -1 +1 @@
1
- import{a as e,i as t,n,r,t as i}from"../full-interfaces-DSgVaOcH.js";export{n as CATEGORIES,i as FULL_INTERFACES,r as INTERFACES,t as TYPES,e as VERSION};
1
+ import{a as e,i as t,n,r,t as i}from"../full-interfaces-DzRVS-A-.js";export{n as CATEGORIES,i as FULL_INTERFACES,r as INTERFACES,t as TYPES,e as VERSION};
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{P as e}from"../Valuable-DeccMyYD.js";import{Option as t}from"../option/index.js";import{List as n}from"../list/index.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-DSgVaOcH.js";const c=()=>{let e=n([`functype ${r} - Scala-inspired FP for TypeScript`,``]);return n(Object.entries(a)).foldLeft(e)((e,[r,a])=>{let o=e.add(r.toUpperCase());return n(a).foldLeft(o)((e,n)=>t(i[n]).fold(()=>e,t=>{let r=t.interfaces.length>0?` [${t.interfaces.join(`, `)}]`:``;return e.add(` ${n}${r}`).add(` ${t.description}`)})).add(``)}).concat(n([`Use: npx functype <Type> for details`,`Use: npx functype interfaces for interface reference`])).toArray().join(`
2
+ import{P as e}from"../Valuable-GZAXcYok.js";import{Option as t}from"../option/index.js";import{List as n}from"../list/index.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-DzRVS-A-.js";const c=()=>{let e=n([`functype ${r} - Scala-inspired FP for TypeScript`,``]);return n(Object.entries(a)).foldLeft(e)((e,[r,a])=>{let o=e.add(r.toUpperCase());return n(a).foldLeft(o)((e,n)=>t(i[n]).fold(()=>e,t=>{let r=t.interfaces.length>0?` [${t.interfaces.join(`, `)}]`:``;return e.add(` ${n}${r}`).add(` ${t.description}`)})).add(``)}).concat(n([`Use: npx functype <Type> for details`,`Use: npx functype interfaces for interface reference`])).toArray().join(`
3
3
  `)},l=(e,r)=>{let i=r.interfaces.length>0?` [${r.interfaces.join(`, `)}]`:``,a=n([`create`,`transform`,`extract`,`check`,`other`]),o=n([`${e}<T>${i}`,``,r.description,``]);return a.foldLeft(o)((e,i)=>t(r.methods[i]).filter(e=>e.length>0).fold(()=>e,t=>{let r=e.add(i.toUpperCase());return n(t).foldLeft(r)((e,t)=>e.add(` ${t}`)).add(``)})).toArray().join(`
4
4
  `).trimEnd()},u=()=>{let e=n([`INTERFACES`,``]);return n(Object.entries(o)).foldLeft(e)((e,[t,r])=>{let i=r.extends?` extends ${r.extends}`:``,a=e.add(`${t}<A>${i}`).add(` ${r.description}`);return n(r.methods).foldLeft(a)((e,t)=>e.add(` ${t}`)).add(``)}).toArray().join(`
5
5
  `).trimEnd()},d=e=>JSON.stringify(e,null,2),f=()=>({version:r,categories:a,types:i}),p=e=>t(i[e]).map(t=>({name:e,data:t})).or(n(Object.entries(i)).find(([t])=>t.toLowerCase()===e.toLowerCase()).map(([e,t])=>({name:e,data:t}))).orUndefined(),m=()=>Object.keys(i),h=()=>o,g=e=>{let t=n(e.slice(2));return{flags:{json:t.contains(`--json`),full:t.contains(`--full`),help:t.exists(e=>e===`--help`||e===`-h`)},args:t.filter(e=>!e.startsWith(`--`)&&e!==`-h`)}},_=e=>t(s[e]).or(n(Object.entries(s)).find(([t])=>t.toLowerCase()===e.toLowerCase()).map(([,e])=>e)),v=()=>{let e=n([`FULL INTERFACE DEFINITIONS`,`=`.repeat(60),``]);return n(Object.entries(s)).foldLeft(e)((e,[t,r])=>e.concat(n([`// ${t}`,r,``,`-`.repeat(60),``]))).toArray().join(`
@@ -1,4 +1,4 @@
1
- import { mn as Doable, nn as Reshapeable, pn as DoResult } from "../Functype-Boat1fLo.js";
1
+ import { mn as Doable, nn as Reshapeable, pn as DoResult } from "../Functype-rgysbeU6.js";
2
2
  import { Try } from "../try/index.js";
3
3
  import { Option } from "../option/index.js";
4
4
  import { List } from "../list/index.js";
@@ -1,4 +1,4 @@
1
- import { an as AsyncMonad, dn as Extractable, mn as Doable, n as FunctypeBase, nn as Reshapeable, rn as Promisable } from "../Functype-Boat1fLo.js";
1
+ import { an as AsyncMonad, dn as Extractable, mn as Doable, n as FunctypeBase, nn as Reshapeable, rn as Promisable } from "../Functype-rgysbeU6.js";
2
2
  import { l as Type } from "../Typeable-lfO2nRVW.js";
3
3
  import { Option } from "../option/index.js";
4
4
  import { List } from "../list/index.js";
@@ -1,2 +1,2 @@
1
- import{nt as e}from"../Valuable-DeccMyYD.js";import{t}from"../Companion-VlxcFhzb.js";import{None as n,Some as r}from"../option/index.js";import{Try as i}from"../try/index.js";import{List as a}from"../list/index.js";import o from"safe-stable-stringify";const s=t=>({_tag:`Right`,value:t,isLeft(){return!1},isRight(){return!0},orElse:e=>t,orThrow:()=>t,or:e=>l(t),orNull:()=>t,orUndefined:()=>t,map:e=>l(e(t)),ap:e=>e._tag===`Right`?l(e.value(t)):u(e.value),mapAsync:e=>e(t).then(e=>l(e)).catch(e=>Promise.resolve(u(e))),merge:e=>e.isLeft()?u(e.value):l([t,e.value]),flatMap:e=>e(t),flatMapAsync:e=>e(t).catch(e=>u(e)),toOption:()=>r(t),toList:()=>a([t]),toEither:e=>l(t),toTry:()=>i(()=>t),toJSON(){return{_tag:`Right`,value:t}},toString:()=>`Right(${o(t)})`,*[Symbol.iterator](){yield t},*yield(){yield t},traverse:e=>{let n=e(t);return n.isLeft()?u(n.value):l([n.value])},*lazyMap(e){yield l(e(t))},tap:e=>(e(t),l(t)),tapLeft:e=>l(t),mapLeft:e=>l(t),bimap:(e,n)=>l(n(t)),fold:(e,n)=>n(t),foldLeft:e=>n=>n(e,t),foldRight:e=>n=>n(t,e),match:e=>e.Right(t),swap:()=>u(t),toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:`Right`,value:t}),pipeEither:(e,n)=>n(t),pipe:e=>e(t),serialize:()=>e(`Right`,t),get size(){return 1},get isEmpty(){return!1},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?r(t):n(),exists:e=>e(t),forEach:e=>e(t),doUnwrap(){return{ok:!0,value:t}}}),c=t=>({_tag:`Left`,value:t,isLeft(){return!0},isRight(){return!1},orElse:e=>e,orThrow:e=>{throw e??t},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:e=>u(t),ap:e=>u(t),mapAsync:e=>Promise.resolve(u(t)),merge:e=>u(t),flatMap:e=>u(t),flatMapAsync:e=>Promise.resolve(u(t)),toOption:()=>n(),toList:()=>a(),toEither:e=>u(e),toTry:()=>i(()=>{throw Error(String(t))}),toJSON(){return{_tag:`Left`,value:t}},toString:()=>`Left(${o(t)})`,*[Symbol.iterator](){},*yield(){},traverse:e=>u(t),*lazyMap(e){yield u(t)},tap:e=>u(t),tapLeft:e=>(e(t),u(t)),mapLeft:e=>u(e(t)),bimap:(e,n)=>u(e(t)),fold:(e,n)=>e(t),foldLeft:e=>t=>e,foldRight:e=>t=>e,match:e=>e.Left(t),swap:()=>l(t),toPromise:()=>Promise.reject(t),toValue:()=>({_tag:`Left`,value:t}),pipeEither:(e,n)=>e(t),pipe:e=>e(t),serialize:()=>e(`Left`,t),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=>n(),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:t}}}),l=e=>s(e),u=e=>c(e),d=e=>e.isRight(),f=e=>e.isLeft(),p=(e,t)=>{try{return l(e())}catch(e){return u(t(e))}},m=e=>s(e);console.assert(m);const h=e=>c(e);console.assert(h);const g=async(e,t)=>{try{return l(await e())}catch(e){return u(t(e))}},_=(e,t)=>t?l(e):u(e),v={left:e=>u(e),right:e=>l(e),isRight:e=>e.isRight(),isLeft:e=>e.isLeft(),sequence:e=>e.reduce((e,t)=>e.isLeft()?e:t.isLeft()?u(t.value):e.map(e=>[...e,t.value]),l([])),traverse:(e,t)=>v.sequence(e.map(t)),fromNullable:(e,t)=>e==null?u(t):l(e),fromPredicate:(e,t,n)=>t(e)?l(e):u(n),ap:(e,t)=>e.flatMap(e=>t.map(e)),fromPromise:async(e,t)=>{try{return l(await e)}catch(e){return u(t(e))}},fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Right`?l(t.value):u(t.value)},fromYAML:e=>{let t=e.split(`
1
+ import{nt as e}from"../Valuable-GZAXcYok.js";import{n as t,t as n}from"../stringify-DepodSy0.js";import{None as r,Some as i}from"../option/index.js";import{Try as a}from"../try/index.js";import{List as o}from"../list/index.js";const s=t=>({[Symbol.toStringTag]:`Either`,_tag:`Right`,value:t,isLeft(){return!1},isRight(){return!0},orElse:e=>t,orThrow:()=>t,or:e=>l(t),orNull:()=>t,orUndefined:()=>t,map:e=>l(e(t)),ap:e=>e._tag===`Right`?l(e.value(t)):u(e.value),mapAsync:e=>e(t).then(e=>l(e)).catch(e=>Promise.resolve(u(e))),merge:e=>e.isLeft()?u(e.value):l([t,e.value]),flatMap:e=>e(t),flatMapAsync:e=>e(t).catch(e=>u(e)),toOption:()=>i(t),toList:()=>o([t]),toEither:e=>l(t),toTry:()=>a(()=>t),toJSON(){return{_tag:`Right`,value:t}},toString:()=>`Right(${n(t)})`,*[Symbol.iterator](){yield t},*yield(){yield t},traverse:e=>{let n=e(t);return n.isLeft()?u(n.value):l([n.value])},*lazyMap(e){yield l(e(t))},tap:e=>(e(t),l(t)),tapLeft:e=>l(t),mapLeft:e=>l(t),bimap:(e,n)=>l(n(t)),fold:(e,n)=>n(t),foldLeft:e=>n=>n(e,t),foldRight:e=>n=>n(t,e),match:e=>e.Right(t),swap:()=>u(t),toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:`Right`,value:t}),pipeEither:(e,n)=>n(t),pipe:e=>e(t),serialize:()=>e(`Right`,t),get size(){return 1},get isEmpty(){return!1},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?i(t):r(),exists:e=>e(t),forEach:e=>e(t),doUnwrap(){return{ok:!0,value:t}}}),c=t=>({[Symbol.toStringTag]:`Either`,_tag:`Left`,value:t,isLeft(){return!0},isRight(){return!1},orElse:e=>e,orThrow:e=>{throw e??t},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:e=>u(t),ap:e=>u(t),mapAsync:e=>Promise.resolve(u(t)),merge:e=>u(t),flatMap:e=>u(t),flatMapAsync:e=>Promise.resolve(u(t)),toOption:()=>r(),toList:()=>o(),toEither:e=>u(e),toTry:()=>a(()=>{throw Error(String(t))}),toJSON(){return{_tag:`Left`,value:t}},toString:()=>`Left(${n(t)})`,*[Symbol.iterator](){},*yield(){},traverse:e=>u(t),*lazyMap(e){yield u(t)},tap:e=>u(t),tapLeft:e=>(e(t),u(t)),mapLeft:e=>u(e(t)),bimap:(e,n)=>u(e(t)),fold:(e,n)=>e(t),foldLeft:e=>t=>e,foldRight:e=>t=>e,match:e=>e.Left(t),swap:()=>l(t),toPromise:()=>Promise.reject(t),toValue:()=>({_tag:`Left`,value:t}),pipeEither:(e,n)=>e(t),pipe:e=>e(t),serialize:()=>e(`Left`,t),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=>r(),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:t}}}),l=e=>s(e),u=e=>c(e),d=e=>e.isRight(),f=e=>e.isLeft(),p=(e,t)=>{try{return l(e())}catch(e){return u(t(e))}},m=e=>s(e);console.assert(m);const h=e=>c(e);console.assert(h);const g=async(e,t)=>{try{return l(await e())}catch(e){return u(t(e))}},_=(e,t)=>t?l(e):u(e),v={left:e=>u(e),right:e=>l(e),isRight:e=>e.isRight(),isLeft:e=>e.isLeft(),sequence:e=>e.reduce((e,t)=>e.isLeft()?e:t.isLeft()?u(t.value):e.map(e=>[...e,t.value]),l([])),traverse:(e,t)=>v.sequence(e.map(t)),fromNullable:(e,t)=>e==null?u(t):l(e),fromPredicate:(e,t,n)=>t(e)?l(e):u(n),ap:(e,t)=>e.flatMap(e=>t.map(e)),fromPromise:async(e,t)=>{try{return l(await e)}catch(e){return u(t(e))}},fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Right`?l(t.value):u(t.value)},fromYAML:e=>{let t=e.split(`
2
2
  `),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`?l(i):u(i)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return v.fromJSON(t)}},y=t(_,v);export{y as Either,u as Left,l as Right,h as TypeCheckLeft,m as TypeCheckRight,f as isLeft,d as isRight,p as tryCatch,g as tryCatchAsync};
@@ -1,4 +1,4 @@
1
- const e=`0.47.1`,t={Option:{description:`Safe nullable handling - Some<T> or None`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Matchable`,`Serializable`,`Traversable`],methods:{create:[`Option(v)`,`Option.none()`,`Some(v)`,`None()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.ap(ff)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.orNull()`,`.match({Some, None})`],check:[`.isSome`,`.isNone`,`.isDefined`,`.isEmpty`]}},Either:{description:`Error handling with Left (error) or Right (success)`,interfaces:[`Functor`,`Monad`,`Foldable`,`Traversable`,`PromiseLike`],methods:{create:[`Right(v)`,`Left(e)`,`Either.right(v)`,`Either.left(e)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapLeft(f)`,`.swap()`],extract:[`.fold(l, r)`,`.orElse(d)`,`.orThrow()`,`.match({Left, Right})`],check:[`.isRight`,`.isLeft`]}},Try:{description:`Wrap operations that may throw - Success<T> or Failure`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Matchable`,`Serializable`,`Traversable`],methods:{create:[`Try(() => expr)`,`Success(v)`,`Failure(e)`],transform:[`.map(f)`,`.flatMap(f)`,`.recover(f)`,`.recoverWith(f)`],extract:[`.fold(f, s)`,`.orElse(d)`,`.orThrow()`,`.toOption()`,`.toEither()`],check:[`.isSuccess`,`.isFailure`]}},List:{description:`Immutable array with functional operations`,interfaces:[`Functor`,`Monad`,`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`List([...])`,`List.of(...)`,`List.empty()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.take(n)`,`.takeWhile(p)`,`.takeRight(n)`,`.drop(n)`,`.dropWhile(p)`,`.concat(list)`,`.reverse()`,`.distinct()`,`.sorted()`,`.sortBy(f)`,`.zip(list)`,`.zipWithIndex()`,`.prepend(v)`,`.slice(s, e)`],extract:[`.fold(z, f)`,`.reduce(f)`,`.head`,`.headOption`,`.tail`,`.last`,`.lastOption`,`.init`,`.indexOf(v)`,`.toArray()`],check:[`.isEmpty`,`.nonEmpty`,`.size`,`.contains(v)`],other:[`.groupBy(f)`,`.partition(p)`,`.span(p)`]}},Set:{description:`Immutable set of unique values`,interfaces:[`Functor`,`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`Set([...])`,`Set.of(...)`,`Set.empty()`],transform:[`.map(f)`,`.filter(p)`,`.union(s)`,`.intersection(s)`,`.difference(s)`,`.add(v)`],extract:[`.fold(z, f)`,`.toArray()`],check:[`.has(v)`,`.isEmpty`,`.size`]}},Map:{description:`Immutable key-value store`,interfaces:[`SafeTraversable`,`Collection`,`Serializable`],methods:{create:[`Map([[k, v], ...])`,`Map.of([k, v], ...)`,`Map.empty()`],transform:[`.set(k, v)`,`.delete(k)`,`.map(f)`,`.filter(p)`,`.add(k, v)`],extract:[`.get(k)`,`.keys()`,`.values()`,`.entries()`,`.fold(z, f)`],check:[`.has(k)`,`.isEmpty`,`.size`]}},Lazy:{description:`Deferred computation with memoization`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Serializable`,`Traversable`],methods:{create:[`Lazy(() => expr)`],transform:[`.map(f)`,`.flatMap(f)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.get()`],check:[`.isEvaluated`]}},LazyList:{description:`Lazy sequences for large/infinite data`,interfaces:[`Functor`,`Monad`,`Iterable`],methods:{create:[`LazyList.from(iter)`,`LazyList.range(start, end)`,`LazyList.infinite(f)`],transform:[`.map(f)`,`.filter(p)`,`.take(n)`,`.takeRight(n)`,`.drop(n)`,`.takeWhile(p)`,`.dropWhile(p)`,`.concat(ll)`,`.reverse()`,`.distinct()`,`.zip(ll)`,`.zipWithIndex()`],extract:[`.head`,`.headOption`,`.tail`,`.last`,`.lastOption`,`.init`,`.toArray()`],check:[`.isEmpty`]}},Task:{description:`Async operations with cancellation and progress`,interfaces:[],methods:{create:[`Task.of(v)`,`Task.from(promise)`,`Task.sync(f)`,`Task.async(f)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`],extract:[`.run()`,`.cancel()`],other:[`.onProgress(cb)`,`.onCancel(cb)`]}},IO:{description:`Lazy effect type with typed errors and dependency injection`,interfaces:[`Functor`,`Monad`,`Foldable`,`Matchable`],methods:{create:[`IO(() => v)`,`IO.succeed(v)`,`IO.fail(e)`,`IO.sync(f)`,`IO.async(f)`,`IO.tryPromise({try, catch})`,`IO.fromEither(e)`,`IO.fromOption(o)`,`IO.fromTry(t)`],transform:[`.map(f)`,`.flatMap(f)`,`.tap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.run()`,`.runOrThrow()`,`.runSync()`,`.runSyncOrThrow()`,`.runExit()`,`.runOption()`,`.runTry()`,`.fold(onErr, onOk)`,`.match({failure, success})`],check:[],other:[`.catchTag(tag, f)`,`.catchAll(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.timeout(ms)`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...])`,`IO.race([...])`,`IO.bracket(acquire, use, release)`,`IO.gen(function*() {...})`,`IO.Do.bind().map()`,`IO.service(Tag)`,`.provideService(Tag, impl)`,`.provideLayer(layer)`]}},Cond:{description:`Conditional expression builder - replace if-else chains`,interfaces:[],methods:{create:[`Cond<T>()`],other:[`.case(pred, result)`,`.otherwise(result)`,`.eval()`]}},Match:{description:`Pattern matching - replace switch statements`,interfaces:[],methods:{create:[`Match(value)`],other:[`.case(pattern, result)`,`.when(pred, result)`,`.default(result)`,`.done()`]}},Brand:{description:`Nominal typing without runtime overhead`,interfaces:[],methods:{create:[`Brand<K, T>(value)`],extract:[`.unwrap()`,`.toString()`]}},ValidatedBrand:{description:`Branded types with runtime validation`,interfaces:[],methods:{create:[`ValidatedBrand(validator)`,`.of(v)`,`.from(v)`,`.unsafeOf(v)`],check:[`.is(v)`],other:[`.refine(validator)`]}},Tuple:{description:`Fixed-size typed array`,interfaces:[`Typeable`,`Valuable`,`Iterable`],methods:{create:[`Tuple([a, b, ...])`,`Tuple.of(a, b, ...)`],extract:[`.first`,`.second`,`.toArray()`],transform:[`.map(f)`]}},Stack:{description:`Immutable LIFO stack`,interfaces:[`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`Stack()`,`Stack.of(...)`],transform:[`.push(v)`,`.pop()`],extract:[`.peek()`,`.toArray()`],check:[`.isEmpty`,`.size`]}}},n={Functor:{description:`Transform contained values`,methods:[`.map<B>(f: A => B): Functor<B>`]},Applicative:{extends:`Functor`,description:`Apply wrapped functions`,methods:[`.ap<B>(ff: Applicative<A => B>): Applicative<B>`]},Monad:{extends:`Applicative`,description:`Chain operations returning wrapped values`,methods:[`.flatMap<B>(f: A => Monad<B>): Monad<B>`]},Foldable:{description:`Extract via pattern matching`,methods:[`.fold<B>(empty: () => B, f: A => B): B`,`.foldLeft<B>(z: B, op: (B, A) => B): B`,`.foldRight<B>(z: B, op: (A, B) => B): B`]},Extractable:{description:`Get contained value with fallback`,methods:[`.orElse(d: T): T`,`.orThrow(e?: Error): T`,`.orNull(): T | null`,`.orUndefined(): T | undefined`]},Matchable:{description:`Pattern match on type variants`,methods:[`.match<R>(patterns: Record<Tag, Handler>): R`]},Traversable:{description:`Iterate and check contents`,methods:[`.size: number`,`.isEmpty: boolean`,`.contains(v: A): boolean`,`.reduce<B>(f, init): B`]},Collection:{description:`Collection operations`,methods:[`.toArray(): A[]`,`.forEach(f: A => void): void`]},Serializable:{description:`Convert to string formats`,methods:[`.serialize().toJSON(): string`,`.serialize().toYAML(): string`]}},r={Core:[`Option`,`Either`,`Try`],Collection:[`List`,`Set`,`Map`,`LazyList`,`Tuple`,`Stack`],Effect:[`IO`,`Task`],Utility:[`Lazy`,`Cond`,`Match`,`Brand`,`ValidatedBrand`]},i={Option:`export interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T>, Doable<T>, Reshapeable<T> {
1
+ const e=`0.49.0`,t={Option:{description:`Safe nullable handling - Some<T> or None`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Matchable`,`Serializable`,`Traversable`],methods:{create:[`Option(v)`,`Option.none()`,`Some(v)`,`None()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.ap(ff)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.orNull()`,`.match({Some, None})`],check:[`.isSome`,`.isNone`,`.isDefined`,`.isEmpty`]}},Either:{description:`Error handling with Left (error) or Right (success)`,interfaces:[`Functor`,`Monad`,`Foldable`,`Traversable`,`PromiseLike`],methods:{create:[`Right(v)`,`Left(e)`,`Either.right(v)`,`Either.left(e)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapLeft(f)`,`.swap()`],extract:[`.fold(l, r)`,`.orElse(d)`,`.orThrow()`,`.match({Left, Right})`],check:[`.isRight`,`.isLeft`]}},Try:{description:`Wrap operations that may throw - Success<T> or Failure`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Matchable`,`Serializable`,`Traversable`],methods:{create:[`Try(() => expr)`,`Success(v)`,`Failure(e)`],transform:[`.map(f)`,`.flatMap(f)`,`.recover(f)`,`.recoverWith(f)`],extract:[`.fold(f, s)`,`.orElse(d)`,`.orThrow()`,`.toOption()`,`.toEither()`],check:[`.isSuccess`,`.isFailure`]}},List:{description:`Immutable array with functional operations`,interfaces:[`Functor`,`Monad`,`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`List([...])`,`List.of(...)`,`List.empty()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.take(n)`,`.takeWhile(p)`,`.takeRight(n)`,`.drop(n)`,`.dropWhile(p)`,`.concat(list)`,`.reverse()`,`.distinct()`,`.sorted()`,`.sortBy(f)`,`.zip(list)`,`.zipWithIndex()`,`.prepend(v)`,`.slice(s, e)`],extract:[`.fold(z, f)`,`.reduce(f)`,`.head`,`.headOption`,`.tail`,`.last`,`.lastOption`,`.init`,`.indexOf(v)`,`.toArray()`],check:[`.isEmpty`,`.nonEmpty`,`.size`,`.contains(v)`],other:[`.groupBy(f)`,`.partition(p)`,`.span(p)`]}},Set:{description:`Immutable set of unique values`,interfaces:[`Functor`,`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`Set([...])`,`Set.of(...)`,`Set.empty()`],transform:[`.map(f)`,`.filter(p)`,`.union(s)`,`.intersection(s)`,`.difference(s)`,`.add(v)`],extract:[`.fold(z, f)`,`.toArray()`],check:[`.has(v)`,`.isEmpty`,`.size`]}},Map:{description:`Immutable key-value store`,interfaces:[`SafeTraversable`,`Collection`,`Serializable`],methods:{create:[`Map([[k, v], ...])`,`Map.of([k, v], ...)`,`Map.empty()`],transform:[`.set(k, v)`,`.delete(k)`,`.map(f)`,`.filter(p)`,`.add(k, v)`],extract:[`.get(k)`,`.keys()`,`.values()`,`.entries()`,`.fold(z, f)`],check:[`.has(k)`,`.isEmpty`,`.size`]}},Lazy:{description:`Deferred computation with memoization`,interfaces:[`Functor`,`Monad`,`Foldable`,`Extractable`,`Serializable`,`Traversable`],methods:{create:[`Lazy(() => expr)`],transform:[`.map(f)`,`.flatMap(f)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.get()`],check:[`.isEvaluated`]}},LazyList:{description:`Lazy sequences for large/infinite data`,interfaces:[`Functor`,`Monad`,`Iterable`],methods:{create:[`LazyList.from(iter)`,`LazyList.range(start, end)`,`LazyList.infinite(f)`],transform:[`.map(f)`,`.filter(p)`,`.take(n)`,`.takeRight(n)`,`.drop(n)`,`.takeWhile(p)`,`.dropWhile(p)`,`.concat(ll)`,`.reverse()`,`.distinct()`,`.zip(ll)`,`.zipWithIndex()`],extract:[`.head`,`.headOption`,`.tail`,`.last`,`.lastOption`,`.init`,`.toArray()`],check:[`.isEmpty`]}},Task:{description:`Async operations with cancellation and progress`,interfaces:[],methods:{create:[`Task.of(v)`,`Task.from(promise)`,`Task.sync(f)`,`Task.async(f)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`],extract:[`.run()`,`.cancel()`],other:[`.onProgress(cb)`,`.onCancel(cb)`]}},IO:{description:`Lazy effect type with typed errors and dependency injection`,interfaces:[`Functor`,`Monad`,`Foldable`,`Matchable`],methods:{create:[`IO(() => v)`,`IO.succeed(v)`,`IO.fail(e)`,`IO.sync(f)`,`IO.async(f)`,`IO.tryPromise({try, catch})`,`IO.fromEither(e)`,`IO.fromOption(o)`,`IO.fromTry(t)`],transform:[`.map(f)`,`.flatMap(f)`,`.tap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.run()`,`.runOrThrow()`,`.runSync()`,`.runSyncOrThrow()`,`.runExit()`,`.runOption()`,`.runTry()`,`.fold(onErr, onOk)`,`.match({failure, success})`],check:[],other:[`.catchTag(tag, f)`,`.catchAll(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.timeout(ms)`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...])`,`IO.race([...])`,`IO.bracket(acquire, use, release)`,`IO.gen(function*() {...})`,`IO.Do.bind().map()`,`IO.service(Tag)`,`.provideService(Tag, impl)`,`.provideLayer(layer)`]}},Cond:{description:`Conditional expression builder - replace if-else chains`,interfaces:[],methods:{create:[`Cond<T>()`],other:[`.case(pred, result)`,`.otherwise(result)`,`.eval()`]}},Match:{description:`Pattern matching - replace switch statements`,interfaces:[],methods:{create:[`Match(value)`],other:[`.case(pattern, result)`,`.when(pred, result)`,`.default(result)`,`.done()`]}},Brand:{description:`Nominal typing without runtime overhead`,interfaces:[],methods:{create:[`Brand<K, T>(value)`],extract:[`.unwrap()`,`.toString()`]}},ValidatedBrand:{description:`Branded types with runtime validation`,interfaces:[],methods:{create:[`ValidatedBrand(validator)`,`.of(v)`,`.from(v)`,`.unsafeOf(v)`],check:[`.is(v)`],other:[`.refine(validator)`]}},Tuple:{description:`Fixed-size typed array`,interfaces:[`Typeable`,`Valuable`,`Iterable`],methods:{create:[`Tuple([a, b, ...])`,`Tuple.of(a, b, ...)`],extract:[`.first`,`.second`,`.toArray()`],transform:[`.map(f)`]}},Stack:{description:`Immutable LIFO stack`,interfaces:[`Foldable`,`Collection`,`Serializable`,`Traversable`],methods:{create:[`Stack()`,`Stack.of(...)`],transform:[`.push(v)`,`.pop()`],extract:[`.peek()`,`.toArray()`],check:[`.isEmpty`,`.size`]}}},n={Functor:{description:`Transform contained values`,methods:[`.map<B>(f: A => B): Functor<B>`]},Applicative:{extends:`Functor`,description:`Apply wrapped functions`,methods:[`.ap<B>(ff: Applicative<A => B>): Applicative<B>`]},Monad:{extends:`Applicative`,description:`Chain operations returning wrapped values`,methods:[`.flatMap<B>(f: A => Monad<B>): Monad<B>`]},Foldable:{description:`Extract via pattern matching`,methods:[`.fold<B>(empty: () => B, f: A => B): B`,`.foldLeft<B>(z: B, op: (B, A) => B): B`,`.foldRight<B>(z: B, op: (A, B) => B): B`]},Extractable:{description:`Get contained value with fallback`,methods:[`.orElse(d: T): T`,`.orThrow(e?: Error): T`,`.orNull(): T | null`,`.orUndefined(): T | undefined`]},Matchable:{description:`Pattern match on type variants`,methods:[`.match<R>(patterns: Record<Tag, Handler>): R`]},Traversable:{description:`Iterate and check contents`,methods:[`.size: number`,`.isEmpty: boolean`,`.contains(v: A): boolean`,`.reduce<B>(f, init): B`]},Collection:{description:`Collection operations`,methods:[`.toArray(): A[]`,`.forEach(f: A => void): void`]},Serializable:{description:`Convert to string formats`,methods:[`.serialize().toJSON(): string`,`.serialize().toYAML(): string`]}},r={Core:[`Option`,`Either`,`Try`],Collection:[`List`,`Set`,`Map`,`LazyList`,`Tuple`,`Stack`],Effect:[`IO`,`Task`],Utility:[`Lazy`,`Cond`,`Match`,`Brand`,`ValidatedBrand`]},i={Option:`export interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T>, Doable<T>, Reshapeable<T> {
2
2
  /** The contained value (undefined for None) */
3
3
  readonly value: T | undefined
4
4
  /** Whether this Option contains no value */
@@ -298,6 +298,7 @@ const e=`0.47.1`,t={Option:{description:`Safe nullable handling - Some<T> or Non
298
298
  Pipe<[K, V][]>,
299
299
  Foldable<Tuple<[K, V]>>,
300
300
  Iterable<[K, V]> {
301
+ readonly [Symbol.toStringTag]: string
301
302
  readonly _tag: "Map"
302
303
  add(item: Tuple<[K, V]>): Map<K, V>
303
304
  remove(value: K): Map<K, V>
@@ -471,6 +472,7 @@ const e=`0.47.1`,t={Option:{description:`Safe nullable handling - Some<T> or Non
471
472
  toValue(): { _tag: "Lazy"; evaluated: boolean; value?: T }
472
473
  }`,LazyList:`export interface LazyList<A extends Type>
473
474
  extends Foldable<A>, Pipe<LazyList<A>>, Serializable<LazyList<A>>, Typeable<"LazyList"> {
475
+ readonly [Symbol.toStringTag]: string
474
476
  // Iterator protocol
475
477
  [Symbol.iterator](): Iterator<A>
476
478
 
@@ -548,6 +550,7 @@ const e=`0.47.1`,t={Option:{description:`Safe nullable handling - Some<T> or Non
548
550
  readonly match: <U>(patterns: { Ok: (value: T) => U; Err: (error: Throwable) => U }) => U
549
551
  }`,Tuple:`export interface Tuple<T extends Type[]>
550
552
  extends Foldable<T[number]>, Pipe<Tuple<T>>, Serializable<Tuple<T>>, Typeable<"Tuple"> {
553
+ readonly [Symbol.toStringTag]: string
551
554
  get<K extends number>(index: K): T[K]
552
555
 
553
556
  map<U extends Type[]>(f: (value: T) => U): Tuple<U>
@@ -564,6 +567,7 @@ const e=`0.47.1`,t={Option:{description:`Safe nullable handling - Some<T> or Non
564
567
 
565
568
  toValue(): { _tag: "Tuple"; value: T }
566
569
  }`,Stack:`export type Stack<A extends Type> = {
570
+ readonly [Symbol.toStringTag]: string
567
571
  /**
568
572
  * Push a value onto the top of the stack
569
573
  * @param value - The value to push
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Brand, BrandedBoolean, BrandedNumber, BrandedString, ExtractBrand, Unwrap, createBrander, hasBrand, unwrap as unwrapBrand } from "./branded/index.js";
2
- import { $ as Validation, $t as UrlString, A as UIO, At as isTaggedThrowable, B as Tag, Bt as isCompanion, C as TestClockTag, Ct as TaskFailure, D as RIO, Dt as TaskResult, E as InterruptedError, Et as TaskParams, F as Exit, Ft as Match, G as Kind, Gt as ISO8601Date, H as Identity, Ht as BoundedNumber, I as ExitTag, It as UntypedMatch, J as TryKind, Jt as NonNegativeNumber, K as ListKind, Kt as IntegerNumber, L as Context, Lt as Cond, M as LayerError, Mt as Throwable, N as LayerInput, Nt as ThrowableType, O as Task, Ot as TaskSuccess, P as LayerOutput, Pt as Base, Q as FormValidation, Qt as UUID, R as ContextServices, Rt as CompanionMethods, S as TestClock, St as Task$1, T as IO, Tt as TaskOutcome, U as EitherKind, Ut as BoundedString, V as TagService, Vt as Companion, W as HKT, Wt as EmailAddress, X as FoldableUtils, Xt as PositiveInteger, Y as UniversalContainer, Yt as PatternString, Z as FieldValidation, Zt as PositiveNumber, _ as MatchableUtils, _t as CancellationTokenSource, a as Stack, an as AsyncMonad, at as TypedError, b as Traversable, bt as Sync, c as SerializationResult, cn as CollectionOps, ct as ErrorFormatterOptions, d as createSerializer, dn as Extractable, dt as createErrorSerializer, en as ValidatedBrand, et as ValidationRule, f as fromBinary, fn as isExtractable, ft as formatError, g as Matchable, gt as CancellationToken, h as Ref, hn as ParseError, ht as Async, i as Collection, in as Applicative, it as ErrorStatus, j as Layer, jt as NAME, k as TimeoutError, kt as createCancellationTokenSource, l as createCustomSerializer, ln as ContainerOps, lt as ErrorWithTaskInfo, m as fromYAML, mn as Doable, mt as safeStringify, n as FunctypeBase, nt as ErrorCode, o as Valuable, on as Functor, ot as TypedErrorContext, p as fromJSON, pn as DoResult, pt as formatStackTrace, q as OptionKind, qt as NonEmptyString, r as FunctypeCollection, rn as Promisable, rt as ErrorMessage, s as ValuableParams, sn as Monad, st as ErrorChainElement, t as Functype, tn as ValidatedBrandCompanion, tt as Validator, u as createSerializationCompanion, un as LazyList, ut as TaskErrorInfo, v as ESMap, vt as Err, w as TestContext, wt as TaskMetadata, x as Lazy, xt as TaggedThrowable, y as ESMapType, yt as Ok, z as HasService, zt as InstanceType } from "./Functype-Boat1fLo.js";
2
+ import { $ as Validation, $t as UrlString, A as UIO, At as isTaggedThrowable, B as Tag, Bt as isCompanion, C as TestClockTag, Ct as TaskFailure, D as RIO, Dt as TaskResult, E as InterruptedError, Et as TaskParams, F as Exit, Ft as Match, G as Kind, Gt as ISO8601Date, H as Identity, Ht as BoundedNumber, I as ExitTag, It as UntypedMatch, J as TryKind, Jt as NonNegativeNumber, K as ListKind, Kt as IntegerNumber, L as Context, Lt as Cond, M as LayerError, Mt as Throwable, N as LayerInput, Nt as ThrowableType, O as Task, Ot as TaskSuccess, P as LayerOutput, Pt as Base, Q as FormValidation, Qt as UUID, R as ContextServices, Rt as CompanionMethods, S as TestClock, St as Task$1, T as IO, Tt as TaskOutcome, U as EitherKind, Ut as BoundedString, V as TagService, Vt as Companion, W as HKT, Wt as EmailAddress, X as FoldableUtils, Xt as PositiveInteger, Y as UniversalContainer, Yt as PatternString, Z as FieldValidation, Zt as PositiveNumber, _ as MatchableUtils, _t as CancellationTokenSource, a as Stack, an as AsyncMonad, at as TypedError, b as Traversable, bt as Sync, c as SerializationResult, cn as CollectionOps, ct as ErrorFormatterOptions, d as createSerializer, dn as Extractable, dt as createErrorSerializer, en as ValidatedBrand, et as ValidationRule, f as fromBinary, fn as isExtractable, ft as formatError, g as Matchable, gt as CancellationToken, h as Ref, hn as ParseError, ht as Async, i as Collection, in as Applicative, it as ErrorStatus, j as Layer, jt as NAME, k as TimeoutError, kt as createCancellationTokenSource, l as createCustomSerializer, ln as ContainerOps, lt as ErrorWithTaskInfo, m as fromYAML, mn as Doable, mt as safeStringify, n as FunctypeBase, nt as ErrorCode, o as Valuable, on as Functor, ot as TypedErrorContext, p as fromJSON, pn as DoResult, pt as formatStackTrace, q as OptionKind, qt as NonEmptyString, r as FunctypeCollection, rn as Promisable, rt as ErrorMessage, s as ValuableParams, sn as Monad, st as ErrorChainElement, t as Functype, tn as ValidatedBrandCompanion, tt as Validator, u as createSerializationCompanion, un as LazyList, ut as TaskErrorInfo, v as ESMap, vt as Err, w as TestContext, wt as TaskMetadata, x as Lazy, xt as TaggedThrowable, y as ESMapType, yt as Ok, z as HasService, zt as InstanceType } from "./Functype-rgysbeU6.js";
3
3
  import { a as Serializable, c as Foldable, i as isTypeable, l as Type, n as Typeable, o as SerializationMethods, r as TypeableParams, s as Pipe, t as ExtractTag } from "./Typeable-lfO2nRVW.js";
4
4
  import { Try, TypeNames } from "./try/index.js";
5
5
  import { Tuple } from "./tuple/index.js";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{Brand as e,BrandedBoolean as t,BrandedNumber as n,BrandedString as r,createBrander as i,hasBrand as a,unwrap as o}from"./branded/index.js";import{$ as s,A as c,B as l,C as u,D as d,E as f,F as p,G as m,H as h,I as g,J as _,K as v,L as y,M as b,N as x,O as S,P as C,Q as w,R as T,S as E,T as D,U as O,V as k,W as A,X as j,Y as M,Z as N,_ as P,a as F,at as I,b as L,c as R,d as z,et as B,f as V,g as H,h as U,i as W,it as G,j as K,k as q,l as J,m as Y,n as X,nt as Z,o as Q,ot as $,p as ee,q as te,r as ne,rt as re,s as ie,t as ae,tt as oe,u as se,v as ce,w as le,x as ue,y as de,z as fe}from"./Valuable-DeccMyYD.js";import{t as pe}from"./Companion-VlxcFhzb.js";import{None as me,Option as he,OptionConstructor as ge,Some as _e}from"./option/index.js";import{Set as ve}from"./set/index.js";import{Try as ye}from"./try/index.js";import{List as be}from"./list/index.js";import{Either as xe,Left as Se,Right as Ce,TypeCheckLeft as we,TypeCheckRight as Te,isLeft as Ee,isRight as De,tryCatch as Oe,tryCatchAsync as ke}from"./either/index.js";import{$ as Ae,Do as je,DoAsync as Me,EmptyListError as Ne,FailureError as Pe,LeftError as Fe,NoneError as Ie,isDoCapable as Le,unwrap as Re}from"./do/index.js";import{Tuple as ze}from"./tuple/index.js";import{Map as Be}from"./map/index.js";export{Ae as $,x as Base,y as BoundedNumber,T as BoundedString,e as Brand,t as BrandedBoolean,n as BrandedNumber,r as BrandedString,pe as Companion,p as Cond,U as Context,je as Do,Me as DoAsync,W as ESMap,xe as Either,fe as EmailAddress,Ne as EmptyListError,f as Err,Y as Exit,Pe as FailureError,ce as FoldableUtils,P as HKT,z as IO,l as ISO8601Date,H as Identity,k as IntegerNumber,V as InterruptedError,se as Layer,F as Lazy,w as LazyList,Se as Left,Fe as LeftError,be as List,Be as Map,C as Match,ne as MatchableUtils,K as NAME,h as NonEmptyString,O as NonNegativeNumber,me as None,Ie as NoneError,d as Ok,he as Option,ge as OptionConstructor,$ as ParseError,A as PatternString,m as PositiveInteger,v as PositiveNumber,s as Ref,Ce as Right,ve as Set,_e as Some,X as Stack,J as Tag,S as Task,Q as TestClock,ie as TestClockTag,R as TestContext,b as Throwable,ee as TimeoutError,ye as Try,ze as Tuple,we as TypeCheckLeft,Te as TypeCheckRight,j as Typeable,ue as TypedError,te as UUID,_ as UrlString,M as ValidatedBrand,L as Validation,ae as Valuable,i as createBrander,q as createCancellationTokenSource,B as createCustomSerializer,E as createErrorSerializer,oe as createSerializationCompanion,Z as createSerializer,u as formatError,le as formatStackTrace,re as fromBinary,G as fromJSON,I as fromYAML,a as hasBrand,g as isCompanion,Le as isDoCapable,de as isExtractable,Ee as isLeft,De as isRight,c as isTaggedThrowable,N as isTypeable,D as safeStringify,Oe as tryCatch,ke as tryCatchAsync,Re as unwrap,o as unwrapBrand};
1
+ import{Brand as e,BrandedBoolean as t,BrandedNumber as n,BrandedString as r,createBrander as i,hasBrand as a,unwrap as o}from"./branded/index.js";import{$ as s,A as c,B as l,C as u,D as d,E as f,F as p,G as m,H as h,I as g,J as _,K as v,L as y,M as b,N as x,O as S,P as C,Q as w,R as T,S as E,T as D,U as O,V as k,W as A,X as j,Y as M,Z as N,_ as P,a as F,at as I,b as L,c as R,d as z,et as B,f as V,g as H,h as U,i as W,it as G,j as K,k as q,l as J,m as Y,n as X,nt as Z,o as Q,ot as $,p as ee,q as te,r as ne,rt as re,s as ie,t as ae,tt as oe,u as se,v as ce,w as le,x as ue,y as de,z as fe}from"./Valuable-GZAXcYok.js";import{n as pe}from"./stringify-DepodSy0.js";import{None as me,Option as he,OptionConstructor as ge,Some as _e}from"./option/index.js";import{Set as ve}from"./set/index.js";import{Try as ye}from"./try/index.js";import{List as be}from"./list/index.js";import{Either as xe,Left as Se,Right as Ce,TypeCheckLeft as we,TypeCheckRight as Te,isLeft as Ee,isRight as De,tryCatch as Oe,tryCatchAsync as ke}from"./either/index.js";import{$ as Ae,Do as je,DoAsync as Me,EmptyListError as Ne,FailureError as Pe,LeftError as Fe,NoneError as Ie,isDoCapable as Le,unwrap as Re}from"./do/index.js";import{Tuple as ze}from"./tuple/index.js";import{Map as Be}from"./map/index.js";export{Ae as $,x as Base,y as BoundedNumber,T as BoundedString,e as Brand,t as BrandedBoolean,n as BrandedNumber,r as BrandedString,pe as Companion,p as Cond,U as Context,je as Do,Me as DoAsync,W as ESMap,xe as Either,fe as EmailAddress,Ne as EmptyListError,f as Err,Y as Exit,Pe as FailureError,ce as FoldableUtils,P as HKT,z as IO,l as ISO8601Date,H as Identity,k as IntegerNumber,V as InterruptedError,se as Layer,F as Lazy,w as LazyList,Se as Left,Fe as LeftError,be as List,Be as Map,C as Match,ne as MatchableUtils,K as NAME,h as NonEmptyString,O as NonNegativeNumber,me as None,Ie as NoneError,d as Ok,he as Option,ge as OptionConstructor,$ as ParseError,A as PatternString,m as PositiveInteger,v as PositiveNumber,s as Ref,Ce as Right,ve as Set,_e as Some,X as Stack,J as Tag,S as Task,Q as TestClock,ie as TestClockTag,R as TestContext,b as Throwable,ee as TimeoutError,ye as Try,ze as Tuple,we as TypeCheckLeft,Te as TypeCheckRight,j as Typeable,ue as TypedError,te as UUID,_ as UrlString,M as ValidatedBrand,L as Validation,ae as Valuable,i as createBrander,q as createCancellationTokenSource,B as createCustomSerializer,E as createErrorSerializer,oe as createSerializationCompanion,Z as createSerializer,u as formatError,le as formatStackTrace,re as fromBinary,G as fromJSON,I as fromYAML,a as hasBrand,g as isCompanion,Le as isDoCapable,de as isExtractable,Ee as isLeft,De as isRight,c as isTaggedThrowable,N as isTypeable,D as safeStringify,Oe as tryCatch,ke as tryCatchAsync,Re as unwrap,o as unwrapBrand};
@@ -1,4 +1,4 @@
1
- import { mn as Doable, nn as Reshapeable, r as FunctypeCollection } from "../Functype-Boat1fLo.js";
1
+ import { mn as Doable, nn as Reshapeable, r as FunctypeCollection } from "../Functype-rgysbeU6.js";
2
2
  import { l as Type, n as Typeable } from "../Typeable-lfO2nRVW.js";
3
3
  import { Option } from "../option/index.js";
4
4
 
@@ -1,2 +1,2 @@
1
- import{Z as e,nt as t}from"../Valuable-DeccMyYD.js";import{t as n}from"../Companion-VlxcFhzb.js";import{None as r,Option as i}from"../option/index.js";import{Set as a}from"../set/index.js";import{Try as o}from"../try/index.js";import{Left as s,Right as c}from"../either/index.js";import l from"safe-stable-stringify";const u=n=>{let d=Array.from(n??[]),f={_tag:`List`,[Symbol.iterator]:()=>d[Symbol.iterator](),get size(){return d.length},get length(){return d.length},map:e=>u(d.map(e)),ap:e=>u(d.flatMap(t=>Array.from(e).map(e=>e(t)))),flatMap:e=>u(d.flatMap(t=>Array.from(e(t)))),flatMapAsync:async e=>u((await Promise.all(d.map(async t=>await e(t)))).flatMap(e=>Array.from(e))),forEach:e=>d.forEach(e),contains:e=>d.includes(e),count:e=>d.filter(e).length,exists:e=>d.some(e),filter:e=>u(d.filter(e)),filterNot:e=>u(d.filter(t=>!e(t))),filterType:t=>u(d.filter(n=>e(n,t))),find:(t,n)=>i(d.find(r=>t(r)&&(n?e(r,n):!0))),get head(){return d[0]},get headOption(){return d.length>0?i(d[0]):r()},get isEmpty(){return d.length===0},toArray:()=>[...d],reduce:e=>d.reduce(e),reduceRight:e=>d.reduceRight(e),fold:(e,t)=>{if(d.length===0)return e();let n=d[0];return t(n)},foldLeft:e=>t=>d.reduce(t,e),foldRight:e=>t=>d.reduceRight((e,n)=>t(n,e),e),match:e=>d.length===0?e.Empty():e.NonEmpty([...d]),remove:e=>u(d.filter(t=>t!==e)),removeAt:e=>e<0||e>=d.length?f:u([...d.slice(0,e),...d.slice(e+1)]),add:e=>u([...d,e]),get:e=>i(d[e]),concat:e=>u([...d,...e.toArray()]),take:e=>u(d.slice(0,Math.max(0,e))),takeWhile:e=>{let t=[];for(let n of d){if(!e(n))break;t.push(n)}return u(t)},takeRight:e=>u(e<=0?[]:d.slice(-e)),get last(){return d[d.length-1]},get lastOption(){return d.length>0?i(d[d.length-1]):r()},get tail(){return u(d.slice(1))},get init(){return u(d.length===0?[]:d.slice(0,-1))},reverse:()=>u([...d].reverse()),indexOf:e=>d.indexOf(e),prepend:e=>u([e,...d]),distinct:()=>{let e=new globalThis.Set,t=[];for(let n of d)e.has(n)||(e.add(n),t.push(n));return u(t)},sorted:e=>u([...d].sort(e)),sortBy:(e,t)=>u([...d].sort((n,r)=>{let i=e(n),a=e(r);return t?t(i,a):i<a?-1:i>a?1:0})),zip:e=>{let t=e.toArray(),n=Math.min(d.length,t.length),r=[];for(let e=0;e<n;e++)r.push([d[e],t[e]]);return u(r)},zipWithIndex:()=>u(d.map((e,t)=>[e,t])),groupBy:e=>{let t=new globalThis.Map;for(let n of d){let r=e(n),i=t.get(r)??[];i.push(n),t.set(r,i)}let n=new globalThis.Map;for(let[e,r]of t)n.set(e,u(r));return n},partition:e=>{let t=[],n=[];for(let r of d)e(r)?t.push(r):n.push(r);return[u(t),u(n)]},span:e=>{let t=d.findIndex(t=>!e(t));return t===-1?[u([...d]),u([])]:[u(d.slice(0,t)),u(d.slice(t))]},slice:(e,t)=>u(d.slice(e,t)),drop:e=>u(d.slice(e)),dropRight:e=>u(d.slice(0,-e)),dropWhile:e=>u(d.slice(d.findIndex(t=>!e(t)))),flatten:()=>u(d.flatMap(e=>Array.isArray(e)?e:[e])),toList:()=>f,toSet:()=>a(d),toOption:()=>d.length>0?i(d[0]):r(),toEither:e=>d.length>0?c(d[0]):s(e),toTry:()=>d.length>0?o(()=>d[0]):o(()=>{throw Error(`Empty list`)}),toString:()=>`List(${l(d)})`,toValue:()=>({_tag:`List`,value:d}),pipe:e=>e([...d]),serialize:()=>t(`List`,d),doUnwrap(){return d.length===0?{ok:!1,empty:!0}:{ok:!0,value:d[0]}}};return f},d=e=>u(e),f=u([]),p={empty:()=>f,of:(...e)=>u(e),fromJSON:e=>m(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
1
+ import{Z as e,nt as t}from"../Valuable-GZAXcYok.js";import{n,t as r}from"../stringify-DepodSy0.js";import{None as i,Option as a}from"../option/index.js";import{Set as o}from"../set/index.js";import{Try as s}from"../try/index.js";import{Left as c,Right as l}from"../either/index.js";const u=n=>{let d=Array.from(n??[]),f={[Symbol.toStringTag]:`List`,_tag:`List`,[Symbol.iterator]:()=>d[Symbol.iterator](),get size(){return d.length},get length(){return d.length},map:e=>u(d.map(e)),ap:e=>u(d.flatMap(t=>Array.from(e).map(e=>e(t)))),flatMap:e=>u(d.flatMap(t=>Array.from(e(t)))),flatMapAsync:async e=>u((await Promise.all(d.map(async t=>await e(t)))).flatMap(e=>Array.from(e))),forEach:e=>d.forEach(e),contains:e=>d.includes(e),count:e=>d.filter(e).length,exists:e=>d.some(e),filter:e=>u(d.filter(e)),filterNot:e=>u(d.filter(t=>!e(t))),filterType:t=>u(d.filter(n=>e(n,t))),find:(t,n)=>a(d.find(r=>t(r)&&(n?e(r,n):!0))),get head(){return d[0]},get headOption(){return d.length>0?a(d[0]):i()},get isEmpty(){return d.length===0},toArray:()=>[...d],reduce:e=>d.reduce(e),reduceRight:e=>d.reduceRight(e),fold:(e,t)=>{if(d.length===0)return e();let n=d[0];return t(n)},foldLeft:e=>t=>d.reduce(t,e),foldRight:e=>t=>d.reduceRight((e,n)=>t(n,e),e),match:e=>d.length===0?e.Empty():e.NonEmpty([...d]),remove:e=>u(d.filter(t=>t!==e)),removeAt:e=>e<0||e>=d.length?f:u([...d.slice(0,e),...d.slice(e+1)]),add:e=>u([...d,e]),get:e=>a(d[e]),concat:e=>u([...d,...e.toArray()]),take:e=>u(d.slice(0,Math.max(0,e))),takeWhile:e=>{let t=[];for(let n of d){if(!e(n))break;t.push(n)}return u(t)},takeRight:e=>u(e<=0?[]:d.slice(-e)),get last(){return d[d.length-1]},get lastOption(){return d.length>0?a(d[d.length-1]):i()},get tail(){return u(d.slice(1))},get init(){return u(d.length===0?[]:d.slice(0,-1))},reverse:()=>u([...d].reverse()),indexOf:e=>d.indexOf(e),prepend:e=>u([e,...d]),distinct:()=>{let e=new globalThis.Set,t=[];for(let n of d)e.has(n)||(e.add(n),t.push(n));return u(t)},sorted:e=>u([...d].sort(e)),sortBy:(e,t)=>u([...d].sort((n,r)=>{let i=e(n),a=e(r);return t?t(i,a):i<a?-1:i>a?1:0})),zip:e=>{let t=e.toArray(),n=Math.min(d.length,t.length),r=[];for(let e=0;e<n;e++)r.push([d[e],t[e]]);return u(r)},zipWithIndex:()=>u(d.map((e,t)=>[e,t])),groupBy:e=>{let t=new globalThis.Map;for(let n of d){let r=e(n),i=t.get(r)??[];i.push(n),t.set(r,i)}let n=new globalThis.Map;for(let[e,r]of t)n.set(e,u(r));return n},partition:e=>{let t=[],n=[];for(let r of d)e(r)?t.push(r):n.push(r);return[u(t),u(n)]},span:e=>{let t=d.findIndex(t=>!e(t));return t===-1?[u([...d]),u([])]:[u(d.slice(0,t)),u(d.slice(t))]},slice:(e,t)=>u(d.slice(e,t)),drop:e=>u(d.slice(e)),dropRight:e=>u(d.slice(0,-e)),dropWhile:e=>u(d.slice(d.findIndex(t=>!e(t)))),flatten:()=>u(d.flatMap(e=>Array.isArray(e)?e:[e])),toList:()=>f,toSet:()=>o(d),toOption:()=>d.length>0?a(d[0]):i(),toEither:e=>d.length>0?l(d[0]):c(e),toTry:()=>d.length>0?s(()=>d[0]):s(()=>{throw Error(`Empty list`)}),toString:()=>`List(${r(d)})`,toValue:()=>({_tag:`List`,value:d}),pipe:e=>e([...d]),serialize:()=>t(`List`,d),doUnwrap(){return d.length===0?{ok:!1,empty:!0}:{ok:!0,value:d[0]}}};return f},d=e=>u(e),f=u([]),p={empty:()=>f,of:(...e)=>u(e),fromJSON:e=>m(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
2
2
  `)[1]?.split(`: `)[1];return m(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return p.fromJSON(t)}},m=n(d,p);export{m as List};
@@ -1,4 +1,4 @@
1
- import { b as Traversable, i as Collection } from "../Functype-Boat1fLo.js";
1
+ import { b as Traversable, i as Collection } from "../Functype-rgysbeU6.js";
2
2
  import { a as Serializable, c as Foldable, l as Type, n as Typeable, s as Pipe } from "../Typeable-lfO2nRVW.js";
3
3
  import { Tuple } from "../tuple/index.js";
4
4
  import { Option } from "../option/index.js";
@@ -9,6 +9,7 @@ import { Option } from "../option/index.js";
9
9
  */
10
10
  type SafeTraversable<K, V> = Omit<Traversable<Tuple<[K, V]>>, "map" | "flatMap" | "flatMapAsync" | "ap">;
11
11
  interface Map<K, V> extends SafeTraversable<K, V>, Collection<Tuple<[K, V]>>, Typeable<"Map">, Serializable<[K, V][]>, Pipe<[K, V][]>, Foldable<Tuple<[K, V]>>, Iterable<[K, V]> {
12
+ readonly [Symbol.toStringTag]: string;
12
13
  readonly _tag: "Map";
13
14
  add(item: Tuple<[K, V]>): Map<K, V>;
14
15
  remove(value: K): Map<K, V>;
package/dist/map/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{i as e,nt as t}from"../Valuable-DeccMyYD.js";import{t as n}from"../Companion-VlxcFhzb.js";import{Option as r}from"../option/index.js";import{Set as i}from"../set/index.js";import{List as a}from"../list/index.js";import{Tuple as o}from"../tuple/index.js";const s=n=>{let c={values:new e(n)},l=()=>Array.from(c.values.entries()).map(([e,t])=>o([e,t])),u=t=>s(new e(c.values).set(t.toArray()[0],t.toArray()[1]).entries()),d=t=>{let n=new e(c.values);return n.delete(t)?s(n.entries()):s(c.values.entries())},f=e=>{let t=e.toArray();return c.values.get(t[0])===t[1]},p=()=>c.values.size,m=e=>s(Array.from(c.values.entries()).map(([t,n])=>[t,e(n)])),h=e=>s(s(c.values.entries()).toList().flatMap(e).toArray()),g=e=>{let t=[];for(let[n,r]of c.values.entries()){let i=e.get(n);i._tag===`Some`&&i.value&&t.push([n,i.value(r)])}return s(t)},_=async t=>{let n=new e;for(let[e,r]of c.values.entries()){let e=await t(r);for(let t of e.toList()){let[e,r]=t.toArray();n.set(e,r)}}return s(n.entries())},v=e=>a(l()).reduce(e),y=e=>a(l()).reduceRight(e),b=e=>t=>a(l()).foldLeft(e)(t),x=e=>t=>a(l()).foldRight(e)(t),S=e=>r(c.values.get(e)),C=(e,t)=>r(c.values.get(e)).orElse(t),w=()=>c.values.size===0,T=(e,t)=>r(c.values.get(e)).or(t),E=(e,t)=>{if(w())return e();let n=l();if(n.length===0)return e();let r=n[0];return r===void 0?e():t(r)},D=()=>a(l()),O=()=>i(l()),k=()=>`Map(${l().toString()})`,A=e=>w()?e.Empty():e.NonEmpty(l());return{_tag:`Map`,[Symbol.iterator]:()=>c.values.entries(),add:u,remove:d,contains:f,get size(){return p()},map:m,ap:g,flatMap:h,flatMapAsync:_,reduce:v,reduceRight:y,foldLeft:b,foldRight:x,fold:E,match:A,get:S,getOrElse:C,get isEmpty(){return w()},orElse:T,toList:D,toSet:O,toString:k,toValue:()=>({_tag:`Map`,value:Array.from(c.values.entries())}),pipe:e=>e(Array.from(c.values.entries())),serialize:()=>t(`Map`,Array.from(c.values.entries()))}},c=e=>s(e),l=s([]),u={empty:()=>l,of:(...e)=>s(e),fromJSON:e=>d(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
1
+ import{i as e,nt as t}from"../Valuable-GZAXcYok.js";import{n}from"../stringify-DepodSy0.js";import{Option as r}from"../option/index.js";import{Set as i}from"../set/index.js";import{List as a}from"../list/index.js";import{Tuple as o}from"../tuple/index.js";const s=n=>{let c={values:new e(n)},l=()=>Array.from(c.values.entries()).map(([e,t])=>o([e,t])),u=t=>s(new e(c.values).set(t.toArray()[0],t.toArray()[1]).entries()),d=t=>{let n=new e(c.values);return n.delete(t)?s(n.entries()):s(c.values.entries())},f=e=>{let t=e.toArray();return c.values.get(t[0])===t[1]},p=()=>c.values.size,m=e=>s(Array.from(c.values.entries()).map(([t,n])=>[t,e(n)])),h=e=>s(s(c.values.entries()).toList().flatMap(e).toArray()),g=e=>{let t=[];for(let[n,r]of c.values.entries()){let i=e.get(n);i._tag===`Some`&&i.value&&t.push([n,i.value(r)])}return s(t)},_=async t=>{let n=new e;for(let[e,r]of c.values.entries()){let e=await t(r);for(let t of e.toList()){let[e,r]=t.toArray();n.set(e,r)}}return s(n.entries())},v=e=>a(l()).reduce(e),y=e=>a(l()).reduceRight(e),b=e=>t=>a(l()).foldLeft(e)(t),x=e=>t=>a(l()).foldRight(e)(t),S=e=>r(c.values.get(e)),C=(e,t)=>r(c.values.get(e)).orElse(t),w=()=>c.values.size===0,T=(e,t)=>r(c.values.get(e)).or(t),E=(e,t)=>{if(w())return e();let n=l();if(n.length===0)return e();let r=n[0];return r===void 0?e():t(r)},D=()=>a(l()),O=()=>i(l()),k=()=>`Map(${l().toString()})`,A=e=>w()?e.Empty():e.NonEmpty(l());return{[Symbol.toStringTag]:`FunctypeMap`,_tag:`Map`,[Symbol.iterator]:()=>c.values.entries(),add:u,remove:d,contains:f,get size(){return p()},map:m,ap:g,flatMap:h,flatMapAsync:_,reduce:v,reduceRight:y,foldLeft:b,foldRight:x,fold:E,match:A,get:S,getOrElse:C,get isEmpty(){return w()},orElse:T,toList:D,toSet:O,toString:k,toValue:()=>({_tag:`Map`,value:Array.from(c.values.entries())}),pipe:e=>e(Array.from(c.values.entries())),serialize:()=>t(`Map`,Array.from(c.values.entries()))}},c=e=>s(e),l=s([]),u={empty:()=>l,of:(...e)=>s(e),fromJSON:e=>d(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
2
2
  `)[1]?.split(`: `)[1];return d(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return u.fromJSON(t)}},d=n(c,u);export{d as Map};
@@ -1,4 +1,4 @@
1
- import { mn as Doable, nn as Reshapeable, rn as Promisable, t as Functype } from "../Functype-Boat1fLo.js";
1
+ import { mn as Doable, nn as Reshapeable, rn as Promisable, t as Functype } from "../Functype-rgysbeU6.js";
2
2
  import { l as Type } from "../Typeable-lfO2nRVW.js";
3
3
  import { List } from "../list/index.js";
4
4
  import { Either } from "../either/index.js";
@@ -1,2 +1,2 @@
1
- import{nt as e}from"../Valuable-DeccMyYD.js";import{t}from"../Companion-VlxcFhzb.js";import{Try as n}from"../try/index.js";import{List as r}from"../list/index.js";import{Left as i,Right as a}from"../either/index.js";import o from"safe-stable-stringify";const s=t=>({_tag:`Some`,value:t,isEmpty:!1,isSome(){return!0},isNone(){return!1},orElse:()=>t,orThrow:()=>t,or:e=>s(t),orNull:()=>t,orUndefined:()=>t,map:e=>s(e(t)),ap:e=>e._tag===`Some`&&e.value?s(e.value(t)):c,filter(e){return e(t)?s(t):c},count:e=>e(t)?1:0,find:e=>e(t)?s(t):c,exists:e=>e(t),forEach:e=>e(t),fold:(e,n)=>n(t),match:e=>e.Some(t),flatMap:e=>e(t),flatMapAsync:async e=>await e(t),reduce:e=>e(void 0,t),reduceRight:e=>e(void 0,t),foldLeft:e=>n=>n(e,t),foldRight:e=>n=>n(t,e),toList:()=>r([t]),contains:e=>e===t,size:1,toOption:()=>s(t),toEither:e=>a(t),toTry:()=>n(()=>t),toPromise:()=>Promise.resolve(t),toString:()=>`Some(${o(t)})`,toValue:()=>({_tag:`Some`,value:t}),pipe:e=>e(t),serialize:()=>e(`Some`,t),doUnwrap(){return{ok:!0,value:t}}}),c={_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=>c,ap:e=>c,filter(e){return c},count:e=>0,find:e=>c,exists:e=>!1,forEach:e=>{},flatMap:e=>c,flatMapAsync:e=>Promise.resolve(c),reduce:()=>void 0,reduceRight:()=>void 0,fold:(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>r([]),contains:()=>!1,size:0,toOption:()=>c,toEither:e=>i(e),toTry:()=>n(()=>{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:()=>e(`None`,null),doUnwrap(){return{ok:!1,empty:!0}}},l=()=>c,u=e=>e==null?l():s(e),d={from:e=>f(e),none:()=>l(),isSome:e=>e.isSome(),isNone:e=>e.isNone(),fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Some`?s(t.value):l()},fromYAML:e=>{let t=e.split(`
1
+ import{nt as e}from"../Valuable-GZAXcYok.js";import{n as t,t as n}from"../stringify-DepodSy0.js";import{Try as r}from"../try/index.js";import{List as i}from"../list/index.js";import{Left as a,Right as o}from"../either/index.js";const s=t=>({[Symbol.toStringTag]:`Option`,_tag:`Some`,value:t,isEmpty:!1,isSome(){return!0},isNone(){return!1},orElse:()=>t,orThrow:()=>t,or:e=>s(t),orNull:()=>t,orUndefined:()=>t,map:e=>s(e(t)),ap:e=>e._tag===`Some`&&e.value?s(e.value(t)):c,filter(e){return e(t)?s(t):c},count:e=>e(t)?1:0,find:e=>e(t)?s(t):c,exists:e=>e(t),forEach:e=>e(t),fold:(e,n)=>n(t),match:e=>e.Some(t),flatMap:e=>e(t),flatMapAsync:async e=>await e(t),reduce:e=>e(void 0,t),reduceRight:e=>e(void 0,t),foldLeft:e=>n=>n(e,t),foldRight:e=>n=>n(t,e),toList:()=>i([t]),contains:e=>e===t,size:1,toOption:()=>s(t),toEither:e=>o(t),toTry:()=>r(()=>t),toPromise:()=>Promise.resolve(t),toString:()=>`Some(${n(t)})`,toValue:()=>({_tag:`Some`,value:t}),pipe:e=>e(t),serialize:()=>e(`Some`,t),doUnwrap(){return{ok:!0,value:t}}}),c={[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=>c,ap:e=>c,filter(e){return c},count:e=>0,find:e=>c,exists:e=>!1,forEach:e=>{},flatMap:e=>c,flatMapAsync:e=>Promise.resolve(c),reduce:()=>void 0,reduceRight:()=>void 0,fold:(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>i([]),contains:()=>!1,size:0,toOption:()=>c,toEither:e=>a(e),toTry:()=>r(()=>{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:()=>e(`None`,null),doUnwrap(){return{ok:!1,empty:!0}}},l=()=>c,u=e=>e==null?l():s(e),d={from:e=>f(e),none:()=>l(),isSome:e=>e.isSome(),isNone:e=>e.isNone(),fromJSON:e=>{let t=JSON.parse(e);return t._tag===`Some`?s(t.value):l()},fromYAML:e=>{let t=e.split(`
2
2
  `),n=t[0]?.split(`: `)[1],r=t[1]?.split(`: `)[1];if(!n||!r)return l();let i=r===`null`?null:JSON.parse(r);return n===`Some`?s(i):l()},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return d.fromJSON(t)}},f=t(u,d);export{l as None,f as Option,u as OptionConstructor,s as Some};
@@ -1,4 +1,4 @@
1
- import { i as Collection, r as FunctypeCollection } from "../Functype-Boat1fLo.js";
1
+ import { i as Collection, r as FunctypeCollection } from "../Functype-rgysbeU6.js";
2
2
  import { l as Type } from "../Typeable-lfO2nRVW.js";
3
3
  import { List } from "../list/index.js";
4
4
 
package/dist/set/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{nt as e}from"../Valuable-DeccMyYD.js";import{t}from"../Companion-VlxcFhzb.js";import{Option as n}from"../option/index.js";import{List as r}from"../list/index.js";const i=globalThis.Set,a=t=>{let o=new i(t),s={_tag:`Set`,[Symbol.iterator]:()=>o[Symbol.iterator](),add:e=>a([...o,e]),remove:e=>{let t=new i(o);return t.delete(e),a(t)},contains:e=>o.has(e),has:e=>o.has(e),map:e=>a(Array.from(o).map(e)),ap:e=>{let t=new i;for(let n of o)for(let r of e)t.add(r(n));return a(t)},flatMap:e=>{let t=new i;for(let n of o)for(let r of e(n))t.add(r);return a(t)},flatMapAsync:async e=>{let t=new i;for(let n of o){let r=await e(n);for(let e of r)t.add(e)}return a(t)},fold:(e,t)=>{if(o.size===0)return e();let n=Array.from(o);if(n.length===0)return e();let r=n[0];return r===void 0?e():t(r)},foldLeft:e=>t=>{let n=e;for(let e of o)n=t(n,e);return n},foldRight:e=>t=>Array.from(o).reduceRight((e,n)=>t(n,e),e),get size(){return o.size},get isEmpty(){return o.size===0},reduce:e=>{let t=Array.from(o);if(t.length===0)throw Error(`Cannot reduce empty Set`);return t.reduce(e)},reduceRight:e=>{let t=Array.from(o);if(t.length===0)throw Error(`Cannot reduceRight empty Set`);return t.reduceRight(e)},count:e=>{let t=0;for(let n of o)e(n)&&t++;return t},find:e=>{for(let t of o)if(e(t))return n(t);return n(null)},exists:e=>{for(let t of o)if(e(t))return!0;return!1},forEach:e=>{o.forEach(e)},filter:e=>{let t=new i;for(let n of o)e(n)&&t.add(n);return a(t)},filterNot:e=>{let t=new i;for(let n of o)e(n)||t.add(n);return a(t)},drop:e=>a(Array.from(o).slice(e)),dropRight:e=>a(Array.from(o).slice(0,-e)),dropWhile:e=>{let t=Array.from(o),n=t.findIndex(t=>!e(t));return a(n===-1?[]:t.slice(n))},flatten:()=>{let e=new i;for(let t of o)if(Array.isArray(t))for(let n of t)e.add(n);else if(t&&typeof t==`object`&&Symbol.iterator in t)for(let n of t)e.add(n);else e.add(t);return a(e)},get head(){return Array.from(o)[0]},get headOption(){let e=Array.from(o)[0];return n(e)},take:e=>a(Array.from(o).slice(0,Math.max(0,e))),takeWhile:e=>{let t=Array.from(o),n=[];for(let r of t){if(!e(r))break;n.push(r)}return a(n)},takeRight:e=>{let t=Array.from(o);return a(e<=0?[]:t.slice(-e))},get last(){let e=Array.from(o);return e[e.length-1]},get lastOption(){let e=Array.from(o);return n(e[e.length-1])},get tail(){return a(Array.from(o).slice(1))},get init(){let e=Array.from(o);return a(e.length===0?[]:e.slice(0,-1))},toList:()=>r(Array.from(o)),toSet:()=>s,toArray:()=>Array.from(o),toString:()=>`Set(${Array.from(o).toString()})`,toValue:()=>({_tag:`Set`,value:Array.from(o)}),pipe:e=>e(Array.from(o)),serialize:()=>e(`Set`,Array.from(o))};return s},o=e=>a(e),s=a([]),c={empty:()=>s,of:(...e)=>a(e),fromJSON:e=>l(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
1
+ import{nt as e}from"../Valuable-GZAXcYok.js";import{n as t}from"../stringify-DepodSy0.js";import{Option as n}from"../option/index.js";import{List as r}from"../list/index.js";const i=globalThis.Set,a=t=>{let o=new i(t),s={[Symbol.toStringTag]:`FunctypeSet`,_tag:`Set`,[Symbol.iterator]:()=>o[Symbol.iterator](),add:e=>a([...o,e]),remove:e=>{let t=new i(o);return t.delete(e),a(t)},contains:e=>o.has(e),has:e=>o.has(e),map:e=>a(Array.from(o).map(e)),ap:e=>{let t=new i;for(let n of o)for(let r of e)t.add(r(n));return a(t)},flatMap:e=>{let t=new i;for(let n of o)for(let r of e(n))t.add(r);return a(t)},flatMapAsync:async e=>{let t=new i;for(let n of o){let r=await e(n);for(let e of r)t.add(e)}return a(t)},fold:(e,t)=>{if(o.size===0)return e();let n=Array.from(o);if(n.length===0)return e();let r=n[0];return r===void 0?e():t(r)},foldLeft:e=>t=>{let n=e;for(let e of o)n=t(n,e);return n},foldRight:e=>t=>Array.from(o).reduceRight((e,n)=>t(n,e),e),get size(){return o.size},get isEmpty(){return o.size===0},reduce:e=>{let t=Array.from(o);if(t.length===0)throw Error(`Cannot reduce empty Set`);return t.reduce(e)},reduceRight:e=>{let t=Array.from(o);if(t.length===0)throw Error(`Cannot reduceRight empty Set`);return t.reduceRight(e)},count:e=>{let t=0;for(let n of o)e(n)&&t++;return t},find:e=>{for(let t of o)if(e(t))return n(t);return n(null)},exists:e=>{for(let t of o)if(e(t))return!0;return!1},forEach:e=>{o.forEach(e)},filter:e=>{let t=new i;for(let n of o)e(n)&&t.add(n);return a(t)},filterNot:e=>{let t=new i;for(let n of o)e(n)||t.add(n);return a(t)},drop:e=>a(Array.from(o).slice(e)),dropRight:e=>a(Array.from(o).slice(0,-e)),dropWhile:e=>{let t=Array.from(o),n=t.findIndex(t=>!e(t));return a(n===-1?[]:t.slice(n))},flatten:()=>{let e=new i;for(let t of o)if(Array.isArray(t))for(let n of t)e.add(n);else if(t&&typeof t==`object`&&Symbol.iterator in t)for(let n of t)e.add(n);else e.add(t);return a(e)},get head(){return Array.from(o)[0]},get headOption(){let e=Array.from(o)[0];return n(e)},take:e=>a(Array.from(o).slice(0,Math.max(0,e))),takeWhile:e=>{let t=Array.from(o),n=[];for(let r of t){if(!e(r))break;n.push(r)}return a(n)},takeRight:e=>{let t=Array.from(o);return a(e<=0?[]:t.slice(-e))},get last(){let e=Array.from(o);return e[e.length-1]},get lastOption(){let e=Array.from(o);return n(e[e.length-1])},get tail(){return a(Array.from(o).slice(1))},get init(){let e=Array.from(o);return a(e.length===0?[]:e.slice(0,-1))},toList:()=>r(Array.from(o)),toSet:()=>s,toArray:()=>Array.from(o),toString:()=>`Set(${Array.from(o).toString()})`,toValue:()=>({_tag:`Set`,value:Array.from(o)}),pipe:e=>e(Array.from(o)),serialize:()=>e(`Set`,Array.from(o))};return s},o=e=>a(e),s=a([]),c={empty:()=>s,of:(...e)=>a(e),fromJSON:e=>l(JSON.parse(e).value),fromYAML:e=>{let t=e.split(`
2
2
  `)[1]?.split(`: `)[1];return l(t?JSON.parse(t):[])},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return c.fromJSON(t)}},l=t(o,c);export{l as Set};
@@ -0,0 +1 @@
1
+ function e(e,t){return Object.assign(e,t)}function t(t,n){return e(t,n)}function n(e){if(e===void 0||typeof e==`symbol`||typeof e==`function`)return;let t=new Set;function n(e){if(e===null)return`null`;switch(typeof e){case`string`:return JSON.stringify(e);case`number`:return isFinite(e)?String(e):`null`;case`boolean`:return String(e);case`bigint`:return`"${e}"`;case`undefined`:case`symbol`:case`function`:return}let r=e;if(t.has(r))return`"[Circular]"`;t.add(r);try{if(`toJSON`in r&&typeof r.toJSON==`function`)return n(r.toJSON());if(Array.isArray(r))return`[${r.map(e=>n(e)??`null`).join(`,`)}]`;let e=Object.keys(r).sort(),t=[];for(let i of e){let e=n(r[i]);e!==void 0&&t.push(`${JSON.stringify(i)}:${e}`)}return`{${t.join(`,`)}}`}finally{t.delete(r)}}try{return n(e)}catch{return}}export{t as n,e as r,n as t};
@@ -1,4 +1,4 @@
1
- import { dn as Extractable, mn as Doable, n as FunctypeBase, nn as Reshapeable, rn as Promisable } from "../Functype-Boat1fLo.js";
1
+ import { dn as Extractable, mn as Doable, n as FunctypeBase, nn as Reshapeable, rn as Promisable } from "../Functype-rgysbeU6.js";
2
2
  import { l as Type, s as Pipe } from "../Typeable-lfO2nRVW.js";
3
3
  import { Option } from "../option/index.js";
4
4
  import { List } from "../list/index.js";
package/dist/try/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{et as e,nt as t}from"../Valuable-DeccMyYD.js";import{t as n}from"../Companion-VlxcFhzb.js";import{None as r,Option as i,Some as a}from"../option/index.js";import{List as o}from"../list/index.js";import{Left as s,Right as c}from"../either/index.js";import l from"safe-stable-stringify";const u=e=>({_tag:`Success`,error:void 0,isSuccess(){return!0},isFailure(){return!1},orElse:t=>e,orThrow:t=>e,or:t=>u(e),orNull:()=>e,orUndefined:()=>e,toEither:t=>c(e),map:t=>m(()=>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),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toString:()=>`Success(${l(e)})`,toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Success`,value:e}),toOption:()=>a(e),toList:()=>o([e]),toTry:()=>u(e),pipe:t=>t(e),serialize:()=>t(`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)?i(e):i(void 0),exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),d=t=>({_tag:`Failure`,error:t,isSuccess(){return!1},isFailure(){return!0},orElse:e=>e,orThrow:e=>{throw e??t},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:e=>s(t),map:e=>d(t),ap:e=>d(t),flatMap:e=>d(t),flatMapAsync:e=>Promise.resolve(d(t)),fold:(e,n)=>e(t),match:e=>e.Failure(t),foldLeft:e=>t=>e,foldRight:e=>t=>e,toString:()=>`Failure(${l(t)}))`,toPromise:()=>Promise.reject(t),toValue:()=>({_tag:`Failure`,value:t}),toOption:()=>r(),toList:()=>o([]),toTry:()=>d(t),pipe:e=>{throw t},serialize:()=>e({_tag:`Failure`,error:t.message,stack:t.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=>i(null),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:t}}}),f=e=>{try{return u(e())}catch(e){return d(e instanceof Error?e:Error(String(e)))}},p={isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),fromJSON:e=>{let t=JSON.parse(e);if(t._tag===`Success`)return u(t.value);{let e=Error(t.error);return t.stack&&(e.stack=t.stack),d(e)}},fromYAML:e=>{let t=e.split(`
1
+ import{et as e,nt as t}from"../Valuable-GZAXcYok.js";import{n,t as r}from"../stringify-DepodSy0.js";import{None as i,Option as a,Some as o}from"../option/index.js";import{List as s}from"../list/index.js";import{Left as c,Right as l}from"../either/index.js";const u=e=>({[Symbol.toStringTag]:`Try`,_tag:`Success`,error:void 0,isSuccess(){return!0},isFailure(){return!1},orElse:t=>e,orThrow:t=>e,or:t=>u(e),orNull:()=>e,orUndefined:()=>e,toEither:t=>l(e),map:t=>m(()=>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),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toString:()=>`Success(${r(e)})`,toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Success`,value:e}),toOption:()=>o(e),toList:()=>s([e]),toTry:()=>u(e),pipe:t=>t(e),serialize:()=>t(`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)?a(e):a(void 0),exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),d=t=>({[Symbol.toStringTag]:`Try`,_tag:`Failure`,error:t,isSuccess(){return!1},isFailure(){return!0},orElse:e=>e,orThrow:e=>{throw e??t},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:e=>c(t),map:e=>d(t),ap:e=>d(t),flatMap:e=>d(t),flatMapAsync:e=>Promise.resolve(d(t)),fold:(e,n)=>e(t),match:e=>e.Failure(t),foldLeft:e=>t=>e,foldRight:e=>t=>e,toString:()=>`Failure(${r(t)}))`,toPromise:()=>Promise.reject(t),toValue:()=>({_tag:`Failure`,value:t}),toOption:()=>i(),toList:()=>s([]),toTry:()=>d(t),pipe:e=>{throw t},serialize:()=>e({_tag:`Failure`,error:t.message,stack:t.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=>a(null),exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:t}}}),f=e=>{try{return u(e())}catch(e){return d(e instanceof Error?e:Error(String(e)))}},p={isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),fromJSON:e=>{let t=JSON.parse(e);if(t._tag===`Success`)return u(t.value);{let e=Error(t.error);return t.stack&&(e.stack=t.stack),d(e)}},fromYAML:e=>{let t=e.split(`
2
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};
@@ -2,6 +2,7 @@ import { a as Serializable, c as Foldable, l as Type, n as Typeable, s as Pipe }
2
2
 
3
3
  //#region src/tuple/Tuple.d.ts
4
4
  interface Tuple<T extends Type[]> extends Foldable<T[number]>, Pipe<Tuple<T>>, Serializable<Tuple<T>>, Typeable<"Tuple"> {
5
+ readonly [Symbol.toStringTag]: string;
5
6
  get<K extends number>(index: K): T[K];
6
7
  map<U extends Type[]>(f: (value: T) => U): Tuple<U>;
7
8
  flatMap<U extends Type[]>(f: (value: T) => Tuple<U>): Tuple<U>;
@@ -1 +1 @@
1
- import{t as e}from"../Companion-VlxcFhzb.js";import t from"safe-stable-stringify";const n=e=>{let n={_tag:`Tuple`,map:t=>r(t(e)),flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,length:e.length,[Symbol.iterator](){let t=0;return{next:()=>t<e.length?{value:e[t++],done:!1}:{value:void 0,done:!0}}},fold:(t,n)=>e.length===0?t():n(e[0]),foldLeft:t=>n=>e.reduce(n,t),foldRight:t=>n=>e.reduceRight((e,t)=>n(t,e),t),pipe:e=>e(n),serialize:()=>({toJSON:()=>JSON.stringify({_tag:`Tuple`,value:e}),toYAML:()=>`_tag: Tuple\nvalue: ${t(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Tuple`,value:e})).toString(`base64`)}),toValue:()=>({_tag:`Tuple`,value:e}),toString:()=>`Tuple(${e.map(e=>String(e)).join(`, `)})`};return n},r=e(e=>n(e),{of:(...e)=>n(e),pair:(e,t)=>n([e,t]),triple:(e,t,r)=>n([e,t,r]),empty:()=>n([]),from:e=>n(e)});export{r as Tuple};
1
+ import{n as e,t}from"../stringify-DepodSy0.js";const n=e=>{let n={[Symbol.toStringTag]:`Tuple`,_tag:`Tuple`,map:t=>r(t(e)),flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,length:e.length,[Symbol.iterator](){let t=0;return{next:()=>t<e.length?{value:e[t++],done:!1}:{value:void 0,done:!0}}},fold:(t,n)=>e.length===0?t():n(e[0]),foldLeft:t=>n=>e.reduce(n,t),foldRight:t=>n=>e.reduceRight((e,t)=>n(t,e),t),pipe:e=>e(n),serialize:()=>({toJSON:()=>JSON.stringify({_tag:`Tuple`,value:e}),toYAML:()=>`_tag: Tuple\nvalue: ${t(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:`Tuple`,value:e})).toString(`base64`)}),toValue:()=>({_tag:`Tuple`,value:e}),toString:()=>`Tuple(${e.map(e=>String(e)).join(`, `)})`};return n},r=e(e=>n(e),{of:(...e)=>n(e),pair:(e,t)=>n([e,t]),triple:(e,t,r)=>n([e,t,r]),empty:()=>n([]),from:e=>n(e)});export{r as Tuple};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functype",
3
- "version": "0.47.1",
3
+ "version": "0.49.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,16 +42,17 @@
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
49
  "@eslint/compat": "^2.0.2",
48
- "@types/node": "~24.10.13",
50
+ "@types/node": "~24.10.15",
49
51
  "eslint-config-functype": "2.0.0",
50
52
  "eslint-plugin-functional": "^9.0.4",
51
53
  "fast-check": "^4.5.3",
52
54
  "globals": "^17.3.0",
53
- "ts-builds": "^2.4.1",
55
+ "ts-builds": "^2.5.0",
54
56
  "tsdown": "^0.20.3",
55
57
  "tsx": "^4.21.0",
56
58
  "typedoc": "^0.28.17"
@@ -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.30.2+sha512.36cdc707e7b7940a988c9c1ecf88d084f8514b5c3f085f53a2e244c2921d3b2545bc20dd4ebe1fc245feec463bb298aecea7a63ed1f7680b877dc6379d8d0cb4"
171
+ "packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017"
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`)}),ne=(e,t)=>t(JSON.parse(e)),re=(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)},ie=(e,t)=>ne(Buffer.from(e,`base64`).toString(),t),ae=e=>({fromJSON:t=>ne(t,e),fromYAML:t=>re(t,e),fromBinary:t=>ie(t,e)}),oe=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}}},f=n(oe,{of:e=>oe(e)}),p=(e=0)=>{let t=f(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)}},se=()=>{let e=f([]);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}},m=e=>{let t={_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>m((function*(){for(let n of e)yield t(n)})()),flatMap:t=>m((function*(){for(let n of e)yield*t(n)})()),filter:t=>m((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>m((function*(){let n=p(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>m((function*(){let n=p(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>m((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>m((function*(){let n=f(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>m((function*(){yield*e,yield*t})()),zip:t=>m((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=f(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=p(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=f(void 0),n=f(!1);for(let r of e)t.set(r),n.set(!0);return n.get()?i(t.get()):i.none()},get tail(){return m((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 m(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return m(t<=0?[]:n.slice(-t))},reverse:()=>m(Array.from(e).reverse()),distinct:()=>m((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>m((function*(){let t=p(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=f(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=p(0),r=f(!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},ce=n(e=>m(e),{empty:()=>m([]),of:e=>m([e]),from:(...e)=>m(e),iterate:(e,t)=>m((function*(){let n=f(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>m((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>m((function*(){if(n===0)throw Error(`Step cannot be zero`);let r=f(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)=>m((function*(){if(t===void 0)for(;;)yield e;else{let n=p(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>m((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())});function le({_tag:e,impl:t}){return{...t,_tag:e}}function ue(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:t?e._tag===t:!0}function h(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)=>h(e,e=>n(e)&&t(e))}}const de=h(`PositiveNumber`,e=>e>0),fe=h(`NonNegativeNumber`,e=>e>=0),pe=h(`IntegerNumber`,e=>Number.isInteger(e)),me=de.refine(`PositiveInteger`,e=>Number.isInteger(e)),he=h(`NonEmptyString`,e=>e.length>0),ge=h(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),_e=h(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),ve=h(`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)),ye=h(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function be(e,t,n){return h(e,e=>e>=t&&e<=n)}function xe(e,t,n){return h(e,e=>e.length>=t&&e.length<=n)}function Se(e,t){return h(e,e=>t.test(e))}const Ce=e=>typeof e==`function`&&Object.keys(e).length>0,we=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?we({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?we({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},Te=()=>we({resolved:!1}),Ee=n(Te,{of:()=>Te(),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}}),g=(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 g(r,n)}):!1,_=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(g(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:g(e.value,n)?_({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):_({...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 _({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 _({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(g(e.value,r))return _({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return _({...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},De=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 g(e,n)?_({...i,resolved:!0,result:t(r,e)}):_(i)},caseValue:(t,n)=>_(e===t?{value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}:{value:e,resolved:!1,patterns:[]}),caseValues:(t,n)=>t.includes(e)?_({value:e,resolved:!0,result:typeof n==`function`?n():n,patterns:[]}):_({value:e,resolved:!1,patterns:[]}),when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?_({...i,resolved:!0,result:t(r,e)}):_(i)},caseAny:(n,r)=>{for(let i of n)if(g(e,i))return _({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return _({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},Oe=n(e=>De(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(g(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(g(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 v(e,t){return{...le({_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 y=`Throwable`;var b=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=y,this.name=t?.taskInfo?.name??y,Object.defineProperties(this,{_tag:{value:y,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??y,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 ke(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const Ae=(e,t)=>{if(e.isRight())return S(e.orThrow(),t);if(e.isLeft())return x(e.fold(e=>e,()=>Error(`Unexpected right value`)),void 0,t);throw Error(`Unrecognized task outcome`)},x=(e,t,n)=>{let i={name:n?.name??`Task`,description:n?.description??``},a=b.apply(e,t,i),l={...v(`Err`,{error:a,meta:i}),_tag:`Err`,_meta:i,value:void 0,error:a,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>x(a,t,n),flatMap:e=>x(a,t,n),ap:e=>x(a,t,n),mapAsync:e=>Promise.resolve(x(a,t,n)),flatMapAsync:e=>Promise.resolve(x(a,t,n)),mapError:e=>x(e(a),t,n),recover:e=>S(e,n),recoverWith:e=>S(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},S=(e,t)=>{let n={name:t?.name??`Task`,description:t?.description??``},i={...v(`Ok`,{value:e,meta:n}),_tag:`Ok`,_meta:n,value:e,error:void 0,isSuccess(){return!0},isFailure(){return!1},isOk(){return!0},isErr(){return!1},map:n=>S(n(e),t),flatMap:n=>{let r=n(e);return r&&typeof r==`object`&&`isLeft`in r&&`isRight`in r?Ae(r,t):r},ap:n=>n.isOk()?S(n.value(e),t):x(n.error,void 0,t),mapAsync:async n=>S(await n(e),t),flatMapAsync:async t=>await t(e),mapError:n=>S(e,t),recover:n=>S(e,t),recoverWith:n=>S(e,t),orThrow:t=>e,orElse:t=>e,or:n=>S(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},C=()=>{let e=new AbortController,t=se();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)}}))}}},je=e=>{let t=e?.name??`Task`,n=e?.description??``,r={Async:(e,r=e=>e,i=()=>{},a)=>new Promise(o=>{(async()=>{let s=f(!1),c=f(null),l=f(()=>{});if(a){if(a.isCancelled){try{await i()}catch(e){o(x(e,void 0,{name:t,description:n}));return}o(x(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(x(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(x(c.get(),void 0,{name:t,description:n})):o(x(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(S(r,{name:t,description:n}))}else o(S(r,{name:t,description:n}))}catch(e){try{await i()}catch(e){o(x(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(x(c.get(),void 0,{name:t,description:n})):o(x(Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}try{if(e instanceof Error&&ke(e)){let i=Error(`${t}: ${e.message}`),a=b.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(x(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(x(i,void 0,{name:t,description:n}))}else o(x(i,void 0,{name:t,description:n}))}}catch(e){o(x(e,void 0,{name:t,description:n}))}}finally{l.get()()}})().catch(e=>o(x(e,void 0,{name:t,description:n})))}),Sync:(e,r=e=>e,i=()=>{})=>{try{return S(e(),{name:t,description:n})}catch(e){return x(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{...v(`Task`,r),_type:`Task`}},Me={success:(e,t)=>S(e,t),fail:(e,t,n)=>x(e,t,n),ok:(e,t)=>S(e,t),err:(e,t,n)=>x(e,t,n),fromEither:(e,t)=>Ae(e,t),fromTry:(e,t)=>e.isSuccess()?S(e.orThrow(),t):x(e.fold(e=>e,()=>Error(`Unexpected success`)),void 0,t),getErrorChain:e=>{if(!e)return[];let t=se();t.add(e);let n=f(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=Me.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=f(`${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)=>w(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)=>w({name:n?.name??`TaskRace`,description:n?.description??`Race between multiple tasks`}).Async(async()=>{let n=se();e.forEach(e=>n.add(e));let r=f(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)=>w(n).Async(()=>new Promise((n,r)=>{try{e(...t,(e,t)=>{e?r(e):n(t)})}catch(e){r(e)}}),e=>e)},createCancellationTokenSource:C,cancellable:(e,t)=>{let n=C();return{task:w(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=C(),i=f(0),a=e=>{i.set(Math.max(0,Math.min(100,e))),t(i.get())};return{task:w(n).Async(()=>e(a,r.token),e=>e,()=>{},r.token),cancel:()=>r.cancel(),currentProgress:()=>i.get()}}},w=n(je,Me),Ne={includeTasks:!0,includeStackTrace:!1,separator:`
7
- `,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function Pe(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`?T(n):n},2)}function T(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 Fe(e,t){let n={...Ne,...t},r=e instanceof Error?e:b.apply(e),i=w?.getErrorChain?w.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=T(e.stack).split(`
10
- `).slice(1),i=n.maxStackFrames??Ne.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${Pe(e)}`:`\n\nContext:\n${Pe(e)}`;a+=t}}return a}function Ie(){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?T(t.stack):void 0};if(t.taskInfo&&(n.taskInfo=t.taskInfo),t.data&&(n.data=t.data),typeof w?.getErrorChain==`function`)try{let e=w.getErrorChain(t);e.length>1&&(n.errorChain=w.formatErrorChain(t,{includeTasks:!0}),n.structuredErrorChain=e.map(e=>({message:e.message,name:e.name,taskInfo:e.taskInfo,stack:e.stack?T(e.stack):void 0})))}catch{}return Object.getOwnPropertyNames(t).forEach(e=>{n[e]||(n[e]=t[e])}),n}}const E=(e,n,r,i)=>t(b.apply(n,r,{name:e,description:n}),{code:e,message:n,status:Le(e),context:r,timestamp:new Date().toISOString(),traceId:i?.traceId}),Le=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],D=Object.assign(E,{validation:(e,t,n)=>E(`VALIDATION_FAILED`,`Validation failed: ${e} ${n}`,{field:e,value:t,rule:n}),network:(e,t,n)=>E(`NETWORK_ERROR`,`Network error: ${t} ${e}${n?` (${n})`:``}`,{url:e,method:t,statusCode:n}),auth:(e,t)=>E(`AUTH_REQUIRED`,`Authentication required: ${e}${t?` (role: ${t})`:``}`,{resource:e,requiredRole:t}),notFound:(e,t)=>E(`NOT_FOUND`,`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,n)=>E(`PERMISSION_DENIED`,`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:n}),rateLimit:(e,t,n)=>E(`RATE_LIMITED`,`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:n}),internal:e=>E(`INTERNAL_ERROR`,`Internal server error: ${e}`,{errorId:e,timestamp:new Date().toISOString()}),badRequest:(e,t)=>E(`BAD_REQUEST`,`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>E(`CONFLICT`,`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>E(`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}),O={rule:e=>t=>{if(e===`email`)return typeof t!=`string`||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?c(D.validation(`value`,t,`must be a valid email`)):l(t);if(e===`url`)try{return new URL(String(t)),l(t)}catch{return c(D.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(D.validation(`value`,t,`must be a valid UUID`)):l(t);if(e===`required`)return t==null||t===``?c(D.validation(`value`,t,`is required`)):l(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?c(D.validation(`value`,t,`must be numeric`)):l(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?c(D.validation(`value`,t,`must contain only letters`)):l(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?c(D.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(D.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(D.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(D.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(D.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(D.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(D.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(D.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(D.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(D.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(D.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(D.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=D.validation(i,e,t.context.rule);n.push(r)}else r[i]=o.orThrow()}return n.length>0?c(s(n)):l(r)}},Re={...O,validators:{email:O.rule(`email`),url:O.rule(`url`),uuid:O.rule(`uuid`),required:O.rule(`required`),numeric:O.rule(`numeric`),positiveNumber:O.combine(O.rule(`numeric`),O.rule(`min:0`)),nonEmptyString:O.combine(O.rule(`required`),O.custom(e=>typeof e==`string`&&e.trim().length>0,`must not be empty`))}},ze=t(O.rule,Re);function Be(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function Ve(e){return Be(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 He={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)},k=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),A=e=>typeof e==`object`&&!!e&&e._tag===`List`,j=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),M=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),N=()=>{let e=(e,t)=>{if(k(e)||A(e)||j(e)||M(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(k(e))return e.orThrow();if(A(e)){let t=e.toArray();if(t.length>0&&A(t[0])){let e=[];for(let n of t)A(n)&&e.push(...n.toArray());return s(e)}return e.flatten()}if(j(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(M(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(k(e)||A(e)||j(e)||M(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(k(e)&&k(t)||A(e)&&A(t)||j(e)&&j(t)||M(e)&&M(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},a=e=>{if(k(e)){let t=e;if(t.isEmpty)return s([i.none()]);let n=t.orThrow();if(A(n))return n.map(e=>i(e));throw Error(`Unsupported inner container type for sequence`)}if(A(e)){let t=e.toArray();if(t.length===0)return i.none();let n=t[0];if(k(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`}},P=N();N.map=(e,t)=>P.map(e,t),N.flatten=e=>P.flatten(e),N.flatMap=(e,t)=>P.flatMap(e,t),N.ap=(e,t)=>P.ap(e,t),N.sequence=e=>P.sequence(e),N.traverse=(e,t)=>P.traverse(e,t),N.isOption=k,N.isList=A,N.isEither=j,N.isTry=M;const Ue=e=>({id:e,isSame:t=>t.id===e}),We=n(Ue,{of:e=>Ue(e),pure:e=>Ue(e)}),F=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),F(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return F(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>F(new Map),make:(e,t)=>{let n=new Map;return n.set(e.id,t),F(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},L=e=>({_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=>({_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=>({_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={_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{_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;return{_tag:`Stack`,get size(){return n()},get isEmpty(){return r()},contains:e=>t.includes(e),reduce:e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduce(e)},reduceRight:e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return t.reduceRight(e)},push:e=>$([...t,e]),pop:()=>{if(r())return[$([]),i(null)];let e=[...t],n=e.pop();return[$(e),i(n)]},peek:()=>r()?i(null):i(t[t.length-1]),map:e=>$(t.map(e)),flatMap:e=>r()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),ap:e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},flatMapAsync: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),$([])),toList:()=>s(t),toArray:()=>[...t],toString:()=>`Stack(${t.join(`, `)})`,fold:(e,n)=>{if(r())return e();let i=t[t.length-1];return i===void 0?e():n(i)},foldLeft:e=>n=>t.reduce(n,e),foldRight:e=>n=>t.reduceRight((e,t)=>n(t,e),e),match:e=>r()?e.Empty():e.NonEmpty([...t]),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=le({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{f as $,ke as A,ye as B,Fe as C,S as D,x as E,Ee as F,me as G,he as H,Ce as I,_e as J,de as K,be as L,b as M,v as N,w as O,Oe as P,ce as Q,xe as R,Ie as S,Pe as T,fe as U,pe as V,Se as W,le as X,h as Y,ue as Z,N as _,Q as a,re as at,ze as b,Xe as c,q as d,te as et,Ke as f,We as g,I as h,Ze as i,ne as it,y as j,C as k,Je as l,B as m,tt as n,ee as nt,Ye as o,d as ot,Ge as p,ve as q,Qe as r,ie as rt,X as s,nt as t,ae as tt,qe as u,He as v,T as w,D as x,Ve as y,ge as z};