functype 1.12.0 → 1.14.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.
Files changed (40) hide show
  1. package/dist/cli/exports.js +1 -1
  2. package/dist/cli/index.js +1 -1
  3. package/dist/conditional/index.d.ts +1 -1
  4. package/dist/conditional/index.js +1 -1
  5. package/dist/core/task/index.d.ts +1 -1
  6. package/dist/core/task/index.js +1 -1
  7. package/dist/decoder/index.d.ts +1 -1
  8. package/dist/decoder/index.js +1 -1
  9. package/dist/do/index.d.ts +1 -1
  10. package/dist/do/index.js +1 -1
  11. package/dist/either/index.d.ts +1 -1
  12. package/dist/either/index.js +1 -1
  13. package/dist/fetch/index.d.ts +1 -1
  14. package/dist/fetch/index.js +1 -1
  15. package/dist/{full-interfaces-BodTZ7fX.js → full-interfaces-C8K3muyb.js} +18 -2
  16. package/dist/functype/index.d.ts +2 -2
  17. package/dist/{index-CXXlorKz.d.ts → index-BsYLc74N.d.ts} +147 -7
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +1 -1
  20. package/dist/io/index.d.ts +1 -1
  21. package/dist/io/index.js +1 -1
  22. package/dist/lazy/index.d.ts +1 -1
  23. package/dist/lazy/index.js +1 -1
  24. package/dist/list/index.d.ts +1 -1
  25. package/dist/list/index.js +1 -1
  26. package/dist/map/index.d.ts +1 -1
  27. package/dist/map/index.js +1 -1
  28. package/dist/obj/index.d.ts +1 -1
  29. package/dist/obj/index.js +1 -1
  30. package/dist/option/index.d.ts +1 -1
  31. package/dist/option/index.js +1 -1
  32. package/dist/serialization/index.d.ts +1 -1
  33. package/dist/set/index.d.ts +1 -1
  34. package/dist/set/index.js +1 -1
  35. package/dist/src-n-HOLxT0.js +17 -0
  36. package/dist/try/index.d.ts +1 -1
  37. package/dist/try/index.js +1 -1
  38. package/dist/typeclass/index.d.ts +1 -1
  39. package/package.json +2 -2
  40. package/dist/src-BUA74biP.js +0 -17
@@ -1 +1 @@
1
- import{a as e,i as t,n,r,t as i}from"../full-interfaces-BodTZ7fX.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-C8K3muyb.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{Mt as e,et as t,wt as n}from"../src-BUA74biP.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-BodTZ7fX.js";const c=()=>{let t=n([`functype ${r} - Scala-inspired FP for TypeScript`,``]);return n(Object.entries(a)).foldLeft(t)((t,[r,a])=>{let o=t.add(r.toUpperCase());return n(a).foldLeft(o)((t,n)=>e(i[n]).fold(()=>t,e=>{let r=e.interfaces.length>0?` [${e.interfaces.join(`, `)}]`:``;return t.add(` ${n}${r}`).add(` ${e.description}`)})).add(``)}).concat(n([`Use: npx functype <Type> for details`,`Use: npx functype interfaces for interface reference`])).toArray().join(`
2
+ import{Mt as e,et as t,wt as n}from"../src-n-HOLxT0.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-C8K3muyb.js";const c=()=>{let t=n([`functype ${r} - Scala-inspired FP for TypeScript`,``]);return n(Object.entries(a)).foldLeft(t)((t,[r,a])=>{let o=t.add(r.toUpperCase());return n(a).foldLeft(o)((t,n)=>e(i[n]).fold(()=>t,e=>{let r=e.interfaces.length>0?` [${e.interfaces.join(`, `)}]`:``;return t.add(` ${n}${r}`).add(` ${e.description}`)})).add(``)}).concat(n([`Use: npx functype <Type> for details`,`Use: npx functype interfaces for interface reference`])).toArray().join(`
3
3
  `)},l=(t,r)=>{let i=r.interfaces.length>0?` [${r.interfaces.join(`, `)}]`:``,a=n([`create`,`transform`,`extract`,`check`,`other`]),o=n([`${t}<T>${i}`,``,r.description,``]);return a.foldLeft(o)((t,i)=>e(r.methods[i]).filter(e=>e.length>0).fold(()=>t,e=>{let r=t.add(i.toUpperCase());return n(e).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=t=>e(i[t]).map(e=>({name:t,data:e})).or(n(Object.entries(i)).find(([e])=>e.toLowerCase()===t.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`)}},_=t=>e(s[t]).or(n(Object.entries(s)).find(([e])=>e.toLowerCase()===t.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,2 +1,2 @@
1
- import { jr as Cond, n as UntypedMatch, t as Match } from "../index-CXXlorKz.js";
1
+ import { Nr as Cond, n as UntypedMatch, t as Match } from "../index-BsYLc74N.js";
2
2
  export { Cond, Match, UntypedMatch };
@@ -1 +1 @@
1
- import{et as e,tt as t}from"../src-BUA74biP.js";export{t as Cond,e as Match};
1
+ import{et as e,tt as t}from"../src-n-HOLxT0.js";export{t as Cond,e as Match};
@@ -1,2 +1,2 @@
1
- import { $t as TaggedThrowable, Jt as CancellationToken, Qt as Sync, Xt as Err, Yt as CancellationTokenSource, Zt as Ok, an as TaskResult, cn as isTaggedThrowable, en as Task, in as TaskParams, nn as TaskMetadata, on as TaskSuccess, qt as Async, rn as TaskOutcome, sn as createCancellationTokenSource, tn as TaskFailure } from "../../index-CXXlorKz.js";
1
+ import { $t as TaggedThrowable, Jt as CancellationToken, Qt as Sync, Xt as Err, Yt as CancellationTokenSource, Zt as Ok, an as TaskResult, cn as isTaggedThrowable, en as Task, in as TaskParams, nn as TaskMetadata, on as TaskSuccess, qt as Async, rn as TaskOutcome, sn as createCancellationTokenSource, tn as TaskFailure } from "../../index-BsYLc74N.js";
2
2
  export { Async, CancellationToken, CancellationTokenSource, Err, Ok, Sync, TaggedThrowable, Task, TaskFailure, TaskMetadata, TaskOutcome, TaskParams, TaskResult, TaskSuccess, createCancellationTokenSource, isTaggedThrowable };
@@ -1 +1 @@
1
- import{J as e,K as t,X as n,Y as r,q as i}from"../../src-BUA74biP.js";export{t as Err,i as Ok,e as Task,r as createCancellationTokenSource,n as isTaggedThrowable};
1
+ import{J as e,K as t,X as n,Y as r,q as i}from"../../src-n-HOLxT0.js";export{t as Err,i as Ok,e as Task,r as createCancellationTokenSource,n as isTaggedThrowable};
@@ -1,2 +1,2 @@
1
- import { Gt as DecoderErrorComposite, Kt as DecoderErrorLeaf, Ut as Decoder, Wt as DecoderError } from "../index-CXXlorKz.js";
1
+ import { Gt as DecoderErrorComposite, Kt as DecoderErrorLeaf, Ut as Decoder, Wt as DecoderError } from "../index-BsYLc74N.js";
2
2
  export { Decoder, DecoderError, type DecoderErrorComposite, type DecoderErrorLeaf };
@@ -1 +1 @@
1
- import{H as e,U as t}from"../src-BUA74biP.js";export{e as Decoder,t as DecoderError};
1
+ import{H as e,U as t}from"../src-n-HOLxT0.js";export{e as Decoder,t as DecoderError};
@@ -1,2 +1,2 @@
1
- import { Ar as Doable, Bt as NoneError, Ft as EmptyListError, Ht as unwrap, It as FailureError, Lt as FailureErrorType, Mt as Do, Nt as DoAsync, Pt as DoGenerator, Rt as LeftError, Vt as isDoCapable, jt as $, kr as DoResult, zt as LeftErrorType } from "../index-CXXlorKz.js";
1
+ import { Bt as NoneError, Ft as EmptyListError, Ht as unwrap, It as FailureError, Lt as FailureErrorType, Mr as Doable, Mt as Do, Nt as DoAsync, Pt as DoGenerator, Rt as LeftError, Vt as isDoCapable, jr as DoResult, jt as $, zt as LeftErrorType } from "../index-BsYLc74N.js";
2
2
  export { $, Do, DoAsync, DoGenerator, type DoResult, type Doable, EmptyListError, FailureError, FailureErrorType, LeftError, LeftErrorType, NoneError, isDoCapable, unwrap };
package/dist/do/index.js CHANGED
@@ -1 +1 @@
1
- import{B as e,F as t,I as n,L as r,N as i,P as a,R as o,V as s,z as c}from"../src-BUA74biP.js";export{i as $,a as Do,t as DoAsync,n as EmptyListError,r as FailureError,o as LeftError,c as NoneError,e as isDoCapable,s as unwrap};
1
+ import{B as e,F as t,I as n,L as r,N as i,P as a,R as o,V as s,z as c}from"../src-n-HOLxT0.js";export{i as $,a as Do,t as DoAsync,n as EmptyListError,r as FailureError,o as LeftError,c as NoneError,e as isDoCapable,s as unwrap};
@@ -1,2 +1,2 @@
1
- import { ar as Left, cr as RightOf, dr as TypeCheckRight, fr as isLeft, hr as tryCatchAsync, ir as EitherBase, lr as TestEither, mr as tryCatch, or as LeftOf, pr as isRight, rr as Either, sr as Right, ur as TypeCheckLeft } from "../index-CXXlorKz.js";
1
+ import { ar as Left, cr as RightOf, dr as TypeCheckRight, fr as isLeft, hr as tryCatchAsync, ir as EitherBase, lr as TestEither, mr as tryCatch, or as LeftOf, pr as isRight, rr as Either, sr as Right, ur as TypeCheckLeft } from "../index-BsYLc74N.js";
2
2
  export { Either, EitherBase, Left, LeftOf, Right, RightOf, TestEither, TypeCheckLeft, TypeCheckRight, isLeft, isRight, tryCatch, tryCatchAsync };
@@ -1 +1 @@
1
- import{Ct as e,St as t,_t as n,bt as r,gt as i,ht as a,vt as o,xt as s,yt as c}from"../src-BUA74biP.js";export{a as Either,i as Left,n as Right,o as TypeCheckLeft,c as TypeCheckRight,r as isLeft,s as isRight,t as tryCatch,e as tryCatchAsync};
1
+ import{Ct as e,St as t,_t as n,bt as r,gt as i,ht as a,vt as o,xt as s,yt as c}from"../src-n-HOLxT0.js";export{a as Either,i as Left,n as Right,o as TypeCheckLeft,c as TypeCheckRight,r as isLeft,s as isRight,t as tryCatch,e as tryCatchAsync};
@@ -1,2 +1,2 @@
1
- import { A as Http, B as HttpError, F as HttpRequestOptions, H as HttpStatusError, I as HttpRequestView, L as HttpResponse, M as HttpClientConfig, N as HttpMethodOptions, P as HttpQueryParams, R as ParseMode, U as NetworkError, V as HttpMethod, W as ResponseDecodeError, j as HttpClient, z as DecodeError } from "../index-CXXlorKz.js";
1
+ import { A as Http, B as HttpError, F as HttpRequestOptions, H as HttpStatusError, I as HttpRequestView, L as HttpResponse, M as HttpClientConfig, N as HttpMethodOptions, P as HttpQueryParams, R as ParseMode, U as NetworkError, V as HttpMethod, W as ResponseDecodeError, j as HttpClient, z as DecodeError } from "../index-BsYLc74N.js";
2
2
  export { type DecodeError, Http, HttpClient, type HttpClientConfig, type HttpError, HttpError as HttpErrors, type HttpMethod, type HttpMethodOptions, type HttpQueryParams, type HttpRequestOptions, type HttpRequestView, type HttpResponse, type HttpStatusError, type NetworkError, type ParseMode, type ResponseDecodeError };
@@ -1 +1 @@
1
- import{d as e,f as t,p as n}from"../src-BUA74biP.js";export{e as Http,n as HttpClient,t as HttpErrors};
1
+ import{d as e,f as t,p as n}from"../src-n-HOLxT0.js";export{e as Http,n as HttpClient,t as HttpErrors};
@@ -1,4 +1,4 @@
1
- var e=`1.12.0`;const t={Option:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Matchable`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`,`Traversable`],Either:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`],Try:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`],List:[`Collection`,`Doable`,`Iterable`,`Reshapeable`],Set:[`Collection`,`Iterable`],Map:[`Collection`,`Foldable`,`Iterable`,`KVTraversable`,`Serializable`],Obj:[`Doable`,`Promisable`,`Reshapeable`],Lazy:[`Applicative`,`AsyncMonad`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Serializable`,`Traversable`],LazyList:[`Foldable`,`Serializable`],Tuple:[`Foldable`,`Serializable`],Task:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Serializable`,`Traversable`]},n=e,r=(e,...n)=>Array.from(/* @__PURE__ */ new Set([...t[e],...n])).sort(),i={Option:{description:`Safe nullable handling - Some<T> or None`,interfaces:r(`Option`),methods:{create:[`Option(v)`,`Option.none()`,`Some(v)`,`None()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.ap(ff)`],extract:[`.fold(n, s)`,`.foldAsync(n, s)`,`.orElse(d)`,`.orThrow(err | () => Error)`,`.expect(() => never)`,`.orNull()`,`.match({Some, None})`,`.toEither(left | () => left)`,`.toList()`,`.toArray()`],check:[`.isSome()`,`.isNone()`,`.isEmpty`],other:[`Option.sequence(arr)`,`Option.traverse(arr, f)`]}},Either:{description:`Error handling with Left (error) or Right (success)`,interfaces:r(`Either`,`Traversable`),methods:{create:[`Right(v)`,`Left(e)`,`Either.right(v)`,`Either.left(e)`,`Either.void()`],transform:[`.map(f)`,`.flatMap(f)`,`.mapLeft(f)`,`.swap()`],extract:[`.fold(l, r)`,`.foldAsync(l, r)`,`.orElse(d)`,`.orThrow(err | (left) => Error)`,`.expect((l) => never)`,`.match({Left, Right})`],check:[`.isRight()`,`.isLeft()`],other:[`Either.sequence(arr)`,`Either.traverse(arr, f)`,`Either.fromNullable(v, e)`]}},Try:{description:`Wrap operations that may throw - Success<T> or Failure`,interfaces:r(`Try`,`Matchable`,`Traversable`),methods:{create:[`Try(() => expr)`,`Try.success(v)`,`Try.failure(e)`,`Try.fromPromise(p)`,`Try.async(() => Promise<T>)`],transform:[`.map(f)`,`.flatMap(f)`,`.recover(f)`,`.recoverWith(f)`],extract:[`.fold(f, s)`,`.foldAsync(f, s)`,`.orElse(d)`,`.orThrow(err | (error) => Error)`,`.expect((e) => never)`,`.toOption()`,`.toEither(left | (err) => left)`,`.toList()`,`.toArray()`],check:[`.isSuccess()`,`.isFailure()`],other:[`Try.sequence(arr)`,`Try.traverse(arr, f)`]}},List:{description:`Immutable array with functional operations`,interfaces:r(`List`,`Functor`,`Monad`,`Foldable`,`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:r(`Set`,`Functor`,`Foldable`,`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`],other:[`import { Set } from "functype" // its own name; the built-in is globalThis.Set`]}},Obj:{description:`Immutable object wrapper with fluent operations`,interfaces:r(`Obj`,`KVTraversable`,`Foldable`,`Matchable`,`Extractable`,`Serializable`),methods:{create:[`Obj({...})`,`Obj.of({...})`,`Obj.empty()`],transform:[`.set(k, v)`,`.assign(partial)`,`.merge(obj)`,`.when(cond, partial)`,`.omit(...keys)`,`.pick(...keys)`,`.map(f)`,`.flatMap(f)`],extract:[`.get(k)`,`.value()`,`.keys()`,`.values()`,`.entries()`,`.fold(n, s)`,`.match({Obj})`],check:[`.has(k)`,`.isEmpty`,`.size`]}},Map:{description:`Immutable key-value store`,interfaces:r(`Map`),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`],other:[`import { Map } from "functype" // its own name; the built-in is globalThis.Map`]}},Lazy:{description:"Deferred computation with memoization. Note: `serialize()` and `toValue()` FORCE the thunk (visible side effect) since a closure cannot be JSON-serialized — there is no representable 'unevaluated post-serialize' state. Thunk failures are captured via SerializedError and rethrown on access after fromJSON.",interfaces:r(`Lazy`),methods:{create:[`Lazy(() => expr)`,`Lazy.fromValue(value) — wrap a non-deferred value`,`Lazy.evaluated(value) — reads as 'already-forced'; used by fromJSON`,`Lazy.fail(error) — Lazy that throws on access`],transform:[`.map(f)`,`.flatMap(f)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.get()`,`.toJSON()`,`Lazy.fromJSON(json)`],check:[`.isEvaluated`]}},LazyList:{description:`Lazy sequences for large/infinite data`,interfaces:r(`LazyList`,`Functor`,`Monad`,`Iterable`),methods:{create:[`LazyList.from(iter)`,`LazyList.range(start, end)`,`LazyList.infinite(f)`,`LazyList.fromJSON(json)`],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()`,`.toJSON()`],check:[`.isEmpty`]}},Task:{description:`Async operations with cancellation and progress tracking. Returns TaskOutcome<T> (Ok/Err) which implements Functor, AsyncMonad, Foldable, Extractable, Serializable`,interfaces:r(`Task`),methods:{create:[`Task(params).Async(fn, errFn)`,`Task(params).Sync(fn, errFn)`,`Task.ok(value)`,`Task.err(error)`,`Task.fromEither(either)`,`Task.fromTry(try)`,`Task.fromPromise(fn)`,`Task.fromNodeCallback(fn)`,`Task.fromJSON(json) — reconstruct from serialize() output`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.fold(onErr, onOk)`,`.match({Ok, Err})`,`.orElse(v)`,`.orThrow()`,`.toEither()`,`.toOption()`,`.toJSON()`],other:[`Task.cancellable(fn)`,`Task.withProgress(fn, onProgress)`,`Task.race(tasks, timeout?)`,`Task.getErrorChain(error)`,`Task.formatErrorChain(error)`]}},TaskOutcome:{description:`Result of a Task execution — Ok<T> or Err<T>. Implements Functor, AsyncMonad, Foldable, Extractable, Serializable. Construct via Ok(v) / Err(e) or as the resolved value of Task(...).Sync() / Task(...).Async().`,interfaces:[`AsyncMonad`,`Extractable`,`Foldable`,`Functor`,`Serializable`],methods:{create:[`Ok(value)`,`Err(error)`,`Task.ok(value)`,`Task.err(error)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`,`.mapAsync(f)`,`.flatMapAsync(f)`],extract:[`.fold(onErr, onOk)`,`.match({Ok, Err})`,`.orElse(v)`,`.orThrow()`,`.toEither()`,`.toOption()`,`.toJSON()`],check:[`.isOk()`,`.isErr()`,`.isSuccess()`,`.isFailure()`]}},TaskResult:{description:"Type alias for `Promise<TaskOutcome<T>>`. Returned by Task(params).Async(...) and adapter functions like Fs.readFile, Process.exec. Await it to get the inner TaskOutcome; chain Promise methods on the outside, TaskOutcome methods after the await.",interfaces:[],methods:{create:[`Task(params).Async(fn, errFn) → TaskResult<T>`,`Task.fromPromise(fn) → (...args) => TaskResult<U>`],other:[`await taskResult → TaskOutcome<T>`,`// then use any TaskOutcome method (.fold, .map, .toEither, ...)`]}},Exit:{description:`Outcome of running an IO effect — Success | Failure | Die | Interrupted, returned by .runExit(). Die carries a defect: a value that is not an E. Either has no branch for one, so .run() cannot show it.`,interfaces:[],methods:{create:[`Exit.succeed(v)`,`Exit.fail(e)`,`Exit.die(defect)`,`Exit.interrupt(fiberId)`,`Exit.interrupted()`],transform:[`.map(f)`,`.mapError(f)`,`.mapBoth(onErr, onOk)`,`.flatMap(f)`],extract:[`.fold(onFailure, onSuccess, onInterrupted?, onDie?)`,`.match({Success, Failure, Interrupted, Die?})`,`.orThrow()`,`.orElse(v)`,`.toOption()`,`.toEither()`,`.toValue()`],check:[`.isSuccess()`,`.isFailure()`,`.isDie()`,`.isInterrupted()`],other:[`Exit.zip(a, b)`,`Exit.all(exits)`,`Exit.fromEither(e)`,`Exit.fromOption(o, onNone)`,`// onDie / Die are optional and fall back to the failure handler`,`// defects stay recoverable: .recover/.recoverWith/.fold/.mapError treat Die as Failure`]}},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)`,`IO.die(defect)`],transform:[`.map(f)`,`.flatMap(f)`,`.tap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.run() // Either<E,A> — a defect or interruption arrives in the Left, raw`,`.runOrThrow()`,`.runSync()`,`.runSyncOrThrow()`,`.runExit() // Exit<E,A> — the only terminal that distinguishes Failure/Die/Interrupted`,`.runOption()`,`.runTry()`,`.fold(onErr, onOk)`,`.match({failure, success})`],check:[],other:[`.catchTag(tag, f)`,`.catchAll(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.retryWhile({ n, while, delayMs? })`,`.retryWithBackoff({ n, baseMs, maxMs?, factor?, jitter?, while? })`,`.repeatUntil(done, { max, delayMs? })`,`.repeatWhile(cont, { max, delayMs? })`,`.timeout(ms)`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...])`,`IO.race([...])`,`IO.iterate(seed, step, done, { max? })`,`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()`]}},Wire:{description:`Serialization-boundary marker for a row, collection or nullable field at DB / HTTP / JSONB boundaries. Zero runtime, assignable both ways with T. prefer-list and prefer-option skip everything inside it. A collection is Wire<ReadonlyArray<Row>>.`,interfaces:[],methods:{create:[`type UserRow = Wire<{ email: string | null }>`,`type Rows = Wire<ReadonlyArray<Row>>`,`email: Wire<string | null>`],other:[`List(rows).filter(...) // convert to List for transformation`,`Option(row.email) // convert to Option`]}},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:r(`Tuple`,`Typeable`,`Valuable`,`Iterable`),methods:{create:[`Tuple([a, b, ...])`,`Tuple.of(a, b, ...)`,`Tuple.fromJSON(json)`],extract:[`.first`,`.second`,`.toArray()`,`.toJSON()`],transform:[`.map(f)`]}},Identity:{description:`The identity monad: wraps a value with no extra effect. Useful as a neutral container in generic code.`,interfaces:[],methods:{create:[`Identity(value)`,`Identity.of(value)`,`Identity.pure(value)`],extract:[`.id`],other:[`.isSame(other)`]}},Ref:{description:`Mutable reference cell for controlled, local mutability. Invariant in A by design (a mutable cell can't be widened).`,interfaces:[],methods:{create:[`Ref(initial)`,`Ref.of(initial)`],extract:[`.get()`],transform:[`.set(a)`,`.update(f)`,`.modify(f) // returns B, stores A`],other:[`.getAndSet(a)`,`.updateAndGet(f)`,`.getAndUpdate(f)`,`.compareAndSet(expected, next)`]}},Do:{description:`Generator do-notation across Option, Either, List and Try (DoAsync for promises). Short-circuits on None/Left/Failure/empty List.`,interfaces:[],methods:{create:[`Do(function* () { const a = yield* $(opt); return a })`,`DoAsync(async function* () { … })`],other:[`$(monad) // unwrap inside Do`,`isDoCapable(value)`,`unwrap(monad)`]}},invariant:{description:`One-line bug check: invariant(cond, msg) throws a tagged InvariantViolation when cond is falsy and narrows cond after it. For programmer errors only; expected failures return Either.`,interfaces:[],methods:{create:[`invariant(row, "upsert returned no row")`,"invariant(n >= 0, () => `bad step ${n}`) // lazy message"],other:[`InvariantViolation(msg) // throw directly for an unreachable branch`]}},TracedOption:{description:`Opt-in Option wrapper that emits one TraceEvent per combinator to an injected Tracer, then delegates. For code-path introspection.`,interfaces:[],methods:{create:[`TracedOption(option, tracer, spanId, seq?)`],transform:[`.map(f, label?)`,`.flatMap(f, label?)`,`.filter(p, label?)`],extract:[`.fold(onNone, onSome, label?)`,`.orElse(default, label?)`,`.unwrap() // back to Option`]}},Tracer:{description:`One-method trace sink consumed by TracedOption. Type-only, like Logger; declare your own Tag for injection.`,interfaces:[],methods:{create:[`const tracer: Tracer = { emit: (e: TraceEvent) => … }`],other:[`TraceEvent: { spanId, seq, op, tag, inTag, outTag?, label?, meta? }`]}},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`]}},Http:{description:"HTTP fetch wrapper returning IO<never, HttpError, HttpResponse<T>>. Pass `decode: Decoder<T>` (Either-returning) for typed responses; the deprecated `validate: (data) => T` field is still accepted for throw-pattern back-compat. Request bodies auto-flatten functype ADTs to primitives; `flatten: false` preserves tagged emission for functype-to-functype services. Per-call `params` (HttpQueryParams) appends query strings with proper encoding. Http.client accepts `beforeRequest` and `afterResponse` (both effectful IO transformers). `afterResponse` runs on the success path only — error handling belongs in .catchTag. Composes via .tap/.map/.flatMap/.catchTag/.retry/.retryWhile/.retryWithBackoff/.timeout.",interfaces:[],methods:{create:[`Http.get(url, { decode, params }?)`,`Http.post(url, { body, decode, params }?)`,`Http.put(url, { body, decode, params }?)`,`Http.patch(url, { body, decode, params }?)`,`Http.delete(url, { decode, params }?)`,`Http.request({ url, decode, params })`,`Http.client({ baseUrl, defaultHeaders, fetch, beforeRequest, afterResponse })`],transform:[`.tap(f)`,`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.retryWhile({ n, while, delayMs? })`,`.retryWithBackoff({ n, baseMs, maxMs?, factor?, jitter?, while? })`,`.timeout(ms)`],extract:[`.run()`,`.runOrThrow()`,`.runOption()`,`.runTry()`,`.runExit()`],check:[],other:[`.catchTag(tag, handler)`,`.catchAll(handler)`,`.recover(fallback)`,`decode: Decoder<T> (Either-returning, structural failures preserved)`,`validate: (data) => T (deprecated, throws — for back-compat / Zod .parse)`,`flatten: boolean (default true; false preserves tagged emission)`,`params: HttpQueryParams (scalar | array; undefined/null dropped; percent-encoded)`,`beforeRequest: (req) => IO<never, HttpError, HttpRequestView>`,`afterResponse: (HttpResponse<unknown>) => IO<never, HttpError, HttpResponse<unknown>> — success path only; refresh-on-401 uses .catchTag`]}},HttpError:{description:`Three-variant ADT for HTTP failures: NetworkError | HttpStatusError | DecodeError (also exported as ResponseDecodeError alias)`,interfaces:[],methods:{create:[`HttpError.networkError(url, method, cause)`,`HttpError.httpStatusError(url, method, status, statusText, body)`,`HttpError.decodeError(url, method, body, cause)`],check:[`HttpError.isNetworkError(e)`,`HttpError.isHttpStatusError(e)`,`HttpError.isDecodeError(e)`],other:[`HttpError.match(error, { NetworkError, HttpStatusError, DecodeError })`]}},Decoder:{description:"Either-returning decoder contract: `Decoder<A> = (raw: unknown) => Either<DecoderError, A>`. Bundled combinators for primitives + functype ADTs (Option/Either/List/Map, null-bias). `Decoder.tagged.*` round-trips the `{_tag, value}` shape for functype-to-functype services.",interfaces:[],methods:{create:[`Decoder.string / .number / .boolean / .unknown / .nullable(inner)`,`Decoder.option(inner)`,`Decoder.either.envelope({ok, err})`,`Decoder.either.discriminated({tag, leftTag, rightTag}, l, r)`,`Decoder.list(inner) / .array(inner) / .map(inner)`,`Decoder.object({k: Decoder<V>, ...}) — accumulates field failures into Composite`,`Decoder.tagged.option/either/try/list/map/obj(inner?) — round-trips {_tag, value}`],other:[`Pluggable by construction: any (raw) => Either<DecoderError, T> IS a Decoder<T>`,`Composes across sources: Decoder.object({a: Decoder.fromZod(s), b: Decoder.option(myAjv)})`]}},DecoderError:{description:"Recursive ADT for decoder failures: Leaf | Composite. Children mirror the input tree so multi-field failures preserve structural paths. Distinct from `HttpError.DecodeError` — this is the inner structural cause that the HTTP wrapper carries.",interfaces:[],methods:{create:[`DecoderError.leaf(path, message, cause?)`,`DecoderError.composite(path, children: List<DecoderError>)`],check:[`DecoderError.isLeaf(e)`,`DecoderError.isComposite(e)`],other:[`DecoderError.match(e, { Leaf, Composite })`,`DecoderError.prepend(segment, e) — used by combinators to attribute child failures`,`DecoderError.flatten(e): List<{path, message}> — collect leaves`,`DecoderError.format(e): string — render tree as multi-line`]}},Serialization:{description:"Universal `@functype`-marked JSON serialization. `deserialize` walks parsed JSON and reconstructs any functype value found — no type argument needed. Lenient: plain JSON passes through. Strict on unknown markers (defends against Effect/fp-ts `_tag` collision). 1.2.1 adds `toEnvelope`/`fromEnvelope` for nesting inside structured serializers (SuperJSON, DBOS), and `deserializeStrict` for boundaries that require functype on the wire.",interfaces:[],methods:{create:[],transform:[`Serialization.serialize(value: unknown): string — lenient JSON codec`,`Serialization.deserialize(json: string): Try<unknown> — lenient; pass-through for unmarked JSON`,`Serialization.deserializeStrict(json: string): Try<unknown> — Failure if no @functype marker at top level`,`Serialization.toEnvelope(value: unknown): JSONValue — parsed JSON shape (1.2.2 tightened from unknown)`,`Serialization.fromEnvelope(envelope: unknown): Try<unknown> — inverse of toEnvelope; input stays permissive (Postel's law)`,`Serialization.JSONValue — exported recursive type for the envelope shape`],check:[`Serialization.isFunctypeValue(v): v is Serializable<unknown>`],other:[`Plain JSON passthrough: non-functype data walks through unchanged (use deserializeStrict to reject)`,`Strict policy on unknown markers: unknown @functype marker → Try.Failure`,`Dispatch table covers all 12 Serializable types (Option, Either, Try, List, Set, Map, Obj, Stack, Tuple, LazyList, Lazy, Task)`,`Algebraic square: serialize ≡ JSON.stringify ∘ toEnvelope; deserialize ≡ fromEnvelope ∘ JSON.parse`,`No DBOS / SuperJSON facade — consumers wire host serializer in ~8 lines via toEnvelope/fromEnvelope`]}},SerializedError:{description:"Canonical Error projection used by Try.Failure, Task.Err, Lazy-with-thrown-thunk. Round-trips name + message + stack + cause chain. `e.name === 'TypeError'` survives; `instanceof TypeError` does NOT.",interfaces:[],methods:{create:[`serializeError(err: unknown): SerializedError`,`deserializeError(s: SerializedError | string): Error`],other:[`Shape: { name: string; message: string; stack?: string; cause?: SerializedError | string }`,`Non-Error throwables (strings, plain objects) projected under name: 'NonErrorThrowable'`,`Cause chain is recursive — arbitrary nesting depth survives`]}},Logger:{description:`Minimal 4-method logging interface every functype-* package targets. Type-only, no runtime. Impls live in consumers: consoleBootLogger (functype-os/config), DirectLogger (functype-log/direct). Tracer is type-only on the same terms; Clock/Random are not added.`,interfaces:[],methods:{create:[`interface Logger { debug, info, warn, error: (msg, meta?) => void }`,`import type { Logger } from "functype"`],check:[],other:[`All 4 methods MANDATORY (no defensive logger.debug?.() at call sites)`,`Signature: (message: string, metadata?: Record<string, unknown>) => void`,`DirectLogger from functype-log/direct structurally satisfies Logger (superset shape)`,`IO-shaped Logger from functype-log does NOT satisfy core Logger (methods return IO<>, not void) — bridge via toDirectLogger(ioLogger)`,`Used by: bootDiagnostics({ logger? }) in functype-os/config`]}},TypedError:{description:`Code-tagged structured error ADT (extends Throwable); TypedError.validation(...) feeds accumulating validation.`,interfaces:[],methods:{create:[`TypedError.validation(field, value, rule) → TypedError<"VALIDATION_FAILED">`,`TypedError.badRequest(reason, expected?)`,`TypedError.notFound(resource, id)`,`TypedError.auth(resource, requiredRole?)`,`TypedError.permission(action, resource, userId?)`,`TypedError.conflict(resource, value) / .rateLimit(limit, window, retryAfter?)`,`TypedError.timeout(ms, operation) / .network(url, method, status?) / .internal(errorId)`],check:[`TypedError.isTypedError(v)`,`TypedError.hasCode(e, code)`],other:[`Fields: .code, .message, .status (HTTP), .context, .timestamp, .traceId?`,`VALIDATION_FAILED context shape: { field, value, rule }`]}},Validation:{description:`Error-accumulating validation (functype's Validated role) — FormValidation<T> collects all field errors, not fail-fast.`,interfaces:[],methods:{create:[`Validation.rule<T>('min:18' | 'email' | 'required' | 'in:a,b' | ...)`,`Validation.combine(...validators) / Validation.custom(predicate, message)`,`Validation.validators.email / .url / .uuid / .required / .numeric / .positiveNumber / .nonEmptyString`],transform:[`Validation.form(schema, data) → FormValidation<T> (accumulates all field errors)`,`Validator<T> = (value: unknown) => Either<TypedError<'VALIDATION_FAILED'>, T>`],other:[`FormValidation<T> = Either<List<TypedError<"VALIDATION_FAILED">>, T> — functype's "Validated" accumulating result type`,`form() is flat/per-field: for cross-field (lo < hi) or dynamic-key (weights.*) checks, hand-accumulate into a List<TypedError> and return the FormValidation shape`]}}},a={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`,`.expect(handler: (e?) => never): 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`]}},o={Core:[`Option`,`Either`,`Try`,`Obj`,`Identity`],Collection:[`List`,`Set`,`Map`,`LazyList`,`Tuple`,`Stack`],Effect:[`IO`,`Exit`,`Task`,`TaskOutcome`,`TaskResult`,`Http`,`HttpError`,`Decoder`,`DecoderError`],Utility:[`Lazy`,`Cond`,`Match`,`Do`,`Ref`,`Brand`,`ValidatedBrand`,`Wire`,`invariant`,`TracedOption`],Validation:[`TypedError`,`Validation`],Serialization:[`Serialization`,`SerializedError`],Service:[`Logger`,`Tracer`]},s={Option:`export interface Option<out T extends Type>
1
+ var e=`1.14.0`;const t={Option:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Matchable`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`,`Traversable`],Either:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`],Try:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Reshapeable`,`Serializable`],List:[`Collection`,`Doable`,`Iterable`,`Reshapeable`],Set:[`Collection`,`Iterable`],Map:[`Collection`,`Foldable`,`Iterable`,`KVTraversable`,`Serializable`],Obj:[`Doable`,`Promisable`,`Reshapeable`],Lazy:[`Applicative`,`AsyncMonad`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Serializable`,`Traversable`],LazyList:[`Foldable`,`Serializable`],Tuple:[`Foldable`,`Serializable`],Task:[`Applicative`,`AsyncMonad`,`Doable`,`Extractable`,`Foldable`,`Functor`,`Monad`,`Promisable`,`Serializable`,`Traversable`]},n=e,r=(e,...n)=>Array.from(/* @__PURE__ */ new Set([...t[e],...n])).sort(),i={Option:{description:`Safe nullable handling - Some<T> or None`,interfaces:r(`Option`),methods:{create:[`Option(v)`,`Option.none()`,`Some(v)`,`None()`],transform:[`.map(f)`,`.flatMap(f)`,`.filter(p)`,`.ap(ff)`],extract:[`.fold(n, s)`,`.foldAsync(n, s)`,`.orElse(d)`,`.orThrow(err | () => Error)`,`.expect(() => never)`,`.orNull()`,`.match({Some, None})`,`.toEither(left | () => left)`,`.toList()`,`.toArray()`],check:[`.isSome()`,`.isNone()`,`.isEmpty`],other:[`Option.sequence(arr)`,`Option.traverse(arr, f)`]}},Either:{description:`Error handling with Left (error) or Right (success)`,interfaces:r(`Either`,`Traversable`),methods:{create:[`Right(v)`,`Left(e)`,`Either.right(v)`,`Either.left(e)`,`Either.void()`],transform:[`.map(f)`,`.flatMap(f)`,`.mapLeft(f)`,`.swap()`],extract:[`.fold(l, r)`,`.foldAsync(l, r)`,`.orElse(d)`,`.orThrow(err | (left) => Error)`,`.expect((l) => never)`,`.match({Left, Right})`],check:[`.isRight()`,`.isLeft()`],other:[`Either.sequence(arr)`,`Either.traverse(arr, f)`,`Either.traverseAsync(items, f, {concurrency?}) // in order by default, stops at first Left`,`Either.fromNullable(v, e)`]}},Try:{description:`Wrap operations that may throw - Success<T> or Failure`,interfaces:r(`Try`,`Matchable`,`Traversable`),methods:{create:[`Try(() => expr)`,`Try.success(v)`,`Try.failure(e)`,`Try.fromPromise(p)`,`Try.async(() => Promise<T>)`],transform:[`.map(f)`,`.flatMap(f)`,`.recover(f)`,`.recoverWith(f)`],extract:[`.fold(f, s)`,`.foldAsync(f, s)`,`.orElse(d)`,`.orThrow(err | (error) => Error)`,`.expect((e) => never)`,`.toOption()`,`.toEither(left | (err) => left)`,`.toList()`,`.toArray()`],check:[`.isSuccess()`,`.isFailure()`],other:[`Try.sequence(arr)`,`Try.traverse(arr, f)`]}},List:{description:`Immutable array with functional operations`,interfaces:r(`List`,`Functor`,`Monad`,`Foldable`,`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)`,`.mapAsync(f, {concurrency?}) // in order by default`,`.flatMapAsync(f, {concurrency?})`]}},Set:{description:`Immutable set of unique values`,interfaces:r(`Set`,`Functor`,`Foldable`,`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`],other:[`import { Set } from "functype" // its own name; the built-in is globalThis.Set`]}},Obj:{description:`Immutable object wrapper with fluent operations`,interfaces:r(`Obj`,`KVTraversable`,`Foldable`,`Matchable`,`Extractable`,`Serializable`),methods:{create:[`Obj({...})`,`Obj.of({...})`,`Obj.empty()`],transform:[`.set(k, v)`,`.assign(partial)`,`.merge(obj)`,`.when(cond, partial)`,`.omit(...keys)`,`.pick(...keys)`,`.map(f)`,`.flatMap(f)`],extract:[`.get(k)`,`.value()`,`.keys()`,`.values()`,`.entries()`,`.fold(n, s)`,`.match({Obj})`],check:[`.has(k)`,`.isEmpty`,`.size`]}},Map:{description:`Immutable key-value store`,interfaces:r(`Map`),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`],other:[`import { Map } from "functype" // its own name; the built-in is globalThis.Map`]}},Lazy:{description:"Deferred computation with memoization. Note: `serialize()` and `toValue()` FORCE the thunk (visible side effect) since a closure cannot be JSON-serialized — there is no representable 'unevaluated post-serialize' state. Thunk failures are captured via SerializedError and rethrown on access after fromJSON.",interfaces:r(`Lazy`),methods:{create:[`Lazy(() => expr)`,`Lazy.fromValue(value) — wrap a non-deferred value`,`Lazy.evaluated(value) — reads as 'already-forced'; used by fromJSON`,`Lazy.fail(error) — Lazy that throws on access`],transform:[`.map(f)`,`.flatMap(f)`],extract:[`.fold(n, s)`,`.orElse(d)`,`.orThrow()`,`.get()`,`.toJSON()`,`Lazy.fromJSON(json)`],check:[`.isEvaluated`]}},LazyList:{description:`Lazy sequences for large/infinite data`,interfaces:r(`LazyList`,`Functor`,`Monad`,`Iterable`),methods:{create:[`LazyList.from(iter)`,`LazyList.range(start, end)`,`LazyList.infinite(f)`,`LazyList.fromJSON(json)`],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()`,`.toJSON()`],check:[`.isEmpty`]}},Task:{description:`Async operations with cancellation and progress tracking. Returns TaskOutcome<T> (Ok/Err) which implements Functor, AsyncMonad, Foldable, Extractable, Serializable`,interfaces:r(`Task`),methods:{create:[`Task(params).Async(fn, errFn)`,`Task(params).Sync(fn, errFn)`,`Task.ok(value)`,`Task.err(error)`,`Task.fromEither(either)`,`Task.fromTry(try)`,`Task.fromPromise(fn)`,`Task.fromNodeCallback(fn)`,`Task.fromJSON(json) — reconstruct from serialize() output`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.fold(onErr, onOk)`,`.match({Ok, Err})`,`.orElse(v)`,`.orThrow()`,`.toEither()`,`.toOption()`,`.toJSON()`],other:[`Task.cancellable(fn)`,`Task.withProgress(fn, onProgress)`,`Task.race(tasks, timeout?)`,`Task.getErrorChain(error)`,`Task.formatErrorChain(error)`]}},TaskOutcome:{description:`Result of a Task execution — Ok<T> or Err<T>. Implements Functor, AsyncMonad, Foldable, Extractable, Serializable. Construct via Ok(v) / Err(e) or as the resolved value of Task(...).Sync() / Task(...).Async().`,interfaces:[`AsyncMonad`,`Extractable`,`Foldable`,`Functor`,`Serializable`],methods:{create:[`Ok(value)`,`Err(error)`,`Task.ok(value)`,`Task.err(error)`],transform:[`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`,`.mapAsync(f)`,`.flatMapAsync(f)`],extract:[`.fold(onErr, onOk)`,`.match({Ok, Err})`,`.orElse(v)`,`.orThrow()`,`.toEither()`,`.toOption()`,`.toJSON()`],check:[`.isOk()`,`.isErr()`,`.isSuccess()`,`.isFailure()`]}},TaskResult:{description:"Type alias for `Promise<TaskOutcome<T>>`. Returned by Task(params).Async(...) and adapter functions like Fs.readFile, Process.exec. Await it to get the inner TaskOutcome; chain Promise methods on the outside, TaskOutcome methods after the await.",interfaces:[],methods:{create:[`Task(params).Async(fn, errFn) → TaskResult<T>`,`Task.fromPromise(fn) → (...args) => TaskResult<U>`],other:[`await taskResult → TaskOutcome<T>`,`// then use any TaskOutcome method (.fold, .map, .toEither, ...)`]}},Exit:{description:`Outcome of running an IO effect — Success | Failure | Die | Interrupted, returned by .runExit(). Die carries a defect: a value that is not an E. Either has no branch for one, so .run() cannot show it.`,interfaces:[],methods:{create:[`Exit.succeed(v)`,`Exit.fail(e)`,`Exit.die(defect)`,`Exit.interrupt(fiberId)`,`Exit.interrupted()`],transform:[`.map(f)`,`.mapError(f)`,`.mapBoth(onErr, onOk)`,`.flatMap(f)`],extract:[`.fold(onFailure, onSuccess, onInterrupted?, onDie?)`,`.match({Success, Failure, Interrupted, Die?})`,`.orThrow()`,`.orElse(v)`,`.toOption()`,`.toEither()`,`.toValue()`],check:[`.isSuccess()`,`.isFailure()`,`.isDie()`,`.isInterrupted()`],other:[`Exit.zip(a, b)`,`Exit.all(exits)`,`Exit.fromEither(e)`,`Exit.fromOption(o, onNone)`,`// onDie / Die are optional and fall back to the failure handler`,`// defects stay recoverable: .recover/.recoverWith/.fold/.mapError treat Die as Failure`]}},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.fromPromiseEither(f, onReject?)`,`IO.fromOption(o)`,`IO.fromTry(t)`,`IO.die(defect)`],transform:[`.map(f)`,`.flatMap(f)`,`.tap(f)`,`.mapError(f)`,`.recover(v)`,`.recoverWith(f)`],extract:[`.run() // Either<E,A> — a defect or interruption arrives in the Left, raw`,`.runOrThrow()`,`.runSync()`,`.runSyncOrThrow()`,`.runExit() // Exit<E,A> — the only terminal that distinguishes Failure/Die/Interrupted`,`.runCancellable() // { result, cancel }`,`.runExit({ signal }) // Interrupted on abort, E unchanged`,`.runOption()`,`.runTry()`,`.fold(onErr, onOk)`,`.match({failure, success})`],check:[],other:[`.catchTag(tag, f)`,`.catchAll(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.retryWhile({ n, while, delayMs? })`,`.retryWithBackoff({ n, baseMs, maxMs?, factor?, jitter?, while? })`,`.repeatUntil(done, { max, delayMs? })`,`.repeatWhile(cont, { max, delayMs? })`,`.timeout(ms)`,`.interruptOn(signal) // stops at the next step once the AbortSignal fires; E gains InterruptedError`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...])`,`IO.race([...])`,`IO.iterate(seed, step, done, { max? })`,`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()`]}},Wire:{description:`Serialization-boundary marker for a row, collection or nullable field at DB / HTTP / JSONB boundaries. Zero runtime, assignable both ways with T. prefer-list and prefer-option skip everything inside it. A collection is Wire<ReadonlyArray<Row>>.`,interfaces:[],methods:{create:[`type UserRow = Wire<{ email: string | null }>`,`type Rows = Wire<ReadonlyArray<Row>>`,`email: Wire<string | null>`],other:[`List(rows).filter(...) // convert to List for transformation`,`Option(row.email) // convert to Option`]}},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:r(`Tuple`,`Typeable`,`Valuable`,`Iterable`),methods:{create:[`Tuple([a, b, ...])`,`Tuple.of(a, b, ...)`,`Tuple.fromJSON(json)`],extract:[`.first`,`.second`,`.toArray()`,`.toJSON()`],transform:[`.map(f)`]}},Identity:{description:`The identity monad: wraps a value with no extra effect. Useful as a neutral container in generic code.`,interfaces:[],methods:{create:[`Identity(value)`,`Identity.of(value)`,`Identity.pure(value)`],extract:[`.id`],other:[`.isSame(other)`]}},Ref:{description:`Mutable reference cell for controlled, local mutability. Invariant in A by design (a mutable cell can't be widened).`,interfaces:[],methods:{create:[`Ref(initial)`,`Ref.of(initial)`],extract:[`.get()`],transform:[`.set(a)`,`.update(f)`,`.modify(f) // returns B, stores A`],other:[`.getAndSet(a)`,`.updateAndGet(f)`,`.getAndUpdate(f)`,`.compareAndSet(expected, next)`]}},Do:{description:`Generator do-notation across Option, Either, List and Try (DoAsync for promises). Short-circuits on None/Left/Failure/empty List.`,interfaces:[],methods:{create:[`Do(function* () { const a = yield* $(opt); return a })`,`DoAsync(async function* () { … })`],other:[`$(monad) // unwrap inside Do`,`isDoCapable(value)`,`unwrap(monad)`]}},invariant:{description:`One-line bug check: invariant(cond, msg) throws a tagged InvariantViolation when cond is falsy and narrows cond after it. For programmer errors only; expected failures return Either.`,interfaces:[],methods:{create:[`invariant(row, "upsert returned no row")`,"invariant(n >= 0, () => `bad step ${n}`) // lazy message"],other:[`InvariantViolation(msg) // throw directly for an unreachable branch`]}},TracedOption:{description:`Opt-in Option wrapper that emits one TraceEvent per combinator to an injected Tracer, then delegates. For code-path introspection.`,interfaces:[],methods:{create:[`TracedOption(option, tracer, spanId, seq?)`],transform:[`.map(f, label?)`,`.flatMap(f, label?)`,`.filter(p, label?)`],extract:[`.fold(onNone, onSome, label?)`,`.orElse(default, label?)`,`.unwrap() // back to Option`]}},Tracer:{description:`One-method trace sink consumed by TracedOption. Type-only, like Logger; declare your own Tag for injection.`,interfaces:[],methods:{create:[`const tracer: Tracer = { emit: (e: TraceEvent) => … }`],other:[`TraceEvent: { spanId, seq, op, tag, inTag, outTag?, label?, meta? }`]}},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`]}},Http:{description:"HTTP fetch wrapper returning IO<never, HttpError, HttpResponse<T>>. Pass `decode: Decoder<T>` (Either-returning) for typed responses; the deprecated `validate: (data) => T` field is still accepted for throw-pattern back-compat. Request bodies auto-flatten functype ADTs to primitives; `flatten: false` preserves tagged emission for functype-to-functype services. Per-call `params` (HttpQueryParams) appends query strings with proper encoding. Http.client accepts `beforeRequest` and `afterResponse` (both effectful IO transformers). `afterResponse` runs on the success path only — error handling belongs in .catchTag. Composes via .tap/.map/.flatMap/.catchTag/.retry/.retryWhile/.retryWithBackoff/.timeout.",interfaces:[],methods:{create:[`Http.get(url, { decode, params }?)`,`Http.post(url, { body, decode, params }?)`,`Http.put(url, { body, decode, params }?)`,`Http.patch(url, { body, decode, params }?)`,`Http.delete(url, { decode, params }?)`,`Http.request({ url, decode, params })`,`Http.client({ baseUrl, defaultHeaders, fetch, beforeRequest, afterResponse })`],transform:[`.tap(f)`,`.map(f)`,`.flatMap(f)`,`.mapError(f)`,`.retry(n)`,`.retryWithDelay(n, ms)`,`.retryWhile({ n, while, delayMs? })`,`.retryWithBackoff({ n, baseMs, maxMs?, factor?, jitter?, while? })`,`.timeout(ms)`],extract:[`.run()`,`.runOrThrow()`,`.runOption()`,`.runTry()`,`.runExit()`,`.runCancellable()`],check:[],other:[`.catchTag(tag, handler)`,`.catchAll(handler)`,`.recover(fallback)`,`decode: Decoder<T> (Either-returning, structural failures preserved)`,`validate: (data) => T (deprecated, throws — for back-compat / Zod .parse)`,`flatten: boolean (default true; false preserves tagged emission)`,`params: HttpQueryParams (scalar | array; undefined/null dropped; percent-encoded)`,`beforeRequest: (req) => IO<never, HttpError, HttpRequestView>`,`afterResponse: (HttpResponse<unknown>) => IO<never, HttpError, HttpResponse<unknown>> — success path only; refresh-on-401 uses .catchTag`]}},HttpError:{description:`Three-variant ADT for HTTP failures: NetworkError | HttpStatusError | DecodeError (also exported as ResponseDecodeError alias)`,interfaces:[],methods:{create:[`HttpError.networkError(url, method, cause)`,`HttpError.httpStatusError(url, method, status, statusText, body)`,`HttpError.decodeError(url, method, body, cause)`],check:[`HttpError.isNetworkError(e)`,`HttpError.isHttpStatusError(e)`,`HttpError.isDecodeError(e)`],other:[`HttpError.match(error, { NetworkError, HttpStatusError, DecodeError })`]}},Decoder:{description:"Either-returning decoder contract: `Decoder<A> = (raw: unknown) => Either<DecoderError, A>`. Bundled combinators for primitives + functype ADTs (Option/Either/List/Map, null-bias). `Decoder.tagged.*` round-trips the `{_tag, value}` shape for functype-to-functype services.",interfaces:[],methods:{create:[`Decoder.string / .number / .boolean / .unknown / .nullable(inner)`,`Decoder.option(inner)`,`Decoder.either.envelope({ok, err})`,`Decoder.either.discriminated({tag, leftTag, rightTag}, l, r)`,`Decoder.list(inner) / .array(inner) / .map(inner)`,`Decoder.object({k: Decoder<V>, ...}) — accumulates field failures into Composite`,`Decoder.tagged.option/either/try/list/map/obj(inner?) — round-trips {_tag, value}`],other:[`Pluggable by construction: any (raw) => Either<DecoderError, T> IS a Decoder<T>`,`Composes across sources: Decoder.object({a: Decoder.fromZod(s), b: Decoder.option(myAjv)})`]}},DecoderError:{description:"Recursive ADT for decoder failures: Leaf | Composite. Children mirror the input tree so multi-field failures preserve structural paths. Distinct from `HttpError.DecodeError` — this is the inner structural cause that the HTTP wrapper carries.",interfaces:[],methods:{create:[`DecoderError.leaf(path, message, cause?)`,`DecoderError.composite(path, children: List<DecoderError>)`],check:[`DecoderError.isLeaf(e)`,`DecoderError.isComposite(e)`],other:[`DecoderError.match(e, { Leaf, Composite })`,`DecoderError.prepend(segment, e) — used by combinators to attribute child failures`,`DecoderError.flatten(e): List<{path, message}> — collect leaves`,`DecoderError.format(e): string — render tree as multi-line`]}},Serialization:{description:"Universal `@functype`-marked JSON serialization. `deserialize` walks parsed JSON and reconstructs any functype value found — no type argument needed. Lenient: plain JSON passes through. Strict on unknown markers (defends against Effect/fp-ts `_tag` collision). 1.2.1 adds `toEnvelope`/`fromEnvelope` for nesting inside structured serializers (SuperJSON, DBOS), and `deserializeStrict` for boundaries that require functype on the wire.",interfaces:[],methods:{create:[],transform:[`Serialization.serialize(value: unknown): string — lenient JSON codec`,`Serialization.deserialize(json: string): Try<unknown> — lenient; pass-through for unmarked JSON`,`Serialization.deserializeStrict(json: string): Try<unknown> — Failure if no @functype marker at top level`,`Serialization.toEnvelope(value: unknown): JSONValue — parsed JSON shape (1.2.2 tightened from unknown)`,`Serialization.fromEnvelope(envelope: unknown): Try<unknown> — inverse of toEnvelope; input stays permissive (Postel's law)`,`Serialization.JSONValue — exported recursive type for the envelope shape`],check:[`Serialization.isFunctypeValue(v): v is Serializable<unknown>`],other:[`Plain JSON passthrough: non-functype data walks through unchanged (use deserializeStrict to reject)`,`Strict policy on unknown markers: unknown @functype marker → Try.Failure`,`Dispatch table covers all 12 Serializable types (Option, Either, Try, List, Set, Map, Obj, Stack, Tuple, LazyList, Lazy, Task)`,`Algebraic square: serialize ≡ JSON.stringify ∘ toEnvelope; deserialize ≡ fromEnvelope ∘ JSON.parse`,`No DBOS / SuperJSON facade — consumers wire host serializer in ~8 lines via toEnvelope/fromEnvelope`]}},SerializedError:{description:"Canonical Error projection used by Try.Failure, Task.Err, Lazy-with-thrown-thunk. Round-trips name + message + stack + cause chain. `e.name === 'TypeError'` survives; `instanceof TypeError` does NOT.",interfaces:[],methods:{create:[`serializeError(err: unknown): SerializedError`,`deserializeError(s: SerializedError | string): Error`],other:[`Shape: { name: string; message: string; stack?: string; cause?: SerializedError | string }`,`Non-Error throwables (strings, plain objects) projected under name: 'NonErrorThrowable'`,`Cause chain is recursive — arbitrary nesting depth survives`]}},Logger:{description:`Minimal 4-method logging interface every functype-* package targets. Type-only, no runtime. Impls live in consumers: consoleBootLogger (functype-os/config), DirectLogger (functype-log/direct). Tracer is type-only on the same terms; Clock/Random are not added.`,interfaces:[],methods:{create:[`interface Logger { debug, info, warn, error: (msg, meta?) => void }`,`import type { Logger } from "functype"`],check:[],other:[`All 4 methods MANDATORY (no defensive logger.debug?.() at call sites)`,`Signature: (message: string, metadata?: Record<string, unknown>) => void`,`DirectLogger from functype-log/direct structurally satisfies Logger (superset shape)`,`IO-shaped Logger from functype-log does NOT satisfy core Logger (methods return IO<>, not void) — bridge via toDirectLogger(ioLogger)`,`Used by: bootDiagnostics({ logger? }) in functype-os/config`]}},TypedError:{description:`Code-tagged structured error ADT (extends Throwable); TypedError.validation(...) feeds accumulating validation.`,interfaces:[],methods:{create:[`TypedError.validation(field, value, rule) → TypedError<"VALIDATION_FAILED">`,`TypedError.badRequest(reason, expected?)`,`TypedError.notFound(resource, id)`,`TypedError.auth(resource, requiredRole?)`,`TypedError.permission(action, resource, userId?)`,`TypedError.conflict(resource, value) / .rateLimit(limit, window, retryAfter?)`,`TypedError.timeout(ms, operation) / .network(url, method, status?) / .internal(errorId)`],check:[`TypedError.isTypedError(v)`,`TypedError.hasCode(e, code)`],other:[`Fields: .code, .message, .status (HTTP), .context, .timestamp, .traceId?`,`VALIDATION_FAILED context shape: { field, value, rule }`]}},Validation:{description:`Error-accumulating validation (functype's Validated role) — FormValidation<T> collects all field errors, not fail-fast.`,interfaces:[],methods:{create:[`Validation.rule<T>('min:18' | 'email' | 'required' | 'in:a,b' | ...)`,`Validation.combine(...validators) / Validation.custom(predicate, message)`,`Validation.validators.email / .url / .uuid / .required / .numeric / .positiveNumber / .nonEmptyString`],transform:[`Validation.form(schema, data) → FormValidation<T> (accumulates all field errors)`,`Validator<T> = (value: unknown) => Either<TypedError<'VALIDATION_FAILED'>, T>`],other:[`FormValidation<T> = Either<List<TypedError<"VALIDATION_FAILED">>, T> — functype's "Validated" accumulating result type`,`form() is flat/per-field: for cross-field (lo < hi) or dynamic-key (weights.*) checks, hand-accumulate into a List<TypedError> and return the FormValidation shape`]}}},a={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`,`.expect(handler: (e?) => never): 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`]}},o={Core:[`Option`,`Either`,`Try`,`Obj`,`Identity`],Collection:[`List`,`Set`,`Map`,`LazyList`,`Tuple`,`Stack`],Effect:[`IO`,`Exit`,`Task`,`TaskOutcome`,`TaskResult`,`Http`,`HttpError`,`Decoder`,`DecoderError`],Utility:[`Lazy`,`Cond`,`Match`,`Do`,`Ref`,`Brand`,`ValidatedBrand`,`Wire`,`invariant`,`TracedOption`],Validation:[`TypedError`,`Validation`],Serialization:[`Serialization`,`SerializedError`],Service:[`Logger`,`Tracer`]},s={Option:`export interface Option<out T extends Type>
2
2
  extends Functype<T, "Some" | "None">, Promisable<T>, Doable<T>, Reshapeable<T> {
3
3
  /** The contained value (undefined for None) */
4
4
  readonly value: T | undefined
@@ -448,7 +448,23 @@ export interface RightOf<out L extends Type, out R extends Type> extends EitherB
448
448
  map: <B>(f: (a: A) => B) => List<B>
449
449
  ap: <B>(ff: List<(value: A) => B>) => List<B>
450
450
  flatMap: <B>(f: (a: A) => Iterable<B>) => List<B>
451
- flatMapAsync: <B>(f: (a: A) => PromiseLike<Iterable<B>>) => PromiseLike<List<B>>
451
+ /** Async flatMap. Starts every call at once unless \`options.concurrency\` caps it; \`{ concurrency: 1 }\` runs them in order. */
452
+ flatMapAsync: <B>(f: (a: A) => PromiseLike<Iterable<B>>, options?: ConcurrencyOptions) => PromiseLike<List<B>>
453
+ /**
454
+ * Async map: awaits \`f\` for each element and keeps the results in input order.
455
+ *
456
+ * Runs one call at a time by default, which is what replacing a loop that awaits needs. Pass
457
+ * \`{ concurrency: n }\` to allow up to \`n\` calls at once, or \`"unbounded"\` to start them all together.
458
+ * (\`flatMapAsync\` defaults to \`"unbounded"\`; it keeps that default so existing callers don't change.)
459
+ * A rejection rejects the result, and no further calls start.
460
+ *
461
+ * @example
462
+ * \`\`\`typescript
463
+ * const users = await List(ids).mapAsync(fetchUser) // in order, one at a time
464
+ * const pages = await List(urls).mapAsync(fetchPage, { concurrency: 4 }) // up to 4 at once
465
+ * \`\`\`
466
+ */
467
+ mapAsync: <B>(f: (a: A) => PromiseLike<B>, options?: ConcurrencyOptions) => Promise<List<B>>
452
468
  // Override filter for type guard support
453
469
  filter<S extends A>(predicate: (a: A) => a is S): List<S>
454
470
  filter(predicate: (a: A) => unknown): List<A>
@@ -1,2 +1,2 @@
1
- import { An as FunctypeCollection, Dn as FunctypeSum, On as Functype, kn as FunctypeBase } from "../index-CXXlorKz.js";
2
- export { Functype, FunctypeBase, FunctypeCollection, FunctypeSum };
1
+ import { An as FunctypeCollection, Ar as ConcurrencyOptions, Dn as FunctypeSum, On as Functype, kn as FunctypeBase, kr as Concurrency } from "../index-BsYLc74N.js";
2
+ export { type Concurrency, type ConcurrencyOptions, Functype, FunctypeBase, FunctypeCollection, FunctypeSum };
@@ -164,6 +164,19 @@ interface Doable<out T> {
164
164
  doUnwrap(): DoResult<T>;
165
165
  }
166
166
  //#endregion
167
+ //#region src/internal/concurrency.d.ts
168
+ /**
169
+ * Bounded-concurrency traversal shared by the async collection methods and `Either.traverseAsync`.
170
+ */
171
+ /**
172
+ * How many calls may run at once: a positive integer, or `"unbounded"` to start them all together.
173
+ * `1` runs them one after another, in input order.
174
+ */
175
+ type Concurrency = number | "unbounded";
176
+ type ConcurrencyOptions = {
177
+ readonly concurrency?: Concurrency;
178
+ };
179
+ //#endregion
167
180
  //#region src/error/ParseError.d.ts
168
181
  declare const ParseError: (message?: string) => Error & {
169
182
  name: "ParseError";
@@ -653,6 +666,27 @@ declare const Either: (<L extends Type, R extends Type>(value: R | L, isRight: b
653
666
  * @returns Either with array of results or first Left encountered
654
667
  */
655
668
  traverse: <L extends Type, R extends Type, U extends Type>(arr: R[], f: (value: R) => Either<L, U>) => Either<L, U[]>;
669
+ /**
670
+ * Async traverse: runs `f` over `items` and collects the Right values, stopping at the first Left.
671
+ *
672
+ * Runs one call at a time, in order, by default. Pass `{ concurrency: n }` to allow up to `n` calls at once,
673
+ * or `"unbounded"` to start them all together. After a Left no new calls start; calls already running
674
+ * finish, and the result is the Left of the earliest item that failed. A rejected promise rejects the result.
675
+ *
676
+ * @param items - Values to traverse (an array, List, or any iterable)
677
+ * @param f - Async function returning Either
678
+ * @param options - `{ concurrency }`; defaults to 1 (sequential)
679
+ * @returns Right of all results in input order, or the first Left
680
+ *
681
+ * @example
682
+ * ```typescript
683
+ * const saved = await Either.traverseAsync(rows, (row) => saveRow(row))
684
+ * // Either<SaveError, SavedRow[]>, one save at a time, stopping at the first failure
685
+ *
686
+ * const fetched = await Either.traverseAsync(ids, fetchUser, { concurrency: 4 })
687
+ * ```
688
+ */
689
+ traverseAsync: <L extends Type, A extends Type, U extends Type>(items: Iterable<A>, f: (value: A) => PromiseLike<Either<L, U>>, options?: ConcurrencyOptions) => Promise<Either<L, U[]>>;
656
690
  /**
657
691
  * Creates an Either from a nullable value
658
692
  * @param value - The value that might be null or undefined
@@ -1473,7 +1507,23 @@ interface List<out A> extends FunctypeCollection<A, "List">, Doable<A>, Reshapea
1473
1507
  map: <B>(f: (a: A) => B) => List<B>;
1474
1508
  ap: <B>(ff: List<(value: A) => B>) => List<B>;
1475
1509
  flatMap: <B>(f: (a: A) => Iterable<B>) => List<B>;
1476
- flatMapAsync: <B>(f: (a: A) => PromiseLike<Iterable<B>>) => PromiseLike<List<B>>;
1510
+ /** Async flatMap. Starts every call at once unless `options.concurrency` caps it; `{ concurrency: 1 }` runs them in order. */
1511
+ flatMapAsync: <B>(f: (a: A) => PromiseLike<Iterable<B>>, options?: ConcurrencyOptions) => PromiseLike<List<B>>;
1512
+ /**
1513
+ * Async map: awaits `f` for each element and keeps the results in input order.
1514
+ *
1515
+ * Runs one call at a time by default, which is what replacing a loop that awaits needs. Pass
1516
+ * `{ concurrency: n }` to allow up to `n` calls at once, or `"unbounded"` to start them all together.
1517
+ * (`flatMapAsync` defaults to `"unbounded"`; it keeps that default so existing callers don't change.)
1518
+ * A rejection rejects the result, and no further calls start.
1519
+ *
1520
+ * @example
1521
+ * ```typescript
1522
+ * const users = await List(ids).mapAsync(fetchUser) // in order, one at a time
1523
+ * const pages = await List(urls).mapAsync(fetchPage, { concurrency: 4 }) // up to 4 at once
1524
+ * ```
1525
+ */
1526
+ mapAsync: <B>(f: (a: A) => PromiseLike<B>, options?: ConcurrencyOptions) => Promise<List<B>>;
1477
1527
  filter<S extends A>(predicate: (a: A) => a is S): List<S>;
1478
1528
  filter(predicate: (a: A) => unknown): List<A>;
1479
1529
  filterNot: (p: (a: A) => boolean) => List<A>;
@@ -1726,7 +1776,12 @@ interface FunctypeCollection<A, Tag extends string = string> extends Omit<Functy
1726
1776
  value: A[];
1727
1777
  };
1728
1778
  flatMap<B extends Type>(f: (value: A) => Iterable<B>): FunctypeCollection<B, Tag>;
1729
- flatMapAsync<B extends Type>(f: (value: A) => PromiseLike<Iterable<B>>): PromiseLike<FunctypeCollection<B, Tag>>;
1779
+ /**
1780
+ * Async flatMap. `options.concurrency` caps how many calls of `f` run at once: `1` runs them in order,
1781
+ * one after another; `"unbounded"` starts them all together. Results keep input order either way.
1782
+ * The default depends on the collection: List starts them all; Set runs them in order.
1783
+ */
1784
+ flatMapAsync<B extends Type>(f: (value: A) => PromiseLike<Iterable<B>>, options?: ConcurrencyOptions): PromiseLike<FunctypeCollection<B, Tag>>;
1730
1785
  }
1731
1786
  //#endregion
1732
1787
  //#region src/functype/FunctypeSum.d.ts
@@ -3364,6 +3419,12 @@ declare class TimeoutError extends Error {
3364
3419
  declare class InterruptedError extends Error {
3365
3420
  readonly _tag: "InterruptedError";
3366
3421
  constructor(message?: string);
3422
+ /**
3423
+ * Runtime type guard. Use it to recognise a cancellation when the `E` channel has
3424
+ * collapsed to `unknown` (effects built with `IO.async` or `IO(...)`), where
3425
+ * `catchTag("InterruptedError", …)` can't typecheck.
3426
+ */
3427
+ static is(e: unknown): e is InterruptedError;
3367
3428
  }
3368
3429
  /**
3369
3430
  * Error thrown when a combinator that cannot run on the synchronous interpreter is
@@ -3536,6 +3597,10 @@ type IOEffect<R, E, A> = {
3536
3597
  readonly _tag: "Timeout";
3537
3598
  readonly effect: IO<R, E, A>;
3538
3599
  readonly duration: number;
3600
+ } | {
3601
+ readonly _tag: "InterruptWhen";
3602
+ readonly effect: IO<R, E, A>;
3603
+ readonly signal: AbortSignal;
3539
3604
  } | {
3540
3605
  readonly _tag: "Service";
3541
3606
  readonly tag: Tag<A>;
@@ -3825,8 +3890,17 @@ interface IO<in out R extends Type, out E extends Type, out A extends Type> {
3825
3890
  runSyncOrThrow(this: IO<never, E, A>): A;
3826
3891
  /**
3827
3892
  * Runs the effect and returns an Exit.
3893
+ *
3894
+ * With `options.signal`, the run stops at the next step once the signal aborts and
3895
+ * returns an `Interrupted` Exit, with the same rules as {@link IO.interruptOn}: no further
3896
+ * step or callback runs, recovery can't swallow it, and cleanup completes. Unlike
3897
+ * `interruptOn`, `E` is not widened: the cancellation is reported as `Interrupted`, not as
3898
+ * a typed `InterruptedError`. This suits runners (React hooks, query adapters) that
3899
+ * discard a cancelled result rather than handle it.
3828
3900
  */
3829
- runExit(this: IO<never, E, A>): Promise<Exit<E, A>>;
3901
+ runExit(this: IO<never, E, A>, options?: {
3902
+ readonly signal?: AbortSignal;
3903
+ }): Promise<Exit<E, A>>;
3830
3904
  /**
3831
3905
  * Runs the effect and returns an Option.
3832
3906
  * Some(value) on success, None on failure.
@@ -3837,6 +3911,23 @@ interface IO<in out R extends Type, out E extends Type, out A extends Type> {
3837
3911
  * Success(value) on success, Failure(error) on failure.
3838
3912
  */
3839
3913
  runTry(this: IO<never, E, A>): Promise<ReturnType<typeof Try<A>>>;
3914
+ /**
3915
+ * Starts the effect and returns a handle that cancels it, with {@link IO.interruptOn}
3916
+ * semantics: after `cancel()`, no further step runs and `result` resolves to
3917
+ * `Left(InterruptedError)`. Calling `cancel()` after the effect finished does nothing.
3918
+ * Requires R = never.
3919
+ *
3920
+ * @example
3921
+ * ```typescript
3922
+ * const { result, cancel } = loadReport.runCancellable()
3923
+ * onUnmount(cancel)
3924
+ * const report = await result
3925
+ * ```
3926
+ */
3927
+ runCancellable(this: IO<never, E, A>): {
3928
+ readonly result: Promise<Either<E | InterruptedError, A>>;
3929
+ readonly cancel: () => void;
3930
+ };
3840
3931
  /**
3841
3932
  * Pipes the IO through a function.
3842
3933
  */
@@ -3856,6 +3947,37 @@ interface IO<in out R extends Type, out E extends Type, out A extends Type> {
3856
3947
  * @param fallback - Value to return on timeout
3857
3948
  */
3858
3949
  timeoutTo<B extends Type>(ms: number, fallback: B): IO<R, E, A | B>;
3950
+ /**
3951
+ * Makes this effect cancellable by an `AbortSignal`, such as the one React Query or a
3952
+ * request handler provides.
3953
+ *
3954
+ * Once the signal aborts, no further step starts. The effect stops at the next step
3955
+ * boundary (between `flatMap`s, retries, repeat iterations and `IO.gen` yields), and no
3956
+ * `map`, `recover` or other callback inside it runs after that. The result is a failure
3957
+ * with `InterruptedError`, which `catchTag("InterruptedError", …)` can handle outside this
3958
+ * call. Inside it, `retry`, `recover` and `catchAll` cannot swallow the cancellation.
3959
+ *
3960
+ * - `bracket` / `acquireRelease` cleanup still runs, to completion: acquire and release
3961
+ * are not interruptible.
3962
+ * - A promise already in flight can't be stopped (JavaScript has no way to). The
3963
+ * cancellation is seen at the next step after it settles, so if that promise was the
3964
+ * effect's last step, the effect succeeds with its result. `IO.never()` under
3965
+ * `interruptOn` never resolves for the same reason. Pass the same signal to `Http` /
3966
+ * `IO.tryAsync` / `fetch` so the request itself aborts; its rejection is reported as the
3967
+ * cancellation. `IO.sleep` is not woken early.
3968
+ * - A defect (a bug) that happens after the abort is still reported as a defect.
3969
+ * - `runSync` only sees a signal that was already aborted when this effect starts.
3970
+ * - When `E` is `unknown` (effects from `IO.async` or `IO(...)`), the union collapses to
3971
+ * `unknown`; use `InterruptedError.is(e)` to recognise the cancellation.
3972
+ *
3973
+ * @example
3974
+ * ```typescript
3975
+ * const poll = checkStatus.repeatUntil((s) => s.done, { max: 60, delayMs: 500 })
3976
+ * const result = await poll.interruptOn(signal).run()
3977
+ * // Left(InterruptedError) if the signal aborts first, and polling has stopped
3978
+ * ```
3979
+ */
3980
+ interruptOn(signal: AbortSignal): IO<R, E | InterruptedError, A>;
3859
3981
  /**
3860
3982
  * Converts to string representation.
3861
3983
  */
@@ -3992,6 +4114,22 @@ declare const IO: (<A extends Type>(f: () => A | Promise<A>) => IO<never, unknow
3992
4114
  * Creates an IO from an Either.
3993
4115
  */
3994
4116
  fromEither: <E extends Type, A extends Type>(either: Either<E, A>) => IO<never, E, A>;
4117
+ /**
4118
+ * Lifts an async function that returns `Either<E, A>` into `IO<never, E, A>`, keeping `E` typed.
4119
+ * The promise is not created until the IO is run.
4120
+ *
4121
+ * A Left becomes a failure in the E channel. A rejected promise is a defect by default (the function
4122
+ * is not expected to throw); pass `onReject` to map rejections into the error channel instead.
4123
+ *
4124
+ * @example
4125
+ * ```typescript
4126
+ * const save = (row: Row): Promise<Either<SaveError, Saved>> => ...
4127
+ *
4128
+ * IO.forEach(rows, (row) => IO.fromPromiseEither(() => save(row))).run()
4129
+ * // Promise<Either<SaveError, readonly Saved[]>>, in order, stopping at the first Left
4130
+ * ```
4131
+ */
4132
+ fromPromiseEither: <E extends Type, A extends Type, E2 extends Type = never>(f: () => PromiseLike<Either<E, A>>, onReject?: (error: unknown) => E2) => IO<never, E | E2, A>;
3995
4133
  /**
3996
4134
  * Creates an IO from an Option.
3997
4135
  */
@@ -4147,7 +4285,8 @@ declare const IO: (<A extends Type>(f: () => A | Promise<A>) => IO<never, unknow
4147
4285
  */
4148
4286
  withServices: <Services extends Record<string, Tag<Type>>, A extends Type>(services: Services, f: (ctx: { [K in keyof Services]: TagService<Services[K]>; }) => A | Promise<A>) => IO<TagService<Services[keyof Services]>, unknown, A>;
4149
4287
  /**
4150
- * Runs all IOs in parallel and collects results.
4288
+ * Runs all IOs one after another, in order, and collects the results. Stops at the first failure.
4289
+ * Despite the name, the effects do not run in parallel yet.
4151
4290
  */
4152
4291
  all: <R extends Type, E extends Type, A extends Type>(effects: readonly IO<R, E, A>[]) => IO<R, E, readonly A[]>;
4153
4292
  /**
@@ -4287,8 +4426,9 @@ declare const IO: (<A extends Type>(f: () => A | Promise<A>) => IO<never, unknow
4287
4426
  */
4288
4427
  forEach: <R extends Type, E extends Type, A extends Type, B extends Type>(items: readonly A[], f: (a: A) => IO<R, E, B>) => IO<R, E, readonly B[]>;
4289
4428
  /**
4290
- * Executes effects for each element in parallel (limited concurrency coming later).
4291
- * Alias for forEach.
4429
+ * @deprecated Runs sequentially: this is an alias for `IO.forEach`, not a parallel traversal.
4430
+ * Use `IO.forEach` so the code says what it does. For parallel Promise work, use
4431
+ * `Either.traverseAsync(items, f, { concurrency })` or `list.mapAsync(f, { concurrency })`.
4292
4432
  */
4293
4433
  forEachPar: <R extends Type, E extends Type, A extends Type, B extends Type>(items: readonly A[], f: (a: A) => IO<R, E, B>) => IO<R, E, readonly B[]>;
4294
4434
  /**
@@ -6294,4 +6434,4 @@ declare const Match: (<T extends Type>(value: T) => UntypedMatch<T>) & {
6294
6434
  };
6295
6435
  };
6296
6436
  //#endregion
6297
- export { TimeoutError as $, SerializedError as $n, TaggedThrowable as $t, Http as A, FunctypeCollection as An, Doable as Ar, safeStringify as At, HttpError as B, Serialization_d_exports as Bn, NoneError as Bt, HKT as C, UUID as Cn, Monad as Cr, ErrorChainElement as Ct, TryKind as D, FunctypeSum as Dn, isExtractable as Dr, createErrorSerializer as Dt, OptionKind as E, ValidatedBrandCompanion as En, Extractable as Er, TaskErrorInfo as Et, HttpRequestOptions as F, Set as Fn, EmptyListError as Ft, TestClock as G, createSerializationCompanion as Gn, DecoderErrorComposite as Gt, HttpStatusError as H, FunctypeEnvelope as Hn, unwrap as Ht, HttpRequestView as I, List as In, FailureError as It, IO as J, envelope as Jn, CancellationToken as Jt, TestClockTag as K, createSerializer as Kn, DecoderErrorLeaf as Kt, HttpResponse as L, Try as Ln, FailureErrorType as Lt, HttpClientConfig as M, Matchable as Mn, Do as Mt, HttpMethodOptions as N, MatchableUtils as Nn, DoAsync as Nt, UniversalContainer as O, Functype as On, ParseError as Or, formatError as Ot, HttpQueryParams as P, Collection as Pn, DoGenerator as Pt, Task as Q, taggedEnvelope as Qn, Sync as Qt, ParseMode as R, TypeNames as Rn, LeftError as Rt, EitherKind as S, PositiveNumber as Sn, Functor as Sr, TypedErrorContext as St, ListKind as T, ValidatedBrand as Tn, ContainerOps as Tr, ErrorWithTaskInfo as Tt, NetworkError as U, SerializationResult as Un, Decoder as Ut, HttpMethod as V, FUNCTYPE_MARKER as Vn, isDoCapable as Vt, ResponseDecodeError as W, createCustomSerializer as Wn, DecoderError as Wt, RIO as X, fromJSON as Xn, Err as Xt, InterruptedError as Y, fromBinary as Yn, CancellationTokenSource as Yt, RepeatExhausted as Z, fromYAML as Zn, Ok as Zt, ESMapType as _, IntegerNumber as _n, reduceRightWiden as _r, Validator as _t, OptionConstructor as a, TaskResult as an, Left as ar, LayerOutput as at, Lazy as b, PatternString as bn, Applicative as br, ErrorStatus as bt, Tracer as c, isTaggedThrowable as cn, RightOf as cr, Context as ct, Stack as d, ThrowableType as dn, TypeCheckRight as dr, Tag as dt, Task$1 as en, deserializeError as er, UIO as et, Valuable as f, Base as fn, isLeft as fr, TagService as ft, ESMap as g, ISO8601Date as gn, Widen as gr, ValidationRule as gt, Obj as h, EmailAddress as hn, tryCatchAsync as hr, Validation as ht, Option as i, TaskParams as in, EitherBase as ir, LayerInput as it, HttpClient as j, Traversable as jn, Cond as jr, $ as jt, FoldableUtils as k, FunctypeBase as kn, DoResult as kr, formatStackTrace as kt, TraceEvent as l, NAME as ln, TestEither as lr, ContextServices as lt, Ref as m, BoundedString as mn, tryCatch as mr, FormValidation as mt, UntypedMatch as n, TaskMetadata as nn, LazyList as nr, Layer as nt, Some as o, TaskSuccess as on, LeftOf as or, Exit as ot, ValuableParams as p, BoundedNumber as pn, isRight as pr, FieldValidation as pt, TestContext as q, createTaggedSerializer as qn, Async as qt, None as r, TaskOutcome as rn, Either as rr, LayerError as rt, TracedOption as s, createCancellationTokenSource as sn, Right as sr, ExitTag as st, Match as t, TaskFailure as tn, serializeError as tr, UnsupportedSyncOperationError as tt, TraceOp as u, Throwable as un, TypeCheckLeft as ur, HasService as ut, Map$1 as v, NonEmptyString as vn, reduceWiden as vr, ErrorCode as vt, Kind as w, UrlString as wn, CollectionOps as wr, ErrorFormatterOptions as wt, Identity as x, PositiveInteger as xn, AsyncMonad as xr, TypedError as xt, KVTraversable as y, NonNegativeNumber as yn, Promisable as yr, ErrorMessage as yt, DecodeError as z, JSONValue as zn, LeftErrorType as zt };
6437
+ export { TimeoutError as $, SerializedError as $n, TaggedThrowable as $t, Http as A, FunctypeCollection as An, ConcurrencyOptions as Ar, safeStringify as At, HttpError as B, Serialization_d_exports as Bn, NoneError as Bt, HKT as C, UUID as Cn, Monad as Cr, ErrorChainElement as Ct, TryKind as D, FunctypeSum as Dn, isExtractable as Dr, createErrorSerializer as Dt, OptionKind as E, ValidatedBrandCompanion as En, Extractable as Er, TaskErrorInfo as Et, HttpRequestOptions as F, Set as Fn, EmptyListError as Ft, TestClock as G, createSerializationCompanion as Gn, DecoderErrorComposite as Gt, HttpStatusError as H, FunctypeEnvelope as Hn, unwrap as Ht, HttpRequestView as I, List as In, FailureError as It, IO as J, envelope as Jn, CancellationToken as Jt, TestClockTag as K, createSerializer as Kn, DecoderErrorLeaf as Kt, HttpResponse as L, Try as Ln, FailureErrorType as Lt, HttpClientConfig as M, Matchable as Mn, Doable as Mr, Do as Mt, HttpMethodOptions as N, MatchableUtils as Nn, Cond as Nr, DoAsync as Nt, UniversalContainer as O, Functype as On, ParseError as Or, formatError as Ot, HttpQueryParams as P, Collection as Pn, DoGenerator as Pt, Task as Q, taggedEnvelope as Qn, Sync as Qt, ParseMode as R, TypeNames as Rn, LeftError as Rt, EitherKind as S, PositiveNumber as Sn, Functor as Sr, TypedErrorContext as St, ListKind as T, ValidatedBrand as Tn, ContainerOps as Tr, ErrorWithTaskInfo as Tt, NetworkError as U, SerializationResult as Un, Decoder as Ut, HttpMethod as V, FUNCTYPE_MARKER as Vn, isDoCapable as Vt, ResponseDecodeError as W, createCustomSerializer as Wn, DecoderError as Wt, RIO as X, fromJSON as Xn, Err as Xt, InterruptedError as Y, fromBinary as Yn, CancellationTokenSource as Yt, RepeatExhausted as Z, fromYAML as Zn, Ok as Zt, ESMapType as _, IntegerNumber as _n, reduceRightWiden as _r, Validator as _t, OptionConstructor as a, TaskResult as an, Left as ar, LayerOutput as at, Lazy as b, PatternString as bn, Applicative as br, ErrorStatus as bt, Tracer as c, isTaggedThrowable as cn, RightOf as cr, Context as ct, Stack as d, ThrowableType as dn, TypeCheckRight as dr, Tag as dt, Task$1 as en, deserializeError as er, UIO as et, Valuable as f, Base as fn, isLeft as fr, TagService as ft, ESMap as g, ISO8601Date as gn, Widen as gr, ValidationRule as gt, Obj as h, EmailAddress as hn, tryCatchAsync as hr, Validation as ht, Option as i, TaskParams as in, EitherBase as ir, LayerInput as it, HttpClient as j, Traversable as jn, DoResult as jr, $ as jt, FoldableUtils as k, FunctypeBase as kn, Concurrency as kr, formatStackTrace as kt, TraceEvent as l, NAME as ln, TestEither as lr, ContextServices as lt, Ref as m, BoundedString as mn, tryCatch as mr, FormValidation as mt, UntypedMatch as n, TaskMetadata as nn, LazyList as nr, Layer as nt, Some as o, TaskSuccess as on, LeftOf as or, Exit as ot, ValuableParams as p, BoundedNumber as pn, isRight as pr, FieldValidation as pt, TestContext as q, createTaggedSerializer as qn, Async as qt, None as r, TaskOutcome as rn, Either as rr, LayerError as rt, TracedOption as s, createCancellationTokenSource as sn, Right as sr, ExitTag as st, Match as t, TaskFailure as tn, serializeError as tr, UnsupportedSyncOperationError as tt, TraceOp as u, Throwable as un, TypeCheckLeft as ur, HasService as ut, Map$1 as v, NonEmptyString as vn, reduceWiden as vr, ErrorCode as vt, Kind as w, UrlString as wn, CollectionOps as wr, ErrorFormatterOptions as wt, Identity as x, PositiveInteger as xn, AsyncMonad as xr, TypedError as xt, KVTraversable as y, NonNegativeNumber as yn, Promisable as yr, ErrorMessage as yt, DecodeError as z, JSONValue as zn, LeftErrorType as zt };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as ExtractBrand, c as hasBrand, i as BrandedString, l as unwrapBrand, n as BrandedBoolean, o as Unwrap, r as BrandedNumber, s as createBrander, t as Brand } from "./Brand-bfnGXuum.js";
2
2
  import { i as Companion, n as InstanceType, r as isCompanion, t as CompanionMethods } from "./CompanionTypes-Cc90cQ4P.js";
3
3
  import { a as isTypeable, c as SerializationMethods, d as Type, i as TypeableParams, l as Pipe, n as ExtractTag, o as Serializable, r as Typeable, s as SerializableEnvelope, t as Tuple, u as Foldable } from "./Tuple-B8KM-H8Y.js";
4
- import { $ as TimeoutError, $n as SerializedError, $t as TaggedThrowable, A as Http, An as FunctypeCollection, Ar as Doable, At as safeStringify, B as HttpError, Bn as Serialization_d_exports, Bt as NoneError, C as HKT, Cn as UUID, Cr as Monad, Ct as ErrorChainElement, D as TryKind, Dn as FunctypeSum, Dr as isExtractable, Dt as createErrorSerializer, E as OptionKind, En as ValidatedBrandCompanion, Er as Extractable, Et as TaskErrorInfo, F as HttpRequestOptions, Fn as Set, Ft as EmptyListError, G as TestClock, Gn as createSerializationCompanion, Gt as DecoderErrorComposite, H as HttpStatusError, Hn as FunctypeEnvelope, Ht as unwrap, I as HttpRequestView, In as List, It as FailureError, J as IO, Jn as envelope, Jt as CancellationToken, K as TestClockTag, Kn as createSerializer, Kt as DecoderErrorLeaf, L as HttpResponse, Ln as Try, Lt as FailureErrorType, M as HttpClientConfig, Mn as Matchable, Mt as Do, N as HttpMethodOptions, Nn as MatchableUtils, Nt as DoAsync, O as UniversalContainer, On as Functype, Or as ParseError, Ot as formatError, P as HttpQueryParams, Pn as Collection, Pt as DoGenerator, Q as Task, Qn as taggedEnvelope, Qt as Sync, R as ParseMode, Rn as TypeNames, Rt as LeftError, S as EitherKind, Sn as PositiveNumber, Sr as Functor, St as TypedErrorContext, T as ListKind, Tn as ValidatedBrand, Tr as ContainerOps, Tt as ErrorWithTaskInfo, U as NetworkError, Un as SerializationResult, Ut as Decoder, V as HttpMethod, Vn as FUNCTYPE_MARKER, Vt as isDoCapable, W as ResponseDecodeError, Wn as createCustomSerializer, Wt as DecoderError, X as RIO, Xn as fromJSON, Xt as Err, Y as InterruptedError, Yn as fromBinary, Yt as CancellationTokenSource, Z as RepeatExhausted, Zn as fromYAML, Zt as Ok, _ as ESMapType, _n as IntegerNumber, _r as reduceRightWiden, _t as Validator, a as OptionConstructor, an as TaskResult, ar as Left, at as LayerOutput, b as Lazy, bn as PatternString, br as Applicative, bt as ErrorStatus, c as Tracer, cn as isTaggedThrowable, cr as RightOf, ct as Context, d as Stack, dn as ThrowableType, dr as TypeCheckRight, dt as Tag, en as Task$1, er as deserializeError, et as UIO, f as Valuable, fn as Base, fr as isLeft, ft as TagService, g as ESMap, gn as ISO8601Date, gr as Widen, gt as ValidationRule, h as Obj, hn as EmailAddress, hr as tryCatchAsync, ht as Validation, i as Option, in as TaskParams, ir as EitherBase, it as LayerInput, j as HttpClient, jn as Traversable, jr as Cond, jt as $, k as FoldableUtils, kn as FunctypeBase, kr as DoResult, kt as formatStackTrace, l as TraceEvent, ln as NAME, lr as TestEither, lt as ContextServices, m as Ref, mn as BoundedString, mr as tryCatch, mt as FormValidation, n as UntypedMatch, nn as TaskMetadata, nr as LazyList, nt as Layer, o as Some, on as TaskSuccess, or as LeftOf, ot as Exit, p as ValuableParams, pn as BoundedNumber, pr as isRight, pt as FieldValidation, q as TestContext, qn as createTaggedSerializer, qt as Async, r as None, rn as TaskOutcome, rr as Either, rt as LayerError, s as TracedOption, sn as createCancellationTokenSource, sr as Right, st as ExitTag, t as Match, tn as TaskFailure, tr as serializeError, tt as UnsupportedSyncOperationError, u as TraceOp, un as Throwable, ur as TypeCheckLeft, ut as HasService, v as Map, vn as NonEmptyString, vr as reduceWiden, vt as ErrorCode, w as Kind, wn as UrlString, wr as CollectionOps, wt as ErrorFormatterOptions, x as Identity, xn as PositiveInteger, xr as AsyncMonad, xt as TypedError, y as KVTraversable, yn as NonNegativeNumber, yr as Promisable, yt as ErrorMessage, z as DecodeError, zn as JSONValue, zt as LeftErrorType } from "./index-CXXlorKz.js";
4
+ import { $ as TimeoutError, $n as SerializedError, $t as TaggedThrowable, A as Http, An as FunctypeCollection, Ar as ConcurrencyOptions, At as safeStringify, B as HttpError, Bn as Serialization_d_exports, Bt as NoneError, C as HKT, Cn as UUID, Cr as Monad, Ct as ErrorChainElement, D as TryKind, Dn as FunctypeSum, Dr as isExtractable, Dt as createErrorSerializer, E as OptionKind, En as ValidatedBrandCompanion, Er as Extractable, Et as TaskErrorInfo, F as HttpRequestOptions, Fn as Set, Ft as EmptyListError, G as TestClock, Gn as createSerializationCompanion, Gt as DecoderErrorComposite, H as HttpStatusError, Hn as FunctypeEnvelope, Ht as unwrap, I as HttpRequestView, In as List, It as FailureError, J as IO, Jn as envelope, Jt as CancellationToken, K as TestClockTag, Kn as createSerializer, Kt as DecoderErrorLeaf, L as HttpResponse, Ln as Try, Lt as FailureErrorType, M as HttpClientConfig, Mn as Matchable, Mr as Doable, Mt as Do, N as HttpMethodOptions, Nn as MatchableUtils, Nr as Cond, Nt as DoAsync, O as UniversalContainer, On as Functype, Or as ParseError, Ot as formatError, P as HttpQueryParams, Pn as Collection, Pt as DoGenerator, Q as Task, Qn as taggedEnvelope, Qt as Sync, R as ParseMode, Rn as TypeNames, Rt as LeftError, S as EitherKind, Sn as PositiveNumber, Sr as Functor, St as TypedErrorContext, T as ListKind, Tn as ValidatedBrand, Tr as ContainerOps, Tt as ErrorWithTaskInfo, U as NetworkError, Un as SerializationResult, Ut as Decoder, V as HttpMethod, Vn as FUNCTYPE_MARKER, Vt as isDoCapable, W as ResponseDecodeError, Wn as createCustomSerializer, Wt as DecoderError, X as RIO, Xn as fromJSON, Xt as Err, Y as InterruptedError, Yn as fromBinary, Yt as CancellationTokenSource, Z as RepeatExhausted, Zn as fromYAML, Zt as Ok, _ as ESMapType, _n as IntegerNumber, _r as reduceRightWiden, _t as Validator, a as OptionConstructor, an as TaskResult, ar as Left, at as LayerOutput, b as Lazy, bn as PatternString, br as Applicative, bt as ErrorStatus, c as Tracer, cn as isTaggedThrowable, cr as RightOf, ct as Context, d as Stack, dn as ThrowableType, dr as TypeCheckRight, dt as Tag, en as Task$1, er as deserializeError, et as UIO, f as Valuable, fn as Base, fr as isLeft, ft as TagService, g as ESMap, gn as ISO8601Date, gr as Widen, gt as ValidationRule, h as Obj, hn as EmailAddress, hr as tryCatchAsync, ht as Validation, i as Option, in as TaskParams, ir as EitherBase, it as LayerInput, j as HttpClient, jn as Traversable, jr as DoResult, jt as $, k as FoldableUtils, kn as FunctypeBase, kr as Concurrency, kt as formatStackTrace, l as TraceEvent, ln as NAME, lr as TestEither, lt as ContextServices, m as Ref, mn as BoundedString, mr as tryCatch, mt as FormValidation, n as UntypedMatch, nn as TaskMetadata, nr as LazyList, nt as Layer, o as Some, on as TaskSuccess, or as LeftOf, ot as Exit, p as ValuableParams, pn as BoundedNumber, pr as isRight, pt as FieldValidation, q as TestContext, qn as createTaggedSerializer, qt as Async, r as None, rn as TaskOutcome, rr as Either, rt as LayerError, s as TracedOption, sn as createCancellationTokenSource, sr as Right, st as ExitTag, t as Match, tn as TaskFailure, tr as serializeError, tt as UnsupportedSyncOperationError, u as TraceOp, un as Throwable, ur as TypeCheckLeft, ut as HasService, v as Map, vn as NonEmptyString, vr as reduceWiden, vt as ErrorCode, w as Kind, wn as UrlString, wr as CollectionOps, wt as ErrorFormatterOptions, x as Identity, xn as PositiveInteger, xr as AsyncMonad, xt as TypedError, y as KVTraversable, yn as NonNegativeNumber, yr as Promisable, yt as ErrorMessage, z as DecodeError, zn as JSONValue, zt as LeftErrorType } from "./index-BsYLc74N.js";
5
5
  import { n as invariant, t as InvariantViolation } from "./Invariant-DEan-SxV.js";
6
6
  import { t as Logger } from "./Logger-BmprRS8v.js";
7
7
  import { n as WireMark, t as Wire } from "./Wire-3hvw0Ogg.js";
8
- export { $, type Applicative, Async, type AsyncMonad, Base, BoundedNumber, BoundedString, Brand, BrandedBoolean, type BrandedBoolean as BrandedBooleanType, BrandedNumber, type BrandedNumber as BrandedNumberType, BrandedString, type BrandedString as BrandedStringType, CancellationToken, CancellationTokenSource, Collection, type CollectionOps, Companion, CompanionMethods, Cond, type ContainerOps, Context, type Context as ContextType, type ContextServices, type DecodeError, Decoder, DecoderError, type DecoderErrorComposite, type DecoderErrorLeaf, Do, DoAsync, DoGenerator, type DoResult, type Doable, ESMap, ESMapType, Either, EitherBase, EitherKind, EmailAddress, EmptyListError, Err, ErrorChainElement, ErrorCode, ErrorFormatterOptions, ErrorMessage, ErrorStatus, ErrorWithTaskInfo, Exit, type Exit as ExitType, type ExitTag, type ExtractBrand, ExtractTag, type Extractable, FUNCTYPE_MARKER, FailureError, FailureErrorType, FieldValidation, Foldable, FoldableUtils, FormValidation, type Functor, Functype, FunctypeBase, FunctypeCollection, FunctypeEnvelope, FunctypeSum, HKT, type HasService, Http, HttpClient, type HttpClientConfig, type HttpError, HttpError as HttpErrors, type HttpMethod, type HttpMethodOptions, type HttpQueryParams, type HttpRequestOptions, type HttpRequestView, type HttpResponse, type HttpStatusError, IO, type IO as IOType, type Task as IOTask, ISO8601Date, Identity, InstanceType, IntegerNumber, InterruptedError, InvariantViolation, type JSONValue, KVTraversable, Kind, Layer, type Layer as LayerType, type LayerError, type LayerInput, type LayerOutput, Lazy, type Lazy as LazyType, LazyList, Left, LeftError, LeftErrorType, LeftOf, List, ListKind, type Logger, Map, Match, type Matchable, MatchableUtils, type Monad, NAME, type NetworkError, NonEmptyString, NonNegativeNumber, None, NoneError, Obj, Ok, Option, OptionConstructor, OptionKind, ParseError, type ParseMode, PatternString, Pipe, PositiveInteger, PositiveNumber, type Promisable, type RIO, Ref, type Ref as RefType, RepeatExhausted, type ResponseDecodeError, Right, RightOf, Serializable, SerializableEnvelope, Serialization_d_exports as Serialization, SerializationMethods, SerializationResult, SerializedError, Set, Some, Stack, Sync, Tag, type Tag as TagType, type TagService, TaggedThrowable, Task$1 as Task, TaskErrorInfo, TaskFailure, TaskMetadata, TaskOutcome, TaskParams, TaskResult, TaskSuccess, TestClock, type TestClock as TestClockType, TestClockTag, TestContext, type TestContext as TestContextType, TestEither, Throwable, ThrowableType, TimeoutError, type TraceEvent, type TraceOp, TracedOption, type Tracer, Traversable, Try, TryKind, Tuple, Type, TypeCheckLeft, TypeCheckRight, TypeNames, Typeable, TypeableParams, TypedError, TypedErrorContext, type UIO, UUID, UniversalContainer, UnsupportedSyncOperationError, UntypedMatch, type Unwrap, UrlString, ValidatedBrand, type ValidatedBrand as ValidatedBrandType, type ValidatedBrandCompanion, Validation, ValidationRule, Validator, Valuable, ValuableParams, type Widen, type Wire, type WireMark, createBrander, createCancellationTokenSource, createCustomSerializer, createErrorSerializer, createSerializationCompanion, createSerializer, createTaggedSerializer, deserializeError, envelope, formatError, formatStackTrace, fromBinary, fromJSON, fromYAML, hasBrand, invariant, isCompanion, isDoCapable, isExtractable, isLeft, isRight, isTaggedThrowable, isTypeable, reduceRightWiden, reduceWiden, safeStringify, serializeError, taggedEnvelope, tryCatch, tryCatchAsync, unwrap, unwrapBrand };
8
+ export { $, type Applicative, Async, type AsyncMonad, Base, BoundedNumber, BoundedString, Brand, BrandedBoolean, type BrandedBoolean as BrandedBooleanType, BrandedNumber, type BrandedNumber as BrandedNumberType, BrandedString, type BrandedString as BrandedStringType, CancellationToken, CancellationTokenSource, Collection, type CollectionOps, Companion, CompanionMethods, type Concurrency, type ConcurrencyOptions, Cond, type ContainerOps, Context, type Context as ContextType, type ContextServices, type DecodeError, Decoder, DecoderError, type DecoderErrorComposite, type DecoderErrorLeaf, Do, DoAsync, DoGenerator, type DoResult, type Doable, ESMap, ESMapType, Either, EitherBase, EitherKind, EmailAddress, EmptyListError, Err, ErrorChainElement, ErrorCode, ErrorFormatterOptions, ErrorMessage, ErrorStatus, ErrorWithTaskInfo, Exit, type Exit as ExitType, type ExitTag, type ExtractBrand, ExtractTag, type Extractable, FUNCTYPE_MARKER, FailureError, FailureErrorType, FieldValidation, Foldable, FoldableUtils, FormValidation, type Functor, Functype, FunctypeBase, FunctypeCollection, FunctypeEnvelope, FunctypeSum, HKT, type HasService, Http, HttpClient, type HttpClientConfig, type HttpError, HttpError as HttpErrors, type HttpMethod, type HttpMethodOptions, type HttpQueryParams, type HttpRequestOptions, type HttpRequestView, type HttpResponse, type HttpStatusError, IO, type IO as IOType, type Task as IOTask, ISO8601Date, Identity, InstanceType, IntegerNumber, InterruptedError, InvariantViolation, type JSONValue, KVTraversable, Kind, Layer, type Layer as LayerType, type LayerError, type LayerInput, type LayerOutput, Lazy, type Lazy as LazyType, LazyList, Left, LeftError, LeftErrorType, LeftOf, List, ListKind, type Logger, Map, Match, type Matchable, MatchableUtils, type Monad, NAME, type NetworkError, NonEmptyString, NonNegativeNumber, None, NoneError, Obj, Ok, Option, OptionConstructor, OptionKind, ParseError, type ParseMode, PatternString, Pipe, PositiveInteger, PositiveNumber, type Promisable, type RIO, Ref, type Ref as RefType, RepeatExhausted, type ResponseDecodeError, Right, RightOf, Serializable, SerializableEnvelope, Serialization_d_exports as Serialization, SerializationMethods, SerializationResult, SerializedError, Set, Some, Stack, Sync, Tag, type Tag as TagType, type TagService, TaggedThrowable, Task$1 as Task, TaskErrorInfo, TaskFailure, TaskMetadata, TaskOutcome, TaskParams, TaskResult, TaskSuccess, TestClock, type TestClock as TestClockType, TestClockTag, TestContext, type TestContext as TestContextType, TestEither, Throwable, ThrowableType, TimeoutError, type TraceEvent, type TraceOp, TracedOption, type Tracer, Traversable, Try, TryKind, Tuple, Type, TypeCheckLeft, TypeCheckRight, TypeNames, Typeable, TypeableParams, TypedError, TypedErrorContext, type UIO, UUID, UniversalContainer, UnsupportedSyncOperationError, UntypedMatch, type Unwrap, UrlString, ValidatedBrand, type ValidatedBrand as ValidatedBrandType, type ValidatedBrandCompanion, Validation, ValidationRule, Validator, Valuable, ValuableParams, type Widen, type Wire, type WireMark, createBrander, createCancellationTokenSource, createCustomSerializer, createErrorSerializer, createSerializationCompanion, createSerializer, createTaggedSerializer, deserializeError, envelope, formatError, formatStackTrace, fromBinary, fromJSON, fromYAML, hasBrand, invariant, isCompanion, isDoCapable, isExtractable, isLeft, isRight, isTaggedThrowable, isTypeable, reduceRightWiden, reduceWiden, safeStringify, serializeError, taggedEnvelope, tryCatch, tryCatchAsync, unwrap, unwrapBrand };
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,At as l,B as u,C as d,Ct as f,D as p,Dt as m,E as h,Et as g,F as _,Ft as v,G as y,H as b,I as x,J as S,K as C,L as w,M as T,Mt as E,N as D,Nt as O,O as k,Ot as A,P as j,Pt as M,Q as N,R as P,S as F,St as I,T as L,Tt as R,U as z,V as B,W as V,X as H,Y as U,Z as W,_ as G,_t as K,a as q,at as J,b as Y,bt as X,c as Z,ct as Q,d as $,dt as ee,et as te,f as ne,ft as re,g as ie,gt as ae,h as oe,ht as se,i as ce,it as le,j as ue,jt as de,k as fe,kt as pe,l as me,lt as he,m as ge,mt as _e,n as ve,nt as ye,o as be,ot as xe,p as Se,pt as Ce,q as we,r as Te,rt as Ee,s as De,st as Oe,t as ke,tt as Ae,u as je,ut as Me,v as Ne,vt as Pe,w as Fe,wt as Ie,x as Le,xt as Re,y as ze,yt as Be,z as Ve}from"./src-BUA74biP.js";import{t as He}from"./Companion-DiOMBHDG.js";import{a as Ue,c as We,d as Ge,f as Ke,i as qe,l as Je,n as Ye,o as Xe,r as Ze,s as Qe,t as $e,u as et}from"./serialization-CpbxaV0t.js";import{n as tt,t as nt}from"./typeclass-C61yDVYd.js";import{t as rt}from"./CompanionTypes-BVqO7Kc2.js";import{Tuple as it}from"./tuple/index.js";import{InvariantViolation as at,invariant as ot}from"./invariant/index.js";export{D as $,s as Base,ye as BoundedNumber,Ee as BoundedString,e as Brand,t as BrandedBoolean,n as BrandedNumber,r as BrandedString,He as Companion,Ae as Cond,L as Context,b as Decoder,z as DecoderError,j as Do,_ as DoAsync,y as ESMap,se as Either,le as EmailAddress,x as EmptyListError,C as Err,Fe as Exit,$e as FUNCTYPE_MARKER,w as FailureError,je as FoldableUtils,me as HKT,$ as Http,Se as HttpClient,ne as HttpErrors,ze as IO,J as ISO8601Date,Z as Identity,xe as IntegerNumber,Y as InterruptedError,at as InvariantViolation,Ne as Layer,De as Lazy,A as LazyList,ae as Left,P as LeftError,Ie as List,V as Map,te as Match,be as MatchableUtils,W as NAME,Oe as NonEmptyString,Q as NonNegativeNumber,de as None,Ve as NoneError,q as Obj,we as Ok,E as Option,O as OptionConstructor,v as ParseError,he as PatternString,Me as PositiveInteger,ee as PositiveNumber,pe as Ref,Le as RepeatExhausted,K as Right,Te as Serialization,l as Set,M as Some,ce as Stack,G as Tag,S as Task,ge as TestClock,oe as TestClockTag,ie as TestContext,N as Throwable,F as TimeoutError,ve as TracedOption,m as Try,it as Tuple,Pe as TypeCheckLeft,Be as TypeCheckRight,R as Typeable,k as TypedError,re as UUID,d as UnsupportedSyncOperationError,Ce as UrlString,_e as ValidatedBrand,p as Validation,ke as Valuable,i as createBrander,U as createCancellationTokenSource,Ye as createCustomSerializer,fe as createErrorSerializer,Ze as createSerializationCompanion,qe as createSerializer,Ue as createTaggedSerializer,Ge as deserializeError,Xe as envelope,c as formatError,ue as formatStackTrace,Qe as fromBinary,We as fromJSON,Je as fromYAML,a as hasBrand,ot as invariant,rt as isCompanion,u as isDoCapable,h as isExtractable,X as isLeft,Re as isRight,H as isTaggedThrowable,g as isTypeable,nt as reduceRightWiden,tt as reduceWiden,T as safeStringify,Ke as serializeError,et as taggedEnvelope,I as tryCatch,f as tryCatchAsync,B 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,At as l,B as u,C as d,Ct as f,D as p,Dt as m,E as h,Et as g,F as _,Ft as v,G as y,H as b,I as x,J as S,K as C,L as w,M as T,Mt as E,N as D,Nt as O,O as k,Ot as A,P as j,Pt as M,Q as N,R as P,S as F,St as I,T as L,Tt as R,U as z,V as B,W as V,X as H,Y as U,Z as W,_ as G,_t as K,a as q,at as J,b as Y,bt as X,c as Z,ct as Q,d as $,dt as ee,et as te,f as ne,ft as re,g as ie,gt as ae,h as oe,ht as se,i as ce,it as le,j as ue,jt as de,k as fe,kt as pe,l as me,lt as he,m as ge,mt as _e,n as ve,nt as ye,o as be,ot as xe,p as Se,pt as Ce,q as we,r as Te,rt as Ee,s as De,st as Oe,t as ke,tt as Ae,u as je,ut as Me,v as Ne,vt as Pe,w as Fe,wt as Ie,x as Le,xt as Re,y as ze,yt as Be,z as Ve}from"./src-n-HOLxT0.js";import{t as He}from"./Companion-DiOMBHDG.js";import{a as Ue,c as We,d as Ge,f as Ke,i as qe,l as Je,n as Ye,o as Xe,r as Ze,s as Qe,t as $e,u as et}from"./serialization-CpbxaV0t.js";import{n as tt,t as nt}from"./typeclass-C61yDVYd.js";import{t as rt}from"./CompanionTypes-BVqO7Kc2.js";import{Tuple as it}from"./tuple/index.js";import{InvariantViolation as at,invariant as ot}from"./invariant/index.js";export{D as $,s as Base,ye as BoundedNumber,Ee as BoundedString,e as Brand,t as BrandedBoolean,n as BrandedNumber,r as BrandedString,He as Companion,Ae as Cond,L as Context,b as Decoder,z as DecoderError,j as Do,_ as DoAsync,y as ESMap,se as Either,le as EmailAddress,x as EmptyListError,C as Err,Fe as Exit,$e as FUNCTYPE_MARKER,w as FailureError,je as FoldableUtils,me as HKT,$ as Http,Se as HttpClient,ne as HttpErrors,ze as IO,J as ISO8601Date,Z as Identity,xe as IntegerNumber,Y as InterruptedError,at as InvariantViolation,Ne as Layer,De as Lazy,A as LazyList,ae as Left,P as LeftError,Ie as List,V as Map,te as Match,be as MatchableUtils,W as NAME,Oe as NonEmptyString,Q as NonNegativeNumber,de as None,Ve as NoneError,q as Obj,we as Ok,E as Option,O as OptionConstructor,v as ParseError,he as PatternString,Me as PositiveInteger,ee as PositiveNumber,pe as Ref,Le as RepeatExhausted,K as Right,Te as Serialization,l as Set,M as Some,ce as Stack,G as Tag,S as Task,ge as TestClock,oe as TestClockTag,ie as TestContext,N as Throwable,F as TimeoutError,ve as TracedOption,m as Try,it as Tuple,Pe as TypeCheckLeft,Be as TypeCheckRight,R as Typeable,k as TypedError,re as UUID,d as UnsupportedSyncOperationError,Ce as UrlString,_e as ValidatedBrand,p as Validation,ke as Valuable,i as createBrander,U as createCancellationTokenSource,Ye as createCustomSerializer,fe as createErrorSerializer,Ze as createSerializationCompanion,qe as createSerializer,Ue as createTaggedSerializer,Ge as deserializeError,Xe as envelope,c as formatError,ue as formatStackTrace,Qe as fromBinary,We as fromJSON,Je as fromYAML,a as hasBrand,ot as invariant,rt as isCompanion,u as isDoCapable,h as isExtractable,X as isLeft,Re as isRight,H as isTaggedThrowable,g as isTypeable,nt as reduceRightWiden,tt as reduceWiden,T as safeStringify,Ke as serializeError,et as taggedEnvelope,I as tryCatch,f as tryCatchAsync,B as unwrap,o as unwrapBrand};
@@ -1,2 +1,2 @@
1
- import { $ as TimeoutError, G as TestClock, J as IO, K as TestClockTag, Q as Task, X as RIO, Y as InterruptedError, Z as RepeatExhausted, at as LayerOutput, ct as Context, dt as Tag, et as UIO, ft as TagService, it as LayerInput, lt as ContextServices, nt as Layer, ot as Exit, q as TestContext, rt as LayerError, st as ExitTag, tt as UnsupportedSyncOperationError, ut as HasService } from "../index-CXXlorKz.js";
1
+ import { $ as TimeoutError, G as TestClock, J as IO, K as TestClockTag, Q as Task, X as RIO, Y as InterruptedError, Z as RepeatExhausted, at as LayerOutput, ct as Context, dt as Tag, et as UIO, ft as TagService, it as LayerInput, lt as ContextServices, nt as Layer, ot as Exit, q as TestContext, rt as LayerError, st as ExitTag, tt as UnsupportedSyncOperationError, ut as HasService } from "../index-BsYLc74N.js";
2
2
  export { Context, type Context as ContextType, type ContextServices, Exit, type Exit as ExitType, type ExitTag, type HasService, IO, type IO as IOType, type Task as IOTask, InterruptedError, Layer, type Layer as LayerType, type LayerError, type LayerInput, type LayerOutput, type RIO, RepeatExhausted, Tag, type Tag as TagType, type TagService, TestClock, type TestClock as TestClockType, TestClockTag, TestContext, type TestContext as TestContextType, TimeoutError, type UIO, UnsupportedSyncOperationError };
package/dist/io/index.js CHANGED
@@ -1 +1 @@
1
- import{C as e,S as t,T as n,_ as r,b as i,g as a,h as o,m as s,v as c,w as l,x as u,y as d}from"../src-BUA74biP.js";export{n as Context,l as Exit,d as IO,i as InterruptedError,c as Layer,u as RepeatExhausted,r as Tag,s as TestClock,o as TestClockTag,a as TestContext,t as TimeoutError,e as UnsupportedSyncOperationError};
1
+ import{C as e,S as t,T as n,_ as r,b as i,g as a,h as o,m as s,v as c,w as l,x as u,y as d}from"../src-n-HOLxT0.js";export{n as Context,l as Exit,d as IO,i as InterruptedError,c as Layer,u as RepeatExhausted,r as Tag,s as TestClock,o as TestClockTag,a as TestContext,t as TimeoutError,e as UnsupportedSyncOperationError};
@@ -1,2 +1,2 @@
1
- import { b as Lazy } from "../index-CXXlorKz.js";
1
+ import { b as Lazy } from "../index-BsYLc74N.js";
2
2
  export { Lazy, type Lazy as LazyType };
@@ -1 +1 @@
1
- import{s as e}from"../src-BUA74biP.js";export{e as Lazy};
1
+ import{s as e}from"../src-n-HOLxT0.js";export{e as Lazy};
@@ -1,2 +1,2 @@
1
- import { In as List } from "../index-CXXlorKz.js";
1
+ import { In as List } from "../index-BsYLc74N.js";
2
2
  export { List };
@@ -1 +1 @@
1
- import{wt as e}from"../src-BUA74biP.js";export{e as List};
1
+ import{wt as e}from"../src-n-HOLxT0.js";export{e as List};
@@ -1,2 +1,2 @@
1
- import { v as Map } from "../index-CXXlorKz.js";
1
+ import { v as Map } from "../index-BsYLc74N.js";
2
2
  export { Map };
package/dist/map/index.js CHANGED
@@ -1 +1 @@
1
- import{W as e}from"../src-BUA74biP.js";export{e as Map};
1
+ import{W as e}from"../src-n-HOLxT0.js";export{e as Map};
@@ -1,2 +1,2 @@
1
- import { h as Obj } from "../index-CXXlorKz.js";
1
+ import { h as Obj } from "../index-BsYLc74N.js";
2
2
  export { Obj };
package/dist/obj/index.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"../src-BUA74biP.js";export{e as Obj};
1
+ import{a as e}from"../src-n-HOLxT0.js";export{e as Obj};
@@ -1,2 +1,2 @@
1
- import { a as OptionConstructor, i as Option, o as Some, r as None } from "../index-CXXlorKz.js";
1
+ import { a as OptionConstructor, i as Option, o as Some, r as None } from "../index-BsYLc74N.js";
2
2
  export { None, Option, OptionConstructor, Some };
@@ -1 +1 @@
1
- import{Mt as e,Nt as t,Pt as n,jt as r}from"../src-BUA74biP.js";export{r as None,e as Option,t as OptionConstructor,n as Some};
1
+ import{Mt as e,Nt as t,Pt as n,jt as r}from"../src-n-HOLxT0.js";export{r as None,e as Option,t as OptionConstructor,n as Some};
@@ -1,2 +1,2 @@
1
- import { $n as SerializedError, Gn as createSerializationCompanion, Hn as FunctypeEnvelope, Jn as envelope, Kn as createSerializer, Qn as taggedEnvelope, Un as SerializationResult, Vn as FUNCTYPE_MARKER, Wn as createCustomSerializer, Xn as fromJSON, Yn as fromBinary, Zn as fromYAML, er as deserializeError, qn as createTaggedSerializer, tr as serializeError, zn as JSONValue } from "../index-CXXlorKz.js";
1
+ import { $n as SerializedError, Gn as createSerializationCompanion, Hn as FunctypeEnvelope, Jn as envelope, Kn as createSerializer, Qn as taggedEnvelope, Un as SerializationResult, Vn as FUNCTYPE_MARKER, Wn as createCustomSerializer, Xn as fromJSON, Yn as fromBinary, Zn as fromYAML, er as deserializeError, qn as createTaggedSerializer, tr as serializeError, zn as JSONValue } from "../index-BsYLc74N.js";
2
2
  export { FUNCTYPE_MARKER, FunctypeEnvelope, type JSONValue, SerializationResult, SerializedError, createCustomSerializer, createSerializationCompanion, createSerializer, createTaggedSerializer, deserializeError, envelope, fromBinary, fromJSON, fromYAML, serializeError, taggedEnvelope };
@@ -1,2 +1,2 @@
1
- import { Fn as Set } from "../index-CXXlorKz.js";
1
+ import { Fn as Set } from "../index-BsYLc74N.js";
2
2
  export { Set };
package/dist/set/index.js CHANGED
@@ -1 +1 @@
1
- import{At as e}from"../src-BUA74biP.js";export{e as Set};
1
+ import{At as e}from"../src-n-HOLxT0.js";export{e as Set};
@@ -0,0 +1,17 @@
1
+ import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{Brand as t}from"./branded/index.js";import{mergeObjects as n}from"./util/index.js";import{t as r}from"./Companion-DiOMBHDG.js";import{a as i,d as a,f as o,i as s,p as c,t as l}from"./serialization-CpbxaV0t.js";import{n as u,t as ee}from"./typeclass-C61yDVYd.js";import{Tuple as te}from"./tuple/index.js";const ne=e=>{let t=Error(e);return t.name=`ParseError`,t},re=(e,t)=>{if(e===`unbounded`)return t;if(!Number.isInteger(e)||e<1)throw RangeError(`concurrency must be a positive integer or "unbounded", got ${String(e)}`);return Math.min(e,t)},ie=async(e,t,n,r=()=>!1)=>{let i=Array.from(e),a=[],o={next:0,stopped:!1},s=async()=>{if(o.stopped||o.next>=i.length)return;let e=o.next;o.next=e+1;try{let n=await t(i[e]);a[e]={value:n},r(n)&&(o.stopped=!0)}catch(e){throw o.stopped=!0,e}return s()};return await Promise.all(Array.from({length:re(n,i.length)},s)),a.flatMap(e=>[e.value])},d=e=>({[Symbol.toStringTag]:`Option`,_tag:`Some`,value:e,isEmpty:!1,isSome(){return!0},isNone(){return!1},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>d(e),orNull:()=>e,orUndefined:()=>e,map:t=>d(t(e)),ap:t=>t._tag===`Some`&&t.value?d(t.value(e)):f,filter(t){return t(e)?d(e):f},count:t=>+!!t(e),find:t=>t(e)?d(e):f,exists:t=>t(e),forEach:t=>t(e),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),match:t=>t.Some(e),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),reduce:t=>e,reduceRight:t=>e,foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),contains:t=>t===e,toList:()=>C([e]),toArray:()=>[e],size:1,toOption:()=>d(e),toEither:t=>w(e),toTry:()=>x(()=>e),toPromise:()=>Promise.resolve(e),toString:()=>`Some(${c(e)})`,toValue:()=>({_tag:`Some`,value:e}),toJSON:()=>({"@functype":`Option`,_tag:`Some`,value:e}),pipe:t=>t(e),serialize:()=>s(`Option`,`Some`,e),doUnwrap(){return{ok:!0,value:e}}}),f={[Symbol.toStringTag]:`Option`,_tag:`None`,value:void 0,isEmpty:!0,isSome(){return!1},isNone(){return!0},orElse:e=>e,orThrow(e){throw e===void 0?/* @__PURE__ */ Error(`Cannot extract value from None`):typeof e==`function`?e():e},expect(e){return e()},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:e=>f,ap:e=>f,filter(e){return f},count:e=>0,find:e=>f,exists:e=>!1,forEach:e=>{},flatMap:e=>f,flatMapAsync:e=>Promise.resolve(f),reduce:e=>{throw Error(`Cannot reduce an empty Option`)},reduceRight:e=>{throw Error(`Cannot reduceRight an empty Option`)},fold:(e,t)=>e(),foldAsync:async(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,contains:()=>!1,toList:()=>C([]),toArray:()=>[],size:0,toOption:()=>f,toEither:e=>T(typeof e==`function`?e():e),toTry:()=>x(()=>{throw Error(`None`)}),toPromise:()=>Promise.reject(/* @__PURE__ */ Error(`Cannot convert None to Promise`)),toString:()=>`None`,toValue:()=>({_tag:`None`,value:void 0}),toJSON:()=>({"@functype":`Option`,_tag:`None`,value:null}),pipe:e=>e(void 0),serialize:()=>s(`Option`,`None`,null),doUnwrap(){return{ok:!1,empty:!0}}},p=()=>f,ae=e=>e==null?p():d(e),oe={from:e=>m(e),none:()=>p(),isSome:e=>e.isSome(),isNone:e=>e.isNone(),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Option`)throw Error(`Option.fromJSON: expected @functype="Option", got ${JSON.stringify(t[`@functype`])}`);return t._tag===`Some`?d(t.value):p()},fromYAML:e=>{let t=e.split(`
2
+ `),n=t[0]?.split(`: `)[1],r=t[1]?.split(`: `)[1];if(!n||!r)return p();let i=r===`null`?null:JSON.parse(r);return n===`Some`?d(i):p()},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return oe.fromJSON(t)},sequence:e=>e.reduce((e,t)=>e.isEmpty||t.isEmpty?p():d([...e.value,t.value]),d([])),traverse:(e,t)=>e.reduce((e,n,r)=>e.flatMap(e=>t(n,r).map(t=>[...e,t])),d([]))},m=r(ae,oe),h=globalThis.Set,g=e=>{let t=new h(e),n={[Symbol.toStringTag]:`FunctypeSet`,_tag:`Set`,[Symbol.iterator]:()=>t[Symbol.iterator](),add:e=>g([...t,e]),remove:e=>{let n=new h(t);return n.delete(e),g(n)},contains:e=>t.has(e),has:e=>t.has(e),map:e=>g(Array.from(t).map(e)),ap:e=>{let n=new h;for(let r of t)for(let t of e)n.add(t(r));return g(n)},flatMap:e=>{let n=new h;for(let r of t)for(let t of e(r))n.add(t);return g(n)},flatMapAsync:async(e,n)=>{let r=await ie(t,e,n?.concurrency??1);return g(r.flatMap(e=>Array.from(e)))},fold:(e,n)=>{let r=e;for(let e of t)r=n(r,e);return r},foldLeft:e=>n=>{let r=e;for(let e of t)r=n(r,e);return r},foldRight:e=>n=>Array.from(t).reduceRight((e,t)=>n(t,e),e),get size(){return t.size},get isEmpty(){return t.size===0},reduce:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduce empty Set`);return u(n,e)},reduceRight:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduceRight empty Set`);return ee(n,e)},count:e=>{let n=0;for(let r of t)e(r)&&n++;return n},find:e=>{for(let n of t)if(e(n))return m(n);return m(null)},exists:e=>{for(let n of t)if(e(n))return!0;return!1},forEach:e=>{t.forEach(e)},filter:e=>{let n=new h;for(let r of t)e(r)&&n.add(r);return g(n)},filterNot:e=>{let n=new h;for(let r of t)e(r)||n.add(r);return g(n)},drop:e=>g(Array.from(t).slice(e)),dropRight:e=>g(Array.from(t).slice(0,-e)),dropWhile:e=>{let n=Array.from(t),r=n.findIndex(t=>!e(t));return g(r===-1?[]:n.slice(r))},flatten:()=>{let e=new h;for(let n of t)if(Array.isArray(n))for(let t of n)e.add(t);else if(n&&typeof n==`object`&&Symbol.iterator in n)for(let t of n)e.add(t);else e.add(n);return g(e)},get head(){return Array.from(t)[0]},get headOption(){let e=Array.from(t)[0];return m(e)},take:e=>g(Array.from(t).slice(0,Math.max(0,e))),takeWhile:e=>{let n=Array.from(t),r=[];for(let t of n){if(!e(t))break;r.push(t)}return g(r)},takeRight:e=>{let n=Array.from(t);return g(e<=0?[]:n.slice(-e))},get last(){let e=Array.from(t);return e[e.length-1]},get lastOption(){let e=Array.from(t);return m(e[e.length-1])},get tail(){return g(Array.from(t).slice(1))},get init(){let e=Array.from(t);return g(e.length===0?[]:e.slice(0,-1))},toList:()=>C(Array.from(t)),toSet:()=>n,toArray:()=>Array.from(t),toString:()=>`Set(${Array.from(t).toString()})`,toValue:()=>({_tag:`Set`,value:Array.from(t)}),toJSON:()=>({"@functype":`Set`,_tag:`Set`,value:Array.from(t)}),pipe:e=>e(Array.from(t)),serialize:()=>s(`Set`,Array.from(t))};return n},se=e=>g(e),ce=g([]),le={empty:()=>ce,of:(...e)=>g(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Set`)throw Error(`Set.fromJSON: expected @functype="Set", got ${JSON.stringify(t[`@functype`])}`);return ue(t.value)},fromYAML:e=>{let t=e.split(`
3
+ `)[1]?.split(`: `)[1];if(!t)return ue([]);let n=JSON.parse(t);return ue(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return le.fromJSON(t)}},ue=r(se,le),de=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)},modify(e){let[n,r]=e(t);return t=n,r}}},_=r(de,{of:e=>de(e)}),fe=(e=0)=>{let t=_(e),n=e;return{get:()=>t.get(),set:e=>t.set(e),increment:()=>t.updateAndGet(e=>e+1),decrement:()=>t.updateAndGet(e=>e-1),reset:()=>t.set(n),compareAndSet:(e,n)=>t.compareAndSet(e,n)}},pe=()=>{let e=_([]);return{add:t=>e.update(e=>[...e,t]),addAll:t=>e.update(e=>[...e,...t]),build:()=>e.get(),clear:()=>e.set([]),size:()=>e.get().length}},v=e=>{let t={[Symbol.toStringTag]:`LazyList`,_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>v((function*(){for(let n of e)yield t(n)})()),flatMap:t=>v((function*(){for(let n of e)yield*t(n)})()),filter:t=>v((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>v((function*(){let n=fe(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>v((function*(){let n=fe(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>v((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>v((function*(){let n=_(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>v((function*(){yield*e,yield*t})()),zip:t=>v((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=_(n);for(let n of e)r.set(t(r.get(),n));return r.get()},find:t=>{for(let n of e)if(t(n))return m(n);return m.none()},some:t=>{for(let n of e)if(t(n))return!0;return!1},every:t=>{for(let n of e)if(!t(n))return!1;return!0},count:()=>{let t=fe(0);for(let n of e)t.increment();return t.get()},get head(){let t=e[Symbol.iterator]().next();return t.done?void 0:t.value},get headOption(){let t=e[Symbol.iterator]().next();return t.done?m.none():m(t.value)},get last(){let t;for(let n of e)t=n;return t},get lastOption(){let t=_(void 0),n=_(!1);for(let r of e)t.set(r),n.set(!0);return n.get()?m(t.get()):m.none()},get tail(){return v((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 v(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return v(t<=0?[]:n.slice(-t))},reverse:()=>v(Array.from(e).reverse()),distinct:()=>v((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>v((function*(){let t=fe(0);for(let n of e)yield[n,t.get()],t.increment()})()),fold:(t,n)=>{let r=t;for(let t of e)r=n(r,t);return r},foldLeft:t=>n=>{let r=_(t);for(let t of e)r.set(n(r.get(),t));return r.get()},foldRight:t=>n=>Array.from(e).reduceRight((e,t)=>n(t,e),t),pipe:e=>e(t),serialize:()=>s(`LazyList`,Array.from(e)),toJSON:()=>({"@functype":`LazyList`,_tag:`LazyList`,value:Array.from(e)}),toString:()=>{let t=[],n=fe(0),r=_(!1);for(let i of e)if(n.get()<10)t.push(i),n.increment();else{r.set(!0);break}let i=t.map(e=>String(e)).join(`, `);return r.get()?`LazyList(${i}, ...)`:`LazyList(${i})`}};return t},me=r(e=>v(e),{empty:()=>v([]),of:e=>v([e]),from:(...e)=>v(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`LazyList`)throw Error(`LazyList.fromJSON: expected @functype="LazyList", got ${JSON.stringify(t[`@functype`])}`);return v(t.value)},iterate:(e,t)=>v((function*(){let n=_(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>v((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>v((function*(){if(n===0)throw Error(`Step cannot be zero`);let r=_(e);if(n>0)for(;r.get()<t;)yield r.get(),r.set(r.get()+n);else for(;r.get()>t;)yield r.get(),r.set(r.get()+n)})()),repeat:(e,t)=>v((function*(){if(t===void 0)for(;;)yield e;else{let n=fe(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>v((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())}),y=e=>({[Symbol.toStringTag]:`Try`,_tag:`Success`,error:void 0,isSuccess(){return!0},isFailure(){return!1},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>y(e),orNull:()=>e,orUndefined:()=>e,toEither:t=>w(e),map:t=>x(()=>t(e)),ap:t=>t.map(t=>t(e)),flatMap:t=>t(e),flatMapAsync:async t=>t(e),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),match:t=>t.Success(e),recover:t=>y(e),recoverWith:t=>y(e),filterOrElse:(t,n)=>{try{return t(e)?y(e):b(n(e))}catch(e){return b(e instanceof Error?e:Error(String(e)))}},foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toString:()=>`Success(${c(e)})`,toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Success`,value:e}),toJSON:()=>({"@functype":`Try`,_tag:`Success`,value:e}),toOption:()=>d(e),toList:()=>C([e]),toArray:()=>[e],toTry:()=>y(e),pipe:t=>t(e),serialize:()=>s(`Try`,`Success`,e),contains:t=>e===t,exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),b=e=>({[Symbol.toStringTag]:`Try`,_tag:`Failure`,error:e,isSuccess(){return!1},isFailure(){return!0},orElse:e=>e,orThrow:t=>{throw t===void 0?e:typeof t==`function`?t(e):t},expect:t=>t(e),or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:t=>T(typeof t==`function`?t(e):t),map:t=>b(e),ap:t=>b(e),flatMap:t=>b(e),flatMapAsync:t=>Promise.resolve(b(e)),fold:(t,n)=>t(e),foldAsync:async(t,n)=>t(e),match:t=>t.Failure(e),recover:t=>x(()=>t(e)),recoverWith:t=>{try{return t(e)}catch(e){return b(e instanceof Error?e:Error(String(e)))}},filterOrElse:(t,n)=>b(e),foldLeft:e=>t=>e,foldRight:e=>t=>e,toString:()=>`Failure(${c(e)}))`,toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Failure`,value:e}),toJSON:()=>({"@functype":`Try`,_tag:`Failure`,error:o(e)}),toOption:()=>m(null),toList:()=>C([]),toArray:()=>[],toTry:()=>b(e),pipe:t=>{throw e},serialize:()=>i(`Try`,`Failure`,{error:o(e)}),contains:e=>!1,exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),he=e=>{try{return y(e())}catch(e){return b(e instanceof Error?e:Error(String(e)))}},ge={success:e=>y(e),failure:e=>b(typeof e==`string`?Error(e):e),fromPromise:e=>e.then(e=>y(e)).catch(e=>b(e instanceof Error?e:Error(String(e)))),async:e=>{try{return e().then(e=>y(e)).catch(e=>b(e instanceof Error?e:Error(String(e))))}catch(e){return Promise.resolve(b(e instanceof Error?e:Error(String(e))))}},isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Try`)throw Error(`Try.fromJSON: expected @functype="Try", got ${JSON.stringify(t[`@functype`])}`);if(t._tag===`Success`)return y(t.value);if(t.error!==void 0&&typeof t.error==`object`)return b(a(t.error));let n=Error(typeof t.error==`string`?t.error:``);return t.stack&&(n.stack=t.stack),b(n)},fromYAML:e=>{let t=e.split(`
4
+ `),n=t[0]?.split(`: `)[1];if(!n)return b(/* @__PURE__ */ Error(`Invalid YAML format for Try`));if(n===`Success`){let e=t[1]?.split(`: `)[1];if(!e)return b(/* @__PURE__ */ Error(`Invalid YAML format for Try Success`));let n=JSON.parse(e);return y(n)}{let e=t[1]?.split(`: `)[1];if(!e)return b(/* @__PURE__ */ 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),b(i)}},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ge.fromJSON(t)},sequence:e=>x(()=>e.map(e=>e.orThrow())),traverse:(e,t)=>x(()=>e.map((e,n)=>t(e,n).orThrow()))},x=r(he,ge);function _e({_tag:e,impl:t}){return{...t,_tag:e}}function ve(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:!t||e._tag===t}const S=e=>{let t=Array.from(e??[]),n={[Symbol.toStringTag]:`List`,_tag:`List`,[Symbol.iterator]:()=>t[Symbol.iterator](),get size(){return t.length},get length(){return t.length},map:e=>S(t.map(e)),ap:e=>S(t.flatMap(t=>Array.from(e).map(e=>e(t)))),flatMap:e=>S(t.flatMap(t=>Array.from(e(t)))),flatMapAsync:async(e,n)=>{let r=await ie(t,e,n?.concurrency??`unbounded`);return S(r.flatMap(e=>Array.from(e)))},mapAsync:async(e,n)=>S(await ie(t,e,n?.concurrency??1)),forEach:e=>t.forEach(e),contains:e=>t.includes(e),count:e=>t.filter(e).length,exists:e=>t.some(e),filter:e=>S(t.filter(e)),filterNot:e=>S(t.filter(t=>!e(t))),filterType:e=>S(t.filter(t=>ve(t,e))),find:(e,n)=>{let r=t.find(t=>e(t)&&(!n||ve(t,n)));return m(r)},get head(){return t[0]},get headOption(){return t.length>0?m(t[0]):p()},get isEmpty(){return t.length===0},toArray:()=>[...t],reduce:e=>u(t,e),reduceRight:e=>ee(t,e),fold:(e,n)=>t.reduce(n,e),foldLeft:e=>n=>t.reduce(n,e),foldRight:e=>n=>t.reduceRight((e,t)=>n(t,e),e),match:e=>t.length===0?e.Empty():e.NonEmpty([...t]),remove:e=>S(t.filter(t=>t!==e)),removeAt:e=>e<0||e>=t.length?n:S([...t.slice(0,e),...t.slice(e+1)]),add:e=>S([...t,e]),get:e=>m(t[e]),concat:e=>S([...t,...e.toArray()]),take:e=>S(t.slice(0,Math.max(0,e))),takeWhile:e=>{let n=[];for(let r of t){if(!e(r))break;n.push(r)}return S(n)},takeRight:e=>S(e<=0?[]:t.slice(-e)),get last(){return t[t.length-1]},get lastOption(){return t.length>0?m(t[t.length-1]):p()},get tail(){return S(t.slice(1))},get init(){return S(t.length===0?[]:t.slice(0,-1))},reverse:()=>S([...t].reverse()),indexOf:e=>t.indexOf(e),prepend:e=>S([e,...t]),distinct:()=>{let e=new globalThis.Set,n=[];for(let r of t)e.has(r)||(e.add(r),n.push(r));return S(n)},sorted:e=>S([...t].sort(e)),sortBy:(e,n)=>S([...t].sort((t,r)=>{let i=e(t),a=e(r);return n?n(i,a):i<a?-1:+(i>a)})),zip:e=>{let n=e.toArray(),r=Math.min(t.length,n.length),i=[];for(let e=0;e<r;e++)i.push([t[e],n[e]]);return S(i)},zipWithIndex:()=>S(t.map((e,t)=>[e,t])),groupBy:e=>{let n=new globalThis.Map;for(let r of t){let t=e(r),i=n.get(t)??[];i.push(r),n.set(t,i)}let r=new globalThis.Map;for(let[e,t]of n)r.set(e,S(t));return r},partition:e=>{let n=[],r=[];for(let i of t)e(i)?n.push(i):r.push(i);return[S(n),S(r)]},span:e=>{let n=t.findIndex(t=>!e(t));return n===-1?[S([...t]),S([])]:[S(t.slice(0,n)),S(t.slice(n))]},slice:(e,n)=>S(t.slice(e,n)),drop:e=>S(t.slice(e)),dropRight:e=>S(t.slice(0,-e)),dropWhile:e=>S(t.slice(t.findIndex(t=>!e(t)))),flatten:()=>S(t.flatMap(e=>Array.isArray(e)?e:[e])),toList:()=>n,toSet:()=>ue(t),toOption:()=>t.length>0?m(t[0]):p(),toEither:e=>t.length>0?w(t[0]):T(e),toTry:()=>t.length>0?x(()=>t[0]):x(()=>{throw Error(`Empty list`)}),toString:()=>`List(${c(t)})`,toValue:()=>({_tag:`List`,value:t}),toJSON:()=>({"@functype":`List`,_tag:`List`,value:[...t]}),pipe:e=>e([...t]),serialize:()=>s(`List`,t),doUnwrap(){return t.length===0?{ok:!1,empty:!0}:{ok:!0,value:t[0]}}};return n},ye=e=>S(e),be=S([]),xe={empty:()=>be,of:(...e)=>S(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`List`)throw Error(`List.fromJSON: expected @functype="List", got ${JSON.stringify(t[`@functype`])}`);return C(t.value)},fromYAML:e=>{let t=e.split(`
5
+ `)[1]?.split(`: `)[1];if(!t)return C([]);let n=JSON.parse(t);return C(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return xe.fromJSON(t)}},C=r(ye,xe),Se=e=>({[Symbol.toStringTag]:`Either`,_tag:`Right`,value:e,isLeft(){return!1},isRight(){return!0},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>w(e),orNull:()=>e,orUndefined:()=>e,map:t=>w(t(e)),ap:t=>t._tag===`Right`?w(t.value(e)):T(t.value),mapAsync:t=>t(e).then(e=>w(e)).catch(e=>Promise.resolve(T(e))),merge:t=>t.isLeft()?T(t.value):w([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(e=>T(e)),toOption:()=>d(e),toList:()=>C([e]),toEither:t=>w(e),toTry:()=>x(()=>e),toJSON(){return{"@functype":`Either`,_tag:`Right`,value:e}},toString:()=>`Right(${c(e)})`,*[Symbol.iterator](){yield e},*yield(){yield e},traverse:t=>{let n=t(e);return n.isLeft()?T(n.value):w([n.value])},tap:t=>(t(e),w(e)),tapLeft:t=>w(e),mapLeft:t=>w(e),filterOrElse:(t,n)=>t(e)?w(e):T(n(e)),bimap:(t,n)=>w(n(e)),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),match:t=>t.Right(e),swap:()=>T(e),toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Right`,value:e}),pipeEither:(t,n)=>n(e),pipe:t=>t(e),serialize:()=>s(`Either`,`Right`,e),contains:t=>e===t,exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),Ce=e=>({[Symbol.toStringTag]:`Either`,_tag:`Left`,value:e,isLeft(){return!0},isRight(){return!1},orElse:e=>e,orThrow:t=>{throw t===void 0?e:typeof t==`function`?t(e):t},expect:t=>t(e),or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:t=>T(e),ap:t=>T(e),mapAsync:t=>Promise.resolve(T(e)),merge:t=>T(e),flatMap:t=>T(e),flatMapAsync:t=>Promise.resolve(T(e)),toOption:()=>p(),toList:()=>C(),toEither:e=>T(e),toTry:()=>x(()=>{throw Error(String(e))}),toJSON(){return{"@functype":`Either`,_tag:`Left`,value:e}},toString:()=>`Left(${c(e)})`,*[Symbol.iterator](){},*yield(){},traverse:t=>T(e),tap:t=>T(e),tapLeft:t=>(t(e),T(e)),mapLeft:t=>T(t(e)),filterOrElse:(t,n)=>T(e),bimap:(t,n)=>T(t(e)),fold:(t,n)=>t(e),foldAsync:async(t,n)=>t(e),foldLeft:e=>t=>e,foldRight:e=>t=>e,match:t=>t.Left(e),swap:()=>w(e),toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Left`,value:e}),pipeEither:(t,n)=>t(e),pipe:t=>t(e),serialize:()=>s(`Either`,`Left`,e),contains:e=>!1,exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),w=e=>Se(e),T=e=>Ce(e),we=e=>e.isRight(),Te=e=>e.isLeft(),Ee=(e,t)=>{try{return w(e())}catch(e){return T(t(e))}},De=e=>Se(e);console.assert(De);const Oe=e=>Ce(e);console.assert(Oe);const ke=async(e,t)=>{try{let t=await e();return w(t)}catch(e){return T(t(e))}},Ae=(e,t)=>t?w(e):T(e),je={left:e=>T(e),right:e=>w(e),void:()=>w(void 0),isRight:e=>e.isRight(),isLeft:e=>e.isLeft(),sequence:e=>e.reduce((e,t)=>e.isLeft()?e:t.isLeft()?T(t.value):e.map(e=>[...e,t.value]),w([])),traverse:(e,t)=>je.sequence(e.map(t)),traverseAsync:async(e,t,n)=>{let r=await ie(e,t,n?.concurrency??1,e=>e.isLeft());return je.sequence(r)},fromNullable:(e,t)=>e==null?T(t):w(e),fromPredicate:(e,t,n)=>t(e)?w(e):T(n),ap:(e,t)=>e.flatMap(e=>t.map(e)),fromPromise:async(e,t)=>{try{let t=await e;return w(t)}catch(e){return T(t(e))}},fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Either`)throw Error(`Either.fromJSON: expected @functype="Either", got ${JSON.stringify(t[`@functype`])}`);return t._tag===`Right`?w(t.value):T(t.value)},fromYAML:e=>{let t=e.split(`
6
+ `),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`?w(i):T(i)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return je.fromJSON(t)}},Me=r(Ae,je);function E(e,n){return{brand:e,validate:n,of:r=>n(r)?m(t(e,r)):m.none(),from:r=>n(r)?w(t(e,r)):T(`Invalid ${e}: validation failed`),unsafeOf:r=>{if(!n(r))throw Error(`Invalid ${e}: validation failed`);return t(e,r)},is:e=>{try{return n(e)}catch{return!1}},unwrap:e=>e,refine:(e,t)=>E(e,e=>n(e)&&t(e))}}const Ne=E(`PositiveNumber`,e=>e>0),Pe=E(`NonNegativeNumber`,e=>e>=0),Fe=E(`IntegerNumber`,e=>Number.isInteger(e)),Ie=Ne.refine(`PositiveInteger`,e=>Number.isInteger(e)),Le=E(`NonEmptyString`,e=>e.length>0),Re=E(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),ze=E(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),Be=E(`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=E(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function He(e,t,n){return E(e,e=>e>=t&&e<=n)}function Ue(e,t,n){return E(e,e=>e.length>=t&&e.length<=n)}function We(e,t){return E(e,e=>t.test(e))}const Ge=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Ge({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Ge({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},Ke=()=>Ge({resolved:!1}),qe=r(Ke,{of:()=>Ke(),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}}),Je=(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 Je(r,n)}):!1,D=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(Je(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:Je(e.value,n)?D({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):D({...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 D({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 D({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(Je(e.value,r))return D({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return D({...e,patterns:[...e.patterns,...n.map(e=>({pattern:e,result:i}))]})},default:n=>e.resolved?e.result:t(n,e.value),exhaustive:()=>{if(e.resolved)return e.result;let t=n();if(!t.matched)throw Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(e.value)}`);return t.result},orThrow:t=>{if(e.resolved)return e.result;let r=n();if(!r.matched)throw Error(t??`No matching pattern for value: ${JSON.stringify(e.value)}`);return r.result},toOption:()=>{if(e.resolved)return m(e.result);let t=n();return t.matched?m(t.result):m.none()}};return r},Ye=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 Je(e,n)?D({...i,resolved:!0,result:t(r,e)}):D(i)},caseValue:(t,n)=>{if(e===t){let t=typeof n==`function`?n():n;return D({value:e,resolved:!0,result:t,patterns:[]})}return D({value:e,resolved:!1,patterns:[]})},caseValues:(t,n)=>{if(t.includes(e)){let t=typeof n==`function`?n():n;return D({value:e,resolved:!0,result:t,patterns:[]})}return D({value:e,resolved:!1,patterns:[]})},when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?D({...i,resolved:!0,result:t(r,e)}):D(i)},caseAny:(n,r)=>{for(let i of n)if(Je(e,i))return D({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return D({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},Xe=r(e=>Ye(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(Je(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(Je(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 Ze(e,t){return{..._e({_tag:e,impl:t}),toString(){return`${e}()`},doUnwrap(){if(`isSome`in t&&`isNone`in t){if(typeof t.isSome==`function`&&t.isSome()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isNone==`function`&&t.isNone())return{ok:!1,empty:!0}}if(`isLeft`in t&&`isRight`in t){if(typeof t.isRight==`function`&&t.isRight()&&`value`in t)return{ok:!0,value:t.value};if(typeof t.isLeft==`function`&&t.isLeft()&&`value`in t)return{ok:!1,empty:!1,error:t.value}}if(`isSuccess`in t&&`isFailure`in t){if(typeof t.isSuccess==`function`&&t.isSuccess()&&`get`in t&&typeof t.get==`function`)return{ok:!0,value:t.get()};if(typeof t.isFailure==`function`&&t.isFailure()&&`getError`in t&&typeof t.getError==`function`)return{ok:!1,empty:!1,error:t.getError()}}if(`isEmpty`in t&&`head`in t){if(typeof t.isEmpty==`function`&&t.isEmpty())return{ok:!1,empty:!0};if(typeof t.head==`function`)return{ok:!0,value:t.head()};if(`head`in t)return{ok:!0,value:t.head}}return{ok:!0,value:t}}}}const Qe=`Throwable`;var $e=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=Qe,this.name=t?.taskInfo?.name??`Throwable`,Object.defineProperties(this,{_tag:{value:Qe,writable:!1,configurable:!1},data:{value:t?.data,writable:!1,configurable:!1},taskInfo:{value:t?.taskInfo,writable:!1,configurable:!1},name:{value:t?.taskInfo?.name??`Throwable`,writable:!1,configurable:!1}}),t?.cause&&Object.defineProperty(this,"cause",{value:t.cause,writable:!1,configurable:!1}),t?.stack?this.stack=t.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static apply(t,n,r){if(t instanceof Error){let i=new e(t.message,{data:n,cause:t.cause??void 0,stack:t.stack??void 0,taskInfo:r});for(let e of Object.keys(t))if(!(e in i)){let n=i;n[e]=t[e]}return i}if(t&&typeof t==`object`){let i=t,a=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))}`,o=new e(a,{data:n??i,taskInfo:r});for(let e of Object.keys(i))if(!(e in o)){let t=o;t[e]=i[e]}return o}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,o=Number.isNaN(a)?`Number error: NaN`:Number.isFinite(a)?`Number error: ${a}`:`Number error: ${a>0?`Infinity`:`-Infinity`}`;return new e(o,{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})}let o=typeof t==`string`?t:`${i.charAt(0).toUpperCase()+i.slice(1)} error: ${a}`;return new e(o,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}};function et(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const tt=(e,t)=>{if(e.isRight())return k(e.orThrow(),t);if(e.isLeft())return O(e.fold(e=>e,()=>/* @__PURE__ */ Error(`Unexpected right value`)),void 0,t);throw Error(`Unrecognized task outcome`)},O=(e,t,n)=>{let r={name:n?.name??`Task`,description:n?.description??``},a=$e.apply(e,t,r),s={...Ze(`Err`,{error:a,meta:r}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Err`,_meta:r,value:void 0,error:a,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>O(a,t,n),flatMap:e=>O(a,t,n),ap:e=>O(a,t,n),mapAsync:e=>Promise.resolve(O(a,t,n)),flatMapAsync:e=>Promise.resolve(O(a,t,n)),mapError:e=>O(e(a),t,n),recover:e=>k(e,n),recoverWith:e=>k(e(a),n),orThrow:e=>{throw e??a},orElse:e=>e,or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:()=>T(a),toTry:()=>x(()=>{throw a}),toOption:()=>p(),toList:()=>C([]),fold:(e,t)=>e(a),match:e=>e.Err(a),foldLeft:e=>t=>e,foldRight:e=>t=>e,size:0,isEmpty:!0,contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce empty Err`)},reduceRight:e=>{throw Error(`Cannot reduceRight empty Err`)},count:e=>0,find:e=>p(),exists:e=>!1,forEach:e=>{},toPromise:()=>Promise.reject(a),doUnwrap(){return{ok:!1,empty:!1,error:a}},toJSON:()=>({"@functype":`Task`,_tag:`Err`,error:o(a)}),serialize:()=>i(`Task`,`Err`,{error:o(a)}),pipe:e=>e(s)};return s},k=(e,t)=>{let n={name:t?.name??`Task`,description:t?.description??``},r={...Ze(`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=>k(n(e),t),flatMap:n=>{let r=n(e);return r&&typeof r==`object`&&`isLeft`in r&&`isRight`in r?tt(r,t):r},ap:n=>n.isOk()?k(n.value(e),t):O(n.error,void 0,t),mapAsync:async n=>k(await n(e),t),flatMapAsync:async t=>await t(e),mapError:n=>k(e,t),recover:n=>k(e,t),recoverWith:n=>k(e,t),orThrow:t=>e,orElse:t=>e,or:n=>k(e,t),orNull:()=>e,orUndefined:()=>e,toEither:()=>w(e),toTry:()=>x(()=>e),toOption:()=>d(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),find:t=>t(e)?d(e):p(),exists:t=>t(e),forEach:t=>t(e),toPromise:()=>Promise.resolve(e),doUnwrap(){return{ok:!0,value:e}},toJSON:()=>({"@functype":`Task`,_tag:`Ok`,value:e}),serialize:()=>s(`Task`,`Ok`,e),pipe:e=>e(r)};return r},nt=()=>{let e=new AbortController,t=pe();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)}}))}}},rt=e=>{let t=e?.name??`Task`,n=e?.description??``,r={Async:(e,r=e=>e,i=()=>{},a)=>new Promise(o=>{(async()=>{let s=_(!1),c=_(null),l=_(()=>{});if(a){if(a.isCancelled){try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}o(O(/* @__PURE__ */ Error(`Task was cancelled before execution started`),void 0,{name:t,description:n}));return}a.onCancel(()=>{s.set(!0),c.set(/* @__PURE__ */ Error(`Task was cancelled during execution`))}),l.set(()=>{})}try{let r=await e();try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(O(c.get(),void 0,{name:t,description:n})):o(O(/* @__PURE__ */ 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(k(r,{name:t,description:n}))}else o(k(r,{name:t,description:n}))}catch(e){try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(O(c.get(),void 0,{name:t,description:n})):o(O(/* @__PURE__ */ Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}try{if(e instanceof Error&&et(e)){let i=/* @__PURE__ */ Error(`${t}: ${e.message}`),a=$e.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(O(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(O(i,void 0,{name:t,description:n}))}else o(O(i,void 0,{name:t,description:n}))}}catch(e){o(O(e,void 0,{name:t,description:n}))}}finally{l.get()()}})().catch(e=>o(O(e,void 0,{name:t,description:n})))}),Sync:(e,r=e=>e,i=()=>{})=>{try{return k(e(),{name:t,description:n})}catch(e){return O(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{...Ze(`Task`,r),_type:`Task`}},it={success:(e,t)=>k(e,t),fail:(e,t,n)=>O(e,t,n),ok:(e,t)=>k(e,t),err:(e,t,n)=>O(e,t,n),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Task`)throw Error(`Task.fromJSON: expected @functype="Task", got ${JSON.stringify(t[`@functype`])}`);if(t._tag===`Ok`)return k(t.value);if(t._tag===`Err`){let e=t.error!==void 0&&typeof t.error==`object`?a(t.error):Error(typeof t.error==`string`?t.error:`Unknown Task error`);return O(e)}throw Error(`Task.fromJSON: unrecognized _tag ${JSON.stringify(t._tag)}`)},fromEither:(e,t)=>tt(e,t),fromTry:(e,t)=>e.isSuccess()?k(e.orThrow(),t):O(e.fold(e=>e,()=>/* @__PURE__ */ Error(`Unexpected success`)),void 0,t),getErrorChain:e=>{if(!e)return[];let t=pe();t.add(e);let n=_(e);for(;n.get()&&n.get().cause;){let{cause:e}=n.get();if(e)t.add(e),n.set(e);else break;if(t.size()>100)break}return t.build()},formatErrorChain:(e,t)=>{let n=it.getErrorChain(e),r=t?.separator??`
7
+ `;return n.map((e,n)=>{if(!e)return`${n>0?`↳ `:``}Unknown error`;let{taskInfo:r}=e,i=t?.includeTasks&&r?.name?`[${r.name}] `:``,a=e.message??`No message`,o=_(`${n>0?`↳ `:``}${i}${a}`);return t?.includeStackTrace&&e.stack&&o.set(`${o.get()}\n${e.stack.split(`
8
+ `).slice(1).join(`
9
+ `)}`),o.get()}).join(r)},fromPromise:(e,t)=>(...n)=>A(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)=>{let r={name:n?.name??`TaskRace`,description:n?.description??`Race between multiple tasks`};return A(r).Async(async()=>{let n=pe();e.forEach(e=>n.add(e));let r=_(void 0);if(typeof t==`number`&&t>0){let e=new Promise((e,n)=>{r.set(setTimeout(()=>{n(/* @__PURE__ */ 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)=>A(n).Async(()=>new Promise((n,r)=>{try{e(...t,(e,t)=>{e?r(e):n(t)})}catch(e){r(e)}}),e=>e)},createCancellationTokenSource:nt,cancellable:(e,t)=>{let n=nt();return{task:A(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=nt(),i=_(0),a=e=>{i.set(Math.max(0,Math.min(100,e))),t(i.get())};return{task:A(n).Async(()=>e(a,r.token),e=>e,()=>{},r.token),cancel:()=>r.cancel(),currentProgress:()=>i.get()}}},A=r(rt,it),at=Map,j=e=>{let t={values:new at(e)},n=()=>Array.from(t.values.entries()).map(([e,t])=>te([e,t])),r=e=>j(new at(t.values).set(e.toArray()[0],e.toArray()[1]).entries()),i=e=>{let n=new at(t.values);return n.delete(e)?j(n.entries()):j(t.values.entries())},a=e=>{if(!e||typeof e.toArray!=`function`)return!1;let n=e.toArray();return t.values.get(n[0])===n[1]},o=()=>t.values.size,c=e=>j(Array.from(t.values.entries()).map(([t,n])=>[t,e(n)])),l=e=>{let n=j(t.values.entries()).toList();return j(n.flatMap(e).toArray())},u=e=>{let n=[];for(let[r,i]of t.values.entries()){let t=e.get(r);t._tag===`Some`&&t.value&&n.push([r,t.value(i)])}return j(n)},ee=async e=>{let n=new at;for(let[r,i]of t.values.entries()){let t=await e(i);for(let e of t.toList()){let[t,r]=e.toArray();n.set(t,r)}}return j(n.entries())},ne=e=>C(n()).reduce(e),re=e=>C(n()).reduceRight(e),ie=e=>t=>C(n()).foldLeft(e)(t),d=e=>t=>C(n()).foldRight(e)(t),f=e=>m(t.values.get(e)),p=(e,n)=>m(t.values.get(e)).orElse(n),ae=()=>t.values.size===0,oe=(e,n)=>m(t.values.get(e)).or(n),h=(e,t)=>C(n()).fold(e,t),g=()=>C(n()),se=()=>ue(n()),ce=()=>`Map(${n().toString()})`,le=e=>ae()?e.Empty():e.NonEmpty(n());return{[Symbol.toStringTag]:`FunctypeMap`,_tag:`Map`,[Symbol.iterator]:()=>t.values.entries(),add:r,remove:i,contains:a,get size(){return o()},map:c,ap:u,flatMap:l,flatMapAsync:ee,reduce:ne,reduceRight:re,foldLeft:ie,foldRight:d,fold:h,match:le,get:f,getOrElse:p,get isEmpty(){return ae()},orElse:oe,toList:g,toSet:se,toString:ce,toValue:()=>({_tag:`Map`,value:Array.from(t.values.entries())}),toJSON:()=>({"@functype":`Map`,_tag:`Map`,value:Array.from(t.values.entries())}),pipe:e=>e(Array.from(t.values.entries())),serialize:()=>s(`Map`,Array.from(t.values.entries()))}},ot=e=>j(e),st=j([]),ct={empty:()=>st,of:(...e)=>j(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Map`)throw Error(`Map.fromJSON: expected @functype="Map", got ${JSON.stringify(t[`@functype`])}`);return lt(t.value)},fromYAML:e=>{let t=e.split(`
10
+ `)[1]?.split(`: `)[1];if(!t)return lt([]);let n=JSON.parse(t);return lt(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ct.fromJSON(t)}},lt=r(ot,ct),ut=(e,t,n)=>({_tag:`Leaf`,path:e,message:t,cause:n}),dt=(e,t)=>({_tag:`Composite`,path:e,children:t}),ft=e=>e._tag===`Leaf`,pt=e=>e._tag===`Composite`,mt=(e,t)=>e._tag===`Leaf`?t.Leaf(e):t.Composite(e),ht=(e,t)=>t._tag===`Leaf`?{...t,path:[e,...t.path]}:{...t,children:C(t.children.toArray().map(t=>ht(e,t)))},gt=e=>e._tag===`Leaf`?C([{path:e.path,message:e.message}]):C(e.children.toArray().flatMap(e=>gt(e).toArray())),_t=e=>gt(e).toArray().map(({path:e,message:t})=>`${vt(e)}: ${t}`).join(`
11
+ `),vt=e=>e.length===0?`(root)`:e.reduce((e,t)=>t.startsWith(`[`)&&t.endsWith(`]`)?`${e}${t}`:e===``?t:`${e}.${t}`,``),M=r({},{leaf:ut,composite:dt,isLeaf:ft,isComposite:pt,match:mt,prepend:ht,flatten:gt,format:_t}),yt=e=>typeof e==`string`?w(e):T(M.leaf([],`expected string`,{received:e})),bt=e=>typeof e==`number`?w(e):T(M.leaf([],`expected number`,{received:e})),xt=e=>typeof e==`boolean`?w(e):T(M.leaf([],`expected boolean`,{received:e})),St=e=>w(e),Ct=e=>t=>t==null?w(null):e(t),wt=e=>t=>t==null?w(p()):e(t).fold(e=>T(e),e=>w(d(e))),Tt={envelope:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected envelope object {ok|err}`,{received:t}));let n=t;return`ok`in n?e.ok(n.ok).fold(e=>T(M.prepend(`ok`,e)),e=>w(w(e))):`err`in n?e.err(n.err).fold(e=>T(M.prepend(`err`,e)),e=>w(T(e))):T(M.leaf([],`expected envelope to have 'ok' or 'err' key`,{received:t}))},discriminated:(e,t,n)=>r=>{if(typeof r!=`object`||!r)return T(M.leaf([],`expected object with '${e.tag}' tag`,{received:r}));let i=r[e.tag];return i===e.rightTag?n(r).fold(e=>T(e),e=>w(w(e))):i===e.leftTag?t(r).fold(e=>T(e),e=>w(T(e))):T(M.leaf([],`expected '${e.tag}' to be '${e.rightTag}' or '${e.leftTag}'`,{received:i}))}},Et=e=>t=>{if(!Array.isArray(t))return T(M.leaf([],`expected array`,{received:t}));let n=[],r=[];return t.forEach((t,i)=>{e(t).fold(e=>{n.push(M.prepend(`[${i}]`,e))},e=>{r.push(e)})}),At(n,()=>C(r))},Dt=e=>t=>{if(!Array.isArray(t))return T(M.leaf([],`expected array`,{received:t}));let n=[],r=[];return t.forEach((t,i)=>{e(t).fold(e=>{n.push(M.prepend(`[${i}]`,e))},e=>{r.push(e)})}),At(n,()=>r)},Ot=e=>t=>{if(typeof t!=`object`||!t||Array.isArray(t))return T(M.leaf([],`expected object (for Map)`,{received:t}));let n=t,r=[],i=[];for(let t of Object.keys(n))e(n[t]).fold(e=>{r.push(M.prepend(t,e))},e=>{i.push([t,e])});return At(r,()=>lt(i))},kt=e=>t=>{if(typeof t!=`object`||!t||Array.isArray(t))return T(M.leaf([],`expected object`,{received:t}));let n=t,r=[],i={};for(let t in e)e[t](n[t]).fold(e=>{r.push(M.prepend(t,e))},e=>{i[t]=e});return At(r,()=>i)},At=(e,t)=>e.length===0?w(t()):e.length===1?T(e[0]):T(M.composite([],C(e))),jt={string:yt,number:bt,boolean:xt,unknown:St,nullable:Ct,option:wt,either:Tt,list:Et,array:Dt,map:Ot,object:kt},Mt=(e,t)=>M.prepend(e,t),Nt=(e,t,n)=>M.prepend(e,M.prepend(`[${t}]`,n)),Pt={option:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Option object`,{received:t}));let n=t;return n._tag===`None`?w(p()):n._tag===`Some`?e(n.value).fold(e=>T(Mt(`value`,e)),e=>w(d(e))):T(M.leaf([`_tag`],`expected 'Some' or 'None'`,{received:n._tag}))},either:(e,t)=>n=>{if(typeof n!=`object`||!n)return T(M.leaf([],`expected tagged Either object`,{received:n}));let r=n;return r._tag===`Right`?t(r.value).fold(e=>T(Mt(`value`,e)),e=>w(w(e))):r._tag===`Left`?e(r.value).fold(e=>T(Mt(`value`,e)),e=>w(T(e))):T(M.leaf([`_tag`],`expected 'Left' or 'Right'`,{received:r._tag}))},try:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Try object`,{received:t}));let n=t;if(n._tag===`Success`)return e(n.value).fold(e=>T(Mt(`value`,e)),e=>w(x.success(e)));if(n._tag===`Failure`){let e=typeof n.error==`string`?n.error:`unknown error`,t=Error(e);return typeof n.stack==`string`&&(t.stack=n.stack),w(x.failure(t))}return T(M.leaf([`_tag`],`expected 'Success' or 'Failure'`,{received:n._tag}))},list:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged List object`,{received:t}));let n=t;if(n._tag!==`List`)return T(M.leaf([`_tag`],`expected 'List'`,{received:n._tag}));if(!Array.isArray(n.value))return T(M.leaf([`value`],`expected array`,{received:n.value}));let r=[],i=[];return n.value.forEach((t,n)=>{e(t).fold(e=>{r.push(Nt(`value`,n,e))},e=>{i.push(e)})}),r.length===0?w(C(i)):r.length===1?T(r[0]):T(M.composite([],C(r)))},map:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Map object`,{received:t}));let n=t;if(n._tag!==`Map`)return T(M.leaf([`_tag`],`expected 'Map'`,{received:n._tag}));if(!Array.isArray(n.value))return T(M.leaf([`value`],`expected entries array`,{received:n.value}));let r=[],i=[];return n.value.forEach((t,n)=>{if(!Array.isArray(t)||t.length!==2){r.push(M.leaf([`value`,`[${n}]`],`expected [key, value] tuple`,{received:t}));return}let[a,o]=t;if(typeof a!=`string`){r.push(M.leaf([`value`,`[${n}]`,`[0]`],`expected string key`,{received:a}));return}e(o).fold(e=>{r.push(M.prepend(`value`,M.prepend(`[${n}]`,M.prepend(`[1]`,e))))},e=>{i.push([a,e])})}),r.length===0?w(lt(i)):r.length===1?T(r[0]):T(M.composite([],C(r)))},obj:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Obj object`,{received:t}));let n=t;if(n._tag!==`Obj`)return T(M.leaf([`_tag`],`expected 'Obj'`,{received:n._tag}));if(typeof n.value!=`object`||n.value===null)return T(M.leaf([`value`],`expected object`,{received:n.value}));let r=n.value,i=[],a={};for(let t in e)e[t](r[t]).fold(e=>{i.push(M.prepend(`value`,M.prepend(t,e)))},e=>{a[t]=e});return i.length===0?w(a):i.length===1?T(i[0]):T(M.composite([],C(i)))}},Ft=r({},{...jt,tagged:Pt});function It(e){if(!e||typeof e!=`object`||!(`_tag`in e))return`unknown`;switch(e._tag){case`Some`:case`None`:return`Option`;case`Left`:case`Right`:return`Either`;case`List`:return`List`;case`Success`:case`Failure`:return`Try`;default:return`unknown`}}const Lt={Option:{of:e=>m(e),empty:()=>m.none()},Either:{of:e=>w(e),empty:e=>T(e)},List:{of:e=>C([e]),empty:()=>C([])},Try:{of:e=>x(()=>e),empty:e=>x(()=>{throw e??/* @__PURE__ */ Error(`Try failed`)})}};function Rt(e){let t=e(),n=null,r;function i(a){let o=t.next(a);if(o.done)return r?r.of(o.value):C([o.value]);let s=o.value;if(typeof s!=`object`||!s)throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`);if(!n&&`_tag`in s&&(n=It(s),n!==`unknown`&&n in Lt&&(r=Lt[n]),n===`List`))return zt(e);if(`doUnwrap`in s){let e=s.doUnwrap();if(!e.ok){if(!r)return C([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`)}return i()}function zt(e){function t(e){if(typeof e!=`object`||!e||!(`doUnwrap`in e))return[e];let t=e;if(`toArray`in t){let e=t.toArray();return e.length===0?[]:e}let n=t.doUnwrap();return n.ok?[n.value]:[]}function n(r){let i=e(),a=[],o=[],s=0;function c(e){let l=i.next(e);if(l.done){a.push(l.value);return}if(s<r.length){let e=r[s];o.push(e),s++,c(e);return}let u=t(l.value);if(u.length!==0){if(u.length>1){let e=u.flatMap(e=>n([...o,e]));a.push(...e)}else o.push(u[0]),s++,c(u[0])}}return c(void 0),a}let r=n([]);return C(r)}async function Bt(e){let t=e(),n=null,r;async function i(e){let a=await t.next(e);if(a.done)return r?r.of(a.value):C([a.value]);let o=await Promise.resolve(a.value);if(typeof o!=`object`||!o)return i(o);if(!n&&`_tag`in o&&(n=It(o),n!==`unknown`&&n in Lt&&(r=Lt[n])),`doUnwrap`in o){let e=o.doUnwrap();if(!e.ok){if(!r)return C([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}return i(o)}return i()}function Vt(e){return typeof e==`object`&&!!e&&`doUnwrap`in e&&typeof e.doUnwrap==`function`}function Ht(e){let t=e.doUnwrap();if(t.ok)return t.value;throw`error`in t?t.error:Error(`Cannot unwrap empty monad`)}function*Ut(e){return yield e}const Wt=(e=`Cannot unwrap None in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`NoneError`,n},Gt=(e,t=`Cannot unwrap Left in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`LeftError`,r.value=e,r},Kt=(e=`Cannot unwrap empty List in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`EmptyListError`,n},qt=(e,t=`Cannot unwrap Failure in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`FailureError`,r.cause=e,r},Jt={includeTasks:!0,includeStackTrace:!1,separator:`
12
+ `,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function Yt(e){let t=/* @__PURE__ */ 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`?Xt(n):n},2)}function Xt(e){if(e===void 0||e===``)return``;let t=e.split(`
13
+ `);return[t[0],...t.slice(1).map(e=>e.trim())].join(`
14
+ `)}function Zt(e,t){let n={...Jt,...t},r=e instanceof Error?e:$e.apply(e),i=A?.getErrorChain?A.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=Xt(e.stack).split(`
15
+ `).slice(1),i=n.maxStackFrames??Jt.maxStackFrames??3,a=t.slice(0,i).map(e=>`${r} ${n.colors?`\x1B[90m`:``}${e}${n.colors?`\x1B[0m`:``}`).join(`
16
+ `);o+=`\n${a}`,t.length>i&&(o+=`\n${r} ${n.colors?`\x1B[90m`:``}...${t.length-i} more stack frames${n.colors?`\x1B[0m`:``}`)}return o}).join(n.separator)}`;if(n.includeData){let{data:e}=r;if(e){let t=n.colors?`\n\n\x1b[33mContext:\x1b[0m\n${Yt(e)}`:`\n\nContext:\n${Yt(e)}`;a+=t}}return a}function Qt(){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?Xt(t.stack):void 0};if(t.taskInfo&&(n.taskInfo=t.taskInfo),t.data&&(n.data=t.data),typeof A?.getErrorChain==`function`)try{let e=A.getErrorChain(t);e.length>1&&(n.errorChain=A.formatErrorChain(t,{includeTasks:!0}),n.structuredErrorChain=e.map(e=>({message:e.message,name:e.name,taskInfo:e.taskInfo,stack:e.stack?Xt(e.stack):void 0})))}catch{}return Object.getOwnPropertyNames(t).forEach(e=>{if(!n[e]){let r=t[e];n[e]=r}}),n}}const N=(e,t,r,i)=>{let a=$e.apply(t,r,{name:e,description:t});return n(a,{code:e,message:t,status:$t(e),context:r,timestamp:(/* @__PURE__ */ new Date()).toISOString(),traceId:i?.traceId})},$t=e=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[e],P=Object.assign(N,{validation:(e,t,n)=>N(`VALIDATION_FAILED`,`Validation failed: ${e} ${n}`,{field:e,value:t,rule:n}),network:(e,t,n)=>N(`NETWORK_ERROR`,`Network error: ${t} ${e}${n?` (${n})`:``}`,{url:e,method:t,statusCode:n}),auth:(e,t)=>N(`AUTH_REQUIRED`,`Authentication required: ${e}${t?` (role: ${t})`:``}`,{resource:e,requiredRole:t}),notFound:(e,t)=>N(`NOT_FOUND`,`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,n)=>N(`PERMISSION_DENIED`,`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:n}),rateLimit:(e,t,n)=>N(`RATE_LIMITED`,`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:n}),internal:e=>N(`INTERNAL_ERROR`,`Internal server error: ${e}`,{errorId:e,timestamp:(/* @__PURE__ */ new Date()).toISOString()}),badRequest:(e,t)=>N(`BAD_REQUEST`,`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>N(`CONFLICT`,`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>N(`TIMEOUT`,`Request timeout: ${t} exceeded ${e}ms`,{duration:e,operation:t}),isTypedError:e=>typeof e==`object`&&!!e&&`code`in e&&`message`in e&&`status`in e&&`context`in e&&`_tag`in e&&e._tag===`Throwable`,hasCode:(e,t)=>e.code===t}),F={rule:e=>t=>{if(e===`email`)return typeof t!=`string`||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?T(P.validation(`value`,t,`must be a valid email`)):w(t);if(e===`url`)try{return new URL(String(t)),w(t)}catch{return T(P.validation(`value`,t,`must be a valid URL`))}if(e===`uuid`)return typeof t!=`string`||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)?T(P.validation(`value`,t,`must be a valid UUID`)):w(t);if(e===`required`)return t==null||t===``?T(P.validation(`value`,t,`is required`)):w(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?T(P.validation(`value`,t,`must be numeric`)):w(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?T(P.validation(`value`,t,`must contain only letters`)):w(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?T(P.validation(`value`,t,`must be alphanumeric`)):w(t);if(e.startsWith(`min:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r<n?T(P.validation(`value`,t,`must be at least ${n}`)):w(t)}if(e.startsWith(`max:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r>n?T(P.validation(`value`,t,`must be at most ${n}`)):w(t)}if(e.startsWith(`minLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length<n?T(P.validation(`value`,t,`must be at least ${n} characters`)):w(t)}if(e.startsWith(`maxLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length>n?T(P.validation(`value`,t,`must be at most ${n} characters`)):w(t)}if(e.startsWith(`pattern:`)){let n=e.substring(8);return new RegExp(n).test(String(t))?w(t):T(P.validation(`value`,t,`must match pattern ${n}`))}if(e.startsWith(`in:`)){let n=e.substring(3).split(`,`);return n.includes(String(t))?w(t):T(P.validation(`value`,t,`must be one of: ${n.join(`, `)}`))}if(e.startsWith(`notIn:`)){let n=e.substring(6).split(`,`);return n.includes(String(t))?T(P.validation(`value`,t,`must not be one of: ${n.join(`, `)}`)):w(t)}if(e===`date`){let e=new Date(String(t));return isNaN(e.getTime())?T(P.validation(`value`,t,`must be a valid date`)):w(t)}if(e===`future`){let e=new Date(String(t));return isNaN(e.getTime())||e<=/* @__PURE__ */ new Date?T(P.validation(`value`,t,`must be a future date`)):w(t)}if(e===`past`){let e=new Date(String(t));return isNaN(e.getTime())||e>=/* @__PURE__ */ new Date?T(P.validation(`value`,t,`must be a past date`)):w(t)}return w(t)},combine:(...e)=>t=>{for(let n of e){let e=n(t);if(e.isLeft())return e}return w(t)},custom:(e,t)=>n=>e(n)?w(n):T(P.validation(`value`,n,t)),form:(e,t)=>{let n=[],r={};for(let[i,a]of Object.entries(e)){let e=t[i],o=a(e);if(o.isLeft()){let t=o.fold(e=>e,()=>{throw Error(`Should not be left`)}),r=P.validation(i,e,t.context.rule);n.push(r)}else r[i]=o.orThrow()}return n.length>0?T(C(n)):w(r)}},en={...F,validators:{email:F.rule(`email`),url:F.rule(`url`),uuid:F.rule(`uuid`),required:F.rule(`required`),numeric:F.rule(`numeric`),positiveNumber:F.combine(F.rule(`numeric`),F.rule(`min:0`)),nonEmptyString:F.combine(F.rule(`required`),F.custom(e=>typeof e==`string`&&e.trim().length>0,`must not be empty`))}},tn=n(F.rule,en);function nn(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function rn(e){return nn(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 an=e=>({_tag:`Context`,services:e,get(t){let n=e.get(t.id);return n===void 0?p():d(n)},unsafeGet(t){let n=e.get(t.id);if(n===void 0)throw Error(`Service not found: ${t.id}`);return n},has(t){return e.has(t.id)},add(t,n){let r=new Map(e);return r.set(t.id,n),an(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return an(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>an(/* @__PURE__ */ new Map),make:(e,t)=>{let n=/* @__PURE__ */ new Map;return n.set(e.id,t),an(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},L=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,isSuccess(){return!0},isFailure(){return!1},isDie(){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,i){return n(e)},match(t){return t.Success(e)},orThrow(){return e},orElse(t){return e},toOption(){return d(e)},toEither(){return w(e)},toValue(){return{_tag:`Success`,value:e}},toString(){return`Exit.Success(${c(e)})`},toJSON(){return{_tag:`Success`,value:e}}}),on=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,isSuccess(){return!1},isFailure(){return!0},isDie(){return!1},isInterrupted(){return!1},map(t){return on(e)},mapError(t){return on(t(e))},mapBoth(t,n){return on(t(e))},flatMap(t){return on(e)},fold(t,n,r,i){return t(e)},match(t){return t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return p()},toEither(){return T(e)},toValue(){return{_tag:`Failure`,error:e}},toString(){return`Exit.Failure(${c(e)})`},toJSON(){return{_tag:`Failure`,error:e}}}),sn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Die`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!0},isInterrupted(){return!1},map(t){return sn(e)},mapError(t){return sn(e)},mapBoth(t,n){return sn(e)},flatMap(t){return sn(e)},fold(t,n,r,i){return i?i(e):t(e)},match(t){return t.Die?t.Die(e):t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return p()},toEither(){return T(e)},toValue(){return{_tag:`Die`,defect:e}},toString(){return`Exit.Die(${c(e)})`},toJSON(){return{_tag:`Die`,defect:e}}}),cn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!1},isInterrupted(){return!0},map(t){return cn(e)},mapError(t){return cn(e)},mapBoth(t,n){return cn(e)},flatMap(t){return cn(e)},fold(t,n,r,i){if(r)return r(e);throw Error(`Effect was interrupted: ${e}`)},match(t){return t.Interrupted(e)},orThrow(){throw Error(`Effect was interrupted: ${e}`)},orElse(e){return e},toOption(){return p()},toEither(){throw Error(`Cannot convert Interrupted Exit to Either: ${e}`)},toValue(){return{_tag:`Interrupted`,fiberId:e}},toString(){return`Exit.Interrupted(${e})`},toJSON(){return{_tag:`Interrupted`,fiberId:e}}}),R=r(e=>L(e),{succeed:e=>L(e),fail:e=>on(e),die:e=>sn(e),interrupt:e=>cn(e),interrupted:()=>cn(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isDie:e=>e.isDie(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?L(e.value):on(e.value),fromOption:(e,t)=>e.isSome()?L(e.value):on(t()),zip:(e,t)=>e.isInterrupted()?e:t.isInterrupted()?t:e.isDie()?e:t.isDie()?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.isDie()||n.isFailure())return n;t.push(n.orThrow())}return L(t)}}),z=e=>e;var ln=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},un=class extends Error{constructor(e){super(e??`Effect was interrupted`),this._tag=`InterruptedError`,this.name=`InterruptedError`}static is(e){return typeof e==`object`&&!!e&&`_tag`in e&&e._tag===`InterruptedError`}},dn=class extends Error{constructor(e){super(`Cannot run ${e} effect synchronously — use run()/runExit() instead`),this.operation=e,this._tag=`UnsupportedSyncOperationError`,this.name=`UnsupportedSyncOperationError`}},fn=class extends Error{constructor(e,t,n){super(n??`Repeat exhausted after ${e} iterations`),this.max=e,this.lastValue=t,this._tag=`RepeatExhausted`,this.name=`RepeatExhausted`}static is(e){return typeof e==`object`&&!!e&&`_tag`in e&&e._tag===`RepeatExhausted`}};const pn=Symbol.for(`functype/IO/effect`),B=e=>e[pn],V=e=>{let t={[Symbol.toStringTag]:`IO`,[pn]:e,map(e){return V(z({_tag:`Map`,effect:t,f:e}))},flatMap(e){return V(z({_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 V(z({_tag:`MapError`,effect:t,f:e}))},tapError(e){return t.mapError(t=>(e(t),t))},recover(e){return V(z({_tag:`Recover`,effect:t,fallback:e}))},recoverWith(e){return V(z({_tag:`RecoverWith`,effect:t,f:e}))},fold(e,n){return V(z({_tag:`Fold`,effect:t,onFailure:e,onSuccess:n}))},match(e){return t.fold(e.failure,e.success)},catchTag(e,n){return V(z({_tag:`RecoverWith`,effect:t,f:t=>typeof t==`object`&&t&&`_tag`in t&&t._tag===e?z(n(t)):z(W.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(()=>W.sleep(n).flatMap(()=>t.retryWithDelay(e-1,n)))},retryWhile(e){let n=(r,i)=>t.recoverWith(t=>{if(r<=0||!e.while(t,i))return z(W.fail(t));let a=n(r-1,i+1);return e.delayMs===void 0?a:z(W.sleep(e.delayMs).flatMap(()=>a))});return n(e.n,1)},retryWithBackoff(e){let n=e.factor??2,r=e.maxMs??3e4,i=e.jitter??!0,a=e.while??(()=>!0),o=(s,c)=>t.recoverWith(t=>{if(s<=0||!a(t,c))return z(W.fail(t));let l=Math.min(r,e.baseMs*n**(c-1)),u=i?l*(.5+Math.random()*.5):l,ee=o(s-1,c+1);return z(W.sleep(u).flatMap(()=>ee))});return o(e.n,1)},repeatUntil(e,n){if(n.max<=0)return z(W.fail(new fn(n.max)));let r=i=>t.flatMap(t=>{if(e(t))return z(W.succeed(t));if(i<=1)return z(W.fail(new fn(n.max,t)));let a=r(i-1);return n.delayMs===void 0?a:z(W.sleep(n.delayMs).flatMap(()=>a))});return r(n.max)},repeatWhile(e,n){return t.repeatUntil(t=>!e(t),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 V(z({_tag:`ProvideContext`,effect:t,context:e}))},provideService(e,n){let r=I.make(e,n);return V(z({_tag:`ProvideContext`,effect:t,context:r}))},provideLayer(e){let n=z(W.async(async()=>{let t=I.empty();return await e.build(z(t))}));return z(n.flatMap(e=>V(z({_tag:`ProvideContext`,effect:t,context:e}))))},async run(){let e=await U(B(this));if(e.isSuccess())return w(e.orThrow());let t=vn(e);return T(t?t.value:new un)},async runOrThrow(){let e=await U(B(this));if(e.isSuccess())return e.orThrow();let t=vn(e);throw t?t.value:new un},runSync(){try{return w(H(B(this)))}catch(e){return T(e)}},runSyncOrThrow(){return H(B(this))},async runExit(e){let t=e?.signal;if(!t)return U(B(this));let n=await U(B(this),void 0,()=>t.aborted);return t.aborted&&n.isFailure()?R.interrupted():n},async runOption(){let e=await U(B(this));return e.isSuccess()?d(e.orThrow()):p()},async runTry(){let e=await U(B(this));if(e.isSuccess())return z(x(()=>e.orThrow()));let t=vn(e),n=t?t.value:/* @__PURE__ */ Error(`Effect was interrupted`);return z(x(()=>{throw n}))},runCancellable(){let e=new AbortController;return{result:this.interruptOn(e.signal).run(),cancel:()=>e.abort()}},pipe(e){return e(t)},delay(e){return z(W.async(()=>new Promise(t=>setTimeout(t,e))).flatMap(()=>t))},timeout(e){return V(z({_tag:`Timeout`,effect:t,duration:e}))},timeoutTo(e,n){return z(t.timeout(e).recover(z(n)))},interruptOn(e){return V(z({_tag:`InterruptWhen`,effect:t,signal:e}))},toString(){return`IO(${c(e._tag)})`},toJSON(){return{_tag:`IO`,effect:e._tag}},*[Symbol.iterator](){return yield t}};return t},mn=e=>{if(_n(e)||e instanceof dn)throw e},hn=/* @__PURE__ */ new WeakSet,gn=()=>{let e=new un;return hn.add(e),e},_n=e=>e instanceof un&&!hn.has(e),vn=e=>{let t=e.toValue();if(t._tag===`Failure`)return{value:t.error};if(t._tag===`Die`)return{value:t.defect}},H=(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=H(B(e.effect),t);return e.f(n)}case`FlatMap`:{let n=H(B(e.effect),t),r=e.f(n);return H(B(r),t)}case`MapError`:try{return H(B(e.effect),t)}catch(t){throw mn(t),e.f(t)}case`Recover`:try{return H(B(e.effect),t)}catch(t){return mn(t),e.fallback}case`RecoverWith`:try{return z(H(B(e.effect),t))}catch(n){mn(n);let r=e.f(n);return H(B(r),t)}case`Fold`:try{let n=H(B(e.effect),t);return e.onSuccess(n)}catch(t){return mn(t),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 H(B(e.effect),n)}case`Interrupt`:throw new un;case`Bracket`:{let n=H(B(e.acquire),t);try{return H(B(e.use(n)),t)}finally{H(B(e.release(n)),t)}}case`BracketExit`:{let n=H(B(e.acquire),t),r;try{let i=H(B(e.use(n)),t);return r=z(R.succeed(i)),i}catch(e){throw r=_n(e)?z(R.interrupted()):e instanceof dn?z(R.die(e)):z(R.fail(e)),e}finally{H(B(e.release(n,r)),t)}}case`Race`:throw new dn(`race`);case`Timeout`:throw new dn(`timeout`);case`InterruptWhen`:if(e.signal.aborted)throw gn();try{return H(B(e.effect),t)}catch(e){throw _n(e)?gn():e}}},yn=(e,t)=>{if(t)return e.isDie()?z(e):R.interrupted()},bn=(e,t,n)=>e.isSuccess()||e.isDie()?e:n?R.interrupted():e.isInterrupted()||t.aborted?R.fail(new un):e,U=async(e,t=I.empty(),n)=>{if(n?.())return R.interrupted();let r=()=>n?.()??!1;try{switch(e._tag){case`Succeed`:return z(R.succeed(e.value));case`Fail`:return z(R.fail(e.error));case`Die`:return z(R.die(e.defect));case`Sync`:return z(R.succeed(e.thunk()));case`Async`:try{let t=await e.thunk();return z(R.succeed(t))}catch(e){return z(R.fail(e))}case`Auto`:try{let t=e.thunk();return t instanceof Promise?z(R.succeed(await t)):z(R.succeed(t))}catch(e){return z(R.fail(e))}case`Map`:{let i=await U(B(e.effect),t,n);return i.isSuccess()?r()?R.interrupted():z(R.succeed(e.f(i.orThrow()))):z(i)}case`FlatMap`:{let i=await U(B(e.effect),t,n);if(!i.isSuccess())return z(i);if(r())return R.interrupted();let a=e.f(i.orThrow());return U(B(a),t,n)}case`MapError`:{let i=await U(B(e.effect),t,n),a=vn(i);return a?yn(i,r())||z(R.fail(e.f(a.value))):z(i)}case`Recover`:{let i=await U(B(e.effect),t,n);return vn(i)?yn(i,r())??R.succeed(e.fallback):z(i)}case`RecoverWith`:{let i=await U(B(e.effect),t,n),a=vn(i);if(!a)return z(i);let o=yn(i,r());if(o)return o;let s=e.f(a.value);return U(B(s),t,n)}case`Fold`:{let i=await U(B(e.effect),t,n),a=vn(i);return a?yn(i,r())??R.succeed(e.onFailure(a.value)):i.isSuccess()?r()?R.interrupted():R.succeed(e.onSuccess(i.orThrow())):i}case`Service`:{let n=t.get(e.tag);return n.isNone()?R.fail(/* @__PURE__ */ Error(`Service not found: ${e.tag.id}`)):R.succeed(n.orThrow())}case`ProvideContext`:{let r=t.merge(e.context);return U(B(e.effect),r,n)}case`Interrupt`:return R.interrupted();case`Bracket`:{let i=await U(B(e.acquire),t);if(!i.isSuccess())return i;let a=i.orThrow();try{return r()?R.interrupted():await U(B(e.use(a)),t,n)}finally{await U(B(e.release(a)),t)}}case`BracketExit`:{let i=await U(B(e.acquire),t);if(!i.isSuccess())return i;let a=i.orThrow(),o=r()?R.interrupted():await U(B(e.use(a)),t,n);return await U(B(e.release(a,o)),t),o}case`Race`:return e.effects.length===0?R.fail(/* @__PURE__ */ Error(`No effects to race`)):await Promise.race(e.effects.map(e=>U(B(e),t,n)));case`Timeout`:{let r=new Promise(t=>setTimeout(()=>t(R.fail(new ln(e.duration))),e.duration)),i=U(B(e.effect),t,n);return Promise.race([i,r])}case`InterruptWhen`:{let{signal:n}=e,i=await U(B(e.effect),t,()=>n.aborted||r());return z(bn(i,n,r()))}}}catch(e){return R.die(e)}},W={sync:e=>V({_tag:`Sync`,thunk:e}),succeed:e=>V({_tag:`Succeed`,value:e}),fail:e=>V({_tag:`Fail`,error:e}),die:e=>V({_tag:`Die`,defect:e}),async:e=>V(z({_tag:`Async`,thunk:e})),tryPromise:e=>V({_tag:`Async`,thunk:e.try}).mapError(e.catch),tryCatch:(e,t)=>W.sync(()=>{try{return e()}catch(e){throw t(e)}}),liftSync:e=>(...t)=>W.sync(()=>e(...t)),liftPromise:e=>(...t)=>W.async(()=>e(...t)),fromEither:e=>z(e.isRight()?W.succeed(e.value):W.fail(e.value)),fromPromiseEither:(e,t)=>{let n=W.async(async()=>e());return(t?n.mapError(t):n.recoverWith(e=>W.die(e))).flatMap(e=>W.fromEither(e))},fromOption:e=>z(e.isSome()?W.succeed(e.value):W.fail(void 0)),fromOptionOrFail:(e,t)=>z(e.isSome()?W.succeed(e.value):W.fail(t())),fromTry:e=>z(e.isSuccess()?W.succeed(e.orThrow()):W.fail(e.error)),fromResult:e=>z(e.error?W.fail(e.error):W.succeed(m(e.data))),tryAsync:(e,t,n)=>n?.aborted?z(W.fail(t(n.reason??new DOMException(`Aborted`,`AbortError`)))):W.async(()=>e(n)).mapError(t),asyncResult:(e,t,n)=>{let r=n?.dataKey??`data`,i=n?.errorKey??`error`;return W.tryAsync(t=>e(t),t,n?.signal).flatMap(e=>W.fromResult({data:e[r],error:e[i]}))},service:e=>V({_tag:`Service`,tag:e}),serviceWith:(e,t)=>W.service(e).map(t),serviceWithIO:(e,t)=>W.service(e).flatMap(t),withServices:(e,t)=>{let n=Object.entries(e);if(n.length===0)return z(V({_tag:`Auto`,thunk:()=>t({})}));let r=z(W.succeed({})),i=n.reduce((e,[t,n])=>z(e.flatMap(e=>W.service(n).map(n=>({...e,[t]:n})))),r);return z(i.flatMap(e=>V({_tag:`Auto`,thunk:()=>t(e)})))},all:e=>{if(e.length===0)return z(W.succeed([]));let t=z(W.succeed([]));return z(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),t))},firstSuccessOf:e=>e.length===0?z(W.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),sleep:e=>z(W.async(()=>new Promise(t=>setTimeout(t,e)))),iterate:(e,t,n,r)=>{let i=r?.max??1e4,a=(e,r)=>n(e)?z(W.succeed(e)):r<=0?z(W.fail(new fn(i,e))):t(e).flatMap(e=>a(e,r-1));return a(e,i)},never:()=>z(W.async(()=>new Promise(()=>{}))),get unit(){return z(V({_tag:`Succeed`,value:void 0}))},fromNullable:e=>z(e==null?W.fail(void 0):W.succeed(e)),interrupt:()=>V({_tag:`Interrupt`}),bracket:(e,t,n)=>V({_tag:`Bracket`,acquire:e,use:t,release:n}),acquireRelease:(e,t,n)=>W.bracket(e,t,n),bracketExit:(e,t,n)=>V({_tag:`BracketExit`,acquire:e,use:t,release:n}),race:e=>V({_tag:`Race`,effects:e}),any:e=>e.length===0?z(W.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),forEach:(e,t)=>{if(e.length===0)return z(W.succeed([]));let n=z(W.succeed([]));return z(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),n))},forEachPar:(e,t)=>W.forEach(e,t),timeout:(e,t)=>V(z({_tag:`Timeout`,effect:e,duration:t})),gen:e=>z(W.sync(()=>{let t=e(),n=e=>{let r=t.next(e);return r.done?z(W.succeed(r.value)):z(r.value.flatMap(e=>n(e)))};return n(void 0)}).flatMap(e=>e)),get Do(){return xn(W.succeed({}))}},xn=e=>({effect:e,bind(t,n){let r=e.flatMap(e=>n(e).map(n=>({...e,[t]:n})));return xn(r)},let(t,n){let r=e.map(e=>({...e,[t]:n(e)}));return xn(r)},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return xn(e.tap(t))},tapEffect(t){return xn(e.tapEffect(t))},done(){return e}}),G=r(e=>V(z({_tag:`Auto`,thunk:e})),W),K=(e,t)=>({_tag:`Layer`,build:e,provideToAndMerge(t){return K(async n=>{let r=await e(n),i=n.merge(r),a=await t.build(i);return r.merge(a)})},merge(t){return K(async n=>{let[r,i]=await Promise.all([e(n),t.build(n)]);return r.merge(i)})},map(t){return K(async n=>t(await e(n)))},toString(){return`Layer(${t??`anonymous`})`}}),Sn={succeed:(e,t)=>K(()=>Promise.resolve(I.make(e,t)),e.id),effect:(e,t)=>K(async()=>{let n=await t();return I.make(e,n)},e.id),sync:(e,t)=>K(()=>Promise.resolve(I.make(e,t())),e.id),fromService:(e,t,n)=>K(r=>{let i=r.unsafeGet(t);return Promise.resolve(I.make(e,n(i)))},e.id),fromServiceEffect:(e,t,n)=>K(async r=>{let i=await n(r.unsafeGet(t));return I.make(e,i)},e.id),fromContext:e=>K(()=>Promise.resolve(e)),empty:()=>K(()=>Promise.resolve(I.empty()),`empty`),mergeAll:(...e)=>K(async t=>(await Promise.all(e.map(e=>e.build(t)))).reduce((e,t)=>e.merge(t),I.empty()))},Cn=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),wn=()=>{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})})}}},Tn=Cn(`TestClock`),En={make:wn,tag:Tn,test:async e=>e(wn()),get get(){return G.service(Tn)},advance:e=>G.serviceWithIO(Tn,t=>G.async(()=>t.advance(e))),setTime:e=>G.serviceWithIO(Tn,t=>G.async(()=>t.setTime(e))),get runAll(){return G.serviceWithIO(Tn,e=>G.async(()=>e.runAll()))},context:()=>{let e=wn();return{clock:e,context:I.make(Tn,e)}}},Dn={make:()=>{let e=wn(),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=wn();return Dn.make().withService(Tn,e)}},On=Cn(`HttpClient`),kn={},An=r({},{networkError:(e,t,n)=>({_tag:`NetworkError`,url:e,method:t,cause:n}),httpStatusError:(e,t,n,r,i)=>({_tag:`HttpStatusError`,url:e,method:t,status:n,statusText:r,body:i}),decodeError:(e,t,n,r)=>({_tag:`DecodeError`,url:e,method:t,body:n,cause:r}),isNetworkError:e=>e._tag===`NetworkError`,isHttpStatusError:e=>e._tag===`HttpStatusError`,isDecodeError:e=>e._tag===`DecodeError`,match:(e,t)=>{switch(e._tag){case`NetworkError`:return t.NetworkError(e);case`HttpStatusError`:return t.HttpStatusError(e);case`DecodeError`:return t.DecodeError(e)}}}),jn=(e,t)=>!e||t.startsWith(`http://`)||t.startsWith(`https://`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`,Mn=(e,t)=>{let n=new URLSearchParams;for(let e of Object.keys(t)){let r=t[e];if(r!=null){if(Array.isArray(r))for(let t of r)n.append(e,String(t));else n.append(e,String(r))}}let r=n.toString();return r?`${e}${e.includes(`?`)?`&`:`?`}${r}`:e},Nn=(e,t,n)=>{let r=jn(e,t);return n?Mn(r,n):r},Pn=(e,t)=>e[Symbol.toStringTag]===t,q=(e,t)=>{if(typeof e!=`object`||!e||e instanceof Date||e instanceof RegExp||typeof Buffer<`u`&&e instanceof Buffer)return e;if(Pn(e,`Option`)){let n=e;return t===`tagged`?n._tag===`None`?{_tag:`None`,value:null}:{_tag:`Some`,value:q(n.value,t)}:n._tag===`None`?null:q(n.value,t)}if(Pn(e,`Either`)){let n=e;if(t===`tagged`)return{_tag:n._tag,value:q(n.value,t)};if(n._tag===`Left`)throw Error(`Cannot serialize a Left in a request body — Either's failure path should not cross the wire as data. Resolve the Left before sending, or omit the field. (Left value: ${JSON.stringify(n.value)})`);return q(n.value,t)}if(Pn(e,`Try`)){let n=e;if(t===`tagged`){if(n._tag===`Failure`){let e=n.error??/* @__PURE__ */ Error(`unknown`);return{_tag:`Failure`,error:e.message,stack:e.stack}}return{_tag:`Success`,value:q(n.value,t)}}if(n._tag===`Failure`)throw n.error??/* @__PURE__ */ Error(`Cannot serialize a Try Failure in a request body`);return q(n.value,t)}if(Pn(e,`List`)){let n=e.toArray().map(e=>q(e,t));return t===`tagged`?{_tag:`List`,value:n}:n}if(Pn(e,`FunctypeMap`)){let n=e.toValue().value;if(t===`tagged`)return{_tag:`Map`,value:n.map(([e,n])=>[e,q(n,t)])};let r={};for(let[e,i]of n){if(typeof e!=`string`)throw Error(`Cannot serialize Map with non-string keys to JSON (key: ${String(e)})`);r[e]=q(i,t)}return r}if(Array.isArray(e))return e.map(e=>q(e,t));let n={};for(let r of Object.keys(e))n[r]=q(e[r],t);return n},Fn=(e,t)=>{if(e==null)return{serialized:void 0,contentType:void 0};if(typeof e==`string`)return{serialized:e,contentType:void 0};if(typeof e==`object`||Array.isArray(e)){let n=q(e,t?`primitive`:`tagged`);return{serialized:JSON.stringify(n),contentType:`application/json`}}return{serialized:String(e),contentType:void 0}},In=e=>{let t=e.get(`content-type`)??``;return t.includes(`application/json`)?`json`:t.startsWith(`text/`)?`text`:`raw`},Ln=async(e,t,n,r,i,a)=>{let o=t??In(e.headers),s,c={};switch(o){case`json`:{let t=await e.text();c.value=t;try{s=JSON.parse(t)}catch(e){throw An.decodeError(n,r,t,e)}break}case`text`:s=await e.text(),c.value=s;break;case`blob`:s=await e.blob();break;case`arrayBuffer`:s=await e.arrayBuffer();break;case`raw`:s=e}let l;if(i){let e=i(s);if(e.isLeft()){let t=c.value??(typeof s==`string`?s:JSON.stringify(s));throw An.decodeError(n,r,t,e.value)}l=e.value}else if(a)try{l=a(s)}catch(e){let t=c.value??(typeof s==`string`?s:JSON.stringify(s));throw An.decodeError(n,r,t,e)}else l=s;return{data:l,status:e.status,statusText:e.statusText,headers:e.headers}},Rn=(e,t)=>{let n={url:Nn(e.baseUrl,t.url,t.params),method:t.method,headers:{...e.defaultHeaders,...t.headers},body:t.body,signal:t.signal,parseAs:t.parseAs,flatten:t.flatten};return(e.beforeRequest?e.beforeRequest(n):G.succeed(n)).flatMap(n=>{let r=n.flatten??!0,i=(()=>{try{return{ok:!0,value:Fn(n.body,r)}}catch(e){return{ok:!1,cause:e}}})();if(!i.ok)return G.fail(An.networkError(n.url,n.method,i.cause));let{serialized:a,contentType:o}=i.value,s={...n.headers,...o?{"Content-Type":o}:{}},c=G.tryAsync(r=>(e.fetch??globalThis.fetch)(n.url,{method:n.method,headers:s,body:a,signal:n.signal??r}).then(async e=>{if(!e.ok){let t=await e.text().catch(()=>``);throw An.httpStatusError(n.url,n.method,e.status,e.statusText,t)}return Ln(e,n.parseAs,n.url,n.method,t.decode,t.validate)}),e=>typeof e==`object`&&e&&`_tag`in e?e:An.networkError(n.url,n.method,e));return e.afterResponse?c.flatMap(t=>e.afterResponse(t).map(e=>e)):c})},zn=e=>Rn(kn,e),Bn=r({},{request:zn,get:(e,t)=>zn({...t,url:e,method:`GET`}),post:(e,t)=>zn({...t,url:e,method:`POST`}),put:(e,t)=>zn({...t,url:e,method:`PUT`}),patch:(e,t)=>zn({...t,url:e,method:`PATCH`}),delete:(e,t)=>zn({...t,url:e,method:`DELETE`}),head:(e,t)=>zn({...t,url:e,method:`HEAD`,parseAs:`raw`}),options:(e,t)=>zn({...t,url:e,method:`OPTIONS`,parseAs:`raw`}),client:e=>({request:t=>Rn(e,t),get:(t,n)=>Rn(e,{...n,url:t,method:`GET`}),post:(t,n)=>Rn(e,{...n,url:t,method:`POST`}),put:(t,n)=>Rn(e,{...n,url:t,method:`PUT`}),patch:(t,n)=>Rn(e,{...n,url:t,method:`PATCH`}),delete:(t,n)=>Rn(e,{...n,url:t,method:`DELETE`}),head:(t,n)=>Rn(e,{...n,url:t,method:`HEAD`,parseAs:`raw`}),options:(t,n)=>Rn(e,{...n,url:t,method:`OPTIONS`,parseAs:`raw`})})}),Vn={toOption:e=>e.fold(()=>p(),e=>d(e)),toList:e=>e.fold(()=>C([]),e=>C([e])),toEither:(e,t)=>e.fold(()=>T(t),e=>w(e)),isEmpty:e=>e.fold(()=>!0,()=>!1),size:e=>e.fold(()=>0,()=>1)},Hn=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),J=e=>typeof e==`object`&&!!e&&e._tag===`List`,Un=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),Wn=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),Y=()=>{let e=(e,t)=>{if(Hn(e)||J(e)||Un(e)||Wn(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(Hn(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(Un(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(Wn(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(Hn(e)||J(e)||Un(e)||Wn(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(Hn(e)&&Hn(t)||J(e)&&J(t)||Un(e)&&Un(t)||Wn(e)&&Wn(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},i=e=>{if(Hn(e)){let t=e;if(t.isEmpty)return C([m.none()]);let n=t.orThrow();if(J(n))return n.map(e=>m(e));throw Error(`Unsupported inner container type for sequence`)}if(J(e)){let t=e.toArray();if(t.length===0)return m.none();let n=t[0];if(Hn(n)){for(let e of t)if(e.isEmpty)return m.none();let e=t.map(e=>e.orThrow());return m(C(e))}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`}},Gn=Y();Y.map=(e,t)=>Gn.map(e,t),Y.flatten=e=>Gn.flatten(e),Y.flatMap=(e,t)=>Gn.flatMap(e,t),Y.ap=(e,t)=>Gn.ap(e,t),Y.sequence=e=>Gn.sequence(e),Y.traverse=(e,t)=>Gn.traverse(e,t),Y.isOption=Hn,Y.isList=J,Y.isEither=Un,Y.isTry=Wn;const Kn=e=>({id:e,isSame:t=>t.id===e}),qn=r(Kn,{of:e=>Kn(e),pure:e=>Kn(e)}),X=e=>{let t=!1,n,r,a=!1,l=()=>{if(!t)try{n=e(),t=!0}catch(e){throw r=e,a=!0,t=!0,e}if(a)throw r;return n};return{[Symbol.toStringTag]:`Lazy`,_tag:`Lazy`,get isEvaluated(){return t},orElse:e=>{try{return l()}catch{return e}},orNull:()=>{try{return l()}catch{return null}},orThrow:e=>{try{return l()}catch(t){throw e??t}},or:e=>Z(()=>{try{return l()}catch{return e.orThrow()}}),orUndefined:()=>{try{return l()}catch{return}},map:e=>Z(()=>e(l())),ap:e=>Z(()=>e.orThrow()(l())),mapAsync:async e=>{let t=await e(l());return Z(()=>t)},flatMap:e=>Z(()=>e(l()).orThrow()),flatMapAsync:async e=>{let t=await e(l());return Z(()=>t.orThrow())},filter:e=>Z(()=>{let t=l();return e(t)?d(t):p}),recover:e=>Z(()=>{try{return l()}catch(t){return e(t)}}),recoverWith:e=>Z(()=>{try{return l()}catch(t){return e(t).orThrow()}}),toOption:()=>{try{return d(l())}catch{return p}},toEither:()=>{try{return w(l())}catch(e){return T(e)}},toEitherWith:e=>{try{return w(l())}catch(t){return T(e(t))}},toTry:()=>x(()=>l()),tap:e=>Z(()=>{let t=l();return e(t),t}),tapError:e=>Z(()=>{try{return l()}catch(t){throw e(t),t}}),fold:e=>e(l()),foldWith:(e,t)=>{try{return t(l())}catch(t){return e(t)}},foldLeft:e=>t=>t(e,l()),foldRight:e=>t=>t(l(),e),match:e=>e.Lazy(l()),toString:()=>t&&!a?`Lazy(${c(n)})`:t&&a?`Lazy(<error: ${r instanceof Error?r.message:String(r)}>)`:`Lazy(<not evaluated>)`,toValue:()=>{try{return{_tag:`Lazy`,value:l()}}catch(e){return{_tag:`Lazy`,error:e instanceof Error?e:Error(String(e))}}},get size(){try{return l(),1}catch{return 0}},get isEmpty(){try{return l(),!1}catch{return!0}},contains:e=>{try{return l()===e}catch{return!1}},reduce:e=>l(),reduceRight:e=>l(),count:e=>{try{return+!!e(l())}catch{return 0}},find:e=>{try{let t=l();return e(t)?d(t):p}catch{return p}},exists:e=>{try{return e(l())}catch{return!1}},forEach:e=>{try{e(l())}catch{}},pipe:e=>e(l()),toJSON:()=>{try{return{"@functype":`Lazy`,_tag:`Lazy`,value:l()}}catch(e){return{"@functype":`Lazy`,_tag:`Lazy`,error:o(e)}}},serialize:()=>{try{return s(`Lazy`,l())}catch(e){return i(`Lazy`,`Lazy`,{error:o(e)})}},typeable:`Lazy`}},Jn={of:e=>X(e),fromValue:e=>X(()=>e),fromOption:(e,t)=>X(()=>e._tag===`Some`?e.value:t()),fromTry:e=>X(()=>e.orThrow()),fromEither:e=>X(()=>e.fold(e=>{throw e},e=>e)),fromPromise:e=>X(()=>{throw Error(`Promise not yet resolved. Use await on the promise before creating Lazy.`)}),fail:e=>X(()=>{throw e}),evaluated:e=>X(()=>e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Lazy`)throw Error(`Lazy.fromJSON: expected @functype="Lazy", got ${JSON.stringify(t[`@functype`])}`);if(t.error!==void 0){let e=typeof t.error==`object`?a(t.error):Error(t.error);return Jn.fail(e)}return Jn.evaluated(t.value)}},Z=r(X,Jn),Yn={default:e=>t=>e(t),when:(e,t)=>n=>e(n)?t(n):void 0},Q=e=>({[Symbol.toStringTag]:`Obj`,_tag:`Obj`,data:e,get:t=>m(e[t]),set:(t,n)=>Q({...e,[t]:n}),assign:t=>Q({...e,...t}),merge:t=>Q({...e,...t}),when:(t,n)=>(typeof t==`function`?t():t)?Q({...e,...n}):Q(e),omit:(...t)=>{let n={...e};for(let e of t)delete n[e];return Q(n)},pick:(...t)=>{let n={};for(let r of t)r in e&&(n[r]=e[r]);return Q(n)},keys:()=>C(Object.keys(e)),values:()=>C(Object.values(e)),entries:()=>C(Object.entries(e).map(([e,t])=>te([e,t]))),has:t=>t in e,value:()=>e,get isEmpty(){return Object.keys(e).length===0},get size(){return Object.keys(e).length},map:t=>Q(t(e)),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),ap:t=>{let n=t.data;return Q(n(e))},fold:(t,n)=>Object.keys(e).length===0?t():n(e),match:t=>t.Obj(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),count:t=>+!!t(e),find:t=>t(e)?m(e):m(void 0),exists:t=>t(e),forEach:t=>t(e),reduce:t=>e,reduceRight:t=>e,contains:t=>JSON.stringify(e)===JSON.stringify(t),orElse:t=>e,orThrow:t=>e,or:t=>Q(e),orNull:()=>e,orUndefined:()=>e,toOption:()=>m(e),toEither:t=>w(e),toList:()=>C([e]),toTry:()=>x(()=>e),toPromise:()=>Promise.resolve(e),toString:()=>`Obj(${c(e)})`,toValue:()=>({_tag:`Obj`,value:e}),toJSON:()=>({"@functype":`Obj`,_tag:`Obj`,value:e}),pipe:t=>t(e),serialize:()=>s(`Obj`,e),doUnwrap(){return{ok:!0,value:e}}}),Xn=e=>Q(e),Zn={of:e=>Q(e),empty:()=>Q({}),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Obj`)throw Error(`Obj.fromJSON: expected @functype="Obj", got ${JSON.stringify(t[`@functype`])}`);return Q(t.value)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return Zn.fromJSON(t)}},Qn=r(Xn,Zn),$=(e=[])=>{let t=[...e],n=()=>t.length,r=()=>t.length===0,i=e=>t.includes(e),a=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return u(t,e)},o=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return ee(t,e)},c=e=>$([...t,e]),l=()=>{if(r())return[$([]),m(null)];let e=[...t],n=e.pop();return[$(e),m(n)]},te=()=>r()?m(null):m(t[t.length-1]),ne=e=>$(t.map(e)),re=e=>r()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),ie=e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},d=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),$([])),f=()=>C(t),p=()=>[...t],ae=()=>`Stack(${t.join(`, `)})`,oe=(e,n)=>t.reduce(n,e),h=e=>n=>t.reduce(n,e),g=e=>n=>t.reduceRight((e,t)=>n(t,e),e),se=e=>r()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return n()},get isEmpty(){return r()},contains:i,reduce:a,reduceRight:o,push:c,pop:l,peek:te,map:ne,flatMap:re,ap:ie,flatMapAsync:d,toList:f,toArray:p,toString:ae,fold:oe,foldLeft:h,foldRight:g,match:se,toValue:()=>({_tag:`Stack`,value:t}),toJSON:()=>({"@functype":`Stack`,_tag:`Stack`,value:[...t]}),pipe:e=>e([...t]),serialize:()=>s(`Stack`,t)}},$n=(e=[])=>$(e),er={empty:()=>$([]),of:e=>$([e]),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Stack`)throw Error(`Stack.fromJSON: expected @functype="Stack", got ${JSON.stringify(t[`@functype`])}`);return tr(t.value)},fromYAML:e=>{let t=e.split(`
17
+ `)[1]?.split(`: `)[1];if(!t)return tr([]);let n=JSON.parse(t);return tr(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return er.fromJSON(t)}},tr=r($n,er);var nr=/* @__PURE__ */ e({deserialize:()=>cr,deserializeStrict:()=>lr,fromEnvelope:()=>fr,isFunctypeValue:()=>pr,serialize:()=>ur,toEnvelope:()=>dr});let rr;const ir=()=>(rr===void 0&&(rr={Option:e=>e._tag===`Some`?d(e.value):p(),Either:e=>e._tag===`Right`?w(e.value):T(e.value),Try:e=>{if(e._tag===`Success`)return x.success(e.value);let t=e.error!==void 0&&typeof e.error==`object`?a(e.error):Error(typeof e.error==`string`?e.error:``);return x.failure(t)},List:e=>C(e.value),Set:e=>ue(e.value),Map:e=>lt(e.value),Obj:e=>Qn(e.value),Stack:e=>tr(e.value),Tuple:e=>te(e.value),LazyList:e=>me(e.value),Lazy:e=>{if(e.error!==void 0){let t=typeof e.error==`object`?a(e.error):Error(e.error);return Z.fail(t)}return Z.evaluated(e.value)},Task:e=>{if(e._tag===`Ok`)return A.ok(e.value);let t=e.error!==void 0&&typeof e.error==`object`?a(e.error):Error(typeof e.error==`string`?e.error:`Unknown Task error`);return A.err(t)}}),rr),ar=e=>typeof e==`object`&&!!e&&!Array.isArray(e),or=e=>ar(e)&&typeof e[`@functype`]==`string`,sr=e=>{if(Array.isArray(e))return e.map(sr);if(or(e)){let t=e[l],n=ir()[t];if(n===void 0)throw Error(`Serialization.deserialize: unknown @functype marker ${JSON.stringify(t)}`);let r={};for(let t of Object.keys(e))r[t]=sr(e[t]);return n(r)}if(ar(e)){let t={};for(let n of Object.keys(e))t[n]=sr(e[n]);return t}return e},cr=e=>x(()=>sr(JSON.parse(e))),lr=e=>x(()=>{let t=JSON.parse(e);if(!or(t))throw Error(`Serialization.deserializeStrict: input is not a functype envelope (no @functype marker at the top level)`);return sr(t)}),ur=e=>JSON.stringify(e??null),dr=e=>JSON.parse(JSON.stringify(e??null)),fr=e=>x(()=>sr(e)),pr=e=>typeof e==`object`&&!!e&&typeof e.serialize==`function`&&typeof e._tag==`string`;function mr(e){return e._tag}function hr(e){return String(e[Symbol.toStringTag])}function gr(e,t,n,r=0){function i(i,a,o,s){return t.emit({spanId:n,seq:r,op:i,tag:hr(e),inTag:mr(e),...a!==void 0&&{outTag:a},...o!==void 0&&{label:o},...s!==void 0&&{meta:s}}),r+1}return{map(r,a){let o=e.map(r);return gr(o,t,n,i(`map`,mr(o),a))},flatMap(r,a){let o=e.flatMap(r);return gr(o,t,n,i(`flatMap`,mr(o),a))},filter(r,a){let o=e.filter(r),s=mr(o)!==`None`;return gr(o,t,n,i(`filter`,mr(o),a,{kept:s}))},fold(t,n,r){return i(`fold`,void 0,r),e.fold(t,n)},orElse(t,n){return i(`orElse`,void 0,n,{usedDefault:mr(e)===`None`}),e.orElse(t)},unwrap(){return i(`unwrap`,void 0,void 0),e}}}function _r(e){let t=_e({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{Ze as $,Zt as A,ue as At,Vt as B,dn as C,ke as Ct,tn as D,x as Dt,rn as E,ve as Et,Bt as F,ne as Ft,at as G,Ft as H,Kt as I,A as J,O as K,qt as L,Yt as M,m as Mt,Ut as N,ae as Nt,P as O,me as Ot,Rt as P,d as Pt,$e as Q,Gt as R,ln as S,Ee as St,I as T,_e as Tt,M as U,Ht as V,lt as W,et as X,nt as Y,Qe as Z,Cn as _,w as _t,Qn as a,Ve as at,un as b,Te as bt,qn as c,Pe as ct,Bn as d,Ne as dt,Xe as et,An as f,Be as ft,Dn as g,T as gt,Tn as h,Me as ht,tr as i,Re as it,Xt as j,p as jt,Qt as k,_ as kt,Y as l,We as lt,En as m,E as mt,gr as n,He as nt,Yn as o,Fe as ot,On as p,ze as pt,k as q,nr as r,Ue as rt,Z as s,Le as st,_r as t,qe as tt,Vn as u,Ie as ut,Sn as v,Oe as vt,R as w,C as wt,fn as x,we as xt,G as y,De as yt,Wt as z};
@@ -1,2 +1,2 @@
1
- import { Ln as Try, Rn as TypeNames } from "../index-CXXlorKz.js";
1
+ import { Ln as Try, Rn as TypeNames } from "../index-BsYLc74N.js";
2
2
  export { Try, TypeNames };
package/dist/try/index.js CHANGED
@@ -1 +1 @@
1
- import{Dt as e}from"../src-BUA74biP.js";export{e as Try};
1
+ import{Dt as e}from"../src-n-HOLxT0.js";export{e as Try};
@@ -1,2 +1,2 @@
1
- import { Cr as Monad, Sr as Functor, Tr as ContainerOps, _r as reduceRightWiden, br as Applicative, gr as Widen, vr as reduceWiden, wr as CollectionOps, xr as AsyncMonad, yr as Promisable } from "../index-CXXlorKz.js";
1
+ import { Cr as Monad, Sr as Functor, Tr as ContainerOps, _r as reduceRightWiden, br as Applicative, gr as Widen, vr as reduceWiden, wr as CollectionOps, xr as AsyncMonad, yr as Promisable } from "../index-BsYLc74N.js";
2
2
  export { type Applicative, type AsyncMonad, type CollectionOps, type ContainerOps, type Functor, type Monad, type Promisable, type Widen, reduceRightWiden, reduceWiden };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functype",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "type": "module",
5
5
  "description": "A functional programming library for TypeScript, using immutable data structures and type classes",
6
6
  "keywords": [
@@ -34,7 +34,7 @@
34
34
  "devDependencies": {
35
35
  "@eslint/compat": "^2.1.1",
36
36
  "@types/node": "~24.19.0",
37
- "eslint-config-functype": "2.112.0",
37
+ "eslint-config-functype": "2.114.0",
38
38
  "eslint-plugin-functional": "^10.0.1",
39
39
  "fast-check": "^4.10.2",
40
40
  "globals": "^17.12.0",
@@ -1,17 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{Brand as t}from"./branded/index.js";import{mergeObjects as n}from"./util/index.js";import{t as r}from"./Companion-DiOMBHDG.js";import{a as i,d as a,f as o,i as s,p as c,t as l}from"./serialization-CpbxaV0t.js";import{n as u,t as ee}from"./typeclass-C61yDVYd.js";import{Tuple as te}from"./tuple/index.js";const ne=e=>{let t=Error(e);return t.name=`ParseError`,t},d=e=>({[Symbol.toStringTag]:`Option`,_tag:`Some`,value:e,isEmpty:!1,isSome(){return!0},isNone(){return!1},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>d(e),orNull:()=>e,orUndefined:()=>e,map:t=>d(t(e)),ap:t=>t._tag===`Some`&&t.value?d(t.value(e)):f,filter(t){return t(e)?d(e):f},count:t=>+!!t(e),find:t=>t(e)?d(e):f,exists:t=>t(e),forEach:t=>t(e),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),match:t=>t.Some(e),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),reduce:t=>e,reduceRight:t=>e,foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),contains:t=>t===e,toList:()=>C([e]),toArray:()=>[e],size:1,toOption:()=>d(e),toEither:t=>w(e),toTry:()=>x(()=>e),toPromise:()=>Promise.resolve(e),toString:()=>`Some(${c(e)})`,toValue:()=>({_tag:`Some`,value:e}),toJSON:()=>({"@functype":`Option`,_tag:`Some`,value:e}),pipe:t=>t(e),serialize:()=>s(`Option`,`Some`,e),doUnwrap(){return{ok:!0,value:e}}}),f={[Symbol.toStringTag]:`Option`,_tag:`None`,value:void 0,isEmpty:!0,isSome(){return!1},isNone(){return!0},orElse:e=>e,orThrow(e){throw e===void 0?/* @__PURE__ */ Error(`Cannot extract value from None`):typeof e==`function`?e():e},expect(e){return e()},or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:e=>f,ap:e=>f,filter(e){return f},count:e=>0,find:e=>f,exists:e=>!1,forEach:e=>{},flatMap:e=>f,flatMapAsync:e=>Promise.resolve(f),reduce:e=>{throw Error(`Cannot reduce an empty Option`)},reduceRight:e=>{throw Error(`Cannot reduceRight an empty Option`)},fold:(e,t)=>e(),foldAsync:async(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,contains:()=>!1,toList:()=>C([]),toArray:()=>[],size:0,toOption:()=>f,toEither:e=>T(typeof e==`function`?e():e),toTry:()=>x(()=>{throw Error(`None`)}),toPromise:()=>Promise.reject(/* @__PURE__ */ Error(`Cannot convert None to Promise`)),toString:()=>`None`,toValue:()=>({_tag:`None`,value:void 0}),toJSON:()=>({"@functype":`Option`,_tag:`None`,value:null}),pipe:e=>e(void 0),serialize:()=>s(`Option`,`None`,null),doUnwrap(){return{ok:!1,empty:!0}}},p=()=>f,re=e=>e==null?p():d(e),ie={from:e=>m(e),none:()=>p(),isSome:e=>e.isSome(),isNone:e=>e.isNone(),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Option`)throw Error(`Option.fromJSON: expected @functype="Option", got ${JSON.stringify(t[`@functype`])}`);return t._tag===`Some`?d(t.value):p()},fromYAML:e=>{let t=e.split(`
2
- `),n=t[0]?.split(`: `)[1],r=t[1]?.split(`: `)[1];if(!n||!r)return p();let i=r===`null`?null:JSON.parse(r);return n===`Some`?d(i):p()},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ie.fromJSON(t)},sequence:e=>e.reduce((e,t)=>e.isEmpty||t.isEmpty?p():d([...e.value,t.value]),d([])),traverse:(e,t)=>e.reduce((e,n,r)=>e.flatMap(e=>t(n,r).map(t=>[...e,t])),d([]))},m=r(re,ie),h=globalThis.Set,g=e=>{let t=new h(e),n={[Symbol.toStringTag]:`FunctypeSet`,_tag:`Set`,[Symbol.iterator]:()=>t[Symbol.iterator](),add:e=>g([...t,e]),remove:e=>{let n=new h(t);return n.delete(e),g(n)},contains:e=>t.has(e),has:e=>t.has(e),map:e=>g(Array.from(t).map(e)),ap:e=>{let n=new h;for(let r of t)for(let t of e)n.add(t(r));return g(n)},flatMap:e=>{let n=new h;for(let r of t)for(let t of e(r))n.add(t);return g(n)},flatMapAsync:async e=>{let n=new h;for(let r of t){let t=await e(r);for(let e of t)n.add(e)}return g(n)},fold:(e,n)=>{let r=e;for(let e of t)r=n(r,e);return r},foldLeft:e=>n=>{let r=e;for(let e of t)r=n(r,e);return r},foldRight:e=>n=>Array.from(t).reduceRight((e,t)=>n(t,e),e),get size(){return t.size},get isEmpty(){return t.size===0},reduce:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduce empty Set`);return u(n,e)},reduceRight:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduceRight empty Set`);return ee(n,e)},count:e=>{let n=0;for(let r of t)e(r)&&n++;return n},find:e=>{for(let n of t)if(e(n))return m(n);return m(null)},exists:e=>{for(let n of t)if(e(n))return!0;return!1},forEach:e=>{t.forEach(e)},filter:e=>{let n=new h;for(let r of t)e(r)&&n.add(r);return g(n)},filterNot:e=>{let n=new h;for(let r of t)e(r)||n.add(r);return g(n)},drop:e=>g(Array.from(t).slice(e)),dropRight:e=>g(Array.from(t).slice(0,-e)),dropWhile:e=>{let n=Array.from(t),r=n.findIndex(t=>!e(t));return g(r===-1?[]:n.slice(r))},flatten:()=>{let e=new h;for(let n of t)if(Array.isArray(n))for(let t of n)e.add(t);else if(n&&typeof n==`object`&&Symbol.iterator in n)for(let t of n)e.add(t);else e.add(n);return g(e)},get head(){return Array.from(t)[0]},get headOption(){let e=Array.from(t)[0];return m(e)},take:e=>g(Array.from(t).slice(0,Math.max(0,e))),takeWhile:e=>{let n=Array.from(t),r=[];for(let t of n){if(!e(t))break;r.push(t)}return g(r)},takeRight:e=>{let n=Array.from(t);return g(e<=0?[]:n.slice(-e))},get last(){let e=Array.from(t);return e[e.length-1]},get lastOption(){let e=Array.from(t);return m(e[e.length-1])},get tail(){return g(Array.from(t).slice(1))},get init(){let e=Array.from(t);return g(e.length===0?[]:e.slice(0,-1))},toList:()=>C(Array.from(t)),toSet:()=>n,toArray:()=>Array.from(t),toString:()=>`Set(${Array.from(t).toString()})`,toValue:()=>({_tag:`Set`,value:Array.from(t)}),toJSON:()=>({"@functype":`Set`,_tag:`Set`,value:Array.from(t)}),pipe:e=>e(Array.from(t)),serialize:()=>s(`Set`,Array.from(t))};return n},ae=e=>g(e),oe=g([]),se={empty:()=>oe,of:(...e)=>g(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Set`)throw Error(`Set.fromJSON: expected @functype="Set", got ${JSON.stringify(t[`@functype`])}`);return ce(t.value)},fromYAML:e=>{let t=e.split(`
3
- `)[1]?.split(`: `)[1];if(!t)return ce([]);let n=JSON.parse(t);return ce(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return se.fromJSON(t)}},ce=r(ae,se),le=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)},modify(e){let[n,r]=e(t);return t=n,r}}},_=r(le,{of:e=>le(e)}),ue=(e=0)=>{let t=_(e),n=e;return{get:()=>t.get(),set:e=>t.set(e),increment:()=>t.updateAndGet(e=>e+1),decrement:()=>t.updateAndGet(e=>e-1),reset:()=>t.set(n),compareAndSet:(e,n)=>t.compareAndSet(e,n)}},de=()=>{let e=_([]);return{add:t=>e.update(e=>[...e,t]),addAll:t=>e.update(e=>[...e,...t]),build:()=>e.get(),clear:()=>e.set([]),size:()=>e.get().length}},v=e=>{let t={[Symbol.toStringTag]:`LazyList`,_tag:`LazyList`,[Symbol.iterator]:()=>e[Symbol.iterator](),map:t=>v((function*(){for(let n of e)yield t(n)})()),flatMap:t=>v((function*(){for(let n of e)yield*t(n)})()),filter:t=>v((function*(){for(let n of e)t(n)&&(yield n)})()),take:t=>v((function*(){let n=ue(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>v((function*(){let n=ue(0);for(let r of e)n.get()>=t&&(yield r),n.increment()})()),takeWhile:t=>v((function*(){for(let n of e){if(!t(n))break;yield n}})()),dropWhile:t=>v((function*(){let n=_(!0);for(let r of e)n.get()&&t(r)||(n.set(!1),yield r)})()),concat:t=>v((function*(){yield*e,yield*t})()),zip:t=>v((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=_(n);for(let n of e)r.set(t(r.get(),n));return r.get()},find:t=>{for(let n of e)if(t(n))return m(n);return m.none()},some:t=>{for(let n of e)if(t(n))return!0;return!1},every:t=>{for(let n of e)if(!t(n))return!1;return!0},count:()=>{let t=ue(0);for(let n of e)t.increment();return t.get()},get head(){let t=e[Symbol.iterator]().next();return t.done?void 0:t.value},get headOption(){let t=e[Symbol.iterator]().next();return t.done?m.none():m(t.value)},get last(){let t;for(let n of e)t=n;return t},get lastOption(){let t=_(void 0),n=_(!1);for(let r of e)t.set(r),n.set(!0);return n.get()?m(t.get()):m.none()},get tail(){return v((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 v(t.length===0?[]:t.slice(0,-1))},takeRight:t=>{let n=Array.from(e);return v(t<=0?[]:n.slice(-t))},reverse:()=>v(Array.from(e).reverse()),distinct:()=>v((function*(){let t=new globalThis.Set;for(let n of e)t.has(n)||(t.add(n),yield n)})()),zipWithIndex:()=>v((function*(){let t=ue(0);for(let n of e)yield[n,t.get()],t.increment()})()),fold:(t,n)=>{let r=t;for(let t of e)r=n(r,t);return r},foldLeft:t=>n=>{let r=_(t);for(let t of e)r.set(n(r.get(),t));return r.get()},foldRight:t=>n=>Array.from(e).reduceRight((e,t)=>n(t,e),t),pipe:e=>e(t),serialize:()=>s(`LazyList`,Array.from(e)),toJSON:()=>({"@functype":`LazyList`,_tag:`LazyList`,value:Array.from(e)}),toString:()=>{let t=[],n=ue(0),r=_(!1);for(let i of e)if(n.get()<10)t.push(i),n.increment();else{r.set(!0);break}let i=t.map(e=>String(e)).join(`, `);return r.get()?`LazyList(${i}, ...)`:`LazyList(${i})`}};return t},fe=r(e=>v(e),{empty:()=>v([]),of:e=>v([e]),from:(...e)=>v(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`LazyList`)throw Error(`LazyList.fromJSON: expected @functype="LazyList", got ${JSON.stringify(t[`@functype`])}`);return v(t.value)},iterate:(e,t)=>v((function*(){let n=_(e);for(;;)yield n.get(),n.set(t(n.get()))})()),generate:e=>v((function*(){for(;;)yield e()})()),range:(e,t,n=1)=>v((function*(){if(n===0)throw Error(`Step cannot be zero`);let r=_(e);if(n>0)for(;r.get()<t;)yield r.get(),r.set(r.get()+n);else for(;r.get()>t;)yield r.get(),r.set(r.get()+n)})()),repeat:(e,t)=>v((function*(){if(t===void 0)for(;;)yield e;else{let n=ue(0);for(;n.get()<t;)yield e,n.increment()}})()),cycle:e=>v((function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t})())}),y=e=>({[Symbol.toStringTag]:`Try`,_tag:`Success`,error:void 0,isSuccess(){return!0},isFailure(){return!1},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>y(e),orNull:()=>e,orUndefined:()=>e,toEither:t=>w(e),map:t=>x(()=>t(e)),ap:t=>t.map(t=>t(e)),flatMap:t=>t(e),flatMapAsync:async t=>t(e),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),match:t=>t.Success(e),recover:t=>y(e),recoverWith:t=>y(e),filterOrElse:(t,n)=>{try{return t(e)?y(e):b(n(e))}catch(e){return b(e instanceof Error?e:Error(String(e)))}},foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),toString:()=>`Success(${c(e)})`,toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Success`,value:e}),toJSON:()=>({"@functype":`Try`,_tag:`Success`,value:e}),toOption:()=>d(e),toList:()=>C([e]),toArray:()=>[e],toTry:()=>y(e),pipe:t=>t(e),serialize:()=>s(`Try`,`Success`,e),contains:t=>e===t,exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),b=e=>({[Symbol.toStringTag]:`Try`,_tag:`Failure`,error:e,isSuccess(){return!1},isFailure(){return!0},orElse:e=>e,orThrow:t=>{throw t===void 0?e:typeof t==`function`?t(e):t},expect:t=>t(e),or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:t=>T(typeof t==`function`?t(e):t),map:t=>b(e),ap:t=>b(e),flatMap:t=>b(e),flatMapAsync:t=>Promise.resolve(b(e)),fold:(t,n)=>t(e),foldAsync:async(t,n)=>t(e),match:t=>t.Failure(e),recover:t=>x(()=>t(e)),recoverWith:t=>{try{return t(e)}catch(e){return b(e instanceof Error?e:Error(String(e)))}},filterOrElse:(t,n)=>b(e),foldLeft:e=>t=>e,foldRight:e=>t=>e,toString:()=>`Failure(${c(e)}))`,toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Failure`,value:e}),toJSON:()=>({"@functype":`Try`,_tag:`Failure`,error:o(e)}),toOption:()=>m(null),toList:()=>C([]),toArray:()=>[],toTry:()=>b(e),pipe:t=>{throw e},serialize:()=>i(`Try`,`Failure`,{error:o(e)}),contains:e=>!1,exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),pe=e=>{try{return y(e())}catch(e){return b(e instanceof Error?e:Error(String(e)))}},me={success:e=>y(e),failure:e=>b(typeof e==`string`?Error(e):e),fromPromise:e=>e.then(e=>y(e)).catch(e=>b(e instanceof Error?e:Error(String(e)))),async:e=>{try{return e().then(e=>y(e)).catch(e=>b(e instanceof Error?e:Error(String(e))))}catch(e){return Promise.resolve(b(e instanceof Error?e:Error(String(e))))}},isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Try`)throw Error(`Try.fromJSON: expected @functype="Try", got ${JSON.stringify(t[`@functype`])}`);if(t._tag===`Success`)return y(t.value);if(t.error!==void 0&&typeof t.error==`object`)return b(a(t.error));let n=Error(typeof t.error==`string`?t.error:``);return t.stack&&(n.stack=t.stack),b(n)},fromYAML:e=>{let t=e.split(`
4
- `),n=t[0]?.split(`: `)[1];if(!n)return b(/* @__PURE__ */ Error(`Invalid YAML format for Try`));if(n===`Success`){let e=t[1]?.split(`: `)[1];if(!e)return b(/* @__PURE__ */ Error(`Invalid YAML format for Try Success`));let n=JSON.parse(e);return y(n)}{let e=t[1]?.split(`: `)[1];if(!e)return b(/* @__PURE__ */ 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),b(i)}},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return me.fromJSON(t)},sequence:e=>x(()=>e.map(e=>e.orThrow())),traverse:(e,t)=>x(()=>e.map((e,n)=>t(e,n).orThrow()))},x=r(pe,me);function he({_tag:e,impl:t}){return{...t,_tag:e}}function ge(e,t){return!e||typeof e!=`object`||!(`_tag`in e)?!1:!t||e._tag===t}const S=e=>{let t=Array.from(e??[]),n={[Symbol.toStringTag]:`List`,_tag:`List`,[Symbol.iterator]:()=>t[Symbol.iterator](),get size(){return t.length},get length(){return t.length},map:e=>S(t.map(e)),ap:e=>S(t.flatMap(t=>Array.from(e).map(e=>e(t)))),flatMap:e=>S(t.flatMap(t=>Array.from(e(t)))),flatMapAsync:async e=>{let n=await Promise.all(t.map(async t=>await e(t)));return S(n.flatMap(e=>Array.from(e)))},forEach:e=>t.forEach(e),contains:e=>t.includes(e),count:e=>t.filter(e).length,exists:e=>t.some(e),filter:e=>S(t.filter(e)),filterNot:e=>S(t.filter(t=>!e(t))),filterType:e=>S(t.filter(t=>ge(t,e))),find:(e,n)=>{let r=t.find(t=>e(t)&&(!n||ge(t,n)));return m(r)},get head(){return t[0]},get headOption(){return t.length>0?m(t[0]):p()},get isEmpty(){return t.length===0},toArray:()=>[...t],reduce:e=>u(t,e),reduceRight:e=>ee(t,e),fold:(e,n)=>t.reduce(n,e),foldLeft:e=>n=>t.reduce(n,e),foldRight:e=>n=>t.reduceRight((e,t)=>n(t,e),e),match:e=>t.length===0?e.Empty():e.NonEmpty([...t]),remove:e=>S(t.filter(t=>t!==e)),removeAt:e=>e<0||e>=t.length?n:S([...t.slice(0,e),...t.slice(e+1)]),add:e=>S([...t,e]),get:e=>m(t[e]),concat:e=>S([...t,...e.toArray()]),take:e=>S(t.slice(0,Math.max(0,e))),takeWhile:e=>{let n=[];for(let r of t){if(!e(r))break;n.push(r)}return S(n)},takeRight:e=>S(e<=0?[]:t.slice(-e)),get last(){return t[t.length-1]},get lastOption(){return t.length>0?m(t[t.length-1]):p()},get tail(){return S(t.slice(1))},get init(){return S(t.length===0?[]:t.slice(0,-1))},reverse:()=>S([...t].reverse()),indexOf:e=>t.indexOf(e),prepend:e=>S([e,...t]),distinct:()=>{let e=new globalThis.Set,n=[];for(let r of t)e.has(r)||(e.add(r),n.push(r));return S(n)},sorted:e=>S([...t].sort(e)),sortBy:(e,n)=>S([...t].sort((t,r)=>{let i=e(t),a=e(r);return n?n(i,a):i<a?-1:+(i>a)})),zip:e=>{let n=e.toArray(),r=Math.min(t.length,n.length),i=[];for(let e=0;e<r;e++)i.push([t[e],n[e]]);return S(i)},zipWithIndex:()=>S(t.map((e,t)=>[e,t])),groupBy:e=>{let n=new globalThis.Map;for(let r of t){let t=e(r),i=n.get(t)??[];i.push(r),n.set(t,i)}let r=new globalThis.Map;for(let[e,t]of n)r.set(e,S(t));return r},partition:e=>{let n=[],r=[];for(let i of t)e(i)?n.push(i):r.push(i);return[S(n),S(r)]},span:e=>{let n=t.findIndex(t=>!e(t));return n===-1?[S([...t]),S([])]:[S(t.slice(0,n)),S(t.slice(n))]},slice:(e,n)=>S(t.slice(e,n)),drop:e=>S(t.slice(e)),dropRight:e=>S(t.slice(0,-e)),dropWhile:e=>S(t.slice(t.findIndex(t=>!e(t)))),flatten:()=>S(t.flatMap(e=>Array.isArray(e)?e:[e])),toList:()=>n,toSet:()=>ce(t),toOption:()=>t.length>0?m(t[0]):p(),toEither:e=>t.length>0?w(t[0]):T(e),toTry:()=>t.length>0?x(()=>t[0]):x(()=>{throw Error(`Empty list`)}),toString:()=>`List(${c(t)})`,toValue:()=>({_tag:`List`,value:t}),toJSON:()=>({"@functype":`List`,_tag:`List`,value:[...t]}),pipe:e=>e([...t]),serialize:()=>s(`List`,t),doUnwrap(){return t.length===0?{ok:!1,empty:!0}:{ok:!0,value:t[0]}}};return n},_e=e=>S(e),ve=S([]),ye={empty:()=>ve,of:(...e)=>S(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`List`)throw Error(`List.fromJSON: expected @functype="List", got ${JSON.stringify(t[`@functype`])}`);return C(t.value)},fromYAML:e=>{let t=e.split(`
5
- `)[1]?.split(`: `)[1];if(!t)return C([]);let n=JSON.parse(t);return C(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ye.fromJSON(t)}},C=r(_e,ye),be=e=>({[Symbol.toStringTag]:`Either`,_tag:`Right`,value:e,isLeft(){return!1},isRight(){return!0},orElse:t=>e,orThrow:()=>e,expect:t=>e,or:t=>w(e),orNull:()=>e,orUndefined:()=>e,map:t=>w(t(e)),ap:t=>t._tag===`Right`?w(t.value(e)):T(t.value),mapAsync:t=>t(e).then(e=>w(e)).catch(e=>Promise.resolve(T(e))),merge:t=>t.isLeft()?T(t.value):w([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(e=>T(e)),toOption:()=>d(e),toList:()=>C([e]),toEither:t=>w(e),toTry:()=>x(()=>e),toJSON(){return{"@functype":`Either`,_tag:`Right`,value:e}},toString:()=>`Right(${c(e)})`,*[Symbol.iterator](){yield e},*yield(){yield e},traverse:t=>{let n=t(e);return n.isLeft()?T(n.value):w([n.value])},tap:t=>(t(e),w(e)),tapLeft:t=>w(e),mapLeft:t=>w(e),filterOrElse:(t,n)=>t(e)?w(e):T(n(e)),bimap:(t,n)=>w(n(e)),fold:(t,n)=>n(e),foldAsync:async(t,n)=>n(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),match:t=>t.Right(e),swap:()=>T(e),toPromise:()=>Promise.resolve(e),toValue:()=>({_tag:`Right`,value:e}),pipeEither:(t,n)=>n(e),pipe:t=>t(e),serialize:()=>s(`Either`,`Right`,e),contains:t=>e===t,exists:t=>t(e),forEach:t=>t(e),doUnwrap(){return{ok:!0,value:e}}}),xe=e=>({[Symbol.toStringTag]:`Either`,_tag:`Left`,value:e,isLeft(){return!0},isRight(){return!1},orElse:e=>e,orThrow:t=>{throw t===void 0?e:typeof t==`function`?t(e):t},expect:t=>t(e),or:e=>e,orNull:()=>null,orUndefined:()=>void 0,map:t=>T(e),ap:t=>T(e),mapAsync:t=>Promise.resolve(T(e)),merge:t=>T(e),flatMap:t=>T(e),flatMapAsync:t=>Promise.resolve(T(e)),toOption:()=>p(),toList:()=>C(),toEither:e=>T(e),toTry:()=>x(()=>{throw Error(String(e))}),toJSON(){return{"@functype":`Either`,_tag:`Left`,value:e}},toString:()=>`Left(${c(e)})`,*[Symbol.iterator](){},*yield(){},traverse:t=>T(e),tap:t=>T(e),tapLeft:t=>(t(e),T(e)),mapLeft:t=>T(t(e)),filterOrElse:(t,n)=>T(e),bimap:(t,n)=>T(t(e)),fold:(t,n)=>t(e),foldAsync:async(t,n)=>t(e),foldLeft:e=>t=>e,foldRight:e=>t=>e,match:t=>t.Left(e),swap:()=>w(e),toPromise:()=>Promise.reject(e),toValue:()=>({_tag:`Left`,value:e}),pipeEither:(t,n)=>t(e),pipe:t=>t(e),serialize:()=>s(`Either`,`Left`,e),contains:e=>!1,exists:e=>!1,forEach:e=>{},doUnwrap(){return{ok:!1,empty:!1,error:e}}}),w=e=>be(e),T=e=>xe(e),Se=e=>e.isRight(),Ce=e=>e.isLeft(),we=(e,t)=>{try{return w(e())}catch(e){return T(t(e))}},Te=e=>be(e);console.assert(Te);const Ee=e=>xe(e);console.assert(Ee);const De=async(e,t)=>{try{let t=await e();return w(t)}catch(e){return T(t(e))}},Oe=(e,t)=>t?w(e):T(e),ke={left:e=>T(e),right:e=>w(e),void:()=>w(void 0),isRight:e=>e.isRight(),isLeft:e=>e.isLeft(),sequence:e=>e.reduce((e,t)=>e.isLeft()?e:t.isLeft()?T(t.value):e.map(e=>[...e,t.value]),w([])),traverse:(e,t)=>ke.sequence(e.map(t)),fromNullable:(e,t)=>e==null?T(t):w(e),fromPredicate:(e,t,n)=>t(e)?w(e):T(n),ap:(e,t)=>e.flatMap(e=>t.map(e)),fromPromise:async(e,t)=>{try{let t=await e;return w(t)}catch(e){return T(t(e))}},fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Either`)throw Error(`Either.fromJSON: expected @functype="Either", got ${JSON.stringify(t[`@functype`])}`);return t._tag===`Right`?w(t.value):T(t.value)},fromYAML:e=>{let t=e.split(`
6
- `),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`?w(i):T(i)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ke.fromJSON(t)}},Ae=r(Oe,ke);function E(e,n){return{brand:e,validate:n,of:r=>n(r)?m(t(e,r)):m.none(),from:r=>n(r)?w(t(e,r)):T(`Invalid ${e}: validation failed`),unsafeOf:r=>{if(!n(r))throw Error(`Invalid ${e}: validation failed`);return t(e,r)},is:e=>{try{return n(e)}catch{return!1}},unwrap:e=>e,refine:(e,t)=>E(e,e=>n(e)&&t(e))}}const je=E(`PositiveNumber`,e=>e>0),Me=E(`NonNegativeNumber`,e=>e>=0),Ne=E(`IntegerNumber`,e=>Number.isInteger(e)),Pe=je.refine(`PositiveInteger`,e=>Number.isInteger(e)),Fe=E(`NonEmptyString`,e=>e.length>0),Ie=E(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),Le=E(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),Re=E(`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)),ze=E(`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 E(e,e=>e>=t&&e<=n)}function Ve(e,t,n){return E(e,e=>e.length>=t&&e.length<=n)}function He(e,t){return E(e,e=>t.test(e))}const Ue=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Ue({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Ue({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=()=>Ue({resolved:!1}),Ge=r(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}}),Ke=(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 Ke(r,n)}):!1,D=e=>{let t=(e,t)=>typeof e==`function`?e(t):e,n=()=>{for(let{pattern:n,result:r}of e.patterns)if(Ke(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:Ke(e.value,n)?D({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]}):D({...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 D({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 D({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(Ke(e.value,r))return D({value:e.value,resolved:!0,result:t(i,e.value),patterns:[]});return D({...e,patterns:[...e.patterns,...n.map(e=>({pattern:e,result:i}))]})},default:n=>e.resolved?e.result:t(n,e.value),exhaustive:()=>{if(e.resolved)return e.result;let t=n();if(!t.matched)throw Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(e.value)}`);return t.result},orThrow:t=>{if(e.resolved)return e.result;let r=n();if(!r.matched)throw Error(t??`No matching pattern for value: ${JSON.stringify(e.value)}`);return r.result},toOption:()=>{if(e.resolved)return m(e.result);let t=n();return t.matched?m(t.result):m.none()}};return r},qe=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 Ke(e,n)?D({...i,resolved:!0,result:t(r,e)}):D(i)},caseValue:(t,n)=>{if(e===t){let t=typeof n==`function`?n():n;return D({value:e,resolved:!0,result:t,patterns:[]})}return D({value:e,resolved:!1,patterns:[]})},caseValues:(t,n)=>{if(t.includes(e)){let t=typeof n==`function`?n():n;return D({value:e,resolved:!0,result:t,patterns:[]})}return D({value:e,resolved:!1,patterns:[]})},when:(n,r)=>{let i={value:e,resolved:!1,patterns:[{pattern:n,result:r}]};return n(e)?D({...i,resolved:!0,result:t(r,e)}):D(i)},caseAny:(n,r)=>{for(let i of n)if(Ke(e,i))return D({value:e,resolved:!0,result:t(r,e),patterns:n.map(e=>({pattern:e,result:r}))});return D({value:e,resolved:!1,patterns:n.map(e=>({pattern:e,result:r}))})}}},Je=r(e=>qe(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(Ke(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(Ke(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 Ye(e,t){return{...he({_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 Xe=`Throwable`;var Ze=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=Xe,this.name=t?.taskInfo?.name??`Throwable`,Object.defineProperties(this,{_tag:{value:Xe,writable:!1,configurable:!1},data:{value:t?.data,writable:!1,configurable:!1},taskInfo:{value:t?.taskInfo,writable:!1,configurable:!1},name:{value:t?.taskInfo?.name??`Throwable`,writable:!1,configurable:!1}}),t?.cause&&Object.defineProperty(this,"cause",{value:t.cause,writable:!1,configurable:!1}),t?.stack?this.stack=t.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static apply(t,n,r){if(t instanceof Error){let i=new e(t.message,{data:n,cause:t.cause??void 0,stack:t.stack??void 0,taskInfo:r});for(let e of Object.keys(t))if(!(e in i)){let n=i;n[e]=t[e]}return i}if(t&&typeof t==`object`){let i=t,a=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))}`,o=new e(a,{data:n??i,taskInfo:r});for(let e of Object.keys(i))if(!(e in o)){let t=o;t[e]=i[e]}return o}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,o=Number.isNaN(a)?`Number error: NaN`:Number.isFinite(a)?`Number error: ${a}`:`Number error: ${a>0?`Infinity`:`-Infinity`}`;return new e(o,{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})}let o=typeof t==`string`?t:`${i.charAt(0).toUpperCase()+i.slice(1)} error: ${a}`;return new e(o,{data:n??{errorType:i,errorValue:a,originalError:t},taskInfo:r})}};function Qe(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const $e=(e,t)=>{if(e.isRight())return k(e.orThrow(),t);if(e.isLeft())return O(e.fold(e=>e,()=>/* @__PURE__ */ Error(`Unexpected right value`)),void 0,t);throw Error(`Unrecognized task outcome`)},O=(e,t,n)=>{let r={name:n?.name??`Task`,description:n?.description??``},a=Ze.apply(e,t,r),s={...Ye(`Err`,{error:a,meta:r}),[Symbol.toStringTag]:`TaskOutcome`,_tag:`Err`,_meta:r,value:void 0,error:a,isSuccess(){return!1},isFailure(){return!0},isOk(){return!1},isErr(){return!0},map:e=>O(a,t,n),flatMap:e=>O(a,t,n),ap:e=>O(a,t,n),mapAsync:e=>Promise.resolve(O(a,t,n)),flatMapAsync:e=>Promise.resolve(O(a,t,n)),mapError:e=>O(e(a),t,n),recover:e=>k(e,n),recoverWith:e=>k(e(a),n),orThrow:e=>{throw e??a},orElse:e=>e,or:e=>e,orNull:()=>null,orUndefined:()=>void 0,toEither:()=>T(a),toTry:()=>x(()=>{throw a}),toOption:()=>p(),toList:()=>C([]),fold:(e,t)=>e(a),match:e=>e.Err(a),foldLeft:e=>t=>e,foldRight:e=>t=>e,size:0,isEmpty:!0,contains:e=>!1,reduce:e=>{throw Error(`Cannot reduce empty Err`)},reduceRight:e=>{throw Error(`Cannot reduceRight empty Err`)},count:e=>0,find:e=>p(),exists:e=>!1,forEach:e=>{},toPromise:()=>Promise.reject(a),doUnwrap(){return{ok:!1,empty:!1,error:a}},toJSON:()=>({"@functype":`Task`,_tag:`Err`,error:o(a)}),serialize:()=>i(`Task`,`Err`,{error:o(a)}),pipe:e=>e(s)};return s},k=(e,t)=>{let n={name:t?.name??`Task`,description:t?.description??``},r={...Ye(`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=>k(n(e),t),flatMap:n=>{let r=n(e);return r&&typeof r==`object`&&`isLeft`in r&&`isRight`in r?$e(r,t):r},ap:n=>n.isOk()?k(n.value(e),t):O(n.error,void 0,t),mapAsync:async n=>k(await n(e),t),flatMapAsync:async t=>await t(e),mapError:n=>k(e,t),recover:n=>k(e,t),recoverWith:n=>k(e,t),orThrow:t=>e,orElse:t=>e,or:n=>k(e,t),orNull:()=>e,orUndefined:()=>e,toEither:()=>w(e),toTry:()=>x(()=>e),toOption:()=>d(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),find:t=>t(e)?d(e):p(),exists:t=>t(e),forEach:t=>t(e),toPromise:()=>Promise.resolve(e),doUnwrap(){return{ok:!0,value:e}},toJSON:()=>({"@functype":`Task`,_tag:`Ok`,value:e}),serialize:()=>s(`Task`,`Ok`,e),pipe:e=>e(r)};return r},et=()=>{let e=new AbortController,t=de();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)}}))}}},tt=e=>{let t=e?.name??`Task`,n=e?.description??``,r={Async:(e,r=e=>e,i=()=>{},a)=>new Promise(o=>{(async()=>{let s=_(!1),c=_(null),l=_(()=>{});if(a){if(a.isCancelled){try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}o(O(/* @__PURE__ */ Error(`Task was cancelled before execution started`),void 0,{name:t,description:n}));return}a.onCancel(()=>{s.set(!0),c.set(/* @__PURE__ */ Error(`Task was cancelled during execution`))}),l.set(()=>{})}try{let r=await e();try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(O(c.get(),void 0,{name:t,description:n})):o(O(/* @__PURE__ */ 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(k(r,{name:t,description:n}))}else o(k(r,{name:t,description:n}))}catch(e){try{await i()}catch(e){o(O(e,void 0,{name:t,description:n}));return}if(s.get()){c.get()?o(O(c.get(),void 0,{name:t,description:n})):o(O(/* @__PURE__ */ Error(`Task was cancelled during execution`),void 0,{name:t,description:n}));return}try{if(e instanceof Error&&Qe(e)){let i=/* @__PURE__ */ Error(`${t}: ${e.message}`),a=Ze.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(O(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(O(i,void 0,{name:t,description:n}))}else o(O(i,void 0,{name:t,description:n}))}}catch(e){o(O(e,void 0,{name:t,description:n}))}}finally{l.get()()}})().catch(e=>o(O(e,void 0,{name:t,description:n})))}),Sync:(e,r=e=>e,i=()=>{})=>{try{return k(e(),{name:t,description:n})}catch(e){return O(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{...Ye(`Task`,r),_type:`Task`}},nt={success:(e,t)=>k(e,t),fail:(e,t,n)=>O(e,t,n),ok:(e,t)=>k(e,t),err:(e,t,n)=>O(e,t,n),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Task`)throw Error(`Task.fromJSON: expected @functype="Task", got ${JSON.stringify(t[`@functype`])}`);if(t._tag===`Ok`)return k(t.value);if(t._tag===`Err`){let e=t.error!==void 0&&typeof t.error==`object`?a(t.error):Error(typeof t.error==`string`?t.error:`Unknown Task error`);return O(e)}throw Error(`Task.fromJSON: unrecognized _tag ${JSON.stringify(t._tag)}`)},fromEither:(e,t)=>$e(e,t),fromTry:(e,t)=>e.isSuccess()?k(e.orThrow(),t):O(e.fold(e=>e,()=>/* @__PURE__ */ Error(`Unexpected success`)),void 0,t),getErrorChain:e=>{if(!e)return[];let t=de();t.add(e);let n=_(e);for(;n.get()&&n.get().cause;){let{cause:e}=n.get();if(e)t.add(e),n.set(e);else break;if(t.size()>100)break}return t.build()},formatErrorChain:(e,t)=>{let n=nt.getErrorChain(e),r=t?.separator??`
7
- `;return n.map((e,n)=>{if(!e)return`${n>0?`↳ `:``}Unknown error`;let{taskInfo:r}=e,i=t?.includeTasks&&r?.name?`[${r.name}] `:``,a=e.message??`No message`,o=_(`${n>0?`↳ `:``}${i}${a}`);return t?.includeStackTrace&&e.stack&&o.set(`${o.get()}\n${e.stack.split(`
8
- `).slice(1).join(`
9
- `)}`),o.get()}).join(r)},fromPromise:(e,t)=>(...n)=>A(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)=>{let r={name:n?.name??`TaskRace`,description:n?.description??`Race between multiple tasks`};return A(r).Async(async()=>{let n=de();e.forEach(e=>n.add(e));let r=_(void 0);if(typeof t==`number`&&t>0){let e=new Promise((e,n)=>{r.set(setTimeout(()=>{n(/* @__PURE__ */ 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)=>A(n).Async(()=>new Promise((n,r)=>{try{e(...t,(e,t)=>{e?r(e):n(t)})}catch(e){r(e)}}),e=>e)},createCancellationTokenSource:et,cancellable:(e,t)=>{let n=et();return{task:A(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=et(),i=_(0),a=e=>{i.set(Math.max(0,Math.min(100,e))),t(i.get())};return{task:A(n).Async(()=>e(a,r.token),e=>e,()=>{},r.token),cancel:()=>r.cancel(),currentProgress:()=>i.get()}}},A=r(tt,nt),rt=Map,j=e=>{let t={values:new rt(e)},n=()=>Array.from(t.values.entries()).map(([e,t])=>te([e,t])),r=e=>j(new rt(t.values).set(e.toArray()[0],e.toArray()[1]).entries()),i=e=>{let n=new rt(t.values);return n.delete(e)?j(n.entries()):j(t.values.entries())},a=e=>{if(!e||typeof e.toArray!=`function`)return!1;let n=e.toArray();return t.values.get(n[0])===n[1]},o=()=>t.values.size,c=e=>j(Array.from(t.values.entries()).map(([t,n])=>[t,e(n)])),l=e=>{let n=j(t.values.entries()).toList();return j(n.flatMap(e).toArray())},u=e=>{let n=[];for(let[r,i]of t.values.entries()){let t=e.get(r);t._tag===`Some`&&t.value&&n.push([r,t.value(i)])}return j(n)},ee=async e=>{let n=new rt;for(let[r,i]of t.values.entries()){let t=await e(i);for(let e of t.toList()){let[t,r]=e.toArray();n.set(t,r)}}return j(n.entries())},ne=e=>C(n()).reduce(e),d=e=>C(n()).reduceRight(e),f=e=>t=>C(n()).foldLeft(e)(t),p=e=>t=>C(n()).foldRight(e)(t),re=e=>m(t.values.get(e)),ie=(e,n)=>m(t.values.get(e)).orElse(n),h=()=>t.values.size===0,g=(e,n)=>m(t.values.get(e)).or(n),ae=(e,t)=>C(n()).fold(e,t),oe=()=>C(n()),se=()=>ce(n()),le=()=>`Map(${n().toString()})`,_=e=>h()?e.Empty():e.NonEmpty(n());return{[Symbol.toStringTag]:`FunctypeMap`,_tag:`Map`,[Symbol.iterator]:()=>t.values.entries(),add:r,remove:i,contains:a,get size(){return o()},map:c,ap:u,flatMap:l,flatMapAsync:ee,reduce:ne,reduceRight:d,foldLeft:f,foldRight:p,fold:ae,match:_,get:re,getOrElse:ie,get isEmpty(){return h()},orElse:g,toList:oe,toSet:se,toString:le,toValue:()=>({_tag:`Map`,value:Array.from(t.values.entries())}),toJSON:()=>({"@functype":`Map`,_tag:`Map`,value:Array.from(t.values.entries())}),pipe:e=>e(Array.from(t.values.entries())),serialize:()=>s(`Map`,Array.from(t.values.entries()))}},it=e=>j(e),at=j([]),ot={empty:()=>at,of:(...e)=>j(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Map`)throw Error(`Map.fromJSON: expected @functype="Map", got ${JSON.stringify(t[`@functype`])}`);return st(t.value)},fromYAML:e=>{let t=e.split(`
10
- `)[1]?.split(`: `)[1];if(!t)return st([]);let n=JSON.parse(t);return st(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return ot.fromJSON(t)}},st=r(it,ot),ct=(e,t,n)=>({_tag:`Leaf`,path:e,message:t,cause:n}),lt=(e,t)=>({_tag:`Composite`,path:e,children:t}),ut=e=>e._tag===`Leaf`,dt=e=>e._tag===`Composite`,ft=(e,t)=>e._tag===`Leaf`?t.Leaf(e):t.Composite(e),pt=(e,t)=>t._tag===`Leaf`?{...t,path:[e,...t.path]}:{...t,children:C(t.children.toArray().map(t=>pt(e,t)))},mt=e=>e._tag===`Leaf`?C([{path:e.path,message:e.message}]):C(e.children.toArray().flatMap(e=>mt(e).toArray())),ht=e=>mt(e).toArray().map(({path:e,message:t})=>`${gt(e)}: ${t}`).join(`
11
- `),gt=e=>e.length===0?`(root)`:e.reduce((e,t)=>t.startsWith(`[`)&&t.endsWith(`]`)?`${e}${t}`:e===``?t:`${e}.${t}`,``),M=r({},{leaf:ct,composite:lt,isLeaf:ut,isComposite:dt,match:ft,prepend:pt,flatten:mt,format:ht}),_t=e=>typeof e==`string`?w(e):T(M.leaf([],`expected string`,{received:e})),vt=e=>typeof e==`number`?w(e):T(M.leaf([],`expected number`,{received:e})),yt=e=>typeof e==`boolean`?w(e):T(M.leaf([],`expected boolean`,{received:e})),bt=e=>w(e),xt=e=>t=>t==null?w(null):e(t),St=e=>t=>t==null?w(p()):e(t).fold(e=>T(e),e=>w(d(e))),Ct={envelope:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected envelope object {ok|err}`,{received:t}));let n=t;return`ok`in n?e.ok(n.ok).fold(e=>T(M.prepend(`ok`,e)),e=>w(w(e))):`err`in n?e.err(n.err).fold(e=>T(M.prepend(`err`,e)),e=>w(T(e))):T(M.leaf([],`expected envelope to have 'ok' or 'err' key`,{received:t}))},discriminated:(e,t,n)=>r=>{if(typeof r!=`object`||!r)return T(M.leaf([],`expected object with '${e.tag}' tag`,{received:r}));let i=r[e.tag];return i===e.rightTag?n(r).fold(e=>T(e),e=>w(w(e))):i===e.leftTag?t(r).fold(e=>T(e),e=>w(T(e))):T(M.leaf([],`expected '${e.tag}' to be '${e.rightTag}' or '${e.leftTag}'`,{received:i}))}},wt=e=>t=>{if(!Array.isArray(t))return T(M.leaf([],`expected array`,{received:t}));let n=[],r=[];return t.forEach((t,i)=>{e(t).fold(e=>{n.push(M.prepend(`[${i}]`,e))},e=>{r.push(e)})}),Ot(n,()=>C(r))},Tt=e=>t=>{if(!Array.isArray(t))return T(M.leaf([],`expected array`,{received:t}));let n=[],r=[];return t.forEach((t,i)=>{e(t).fold(e=>{n.push(M.prepend(`[${i}]`,e))},e=>{r.push(e)})}),Ot(n,()=>r)},Et=e=>t=>{if(typeof t!=`object`||!t||Array.isArray(t))return T(M.leaf([],`expected object (for Map)`,{received:t}));let n=t,r=[],i=[];for(let t of Object.keys(n))e(n[t]).fold(e=>{r.push(M.prepend(t,e))},e=>{i.push([t,e])});return Ot(r,()=>st(i))},Dt=e=>t=>{if(typeof t!=`object`||!t||Array.isArray(t))return T(M.leaf([],`expected object`,{received:t}));let n=t,r=[],i={};for(let t in e)e[t](n[t]).fold(e=>{r.push(M.prepend(t,e))},e=>{i[t]=e});return Ot(r,()=>i)},Ot=(e,t)=>e.length===0?w(t()):e.length===1?T(e[0]):T(M.composite([],C(e))),kt={string:_t,number:vt,boolean:yt,unknown:bt,nullable:xt,option:St,either:Ct,list:wt,array:Tt,map:Et,object:Dt},At=(e,t)=>M.prepend(e,t),jt=(e,t,n)=>M.prepend(e,M.prepend(`[${t}]`,n)),Mt={option:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Option object`,{received:t}));let n=t;return n._tag===`None`?w(p()):n._tag===`Some`?e(n.value).fold(e=>T(At(`value`,e)),e=>w(d(e))):T(M.leaf([`_tag`],`expected 'Some' or 'None'`,{received:n._tag}))},either:(e,t)=>n=>{if(typeof n!=`object`||!n)return T(M.leaf([],`expected tagged Either object`,{received:n}));let r=n;return r._tag===`Right`?t(r.value).fold(e=>T(At(`value`,e)),e=>w(w(e))):r._tag===`Left`?e(r.value).fold(e=>T(At(`value`,e)),e=>w(T(e))):T(M.leaf([`_tag`],`expected 'Left' or 'Right'`,{received:r._tag}))},try:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Try object`,{received:t}));let n=t;if(n._tag===`Success`)return e(n.value).fold(e=>T(At(`value`,e)),e=>w(x.success(e)));if(n._tag===`Failure`){let e=typeof n.error==`string`?n.error:`unknown error`,t=Error(e);return typeof n.stack==`string`&&(t.stack=n.stack),w(x.failure(t))}return T(M.leaf([`_tag`],`expected 'Success' or 'Failure'`,{received:n._tag}))},list:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged List object`,{received:t}));let n=t;if(n._tag!==`List`)return T(M.leaf([`_tag`],`expected 'List'`,{received:n._tag}));if(!Array.isArray(n.value))return T(M.leaf([`value`],`expected array`,{received:n.value}));let r=[],i=[];return n.value.forEach((t,n)=>{e(t).fold(e=>{r.push(jt(`value`,n,e))},e=>{i.push(e)})}),r.length===0?w(C(i)):r.length===1?T(r[0]):T(M.composite([],C(r)))},map:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Map object`,{received:t}));let n=t;if(n._tag!==`Map`)return T(M.leaf([`_tag`],`expected 'Map'`,{received:n._tag}));if(!Array.isArray(n.value))return T(M.leaf([`value`],`expected entries array`,{received:n.value}));let r=[],i=[];return n.value.forEach((t,n)=>{if(!Array.isArray(t)||t.length!==2){r.push(M.leaf([`value`,`[${n}]`],`expected [key, value] tuple`,{received:t}));return}let[a,o]=t;if(typeof a!=`string`){r.push(M.leaf([`value`,`[${n}]`,`[0]`],`expected string key`,{received:a}));return}e(o).fold(e=>{r.push(M.prepend(`value`,M.prepend(`[${n}]`,M.prepend(`[1]`,e))))},e=>{i.push([a,e])})}),r.length===0?w(st(i)):r.length===1?T(r[0]):T(M.composite([],C(r)))},obj:e=>t=>{if(typeof t!=`object`||!t)return T(M.leaf([],`expected tagged Obj object`,{received:t}));let n=t;if(n._tag!==`Obj`)return T(M.leaf([`_tag`],`expected 'Obj'`,{received:n._tag}));if(typeof n.value!=`object`||n.value===null)return T(M.leaf([`value`],`expected object`,{received:n.value}));let r=n.value,i=[],a={};for(let t in e)e[t](r[t]).fold(e=>{i.push(M.prepend(`value`,M.prepend(t,e)))},e=>{a[t]=e});return i.length===0?w(a):i.length===1?T(i[0]):T(M.composite([],C(i)))}},Nt=r({},{...kt,tagged:Mt});function Pt(e){if(!e||typeof e!=`object`||!(`_tag`in e))return`unknown`;switch(e._tag){case`Some`:case`None`:return`Option`;case`Left`:case`Right`:return`Either`;case`List`:return`List`;case`Success`:case`Failure`:return`Try`;default:return`unknown`}}const Ft={Option:{of:e=>m(e),empty:()=>m.none()},Either:{of:e=>w(e),empty:e=>T(e)},List:{of:e=>C([e]),empty:()=>C([])},Try:{of:e=>x(()=>e),empty:e=>x(()=>{throw e??/* @__PURE__ */ Error(`Try failed`)})}};function It(e){let t=e(),n=null,r;function i(a){let o=t.next(a);if(o.done)return r?r.of(o.value):C([o.value]);let s=o.value;if(typeof s!=`object`||!s)throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`);if(!n&&`_tag`in s&&(n=Pt(s),n!==`unknown`&&n in Ft&&(r=Ft[n]),n===`List`))return Lt(e);if(`doUnwrap`in s){let e=s.doUnwrap();if(!e.ok){if(!r)return C([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}throw Error(`Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.`)}return i()}function Lt(e){function t(e){if(typeof e!=`object`||!e||!(`doUnwrap`in e))return[e];let t=e;if(`toArray`in t){let e=t.toArray();return e.length===0?[]:e}let n=t.doUnwrap();return n.ok?[n.value]:[]}function n(r){let i=e(),a=[],o=[],s=0;function c(e){let l=i.next(e);if(l.done){a.push(l.value);return}if(s<r.length){let e=r[s];o.push(e),s++,c(e);return}let u=t(l.value);if(u.length!==0){if(u.length>1){let e=u.flatMap(e=>n([...o,e]));a.push(...e)}else o.push(u[0]),s++,c(u[0])}}return c(void 0),a}let r=n([]);return C(r)}async function Rt(e){let t=e(),n=null,r;async function i(e){let a=await t.next(e);if(a.done)return r?r.of(a.value):C([a.value]);let o=await Promise.resolve(a.value);if(typeof o!=`object`||!o)return i(o);if(!n&&`_tag`in o&&(n=Pt(o),n!==`unknown`&&n in Ft&&(r=Ft[n])),`doUnwrap`in o){let e=o.doUnwrap();if(!e.ok){if(!r)return C([]);if(!e.empty&&`error`in e){if(n===`Either`)return r.empty(e.error);if(n===`Try`)return r.empty(e.error instanceof Error?e.error:Error(String(e.error)))}return r.empty()}return i(e.value)}return i(o)}return i()}function zt(e){return typeof e==`object`&&!!e&&`doUnwrap`in e&&typeof e.doUnwrap==`function`}function Bt(e){let t=e.doUnwrap();if(t.ok)return t.value;throw`error`in t?t.error:Error(`Cannot unwrap empty monad`)}function*Vt(e){return yield e}const Ht=(e=`Cannot unwrap None in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`NoneError`,n},Ut=(e,t=`Cannot unwrap Left in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`LeftError`,r.value=e,r},Wt=(e=`Cannot unwrap empty List in Do-notation`)=>{let t=Error(e),n=Object.create(Error.prototype);return n.message=t.message,n.stack=t.stack,n.name=`EmptyListError`,n},Gt=(e,t=`Cannot unwrap Failure in Do-notation`)=>{let n=Error(t),r=Object.create(Error.prototype);return r.message=n.message,r.stack=n.stack,r.name=`FailureError`,r.cause=e,r},Kt={includeTasks:!0,includeStackTrace:!1,separator:`
12
- `,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function qt(e){let t=/* @__PURE__ */ 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`?Jt(n):n},2)}function Jt(e){if(e===void 0||e===``)return``;let t=e.split(`
13
- `);return[t[0],...t.slice(1).map(e=>e.trim())].join(`
14
- `)}function Yt(e,t){let n={...Kt,...t},r=e instanceof Error?e:Ze.apply(e),i=A?.getErrorChain?A.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=Jt(e.stack).split(`
15
- `).slice(1),i=n.maxStackFrames??Kt.maxStackFrames??3,a=t.slice(0,i).map(e=>`${r} ${n.colors?`\x1B[90m`:``}${e}${n.colors?`\x1B[0m`:``}`).join(`
16
- `);o+=`\n${a}`,t.length>i&&(o+=`\n${r} ${n.colors?`\x1B[90m`:``}...${t.length-i} more stack frames${n.colors?`\x1B[0m`:``}`)}return o}).join(n.separator)}`;if(n.includeData){let{data:e}=r;if(e){let t=n.colors?`\n\n\x1b[33mContext:\x1b[0m\n${qt(e)}`:`\n\nContext:\n${qt(e)}`;a+=t}}return a}function Xt(){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?Jt(t.stack):void 0};if(t.taskInfo&&(n.taskInfo=t.taskInfo),t.data&&(n.data=t.data),typeof A?.getErrorChain==`function`)try{let e=A.getErrorChain(t);e.length>1&&(n.errorChain=A.formatErrorChain(t,{includeTasks:!0}),n.structuredErrorChain=e.map(e=>({message:e.message,name:e.name,taskInfo:e.taskInfo,stack:e.stack?Jt(e.stack):void 0})))}catch{}return Object.getOwnPropertyNames(t).forEach(e=>{if(!n[e]){let r=t[e];n[e]=r}}),n}}const N=(e,t,r,i)=>{let a=Ze.apply(t,r,{name:e,description:t});return n(a,{code:e,message:t,status:Zt(e),context:r,timestamp:(/* @__PURE__ */ new Date()).toISOString(),traceId:i?.traceId})},Zt=e=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[e],P=Object.assign(N,{validation:(e,t,n)=>N(`VALIDATION_FAILED`,`Validation failed: ${e} ${n}`,{field:e,value:t,rule:n}),network:(e,t,n)=>N(`NETWORK_ERROR`,`Network error: ${t} ${e}${n?` (${n})`:``}`,{url:e,method:t,statusCode:n}),auth:(e,t)=>N(`AUTH_REQUIRED`,`Authentication required: ${e}${t?` (role: ${t})`:``}`,{resource:e,requiredRole:t}),notFound:(e,t)=>N(`NOT_FOUND`,`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,n)=>N(`PERMISSION_DENIED`,`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:n}),rateLimit:(e,t,n)=>N(`RATE_LIMITED`,`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:n}),internal:e=>N(`INTERNAL_ERROR`,`Internal server error: ${e}`,{errorId:e,timestamp:(/* @__PURE__ */ new Date()).toISOString()}),badRequest:(e,t)=>N(`BAD_REQUEST`,`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>N(`CONFLICT`,`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>N(`TIMEOUT`,`Request timeout: ${t} exceeded ${e}ms`,{duration:e,operation:t}),isTypedError:e=>typeof e==`object`&&!!e&&`code`in e&&`message`in e&&`status`in e&&`context`in e&&`_tag`in e&&e._tag===`Throwable`,hasCode:(e,t)=>e.code===t}),F={rule:e=>t=>{if(e===`email`)return typeof t!=`string`||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?T(P.validation(`value`,t,`must be a valid email`)):w(t);if(e===`url`)try{return new URL(String(t)),w(t)}catch{return T(P.validation(`value`,t,`must be a valid URL`))}if(e===`uuid`)return typeof t!=`string`||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)?T(P.validation(`value`,t,`must be a valid UUID`)):w(t);if(e===`required`)return t==null||t===``?T(P.validation(`value`,t,`is required`)):w(t);if(e===`numeric`)return typeof t!=`number`&&!/^\d+$/.test(String(t))?T(P.validation(`value`,t,`must be numeric`)):w(t);if(e===`alpha`)return typeof t!=`string`||!/^[a-zA-Z]+$/.test(t)?T(P.validation(`value`,t,`must contain only letters`)):w(t);if(e===`alphanumeric`)return typeof t!=`string`||!/^[a-zA-Z0-9]+$/.test(t)?T(P.validation(`value`,t,`must be alphanumeric`)):w(t);if(e.startsWith(`min:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r<n?T(P.validation(`value`,t,`must be at least ${n}`)):w(t)}if(e.startsWith(`max:`)){let n=Number(e.split(`:`)[1]),r=Number(t);return isNaN(r)||r>n?T(P.validation(`value`,t,`must be at most ${n}`)):w(t)}if(e.startsWith(`minLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length<n?T(P.validation(`value`,t,`must be at least ${n} characters`)):w(t)}if(e.startsWith(`maxLength:`)){let n=Number(e.split(`:`)[1]);return String(t).length>n?T(P.validation(`value`,t,`must be at most ${n} characters`)):w(t)}if(e.startsWith(`pattern:`)){let n=e.substring(8);return new RegExp(n).test(String(t))?w(t):T(P.validation(`value`,t,`must match pattern ${n}`))}if(e.startsWith(`in:`)){let n=e.substring(3).split(`,`);return n.includes(String(t))?w(t):T(P.validation(`value`,t,`must be one of: ${n.join(`, `)}`))}if(e.startsWith(`notIn:`)){let n=e.substring(6).split(`,`);return n.includes(String(t))?T(P.validation(`value`,t,`must not be one of: ${n.join(`, `)}`)):w(t)}if(e===`date`){let e=new Date(String(t));return isNaN(e.getTime())?T(P.validation(`value`,t,`must be a valid date`)):w(t)}if(e===`future`){let e=new Date(String(t));return isNaN(e.getTime())||e<=/* @__PURE__ */ new Date?T(P.validation(`value`,t,`must be a future date`)):w(t)}if(e===`past`){let e=new Date(String(t));return isNaN(e.getTime())||e>=/* @__PURE__ */ new Date?T(P.validation(`value`,t,`must be a past date`)):w(t)}return w(t)},combine:(...e)=>t=>{for(let n of e){let e=n(t);if(e.isLeft())return e}return w(t)},custom:(e,t)=>n=>e(n)?w(n):T(P.validation(`value`,n,t)),form:(e,t)=>{let n=[],r={};for(let[i,a]of Object.entries(e)){let e=t[i],o=a(e);if(o.isLeft()){let t=o.fold(e=>e,()=>{throw Error(`Should not be left`)}),r=P.validation(i,e,t.context.rule);n.push(r)}else r[i]=o.orThrow()}return n.length>0?T(C(n)):w(r)}},Qt={...F,validators:{email:F.rule(`email`),url:F.rule(`url`),uuid:F.rule(`uuid`),required:F.rule(`required`),numeric:F.rule(`numeric`),positiveNumber:F.combine(F.rule(`numeric`),F.rule(`min:0`)),nonEmptyString:F.combine(F.rule(`required`),F.custom(e=>typeof e==`string`&&e.trim().length>0,`must not be empty`))}},$t=n(F.rule,Qt);function en(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function tn(e){return en(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 nn=e=>({_tag:`Context`,services:e,get(t){let n=e.get(t.id);return n===void 0?p():d(n)},unsafeGet(t){let n=e.get(t.id);if(n===void 0)throw Error(`Service not found: ${t.id}`);return n},has(t){return e.has(t.id)},add(t,n){let r=new Map(e);return r.set(t.id,n),nn(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return nn(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>nn(/* @__PURE__ */ new Map),make:(e,t)=>{let n=/* @__PURE__ */ new Map;return n.set(e.id,t),nn(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},L=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,isSuccess(){return!0},isFailure(){return!1},isDie(){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,i){return n(e)},match(t){return t.Success(e)},orThrow(){return e},orElse(t){return e},toOption(){return d(e)},toEither(){return w(e)},toValue(){return{_tag:`Success`,value:e}},toString(){return`Exit.Success(${c(e)})`},toJSON(){return{_tag:`Success`,value:e}}}),rn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,isSuccess(){return!1},isFailure(){return!0},isDie(){return!1},isInterrupted(){return!1},map(t){return rn(e)},mapError(t){return rn(t(e))},mapBoth(t,n){return rn(t(e))},flatMap(t){return rn(e)},fold(t,n,r,i){return t(e)},match(t){return t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return p()},toEither(){return T(e)},toValue(){return{_tag:`Failure`,error:e}},toString(){return`Exit.Failure(${c(e)})`},toJSON(){return{_tag:`Failure`,error:e}}}),an=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Die`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!0},isInterrupted(){return!1},map(t){return an(e)},mapError(t){return an(e)},mapBoth(t,n){return an(e)},flatMap(t){return an(e)},fold(t,n,r,i){return i?i(e):t(e)},match(t){return t.Die?t.Die(e):t.Failure(e)},orThrow(){throw e},orElse(e){return e},toOption(){return p()},toEither(){return T(e)},toValue(){return{_tag:`Die`,defect:e}},toString(){return`Exit.Die(${c(e)})`},toJSON(){return{_tag:`Die`,defect:e}}}),on=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!1},isInterrupted(){return!0},map(t){return on(e)},mapError(t){return on(e)},mapBoth(t,n){return on(e)},flatMap(t){return on(e)},fold(t,n,r,i){if(r)return r(e);throw Error(`Effect was interrupted: ${e}`)},match(t){return t.Interrupted(e)},orThrow(){throw Error(`Effect was interrupted: ${e}`)},orElse(e){return e},toOption(){return p()},toEither(){throw Error(`Cannot convert Interrupted Exit to Either: ${e}`)},toValue(){return{_tag:`Interrupted`,fiberId:e}},toString(){return`Exit.Interrupted(${e})`},toJSON(){return{_tag:`Interrupted`,fiberId:e}}}),R=r(e=>L(e),{succeed:e=>L(e),fail:e=>rn(e),die:e=>an(e),interrupt:e=>on(e),interrupted:()=>on(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isDie:e=>e.isDie(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?L(e.value):rn(e.value),fromOption:(e,t)=>e.isSome()?L(e.value):rn(t()),zip:(e,t)=>e.isInterrupted()?e:t.isInterrupted()?t:e.isDie()?e:t.isDie()?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.isDie()||n.isFailure())return n;t.push(n.orThrow())}return L(t)}}),z=e=>e;var sn=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},cn=class extends Error{constructor(e){super(e??`Effect was interrupted`),this._tag=`InterruptedError`,this.name=`InterruptedError`}},ln=class extends Error{constructor(e){super(`Cannot run ${e} effect synchronously — use run()/runExit() instead`),this.operation=e,this._tag=`UnsupportedSyncOperationError`,this.name=`UnsupportedSyncOperationError`}},un=class extends Error{constructor(e,t,n){super(n??`Repeat exhausted after ${e} iterations`),this.max=e,this.lastValue=t,this._tag=`RepeatExhausted`,this.name=`RepeatExhausted`}static is(e){return typeof e==`object`&&!!e&&`_tag`in e&&e._tag===`RepeatExhausted`}};const dn=Symbol.for(`functype/IO/effect`),B=e=>e[dn],V=e=>{let t={[Symbol.toStringTag]:`IO`,[dn]:e,map(e){return V(z({_tag:`Map`,effect:t,f:e}))},flatMap(e){return V(z({_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 V(z({_tag:`MapError`,effect:t,f:e}))},tapError(e){return t.mapError(t=>(e(t),t))},recover(e){return V(z({_tag:`Recover`,effect:t,fallback:e}))},recoverWith(e){return V(z({_tag:`RecoverWith`,effect:t,f:e}))},fold(e,n){return V(z({_tag:`Fold`,effect:t,onFailure:e,onSuccess:n}))},match(e){return t.fold(e.failure,e.success)},catchTag(e,n){return V(z({_tag:`RecoverWith`,effect:t,f:t=>typeof t==`object`&&t&&`_tag`in t&&t._tag===e?z(n(t)):z(W.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(()=>W.sleep(n).flatMap(()=>t.retryWithDelay(e-1,n)))},retryWhile(e){let n=(r,i)=>t.recoverWith(t=>{if(r<=0||!e.while(t,i))return z(W.fail(t));let a=n(r-1,i+1);return e.delayMs===void 0?a:z(W.sleep(e.delayMs).flatMap(()=>a))});return n(e.n,1)},retryWithBackoff(e){let n=e.factor??2,r=e.maxMs??3e4,i=e.jitter??!0,a=e.while??(()=>!0),o=(s,c)=>t.recoverWith(t=>{if(s<=0||!a(t,c))return z(W.fail(t));let l=Math.min(r,e.baseMs*n**(c-1)),u=i?l*(.5+Math.random()*.5):l,ee=o(s-1,c+1);return z(W.sleep(u).flatMap(()=>ee))});return o(e.n,1)},repeatUntil(e,n){if(n.max<=0)return z(W.fail(new un(n.max)));let r=i=>t.flatMap(t=>{if(e(t))return z(W.succeed(t));if(i<=1)return z(W.fail(new un(n.max,t)));let a=r(i-1);return n.delayMs===void 0?a:z(W.sleep(n.delayMs).flatMap(()=>a))});return r(n.max)},repeatWhile(e,n){return t.repeatUntil(t=>!e(t),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 V(z({_tag:`ProvideContext`,effect:t,context:e}))},provideService(e,n){let r=I.make(e,n);return V(z({_tag:`ProvideContext`,effect:t,context:r}))},provideLayer(e){let n=z(W.async(async()=>{let t=I.empty();return await e.build(z(t))}));return z(n.flatMap(e=>V(z({_tag:`ProvideContext`,effect:t,context:e}))))},async run(){let e=await U(B(this));if(e.isSuccess())return w(e.orThrow());let t=pn(e);return T(t?t.value:new cn)},async runOrThrow(){let e=await U(B(this));if(e.isSuccess())return e.orThrow();let t=pn(e);throw t?t.value:new cn},runSync(){try{return w(H(B(this)))}catch(e){return T(e)}},runSyncOrThrow(){return H(B(this))},async runExit(){return U(B(this))},async runOption(){let e=await U(B(this));return e.isSuccess()?d(e.orThrow()):p()},async runTry(){let e=await U(B(this));if(e.isSuccess())return z(x(()=>e.orThrow()));let t=pn(e),n=t?t.value:/* @__PURE__ */ Error(`Effect was interrupted`);return z(x(()=>{throw n}))},pipe(e){return e(t)},delay(e){return z(W.async(()=>new Promise(t=>setTimeout(t,e))).flatMap(()=>t))},timeout(e){return V(z({_tag:`Timeout`,effect:t,duration:e}))},timeoutTo(e,n){return z(t.timeout(e).recover(z(n)))},toString(){return`IO(${c(e._tag)})`},toJSON(){return{_tag:`IO`,effect:e._tag}},*[Symbol.iterator](){return yield t}};return t},fn=e=>{if(e instanceof cn||e instanceof ln)throw e},pn=e=>{let t=e.toValue();if(t._tag===`Failure`)return{value:t.error};if(t._tag===`Die`)return{value:t.defect}},H=(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=H(B(e.effect),t);return e.f(n)}case`FlatMap`:{let n=H(B(e.effect),t),r=e.f(n);return H(B(r),t)}case`MapError`:try{return H(B(e.effect),t)}catch(t){throw fn(t),e.f(t)}case`Recover`:try{return H(B(e.effect),t)}catch(t){return fn(t),e.fallback}case`RecoverWith`:try{return z(H(B(e.effect),t))}catch(n){fn(n);let r=e.f(n);return H(B(r),t)}case`Fold`:try{let n=H(B(e.effect),t);return e.onSuccess(n)}catch(t){return fn(t),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 H(B(e.effect),n)}case`Interrupt`:throw new cn;case`Bracket`:{let n=H(B(e.acquire),t);try{return H(B(e.use(n)),t)}finally{H(B(e.release(n)),t)}}case`BracketExit`:{let n=H(B(e.acquire),t),r;try{let i=H(B(e.use(n)),t);return r=z(R.succeed(i)),i}catch(e){throw r=e instanceof cn?z(R.interrupted()):e instanceof ln?z(R.die(e)):z(R.fail(e)),e}finally{H(B(e.release(n,r)),t)}}case`Race`:throw new ln(`race`);case`Timeout`:throw new ln(`timeout`)}},U=async(e,t=I.empty())=>{try{switch(e._tag){case`Succeed`:return z(R.succeed(e.value));case`Fail`:return z(R.fail(e.error));case`Die`:return z(R.die(e.defect));case`Sync`:return z(R.succeed(e.thunk()));case`Async`:try{let t=await e.thunk();return z(R.succeed(t))}catch(e){return z(R.fail(e))}case`Auto`:try{let t=e.thunk();return t instanceof Promise?z(R.succeed(await t)):z(R.succeed(t))}catch(e){return z(R.fail(e))}case`Map`:{let n=await U(B(e.effect),t);return n.isSuccess()?z(R.succeed(e.f(n.orThrow()))):z(n)}case`FlatMap`:{let n=await U(B(e.effect),t);if(!n.isSuccess())return z(n);let r=e.f(n.orThrow());return U(B(r),t)}case`MapError`:{let n=await U(B(e.effect),t),r=pn(n);return z(r?R.fail(e.f(r.value)):n)}case`Recover`:{let n=await U(B(e.effect),t);return pn(n)?R.succeed(e.fallback):z(n)}case`RecoverWith`:{let n=await U(B(e.effect),t),r=pn(n);if(!r)return z(n);let i=e.f(r.value);return U(B(i),t)}case`Fold`:{let n=await U(B(e.effect),t),r=pn(n);return r?R.succeed(e.onFailure(r.value)):n.isSuccess()?R.succeed(e.onSuccess(n.orThrow())):n}case`Service`:{let n=t.get(e.tag);return n.isNone()?R.fail(/* @__PURE__ */ Error(`Service not found: ${e.tag.id}`)):R.succeed(n.orThrow())}case`ProvideContext`:{let n=t.merge(e.context);return U(B(e.effect),n)}case`Interrupt`:return R.interrupted();case`Bracket`:{let n=await U(B(e.acquire),t);if(!n.isSuccess())return n;let r=n.orThrow();try{return await U(B(e.use(r)),t)}finally{await U(B(e.release(r)),t)}}case`BracketExit`:{let n=await U(B(e.acquire),t);if(!n.isSuccess())return n;let r=n.orThrow(),i=await U(B(e.use(r)),t);return await U(B(e.release(r,i)),t),i}case`Race`:return e.effects.length===0?R.fail(/* @__PURE__ */ Error(`No effects to race`)):await Promise.race(e.effects.map(e=>U(B(e),t)));case`Timeout`:{let n=new Promise(t=>setTimeout(()=>t(R.fail(new sn(e.duration))),e.duration)),r=U(B(e.effect),t);return Promise.race([r,n])}}}catch(e){return R.die(e)}},W={sync:e=>V({_tag:`Sync`,thunk:e}),succeed:e=>V({_tag:`Succeed`,value:e}),fail:e=>V({_tag:`Fail`,error:e}),die:e=>V({_tag:`Die`,defect:e}),async:e=>V(z({_tag:`Async`,thunk:e})),tryPromise:e=>V({_tag:`Async`,thunk:e.try}).mapError(e.catch),tryCatch:(e,t)=>W.sync(()=>{try{return e()}catch(e){throw t(e)}}),liftSync:e=>(...t)=>W.sync(()=>e(...t)),liftPromise:e=>(...t)=>W.async(()=>e(...t)),fromEither:e=>z(e.isRight()?W.succeed(e.value):W.fail(e.value)),fromOption:e=>z(e.isSome()?W.succeed(e.value):W.fail(void 0)),fromOptionOrFail:(e,t)=>z(e.isSome()?W.succeed(e.value):W.fail(t())),fromTry:e=>z(e.isSuccess()?W.succeed(e.orThrow()):W.fail(e.error)),fromResult:e=>z(e.error?W.fail(e.error):W.succeed(m(e.data))),tryAsync:(e,t,n)=>n?.aborted?z(W.fail(t(n.reason??new DOMException(`Aborted`,`AbortError`)))):W.async(()=>e(n)).mapError(t),asyncResult:(e,t,n)=>{let r=n?.dataKey??`data`,i=n?.errorKey??`error`;return W.tryAsync(t=>e(t),t,n?.signal).flatMap(e=>W.fromResult({data:e[r],error:e[i]}))},service:e=>V({_tag:`Service`,tag:e}),serviceWith:(e,t)=>W.service(e).map(t),serviceWithIO:(e,t)=>W.service(e).flatMap(t),withServices:(e,t)=>{let n=Object.entries(e);if(n.length===0)return z(V({_tag:`Auto`,thunk:()=>t({})}));let r=z(W.succeed({})),i=n.reduce((e,[t,n])=>z(e.flatMap(e=>W.service(n).map(n=>({...e,[t]:n})))),r);return z(i.flatMap(e=>V({_tag:`Auto`,thunk:()=>t(e)})))},all:e=>{if(e.length===0)return z(W.succeed([]));let t=z(W.succeed([]));return z(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),t))},firstSuccessOf:e=>e.length===0?z(W.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),sleep:e=>z(W.async(()=>new Promise(t=>setTimeout(t,e)))),iterate:(e,t,n,r)=>{let i=r?.max??1e4,a=(e,r)=>n(e)?z(W.succeed(e)):r<=0?z(W.fail(new un(i,e))):t(e).flatMap(e=>a(e,r-1));return a(e,i)},never:()=>z(W.async(()=>new Promise(()=>{}))),get unit(){return z(V({_tag:`Succeed`,value:void 0}))},fromNullable:e=>z(e==null?W.fail(void 0):W.succeed(e)),interrupt:()=>V({_tag:`Interrupt`}),bracket:(e,t,n)=>V({_tag:`Bracket`,acquire:e,use:t,release:n}),acquireRelease:(e,t,n)=>W.bracket(e,t,n),bracketExit:(e,t,n)=>V({_tag:`BracketExit`,acquire:e,use:t,release:n}),race:e=>V({_tag:`Race`,effects:e}),any:e=>e.length===0?z(W.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),forEach:(e,t)=>{if(e.length===0)return z(W.succeed([]));let n=z(W.succeed([]));return z(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),n))},forEachPar:(e,t)=>W.forEach(e,t),timeout:(e,t)=>V(z({_tag:`Timeout`,effect:e,duration:t})),gen:e=>z(W.sync(()=>{let t=e(),n=e=>{let r=t.next(e);return r.done?z(W.succeed(r.value)):z(r.value.flatMap(e=>n(e)))};return n(void 0)}).flatMap(e=>e)),get Do(){return mn(W.succeed({}))}},mn=e=>({effect:e,bind(t,n){let r=e.flatMap(e=>n(e).map(n=>({...e,[t]:n})));return mn(r)},let(t,n){let r=e.map(e=>({...e,[t]:n(e)}));return mn(r)},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return mn(e.tap(t))},tapEffect(t){return mn(e.tapEffect(t))},done(){return e}}),G=r(e=>V(z({_tag:`Auto`,thunk:e})),W),K=(e,t)=>({_tag:`Layer`,build:e,provideToAndMerge(t){return K(async n=>{let r=await e(n),i=n.merge(r),a=await t.build(i);return r.merge(a)})},merge(t){return K(async n=>{let[r,i]=await Promise.all([e(n),t.build(n)]);return r.merge(i)})},map(t){return K(async n=>t(await e(n)))},toString(){return`Layer(${t??`anonymous`})`}}),hn={succeed:(e,t)=>K(()=>Promise.resolve(I.make(e,t)),e.id),effect:(e,t)=>K(async()=>{let n=await t();return I.make(e,n)},e.id),sync:(e,t)=>K(()=>Promise.resolve(I.make(e,t())),e.id),fromService:(e,t,n)=>K(r=>{let i=r.unsafeGet(t);return Promise.resolve(I.make(e,n(i)))},e.id),fromServiceEffect:(e,t,n)=>K(async r=>{let i=await n(r.unsafeGet(t));return I.make(e,i)},e.id),fromContext:e=>K(()=>Promise.resolve(e)),empty:()=>K(()=>Promise.resolve(I.empty()),`empty`),mergeAll:(...e)=>K(async t=>(await Promise.all(e.map(e=>e.build(t)))).reduce((e,t)=>e.merge(t),I.empty()))},gn=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),_n=()=>{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})})}}},vn=gn(`TestClock`),yn={make:_n,tag:vn,test:async e=>e(_n()),get get(){return G.service(vn)},advance:e=>G.serviceWithIO(vn,t=>G.async(()=>t.advance(e))),setTime:e=>G.serviceWithIO(vn,t=>G.async(()=>t.setTime(e))),get runAll(){return G.serviceWithIO(vn,e=>G.async(()=>e.runAll()))},context:()=>{let e=_n();return{clock:e,context:I.make(vn,e)}}},bn={make:()=>{let e=_n(),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=_n();return bn.make().withService(vn,e)}},xn=gn(`HttpClient`),Sn={},Cn=r({},{networkError:(e,t,n)=>({_tag:`NetworkError`,url:e,method:t,cause:n}),httpStatusError:(e,t,n,r,i)=>({_tag:`HttpStatusError`,url:e,method:t,status:n,statusText:r,body:i}),decodeError:(e,t,n,r)=>({_tag:`DecodeError`,url:e,method:t,body:n,cause:r}),isNetworkError:e=>e._tag===`NetworkError`,isHttpStatusError:e=>e._tag===`HttpStatusError`,isDecodeError:e=>e._tag===`DecodeError`,match:(e,t)=>{switch(e._tag){case`NetworkError`:return t.NetworkError(e);case`HttpStatusError`:return t.HttpStatusError(e);case`DecodeError`:return t.DecodeError(e)}}}),wn=(e,t)=>!e||t.startsWith(`http://`)||t.startsWith(`https://`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`,Tn=(e,t)=>{let n=new URLSearchParams;for(let e of Object.keys(t)){let r=t[e];if(r!=null){if(Array.isArray(r))for(let t of r)n.append(e,String(t));else n.append(e,String(r))}}let r=n.toString();return r?`${e}${e.includes(`?`)?`&`:`?`}${r}`:e},En=(e,t,n)=>{let r=wn(e,t);return n?Tn(r,n):r},Dn=(e,t)=>e[Symbol.toStringTag]===t,q=(e,t)=>{if(typeof e!=`object`||!e||e instanceof Date||e instanceof RegExp||typeof Buffer<`u`&&e instanceof Buffer)return e;if(Dn(e,`Option`)){let n=e;return t===`tagged`?n._tag===`None`?{_tag:`None`,value:null}:{_tag:`Some`,value:q(n.value,t)}:n._tag===`None`?null:q(n.value,t)}if(Dn(e,`Either`)){let n=e;if(t===`tagged`)return{_tag:n._tag,value:q(n.value,t)};if(n._tag===`Left`)throw Error(`Cannot serialize a Left in a request body — Either's failure path should not cross the wire as data. Resolve the Left before sending, or omit the field. (Left value: ${JSON.stringify(n.value)})`);return q(n.value,t)}if(Dn(e,`Try`)){let n=e;if(t===`tagged`){if(n._tag===`Failure`){let e=n.error??/* @__PURE__ */ Error(`unknown`);return{_tag:`Failure`,error:e.message,stack:e.stack}}return{_tag:`Success`,value:q(n.value,t)}}if(n._tag===`Failure`)throw n.error??/* @__PURE__ */ Error(`Cannot serialize a Try Failure in a request body`);return q(n.value,t)}if(Dn(e,`List`)){let n=e.toArray().map(e=>q(e,t));return t===`tagged`?{_tag:`List`,value:n}:n}if(Dn(e,`FunctypeMap`)){let n=e.toValue().value;if(t===`tagged`)return{_tag:`Map`,value:n.map(([e,n])=>[e,q(n,t)])};let r={};for(let[e,i]of n){if(typeof e!=`string`)throw Error(`Cannot serialize Map with non-string keys to JSON (key: ${String(e)})`);r[e]=q(i,t)}return r}if(Array.isArray(e))return e.map(e=>q(e,t));let n={};for(let r of Object.keys(e))n[r]=q(e[r],t);return n},On=(e,t)=>{if(e==null)return{serialized:void 0,contentType:void 0};if(typeof e==`string`)return{serialized:e,contentType:void 0};if(typeof e==`object`||Array.isArray(e)){let n=q(e,t?`primitive`:`tagged`);return{serialized:JSON.stringify(n),contentType:`application/json`}}return{serialized:String(e),contentType:void 0}},kn=e=>{let t=e.get(`content-type`)??``;return t.includes(`application/json`)?`json`:t.startsWith(`text/`)?`text`:`raw`},An=async(e,t,n,r,i,a)=>{let o=t??kn(e.headers),s,c={};switch(o){case`json`:{let t=await e.text();c.value=t;try{s=JSON.parse(t)}catch(e){throw Cn.decodeError(n,r,t,e)}break}case`text`:s=await e.text(),c.value=s;break;case`blob`:s=await e.blob();break;case`arrayBuffer`:s=await e.arrayBuffer();break;case`raw`:s=e}let l;if(i){let e=i(s);if(e.isLeft()){let t=c.value??(typeof s==`string`?s:JSON.stringify(s));throw Cn.decodeError(n,r,t,e.value)}l=e.value}else if(a)try{l=a(s)}catch(e){let t=c.value??(typeof s==`string`?s:JSON.stringify(s));throw Cn.decodeError(n,r,t,e)}else l=s;return{data:l,status:e.status,statusText:e.statusText,headers:e.headers}},J=(e,t)=>{let n={url:En(e.baseUrl,t.url,t.params),method:t.method,headers:{...e.defaultHeaders,...t.headers},body:t.body,signal:t.signal,parseAs:t.parseAs,flatten:t.flatten};return(e.beforeRequest?e.beforeRequest(n):G.succeed(n)).flatMap(n=>{let r=n.flatten??!0,i=(()=>{try{return{ok:!0,value:On(n.body,r)}}catch(e){return{ok:!1,cause:e}}})();if(!i.ok)return G.fail(Cn.networkError(n.url,n.method,i.cause));let{serialized:a,contentType:o}=i.value,s={...n.headers,...o?{"Content-Type":o}:{}},c=G.tryAsync(r=>(e.fetch??globalThis.fetch)(n.url,{method:n.method,headers:s,body:a,signal:n.signal??r}).then(async e=>{if(!e.ok){let t=await e.text().catch(()=>``);throw Cn.httpStatusError(n.url,n.method,e.status,e.statusText,t)}return An(e,n.parseAs,n.url,n.method,t.decode,t.validate)}),e=>typeof e==`object`&&e&&`_tag`in e?e:Cn.networkError(n.url,n.method,e));return e.afterResponse?c.flatMap(t=>e.afterResponse(t).map(e=>e)):c})},jn=e=>J(Sn,e),Mn=r({},{request:jn,get:(e,t)=>jn({...t,url:e,method:`GET`}),post:(e,t)=>jn({...t,url:e,method:`POST`}),put:(e,t)=>jn({...t,url:e,method:`PUT`}),patch:(e,t)=>jn({...t,url:e,method:`PATCH`}),delete:(e,t)=>jn({...t,url:e,method:`DELETE`}),head:(e,t)=>jn({...t,url:e,method:`HEAD`,parseAs:`raw`}),options:(e,t)=>jn({...t,url:e,method:`OPTIONS`,parseAs:`raw`}),client:e=>({request:t=>J(e,t),get:(t,n)=>J(e,{...n,url:t,method:`GET`}),post:(t,n)=>J(e,{...n,url:t,method:`POST`}),put:(t,n)=>J(e,{...n,url:t,method:`PUT`}),patch:(t,n)=>J(e,{...n,url:t,method:`PATCH`}),delete:(t,n)=>J(e,{...n,url:t,method:`DELETE`}),head:(t,n)=>J(e,{...n,url:t,method:`HEAD`,parseAs:`raw`}),options:(t,n)=>J(e,{...n,url:t,method:`OPTIONS`,parseAs:`raw`})})}),Nn={toOption:e=>e.fold(()=>p(),e=>d(e)),toList:e=>e.fold(()=>C([]),e=>C([e])),toEither:(e,t)=>e.fold(()=>T(t),e=>w(e)),isEmpty:e=>e.fold(()=>!0,()=>!1),size:e=>e.fold(()=>0,()=>1)},Pn=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),Y=e=>typeof e==`object`&&!!e&&e._tag===`List`,Fn=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),In=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),X=()=>{let e=(e,t)=>{if(Pn(e)||Y(e)||Fn(e)||In(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(Pn(e))return e.orThrow();if(Y(e)){let t=e.toArray();if(t.length>0&&Y(t[0])){let e=[];for(let n of t)Y(n)&&e.push(...n.toArray());return C(e)}return e.flatten()}if(Fn(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(In(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(Pn(e)||Y(e)||Fn(e)||In(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(Pn(e)&&Pn(t)||Y(e)&&Y(t)||Fn(e)&&Fn(t)||In(e)&&In(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},i=e=>{if(Pn(e)){let t=e;if(t.isEmpty)return C([m.none()]);let n=t.orThrow();if(Y(n))return n.map(e=>m(e));throw Error(`Unsupported inner container type for sequence`)}if(Y(e)){let t=e.toArray();if(t.length===0)return m.none();let n=t[0];if(Pn(n)){for(let e of t)if(e.isEmpty)return m.none();let e=t.map(e=>e.orThrow());return m(C(e))}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`}},Ln=X();X.map=(e,t)=>Ln.map(e,t),X.flatten=e=>Ln.flatten(e),X.flatMap=(e,t)=>Ln.flatMap(e,t),X.ap=(e,t)=>Ln.ap(e,t),X.sequence=e=>Ln.sequence(e),X.traverse=(e,t)=>Ln.traverse(e,t),X.isOption=Pn,X.isList=Y,X.isEither=Fn,X.isTry=In;const Rn=e=>({id:e,isSame:t=>t.id===e}),zn=r(Rn,{of:e=>Rn(e),pure:e=>Rn(e)}),Bn=e=>{let t=!1,n,r,a=!1,l=()=>{if(!t)try{n=e(),t=!0}catch(e){throw r=e,a=!0,t=!0,e}if(a)throw r;return n};return{[Symbol.toStringTag]:`Lazy`,_tag:`Lazy`,get isEvaluated(){return t},orElse:e=>{try{return l()}catch{return e}},orNull:()=>{try{return l()}catch{return null}},orThrow:e=>{try{return l()}catch(t){throw e??t}},or:e=>Z(()=>{try{return l()}catch{return e.orThrow()}}),orUndefined:()=>{try{return l()}catch{return}},map:e=>Z(()=>e(l())),ap:e=>Z(()=>e.orThrow()(l())),mapAsync:async e=>{let t=await e(l());return Z(()=>t)},flatMap:e=>Z(()=>e(l()).orThrow()),flatMapAsync:async e=>{let t=await e(l());return Z(()=>t.orThrow())},filter:e=>Z(()=>{let t=l();return e(t)?d(t):p}),recover:e=>Z(()=>{try{return l()}catch(t){return e(t)}}),recoverWith:e=>Z(()=>{try{return l()}catch(t){return e(t).orThrow()}}),toOption:()=>{try{return d(l())}catch{return p}},toEither:()=>{try{return w(l())}catch(e){return T(e)}},toEitherWith:e=>{try{return w(l())}catch(t){return T(e(t))}},toTry:()=>x(()=>l()),tap:e=>Z(()=>{let t=l();return e(t),t}),tapError:e=>Z(()=>{try{return l()}catch(t){throw e(t),t}}),fold:e=>e(l()),foldWith:(e,t)=>{try{return t(l())}catch(t){return e(t)}},foldLeft:e=>t=>t(e,l()),foldRight:e=>t=>t(l(),e),match:e=>e.Lazy(l()),toString:()=>t&&!a?`Lazy(${c(n)})`:t&&a?`Lazy(<error: ${r instanceof Error?r.message:String(r)}>)`:`Lazy(<not evaluated>)`,toValue:()=>{try{return{_tag:`Lazy`,value:l()}}catch(e){return{_tag:`Lazy`,error:e instanceof Error?e:Error(String(e))}}},get size(){try{return l(),1}catch{return 0}},get isEmpty(){try{return l(),!1}catch{return!0}},contains:e=>{try{return l()===e}catch{return!1}},reduce:e=>l(),reduceRight:e=>l(),count:e=>{try{return+!!e(l())}catch{return 0}},find:e=>{try{let t=l();return e(t)?d(t):p}catch{return p}},exists:e=>{try{return e(l())}catch{return!1}},forEach:e=>{try{e(l())}catch{}},pipe:e=>e(l()),toJSON:()=>{try{return{"@functype":`Lazy`,_tag:`Lazy`,value:l()}}catch(e){return{"@functype":`Lazy`,_tag:`Lazy`,error:o(e)}}},serialize:()=>{try{return s(`Lazy`,l())}catch(e){return i(`Lazy`,`Lazy`,{error:o(e)})}},typeable:`Lazy`}},Vn={of:e=>Bn(e),fromValue:e=>Bn(()=>e),fromOption:(e,t)=>Bn(()=>e._tag===`Some`?e.value:t()),fromTry:e=>Bn(()=>e.orThrow()),fromEither:e=>Bn(()=>e.fold(e=>{throw e},e=>e)),fromPromise:e=>Bn(()=>{throw Error(`Promise not yet resolved. Use await on the promise before creating Lazy.`)}),fail:e=>Bn(()=>{throw e}),evaluated:e=>Bn(()=>e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Lazy`)throw Error(`Lazy.fromJSON: expected @functype="Lazy", got ${JSON.stringify(t[`@functype`])}`);if(t.error!==void 0){let e=typeof t.error==`object`?a(t.error):Error(t.error);return Vn.fail(e)}return Vn.evaluated(t.value)}},Z=r(Bn,Vn),Hn={default:e=>t=>e(t),when:(e,t)=>n=>e(n)?t(n):void 0},Q=e=>({[Symbol.toStringTag]:`Obj`,_tag:`Obj`,data:e,get:t=>m(e[t]),set:(t,n)=>Q({...e,[t]:n}),assign:t=>Q({...e,...t}),merge:t=>Q({...e,...t}),when:(t,n)=>(typeof t==`function`?t():t)?Q({...e,...n}):Q(e),omit:(...t)=>{let n={...e};for(let e of t)delete n[e];return Q(n)},pick:(...t)=>{let n={};for(let r of t)r in e&&(n[r]=e[r]);return Q(n)},keys:()=>C(Object.keys(e)),values:()=>C(Object.values(e)),entries:()=>C(Object.entries(e).map(([e,t])=>te([e,t]))),has:t=>t in e,value:()=>e,get isEmpty(){return Object.keys(e).length===0},get size(){return Object.keys(e).length},map:t=>Q(t(e)),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),ap:t=>{let n=t.data;return Q(n(e))},fold:(t,n)=>Object.keys(e).length===0?t():n(e),match:t=>t.Obj(e),foldLeft:t=>n=>n(t,e),foldRight:t=>n=>n(e,t),count:t=>+!!t(e),find:t=>t(e)?m(e):m(void 0),exists:t=>t(e),forEach:t=>t(e),reduce:t=>e,reduceRight:t=>e,contains:t=>JSON.stringify(e)===JSON.stringify(t),orElse:t=>e,orThrow:t=>e,or:t=>Q(e),orNull:()=>e,orUndefined:()=>e,toOption:()=>m(e),toEither:t=>w(e),toList:()=>C([e]),toTry:()=>x(()=>e),toPromise:()=>Promise.resolve(e),toString:()=>`Obj(${c(e)})`,toValue:()=>({_tag:`Obj`,value:e}),toJSON:()=>({"@functype":`Obj`,_tag:`Obj`,value:e}),pipe:t=>t(e),serialize:()=>s(`Obj`,e),doUnwrap(){return{ok:!0,value:e}}}),Un=e=>Q(e),Wn={of:e=>Q(e),empty:()=>Q({}),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Obj`)throw Error(`Obj.fromJSON: expected @functype="Obj", got ${JSON.stringify(t[`@functype`])}`);return Q(t.value)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return Wn.fromJSON(t)}},Gn=r(Un,Wn),$=(e=[])=>{let t=[...e],n=()=>t.length,r=()=>t.length===0,i=e=>t.includes(e),a=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return u(t,e)},o=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return ee(t,e)},c=e=>$([...t,e]),l=()=>{if(r())return[$([]),m(null)];let e=[...t],n=e.pop();return[$(e),m(n)]},te=()=>r()?m(null):m(t[t.length-1]),ne=e=>$(t.map(e)),d=e=>r()?$([]):t.reduce((t,n)=>e(n).toArray().reduce((e,t)=>e.push(t),t),$([])),f=e=>{let n=[];return t.forEach(t=>{e.toArray().forEach(e=>{n.push(e(t))})}),$(n)},p=async e=>r()?$([]):(await Promise.all(t.map(async t=>await e(t)))).reduce((e,t)=>t.toArray().reduce((e,t)=>e.push(t),e),$([])),re=()=>C(t),ie=()=>[...t],h=()=>`Stack(${t.join(`, `)})`,g=(e,n)=>t.reduce(n,e),ae=e=>n=>t.reduce(n,e),oe=e=>n=>t.reduceRight((e,t)=>n(t,e),e),se=e=>r()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return n()},get isEmpty(){return r()},contains:i,reduce:a,reduceRight:o,push:c,pop:l,peek:te,map:ne,flatMap:d,ap:f,flatMapAsync:p,toList:re,toArray:ie,toString:h,fold:g,foldLeft:ae,foldRight:oe,match:se,toValue:()=>({_tag:`Stack`,value:t}),toJSON:()=>({"@functype":`Stack`,_tag:`Stack`,value:[...t]}),pipe:e=>e([...t]),serialize:()=>s(`Stack`,t)}},Kn=(e=[])=>$(e),qn={empty:()=>$([]),of:e=>$([e]),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Stack`)throw Error(`Stack.fromJSON: expected @functype="Stack", got ${JSON.stringify(t[`@functype`])}`);return Jn(t.value)},fromYAML:e=>{let t=e.split(`
17
- `)[1]?.split(`: `)[1];if(!t)return Jn([]);let n=JSON.parse(t);return Jn(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return qn.fromJSON(t)}},Jn=r(Kn,qn);var Yn=/* @__PURE__ */ e({deserialize:()=>tr,deserializeStrict:()=>nr,fromEnvelope:()=>ar,isFunctypeValue:()=>or,serialize:()=>rr,toEnvelope:()=>ir});let Xn;const Zn=()=>(Xn===void 0&&(Xn={Option:e=>e._tag===`Some`?d(e.value):p(),Either:e=>e._tag===`Right`?w(e.value):T(e.value),Try:e=>{if(e._tag===`Success`)return x.success(e.value);let t=e.error!==void 0&&typeof e.error==`object`?a(e.error):Error(typeof e.error==`string`?e.error:``);return x.failure(t)},List:e=>C(e.value),Set:e=>ce(e.value),Map:e=>st(e.value),Obj:e=>Gn(e.value),Stack:e=>Jn(e.value),Tuple:e=>te(e.value),LazyList:e=>fe(e.value),Lazy:e=>{if(e.error!==void 0){let t=typeof e.error==`object`?a(e.error):Error(e.error);return Z.fail(t)}return Z.evaluated(e.value)},Task:e=>{if(e._tag===`Ok`)return A.ok(e.value);let t=e.error!==void 0&&typeof e.error==`object`?a(e.error):Error(typeof e.error==`string`?e.error:`Unknown Task error`);return A.err(t)}}),Xn),Qn=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$n=e=>Qn(e)&&typeof e[`@functype`]==`string`,er=e=>{if(Array.isArray(e))return e.map(er);if($n(e)){let t=e[l],n=Zn()[t];if(n===void 0)throw Error(`Serialization.deserialize: unknown @functype marker ${JSON.stringify(t)}`);let r={};for(let t of Object.keys(e))r[t]=er(e[t]);return n(r)}if(Qn(e)){let t={};for(let n of Object.keys(e))t[n]=er(e[n]);return t}return e},tr=e=>x(()=>er(JSON.parse(e))),nr=e=>x(()=>{let t=JSON.parse(e);if(!$n(t))throw Error(`Serialization.deserializeStrict: input is not a functype envelope (no @functype marker at the top level)`);return er(t)}),rr=e=>JSON.stringify(e??null),ir=e=>JSON.parse(JSON.stringify(e??null)),ar=e=>x(()=>er(e)),or=e=>typeof e==`object`&&!!e&&typeof e.serialize==`function`&&typeof e._tag==`string`;function sr(e){return e._tag}function cr(e){return String(e[Symbol.toStringTag])}function lr(e,t,n,r=0){function i(i,a,o,s){return t.emit({spanId:n,seq:r,op:i,tag:cr(e),inTag:sr(e),...a!==void 0&&{outTag:a},...o!==void 0&&{label:o},...s!==void 0&&{meta:s}}),r+1}return{map(r,a){let o=e.map(r);return lr(o,t,n,i(`map`,sr(o),a))},flatMap(r,a){let o=e.flatMap(r);return lr(o,t,n,i(`flatMap`,sr(o),a))},filter(r,a){let o=e.filter(r),s=sr(o)!==`None`;return lr(o,t,n,i(`filter`,sr(o),a,{kept:s}))},fold(t,n,r){return i(`fold`,void 0,r),e.fold(t,n)},orElse(t,n){return i(`orElse`,void 0,n,{usedDefault:sr(e)===`None`}),e.orElse(t)},unwrap(){return i(`unwrap`,void 0,void 0),e}}}function ur(e){let t=he({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{Ye as $,Yt as A,ce as At,zt as B,ln as C,De as Ct,$t as D,x as Dt,tn as E,ge as Et,Rt as F,ne as Ft,rt as G,Nt as H,Wt as I,A as J,O as K,Gt as L,qt as M,m as Mt,Vt as N,re as Nt,P as O,fe as Ot,It as P,d as Pt,Ze as Q,Ut as R,sn as S,we as St,I as T,he as Tt,M as U,Bt as V,st as W,Qe as X,et as Y,Xe as Z,gn as _,w as _t,Gn as a,ze as at,cn as b,Ce as bt,zn as c,Me as ct,Mn as d,je as dt,Je as et,Cn as f,Re as ft,bn as g,T as gt,vn as h,Ae as ht,Jn as i,Ie as it,Jt as j,p as jt,Xt as k,_ as kt,X as l,He as lt,yn as m,E as mt,lr as n,Be as nt,Hn as o,Ne as ot,xn as p,Le as pt,k as q,Yn as r,Ve as rt,Z as s,Fe as st,ur as t,Ge as tt,Nn as u,Pe as ut,hn as v,Ee as vt,R as w,C as wt,un as x,Se as xt,G as y,Te as yt,Ht as z};