functype 1.16.0 → 1.17.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 (44) 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 +2 -2
  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-BGSL4Ftn.js → full-interfaces-Bp3phEEs.js} +1 -1
  16. package/dist/functype/index.d.ts +1 -1
  17. package/dist/{index-BW7LvfTw.d.ts → index-JGJQdYpe.d.ts} +48 -13
  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/serialization/index.js +1 -1
  34. package/dist/serialization-WH9MifUy.js +4 -0
  35. package/dist/set/index.d.ts +1 -1
  36. package/dist/set/index.js +1 -1
  37. package/dist/src-CoZeVmrF.js +17 -0
  38. package/dist/try/index.d.ts +1 -1
  39. package/dist/try/index.js +1 -1
  40. package/dist/tuple/index.js +1 -1
  41. package/dist/typeclass/index.d.ts +1 -1
  42. package/package.json +2 -2
  43. package/dist/serialization-CpbxaV0t.js +0 -4
  44. package/dist/src-B53wtARh.js +0 -17
@@ -1 +1 @@
1
- import{a as e,i as t,n,r,t as i}from"../full-interfaces-BGSL4Ftn.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-Bp3phEEs.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-B53wtARh.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-BGSL4Ftn.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-CoZeVmrF.js";import{a as r,i,n as a,r as o,t as s}from"../full-interfaces-Bp3phEEs.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 { Nr as Cond, n as UntypedMatch, t as Match } from "../index-BW7LvfTw.js";
1
+ import { Pr as Cond, n as UntypedMatch, t as Match } from "../index-JGJQdYpe.js";
2
2
  export { Cond, Match, UntypedMatch };
@@ -1 +1 @@
1
- import{et as e,tt as t}from"../src-B53wtARh.js";export{t as Cond,e as Match};
1
+ import{et as e,tt as t}from"../src-CoZeVmrF.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-BW7LvfTw.js";
1
+ import { $t as Sync, Jt as Async, Qt as Ok, Xt as CancellationTokenSource, Yt as CancellationToken, Zt as Err, an as TaskParams, cn as createCancellationTokenSource, en as TaggedThrowable, in as TaskOutcome, ln as isTaggedThrowable, nn as TaskFailure, on as TaskResult, rn as TaskMetadata, sn as TaskSuccess, tn as Task } from "../../index-JGJQdYpe.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-B53wtARh.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-CoZeVmrF.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-BW7LvfTw.js";
2
- export { Decoder, DecoderError, type DecoderErrorComposite, type DecoderErrorLeaf };
1
+ import { Gt as DecoderError, Kt as DecoderErrorComposite, Ut as Decoder, Wt as Encoder, qt as DecoderErrorLeaf } from "../index-JGJQdYpe.js";
2
+ export { Decoder, DecoderError, type DecoderErrorComposite, type DecoderErrorLeaf, type Encoder };
@@ -1 +1 @@
1
- import{H as e,U as t}from"../src-B53wtARh.js";export{e as Decoder,t as DecoderError};
1
+ import{H as e,U as t}from"../src-CoZeVmrF.js";export{e as Decoder,t as DecoderError};
@@ -1,2 +1,2 @@
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-BW7LvfTw.js";
1
+ import { Bt as NoneError, Ft as EmptyListError, Ht as unwrap, It as FailureError, Lt as FailureErrorType, Mr as DoResult, Mt as Do, Nr as Doable, Nt as DoAsync, Pt as DoGenerator, Rt as LeftError, Vt as isDoCapable, jt as $, zt as LeftErrorType } from "../index-JGJQdYpe.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-B53wtARh.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-CoZeVmrF.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-BW7LvfTw.js";
1
+ import { ar as EitherBase, cr as Right, dr as TypeCheckLeft, fr as TypeCheckRight, gr as tryCatchAsync, hr as tryCatch, ir as Either, lr as RightOf, mr as isRight, or as Left, pr as isLeft, sr as LeftOf, ur as TestEither } from "../index-JGJQdYpe.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-B53wtARh.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-CoZeVmrF.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-BW7LvfTw.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-JGJQdYpe.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-B53wtARh.js";export{e as Http,n as HttpClient,t as HttpErrors};
1
+ import{d as e,f as t,p as n}from"../src-CoZeVmrF.js";export{e as Http,n as HttpClient,t as HttpErrors};
@@ -1,4 +1,4 @@
1
- var e=`1.16.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)`,`.mapAsync(f, {concurrency?}) // in order by default`],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`,`IO.async((signal?) => fetch(url, { signal })) // thunk gets the run's AbortSignal inside a region`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...], { concurrency? }) // in order by default; first failure interrupts the rest`,`IO.forEach(items, f, { concurrency? })`,`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.fromThrowing(parse) // adapt a throwing parser such as Zod's schema.parse`,`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.17.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`,`.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)`,`.flatMap(f)`,`.filter(p)`,`.filterNot(p)`,`.add(v)`,`.remove(v)`,`.mapAsync(f, {concurrency?}) // in order by default`],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()`,`Map.fromJSON(json)`,`Map.fromYAML(yaml)`,`Map.fromBinary(b)`],transform:[`.add(Tuple([k, v]))`,`.remove(k)`,`.map(f)`,`.flatMap(f)`,`.ap(ff)`,`.flatMapAsync(f)`],extract:[`.get(k) // Option<V>`,`.getOrElse(k, d)`,`.orElse(k, Option<V>)`,`.fold(z, f)`,`.foldLeft(z)(f)`,`.foldRight(z)(f)`,`.match({Empty, NonEmpty})`,`.toList()`,`.toSet()`,`[...map] // iterate [k, v] pairs`],check:[`.contains(Tuple([k, v])) // === on the value`,`.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(f)`,`.foldWith(onFailure, onSuccess)`,`.orElse(d)`,`.orNull()`,`.orThrow()`,`.toJSON()`,`Lazy.fromJSON(json)`],check:[`.isEvaluated`]}},LazyList:{description:`Lazy sequences for large/infinite data`,interfaces:r(`LazyList`,`Functor`,`Monad`,`Iterable`),methods:{create:[`LazyList(iterable)`,`LazyList.from(a, b, ...)`,`LazyList.range(start, end)`,`LazyList.iterate(seed, f)`,`LazyList.generate(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`,`.find(p)`,`.toArray()`,`.toJSON()`],check:[`.some(p)`,`.every(p)`,`.count()`]}},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)`,`// after a guard: .value / .error / .defect / .fiberId`,`// 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`,`IO.async((signal?) => fetch(url, { signal })) // thunk gets the run's AbortSignal inside a region`,`.delay(ms)`,`.zip(io)`,`.pipe(f)`,`IO.all([...], { concurrency? }) // in order by default; first failure interrupts the rest`,`IO.forEach(items, f, { concurrency? })`,`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:[`.get(i)`,`.length`,`.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)`,`encode: Encoder<TReq> = (value) => JSONValue (custom wire shape; overrides flatten)`,`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.fromThrowing(parse) // adapt a throwing parser such as Zod's schema.parse`,`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
@@ -1,2 +1,2 @@
1
- import { An as FunctypeCollection, Ar as ConcurrencyOptions, Dn as FunctypeSum, On as Functype, kn as FunctypeBase, kr as Concurrency } from "../index-BW7LvfTw.js";
1
+ import { An as FunctypeBase, Ar as Concurrency, On as FunctypeSum, jn as FunctypeCollection, jr as ConcurrencyOptions, kn as Functype } from "../index-JGJQdYpe.js";
2
2
  export { type Concurrency, type ConcurrencyOptions, Functype, FunctypeBase, FunctypeCollection, FunctypeSum };
@@ -2336,6 +2336,22 @@ declare const DecoderError: {
2336
2336
  */
2337
2337
  type Decoder$1<A> = (raw: unknown) => Either<DecoderError, A>;
2338
2338
  //#endregion
2339
+ //#region src/decoder/Encoder.d.ts
2340
+ /**
2341
+ * An `Encoder<A>` turns a typed value into the JSON that goes on the wire — the request-side
2342
+ * counterpart of {@link Decoder}. Any function with this shape is an encoder.
2343
+ *
2344
+ * Pass one as `encode` on an `Http` request when `flatten` can't express the wire shape you need:
2345
+ * custom date formats, snake_case keys, stripping fields.
2346
+ *
2347
+ * @example
2348
+ * ```typescript
2349
+ * const encodeUser: Encoder<User> = (u) => ({ user_name: u.name, created_at: u.createdAt.toISOString() })
2350
+ * Http.post("/users", { body: user, encode: encodeUser })
2351
+ * ```
2352
+ */
2353
+ type Encoder<A> = (value: A) => JSONValue;
2354
+ //#endregion
2339
2355
  //#region src/decoder/index.d.ts
2340
2356
  /**
2341
2357
  * A `Decoder<A>` converts an `unknown` value into either a typed `A` or a
@@ -3256,6 +3272,7 @@ declare const Exit: (<E extends Type, A extends Type>(value: A) => Exit<E, A>) &
3256
3272
  */
3257
3273
  isDie: <E extends Type, A extends Type>(exit: Exit<E, A>) => exit is Exit<E, A> & {
3258
3274
  readonly _tag: "Die";
3275
+ defect: unknown;
3259
3276
  };
3260
3277
  /**
3261
3278
  * Type guard for Interrupted
@@ -4707,7 +4724,7 @@ type ParseMode = "json" | "text" | "blob" | "arrayBuffer" | "raw";
4707
4724
  * Nested objects are not supported (the type prevents them at compile time).
4708
4725
  */
4709
4726
  type HttpQueryParams = Readonly<Record<string, string | number | boolean | readonly (string | number | boolean)[] | undefined | null>>;
4710
- interface HttpRequestOptions<T = unknown> {
4727
+ interface HttpRequestOptions<T = unknown, TReq = unknown> {
4711
4728
  readonly url: string;
4712
4729
  readonly method: HttpMethod;
4713
4730
  readonly headers?: Record<string, string>;
@@ -4748,10 +4765,26 @@ interface HttpRequestOptions<T = unknown> {
4748
4765
  * Set to `false` to emit each ADT's canonical `{_tag, value}` form via
4749
4766
  * `toValue()` for functype-to-functype services where both ends round-trip
4750
4767
  * the tagged shape via `Decoder.tagged.*`.
4768
+ *
4769
+ * Ignored when `encode` is set.
4751
4770
  */
4752
4771
  readonly flatten?: boolean;
4772
+ /**
4773
+ * Request-side encoder. When set, the body goes on the wire as `JSON.stringify(encode(body))`
4774
+ * with `Content-Type: application/json`, and `flatten` is ignored. Use it when `flatten` can't
4775
+ * express the wire shape: custom date formats, snake_case keys, stripping fields. A throw inside
4776
+ * `encode` fails the request with `HttpError.NetworkError`, like any body that can't be serialized.
4777
+ *
4778
+ * It applies to the body after `beforeRequest` runs, so a hook that swaps the body must keep it
4779
+ * a `TReq`.
4780
+ *
4781
+ * `TReq` is inferred from `encode`. If you pass the response type explicitly
4782
+ * (`Http.post<User>(…)`), pass the request type too (`Http.post<User, NewUser>(…)`):
4783
+ * TypeScript defaults the rest to `unknown`, and an `Encoder<NewUser>` won't fit `Encoder<unknown>`.
4784
+ */
4785
+ readonly encode?: Encoder<TReq>;
4753
4786
  }
4754
- interface HttpMethodOptions<T = unknown> {
4787
+ interface HttpMethodOptions<T = unknown, TReq = unknown> {
4755
4788
  readonly headers?: Record<string, string>;
4756
4789
  readonly body?: unknown;
4757
4790
  readonly signal?: AbortSignal;
@@ -4760,6 +4793,8 @@ interface HttpMethodOptions<T = unknown> {
4760
4793
  /** @deprecated Use `decode` (Either-returning) or an adapter package for throw-pattern validators. */
4761
4794
  readonly validate?: (data: unknown) => T;
4762
4795
  readonly flatten?: boolean;
4796
+ /** Request-side encoder; overrides `flatten`. See {@link HttpRequestOptions.encode}. */
4797
+ readonly encode?: Encoder<TReq>;
4763
4798
  /**
4764
4799
  * Query-string parameters appended to the URL. See {@link HttpQueryParams}.
4765
4800
  */
@@ -4870,24 +4905,24 @@ declare const HttpClient: Tag<HttpClientConfig>;
4870
4905
  //#endregion
4871
4906
  //#region src/fetch/Http.d.ts
4872
4907
  type HttpMethods = {
4873
- readonly request: <T = unknown>(options: HttpRequestOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4908
+ readonly request: <T = unknown, TReq = unknown>(options: HttpRequestOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4874
4909
  readonly get: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4875
- readonly post: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4876
- readonly put: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4877
- readonly patch: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4878
- readonly delete: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4910
+ readonly post: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4911
+ readonly put: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4912
+ readonly patch: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4913
+ readonly delete: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4879
4914
  readonly head: (url: string, options?: HttpMethodOptions<void>) => IO<never, HttpError, HttpResponse<void>>;
4880
4915
  readonly options: (url: string, options?: HttpMethodOptions<void>) => IO<never, HttpError, HttpResponse<void>>;
4881
4916
  };
4882
4917
  declare const Http: {
4883
4918
  readonly _tag: "Http";
4884
4919
  } & {
4885
- request: <T = unknown>(options: HttpRequestOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4920
+ request: <T = unknown, TReq = unknown>(options: HttpRequestOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4886
4921
  get: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4887
- post: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4888
- put: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4889
- patch: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4890
- delete: <T = unknown>(url: string, options?: HttpMethodOptions<T>) => IO<never, HttpError, HttpResponse<T>>;
4922
+ post: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4923
+ put: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4924
+ patch: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4925
+ delete: <T = unknown, TReq = unknown>(url: string, options?: HttpMethodOptions<T, TReq>) => IO<never, HttpError, HttpResponse<T>>;
4891
4926
  head: (url: string, options?: HttpMethodOptions<void>) => IO<never, HttpError, HttpResponse<void>>;
4892
4927
  options: (url: string, options?: HttpMethodOptions<void>) => IO<never, HttpError, HttpResponse<void>>;
4893
4928
  client: (config: HttpClientConfig) => HttpMethods;
@@ -6466,4 +6501,4 @@ declare const Match: (<T extends Type>(value: T) => UntypedMatch<T>) & {
6466
6501
  };
6467
6502
  };
6468
6503
  //#endregion
6469
- 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 };
6504
+ export { TimeoutError as $, taggedEnvelope as $n, Sync as $t, Http as A, FunctypeBase as An, Concurrency as Ar, safeStringify as At, HttpError as B, JSONValue as Bn, NoneError as Bt, HKT as C, PositiveNumber as Cn, Functor as Cr, ErrorChainElement as Ct, TryKind as D, ValidatedBrandCompanion as Dn, Extractable as Dr, createErrorSerializer as Dt, OptionKind as E, ValidatedBrand as En, ContainerOps as Er, TaskErrorInfo as Et, HttpRequestOptions as F, Collection as Fn, EmptyListError as Ft, TestClock as G, createCustomSerializer as Gn, DecoderError as Gt, HttpStatusError as H, FUNCTYPE_MARKER as Hn, unwrap as Ht, HttpRequestView as I, Set as In, FailureError as It, IO as J, createTaggedSerializer as Jn, Async as Jt, TestClockTag as K, createSerializationCompanion as Kn, DecoderErrorComposite as Kt, HttpResponse as L, List as Ln, FailureErrorType as Lt, HttpClientConfig as M, Traversable as Mn, DoResult as Mr, Do as Mt, HttpMethodOptions as N, Matchable as Nn, Doable as Nr, DoAsync as Nt, UniversalContainer as O, FunctypeSum as On, isExtractable as Or, formatError as Ot, HttpQueryParams as P, MatchableUtils as Pn, Cond as Pr, DoGenerator as Pt, Task as Q, fromYAML as Qn, Ok as Qt, ParseMode as R, Try as Rn, LeftError as Rt, EitherKind as S, PositiveInteger as Sn, AsyncMonad as Sr, TypedErrorContext as St, ListKind as T, UrlString as Tn, CollectionOps as Tr, ErrorWithTaskInfo as Tt, NetworkError as U, FunctypeEnvelope as Un, Decoder as Ut, HttpMethod as V, Serialization_d_exports as Vn, isDoCapable as Vt, ResponseDecodeError as W, SerializationResult as Wn, Encoder as Wt, RIO as X, fromBinary as Xn, CancellationTokenSource as Xt, InterruptedError as Y, envelope as Yn, CancellationToken as Yt, RepeatExhausted as Z, fromJSON as Zn, Err as Zt, ESMapType as _, ISO8601Date as _n, Widen as _r, Validator as _t, OptionConstructor as a, TaskParams as an, EitherBase as ar, LayerOutput as at, Lazy as b, NonNegativeNumber as bn, Promisable as br, ErrorStatus as bt, Tracer as c, createCancellationTokenSource as cn, Right as cr, Context as ct, Stack as d, Throwable as dn, TypeCheckLeft as dr, Tag as dt, TaggedThrowable as en, SerializedError as er, UIO as et, Valuable as f, ThrowableType as fn, TypeCheckRight as fr, TagService as ft, ESMap as g, EmailAddress as gn, tryCatchAsync as gr, ValidationRule as gt, Obj as h, BoundedString as hn, tryCatch as hr, Validation as ht, Option as i, TaskOutcome as in, Either as ir, LayerInput as it, HttpClient as j, FunctypeCollection as jn, ConcurrencyOptions as jr, $ as jt, FoldableUtils as k, Functype as kn, ParseError as kr, formatStackTrace as kt, TraceEvent as l, isTaggedThrowable as ln, RightOf as lr, ContextServices as lt, Ref as m, BoundedNumber as mn, isRight as mr, FormValidation as mt, UntypedMatch as n, TaskFailure as nn, serializeError as nr, Layer as nt, Some as o, TaskResult as on, Left as or, Exit as ot, ValuableParams as p, Base as pn, isLeft as pr, FieldValidation as pt, TestContext as q, createSerializer as qn, DecoderErrorLeaf as qt, None as r, TaskMetadata as rn, LazyList as rr, LayerError as rt, TracedOption as s, TaskSuccess as sn, LeftOf as sr, ExitTag as st, Match as t, Task$1 as tn, deserializeError as tr, UnsupportedSyncOperationError as tt, TraceOp as u, NAME as un, TestEither as ur, HasService as ut, Map$1 as v, IntegerNumber as vn, reduceRightWiden as vr, ErrorCode as vt, Kind as w, UUID as wn, Monad as wr, ErrorFormatterOptions as wt, Identity as x, PatternString as xn, Applicative as xr, TypedError as xt, KVTraversable as y, NonEmptyString as yn, reduceWiden as yr, ErrorMessage as yt, DecodeError as z, TypeNames 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 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-BW7LvfTw.js";
4
+ import { $ as TimeoutError, $n as taggedEnvelope, $t as Sync, A as Http, An as FunctypeBase, Ar as Concurrency, At as safeStringify, B as HttpError, Bn as JSONValue, Bt as NoneError, C as HKT, Cn as PositiveNumber, Cr as Functor, Ct as ErrorChainElement, D as TryKind, Dn as ValidatedBrandCompanion, Dr as Extractable, Dt as createErrorSerializer, E as OptionKind, En as ValidatedBrand, Er as ContainerOps, Et as TaskErrorInfo, F as HttpRequestOptions, Fn as Collection, Ft as EmptyListError, G as TestClock, Gn as createCustomSerializer, Gt as DecoderError, H as HttpStatusError, Hn as FUNCTYPE_MARKER, Ht as unwrap, I as HttpRequestView, In as Set, It as FailureError, J as IO, Jn as createTaggedSerializer, Jt as Async, K as TestClockTag, Kn as createSerializationCompanion, Kt as DecoderErrorComposite, L as HttpResponse, Ln as List, Lt as FailureErrorType, M as HttpClientConfig, Mn as Traversable, Mr as DoResult, Mt as Do, N as HttpMethodOptions, Nn as Matchable, Nr as Doable, Nt as DoAsync, O as UniversalContainer, On as FunctypeSum, Or as isExtractable, Ot as formatError, P as HttpQueryParams, Pn as MatchableUtils, Pr as Cond, Pt as DoGenerator, Q as Task, Qn as fromYAML, Qt as Ok, R as ParseMode, Rn as Try, Rt as LeftError, S as EitherKind, Sn as PositiveInteger, Sr as AsyncMonad, St as TypedErrorContext, T as ListKind, Tn as UrlString, Tr as CollectionOps, Tt as ErrorWithTaskInfo, U as NetworkError, Un as FunctypeEnvelope, Ut as Decoder, V as HttpMethod, Vn as Serialization_d_exports, Vt as isDoCapable, W as ResponseDecodeError, Wn as SerializationResult, Wt as Encoder, X as RIO, Xn as fromBinary, Xt as CancellationTokenSource, Y as InterruptedError, Yn as envelope, Yt as CancellationToken, Z as RepeatExhausted, Zn as fromJSON, Zt as Err, _ as ESMapType, _n as ISO8601Date, _r as Widen, _t as Validator, a as OptionConstructor, an as TaskParams, ar as EitherBase, at as LayerOutput, b as Lazy, bn as NonNegativeNumber, br as Promisable, bt as ErrorStatus, c as Tracer, cn as createCancellationTokenSource, cr as Right, ct as Context, d as Stack, dn as Throwable, dr as TypeCheckLeft, dt as Tag, en as TaggedThrowable, er as SerializedError, et as UIO, f as Valuable, fn as ThrowableType, fr as TypeCheckRight, ft as TagService, g as ESMap, gn as EmailAddress, gr as tryCatchAsync, gt as ValidationRule, h as Obj, hn as BoundedString, hr as tryCatch, ht as Validation, i as Option, in as TaskOutcome, ir as Either, it as LayerInput, j as HttpClient, jn as FunctypeCollection, jr as ConcurrencyOptions, jt as $, k as FoldableUtils, kn as Functype, kr as ParseError, kt as formatStackTrace, l as TraceEvent, ln as isTaggedThrowable, lr as RightOf, lt as ContextServices, m as Ref, mn as BoundedNumber, mr as isRight, mt as FormValidation, n as UntypedMatch, nn as TaskFailure, nr as serializeError, nt as Layer, o as Some, on as TaskResult, or as Left, ot as Exit, p as ValuableParams, pn as Base, pr as isLeft, pt as FieldValidation, q as TestContext, qn as createSerializer, qt as DecoderErrorLeaf, r as None, rn as TaskMetadata, rr as LazyList, rt as LayerError, s as TracedOption, sn as TaskSuccess, sr as LeftOf, st as ExitTag, t as Match, tn as Task$1, tr as deserializeError, tt as UnsupportedSyncOperationError, u as TraceOp, un as NAME, ur as TestEither, ut as HasService, v as Map, vn as IntegerNumber, vr as reduceRightWiden, vt as ErrorCode, w as Kind, wn as UUID, wr as Monad, wt as ErrorFormatterOptions, x as Identity, xn as PatternString, xr as Applicative, xt as TypedError, y as KVTraversable, yn as NonEmptyString, yr as reduceWiden, yt as ErrorMessage, z as DecodeError, zn as TypeNames, zt as LeftErrorType } from "./index-JGJQdYpe.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, 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 };
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, type Encoder, 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-B53wtARh.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-CoZeVmrF.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-WH9MifUy.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-BW7LvfTw.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-JGJQdYpe.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-B53wtARh.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-CoZeVmrF.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-BW7LvfTw.js";
1
+ import { b as Lazy } from "../index-JGJQdYpe.js";
2
2
  export { Lazy, type Lazy as LazyType };
@@ -1 +1 @@
1
- import{s as e}from"../src-B53wtARh.js";export{e as Lazy};
1
+ import{s as e}from"../src-CoZeVmrF.js";export{e as Lazy};
@@ -1,2 +1,2 @@
1
- import { In as List } from "../index-BW7LvfTw.js";
1
+ import { Ln as List } from "../index-JGJQdYpe.js";
2
2
  export { List };
@@ -1 +1 @@
1
- import{wt as e}from"../src-B53wtARh.js";export{e as List};
1
+ import{wt as e}from"../src-CoZeVmrF.js";export{e as List};
@@ -1,2 +1,2 @@
1
- import { v as Map } from "../index-BW7LvfTw.js";
1
+ import { v as Map } from "../index-JGJQdYpe.js";
2
2
  export { Map };
package/dist/map/index.js CHANGED
@@ -1 +1 @@
1
- import{W as e}from"../src-B53wtARh.js";export{e as Map};
1
+ import{W as e}from"../src-CoZeVmrF.js";export{e as Map};
@@ -1,2 +1,2 @@
1
- import { h as Obj } from "../index-BW7LvfTw.js";
1
+ import { h as Obj } from "../index-JGJQdYpe.js";
2
2
  export { Obj };
package/dist/obj/index.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"../src-B53wtARh.js";export{e as Obj};
1
+ import{a as e}from"../src-CoZeVmrF.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-BW7LvfTw.js";
1
+ import { a as OptionConstructor, i as Option, o as Some, r as None } from "../index-JGJQdYpe.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-B53wtARh.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-CoZeVmrF.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-BW7LvfTw.js";
1
+ import { $n as taggedEnvelope, Bn as JSONValue, Gn as createCustomSerializer, Hn as FUNCTYPE_MARKER, Jn as createTaggedSerializer, Kn as createSerializationCompanion, Qn as fromYAML, Un as FunctypeEnvelope, Wn as SerializationResult, Xn as fromBinary, Yn as envelope, Zn as fromJSON, er as SerializedError, nr as serializeError, qn as createSerializer, tr as deserializeError } from "../index-JGJQdYpe.js";
2
2
  export { FUNCTYPE_MARKER, FunctypeEnvelope, type JSONValue, SerializationResult, SerializedError, createCustomSerializer, createSerializationCompanion, createSerializer, createTaggedSerializer, deserializeError, envelope, fromBinary, fromJSON, fromYAML, serializeError, taggedEnvelope };
@@ -1 +1 @@
1
- import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,r as c,s as l,t as u,u as d}from"../serialization-CpbxaV0t.js";export{u as FUNCTYPE_MARKER,o as createCustomSerializer,c as createSerializationCompanion,i as createSerializer,e as createTaggedSerializer,n as deserializeError,s as envelope,l as fromBinary,t as fromJSON,a as fromYAML,r as serializeError,d as taggedEnvelope};
1
+ import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,r as c,s as l,t as u,u as d}from"../serialization-WH9MifUy.js";export{u as FUNCTYPE_MARKER,o as createCustomSerializer,c as createSerializationCompanion,i as createSerializer,e as createTaggedSerializer,n as deserializeError,s as envelope,l as fromBinary,t as fromJSON,a as fromYAML,r as serializeError,d as taggedEnvelope};
@@ -0,0 +1,4 @@
1
+ const e=32768,t=t=>{let n=new TextEncoder().encode(t),r=Array.from({length:Math.ceil(n.length/e)},(t,r)=>String.fromCharCode(...n.subarray(r*e,(r+1)*e)));return btoa(r.join(``))},n=e=>{let t=e.replace(/\s+/g,``).replace(/-/g,`+`).replace(/_/g,`/`),n=t.padEnd(Math.ceil(t.length/4)*4,`=`),r=atob(n),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e);return new TextDecoder(`utf-8`,{ignoreBOM:!0}).decode(i)};function r(e){if(e===void 0||typeof e==`symbol`||typeof e==`function`)return;let t=/* @__PURE__ */ new Set;function n(e){if(e===null)return`null`;switch(typeof e){case`string`:return JSON.stringify(e);case`number`:return isFinite(e)?String(e):`null`;case`boolean`:return String(e);case`bigint`:return`"${e}"`;case`undefined`:case`symbol`:case`function`:return}let r=e;if(t.has(r))return`"[Circular]"`;t.add(r);try{if(`toJSON`in r&&typeof r.toJSON==`function`)return n(r.toJSON());if(Array.isArray(r))return`[${r.map(e=>n(e)??`null`).join(`,`)}]`;let e=Object.keys(r).sort(),t=[];for(let i of e){let e=n(r[i]);e!==void 0&&t.push(`${JSON.stringify(i)}:${e}`)}return`{${t.join(`,`)}}`}finally{t.delete(r)}}try{return n(e)}catch{return}}const i=e=>e instanceof Error?a(e):typeof e==`string`?e:r(e)??`<unserializable cause>`,a=e=>{if(e instanceof Error){let t={name:e.name,message:e.message};e.stack!==void 0&&(t.stack=e.stack);let{cause:n}=e;return n!==void 0&&(t.cause=i(n)),t}return{name:`NonErrorThrowable`,message:typeof e==`string`?e:r(e)??`<unserializable>`}},o=e=>{if(typeof e==`string`)return Error(e);let t=Error(e.message);if(e.name&&(t.name=e.name),e.stack!==void 0&&(t.stack=e.stack),e.cause!==void 0){let n=t;n.cause=o(e.cause)}return t},s=`@functype`,c=(e,t,n)=>({[s]:e,_tag:t??e,value:n}),l=(e,t,n)=>({[s]:e,_tag:t,...n});function u(e,n,i){let a=arguments.length===3,o=a?n:e,l=a?i:n,u=c(e,o,l);return{toJSON:()=>JSON.stringify(u),toYAML:()=>`${s}: ${e}\n_tag: ${o}\nvalue: ${r(l)}`,toBinary:()=>t(JSON.stringify(u))}}const d=(e,n,i)=>{let a=l(e,n,i);return{toJSON:()=>JSON.stringify(a),toYAML:()=>Object.entries(a).map(([e,t])=>`${e}: ${r(t)}`).join(`
2
+ `),toBinary:()=>t(JSON.stringify(a))}},f=e=>({toJSON:()=>JSON.stringify(e),toYAML:()=>Object.entries(e).map(([e,t])=>`${e}: ${r(t)}`).join(`
3
+ `),toBinary:()=>t(JSON.stringify(e))}),p=(e,t)=>t(JSON.parse(e)),m=(e,t)=>{let n=e.split(`
4
+ `),r={};for(let e of n){let t=e.indexOf(`: `);if(t===-1)continue;let n=e.substring(0,t),i=e.substring(t+2);if(!i){r[n]=null;continue}try{r[n]=i===`null`?null:JSON.parse(i)}catch{r[n]=i}}return t(r)},h=(e,t)=>{let r=n(e);return p(r,t)},g=e=>({fromJSON:t=>p(t,e),fromYAML:t=>m(t,e),fromBinary:t=>h(t,e)});export{d as a,p as c,o as d,a as f,u as i,m as l,n as m,f as n,c as o,r as p,g as r,h as s,s as t,l as u};
@@ -1,2 +1,2 @@
1
- import { Fn as Set } from "../index-BW7LvfTw.js";
1
+ import { In as Set } from "../index-JGJQdYpe.js";
2
2
  export { Set };
package/dist/set/index.js CHANGED
@@ -1 +1 @@
1
- import{At as e}from"../src-B53wtARh.js";export{e as Set};
1
+ import{At as e}from"../src-CoZeVmrF.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,m as c,p as l,t as u}from"./serialization-WH9MifUy.js";import{n as ee,t as te}from"./typeclass-C61yDVYd.js";import{Tuple as ne}from"./tuple/index.js";const re=e=>{let t=Error(e);return t.name=`ParseError`,t},ie=(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)},ae=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:ie(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(${l(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,oe=e=>e==null?p():d(e),se={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=c(e);return se.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(oe,se),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)},mapAsync:async(e,n)=>g(await ae(t,e,n?.concurrency??1)),flatMapAsync:async(e,n)=>{let r=await ae(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 ee(n,e)},reduceRight:e=>{let n=Array.from(t);if(n.length===0)throw Error(`Cannot reduceRight empty Set`);return te(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},ce=e=>g(e),le=g([]),ue={empty:()=>le,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 de(t.value)},fromYAML:e=>{let t=e.split(`
3
+ `)[1]?.split(`: `)[1];if(!t)return de([]);let n=JSON.parse(t);return de(n)},fromBinary:e=>{let t=c(e);return ue.fromJSON(t)}},de=r(ce,ue),fe=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(fe,{of:e=>fe(e)}),pe=(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)}},me=()=>{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=pe(0);for(let r of e){if(n.get()>=t)break;yield r,n.increment()}})()),drop:t=>v((function*(){let n=pe(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=pe(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=pe(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=pe(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},he=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=pe(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(${l(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(${l(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}}}),ge=e=>{try{return y(e())}catch(e){return b(e instanceof Error?e:Error(String(e)))}},_e={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=c(e);return _e.fromJSON(t)},sequence:e=>x(()=>e.map(e=>e.orThrow())),traverse:(e,t)=>x(()=>e.map((e,n)=>t(e,n).orThrow()))},x=r(ge,_e);function ve({_tag:e,impl:t}){return{...t,_tag:e}}function ye(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 ae(t,e,n?.concurrency??`unbounded`);return S(r.flatMap(e=>Array.from(e)))},mapAsync:async(e,n)=>S(await ae(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=>ye(t,e))),find:(e,n)=>{let r=t.find(t=>e(t)&&(!n||ye(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=>ee(t,e),reduceRight:e=>te(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:()=>de(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(${l(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},be=e=>S(e),xe=S([]),Se={empty:()=>xe,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=c(e);return Se.fromJSON(t)}},C=r(be,Se),Ce=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(${l(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}}}),we=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(${l(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=>Ce(e),T=e=>we(e),Te=e=>e.isRight(),Ee=e=>e.isLeft(),De=(e,t)=>{try{return w(e())}catch(e){return T(t(e))}},Oe=e=>Ce(e);console.assert(Oe);const ke=e=>we(e);console.assert(ke);const Ae=async(e,t)=>{try{let t=await e();return w(t)}catch(e){return T(t(e))}},je=(e,t)=>t?w(e):T(e),Me={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)=>Me.sequence(e.map(t)),traverseAsync:async(e,t,n)=>{let r=await ae(e,t,n?.concurrency??1,e=>e.isLeft());return Me.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=c(e);return Me.fromJSON(t)}},Ne=r(je,Me);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 Pe=E(`PositiveNumber`,e=>e>0),Fe=E(`NonNegativeNumber`,e=>e>=0),Ie=E(`IntegerNumber`,e=>Number.isInteger(e)),Le=Pe.refine(`PositiveInteger`,e=>Number.isInteger(e)),Re=E(`NonEmptyString`,e=>e.length>0),ze=E(`EmailAddress`,e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),Be=E(`UrlString`,e=>{try{return new URL(e),!0}catch{return!1}}),Ve=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)),He=E(`ISO8601Date`,e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function Ue(e,t,n){return E(e,e=>e>=t&&e<=n)}function We(e,t,n){return E(e,e=>e.length>=t&&e.length<=n)}function Ge(e,t){return E(e,e=>t.test(e))}const Ke=e=>{let t=e=>typeof e==`function`?e():e,n={when:(r,i)=>e.resolved?n:r?Ke({resolved:!0,value:t(i)}):n,elseWhen:(r,i)=>e.resolved?n:r?Ke({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},qe=()=>Ke({resolved:!1}),Je=r(qe,{of:()=>qe(),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}}),Ye=(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 Ye(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(Ye(e.value,n))return{matched:!0,result:t(r,e.value)};return{matched:!1}},r={case:(n,i)=>e.resolved?r:Ye(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(Ye(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},Xe=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 Ye(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(Ye(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}))})}}},Ze=r(e=>Xe(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(Ye(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(Ye(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 Qe(e,t){return{...ve({_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 $e=`Throwable`;var et=class e extends Error{constructor(e,t){super(e,{cause:t?.cause}),this._tag=$e,this.name=t?.taskInfo?.name??`Throwable`,Object.defineProperties(this,{_tag:{value:$e,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 tt(e){return e instanceof Error&&typeof e==`object`&&e._tag===`Throwable`}const nt=(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=et.apply(e,t,r),s={...Qe(`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={...Qe(`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?nt(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},rt=()=>{let e=new AbortController,t=me();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)}}))}}},it=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&&tt(e)){let i=/* @__PURE__ */ Error(`${t}: ${e.message}`),a=et.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{...Qe(`Task`,r),_type:`Task`}},at={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)=>nt(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=me();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=at.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=me();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:rt,cancellable:(e,t)=>{let n=rt();return{task:A(t).Async(()=>e(n.token),e=>e,()=>{},n.token),cancel:()=>n.cancel()}},withProgress:(e,t=()=>{},n)=>{let r=rt(),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(it,at),ot=Map,j=e=>{let t={values:new ot(e)},n=()=>Array.from(t.values.entries()).map(([e,t])=>ne([e,t])),r=e=>j(new ot(t.values).set(e.toArray()[0],e.toArray()[1]).entries()),i=e=>{let n=new ot(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 ot;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())},te=e=>C(n()).reduce(e),re=e=>C(n()).reduceRight(e),ie=e=>t=>C(n()).foldLeft(e)(t),ae=e=>t=>C(n()).foldRight(e)(t),d=e=>m(t.values.get(e)),f=(e,n)=>m(t.values.get(e)).orElse(n),p=()=>t.values.size===0,oe=(e,n)=>m(t.values.get(e)).or(n),se=(e,t)=>C(n()).fold(e,t),h=()=>C(n()),g=()=>de(n()),ce=()=>`Map(${n().toString()})`,le=e=>p()?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:te,reduceRight:re,foldLeft:ie,foldRight:ae,fold:se,match:le,get:d,getOrElse:f,get isEmpty(){return p()},orElse:oe,toList:h,toSet:g,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()))}},st=e=>j(e),ct=j([]),lt={empty:()=>ct,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 ut(t.value)},fromYAML:e=>{let t=e.split(`
10
+ `)[1]?.split(`: `)[1];if(!t)return ut([]);let n=JSON.parse(t);return ut(n)},fromBinary:e=>{let t=c(e);return lt.fromJSON(t)}},ut=r(st,lt),dt=(e,t,n)=>({_tag:`Leaf`,path:e,message:t,cause:n}),ft=(e,t)=>({_tag:`Composite`,path:e,children:t}),pt=e=>e._tag===`Leaf`,mt=e=>e._tag===`Composite`,ht=(e,t)=>e._tag===`Leaf`?t.Leaf(e):t.Composite(e),gt=(e,t)=>t._tag===`Leaf`?{...t,path:[e,...t.path]}:{...t,children:C(t.children.toArray().map(t=>gt(e,t)))},_t=e=>e._tag===`Leaf`?C([{path:e.path,message:e.message}]):C(e.children.toArray().flatMap(e=>_t(e).toArray())),vt=e=>_t(e).toArray().map(({path:e,message:t})=>`${yt(e)}: ${t}`).join(`
11
+ `),yt=e=>e.length===0?`(root)`:e.reduce((e,t)=>t.startsWith(`[`)&&t.endsWith(`]`)?`${e}${t}`:e===``?t:`${e}.${t}`,``),M=r({},{leaf:dt,composite:ft,isLeaf:pt,isComposite:mt,match:ht,prepend:gt,flatten:_t,format:vt}),bt=e=>typeof e==`string`?w(e):T(M.leaf([],`expected string`,{received:e})),xt=e=>typeof e==`number`?w(e):T(M.leaf([],`expected number`,{received:e})),St=e=>typeof e==`boolean`?w(e):T(M.leaf([],`expected boolean`,{received:e})),Ct=e=>w(e),wt=e=>t=>{try{return w(e(t))}catch(e){return T(M.leaf([],e instanceof Error?e.message:String(e),e))}},Tt=e=>t=>t==null?w(null):e(t),Et=e=>t=>t==null?w(p()):e(t).fold(e=>T(e),e=>w(d(e))),Dt={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}))}},Ot=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)})}),Mt(n,()=>C(r))},kt=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)})}),Mt(n,()=>r)},At=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 Mt(r,()=>ut(i))},jt=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 Mt(r,()=>i)},Mt=(e,t)=>e.length===0?w(t()):e.length===1?T(e[0]):T(M.composite([],C(e))),Nt={string:bt,number:xt,boolean:St,unknown:Ct,fromThrowing:wt,nullable:Tt,option:Et,either:Dt,list:Ot,array:kt,map:At,object:jt},Pt=(e,t)=>M.prepend(e,t),Ft=(e,t,n)=>M.prepend(e,M.prepend(`[${t}]`,n)),It={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(Pt(`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(Pt(`value`,e)),e=>w(w(e))):r._tag===`Left`?e(r.value).fold(e=>T(Pt(`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(Pt(`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(Ft(`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(ut(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)))}},Lt=r({},{...Nt,tagged:It});function Rt(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 zt={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 Bt(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=Rt(s),n!==`unknown`&&n in zt&&(r=zt[n]),n===`List`))return Vt(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 Vt(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 Ht(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=Rt(o),n!==`unknown`&&n in zt&&(r=zt[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 Ut(e){return typeof e==`object`&&!!e&&`doUnwrap`in e&&typeof e.doUnwrap==`function`}function Wt(e){let t=e.doUnwrap();if(t.ok)return t.value;throw`error`in t?t.error:Error(`Cannot unwrap empty monad`)}function*Gt(e){return yield e}const Kt=(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},qt=(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},Jt=(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},Yt=(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},Xt={includeTasks:!0,includeStackTrace:!1,separator:`
12
+ `,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function Zt(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`?Qt(n):n},2)}function Qt(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 $t(e,t){let n={...Xt,...t},r=e instanceof Error?e:et.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=Qt(e.stack).split(`
15
+ `).slice(1),i=n.maxStackFrames??Xt.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${Zt(e)}`:`\n\nContext:\n${Zt(e)}`;a+=t}}return a}function en(){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?Qt(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?Qt(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=et.apply(t,r,{name:e,description:t});return n(a,{code:e,message:t,status:tn(e),context:r,timestamp:(/* @__PURE__ */ new Date()).toISOString(),traceId:i?.traceId})},tn=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)}},nn={...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`))}},rn=n(F.rule,nn);function an(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function on(e){return an(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 sn=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),sn(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return sn(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>sn(/* @__PURE__ */ new Map),make:(e,t)=>{let n=/* @__PURE__ */ new Map;return n.set(e.id,t),sn(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},L=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,value:e,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(${l(e)})`},toJSON(){return{_tag:`Success`,value:e}}}),cn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,error:e,isSuccess(){return!1},isFailure(){return!0},isDie(){return!1},isInterrupted(){return!1},map(t){return cn(e)},mapError(t){return cn(t(e))},mapBoth(t,n){return cn(t(e))},flatMap(t){return cn(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(${l(e)})`},toJSON(){return{_tag:`Failure`,error:e}}}),ln=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Die`,defect:e,isSuccess(){return!1},isFailure(){return!1},isDie(){return!0},isInterrupted(){return!1},map(t){return ln(e)},mapError(t){return ln(e)},mapBoth(t,n){return ln(e)},flatMap(t){return ln(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(${l(e)})`},toJSON(){return{_tag:`Die`,defect:e}}}),un=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,fiberId:e,isSuccess(){return!1},isFailure(){return!1},isDie(){return!1},isInterrupted(){return!0},map(t){return un(e)},mapError(t){return un(e)},mapBoth(t,n){return un(e)},flatMap(t){return un(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=>cn(e),die:e=>ln(e),interrupt:e=>un(e),interrupted:()=>un(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isDie:e=>e.isDie(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?L(e.value):cn(e.value),fromOption:(e,t)=>e.isSome()?L(e.value):cn(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)}}),dn=e=>{let t=e.filter(e=>e!==void 0),[n]=t;if(n!==void 0&&t.length===1)return{signal:n,dispose:()=>{}};let r=new AbortController,i=t.find(e=>e.aborted);if(i)return r.abort(i.reason),{signal:r.signal,dispose:()=>{}};let a=t.map(e=>{let t=()=>r.abort(e.reason);return e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)});return{signal:r.signal,dispose:()=>a.forEach(e=>e())}},z=e=>e;var fn=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},pn=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`}},mn=class extends Error{constructor(e){super(`Cannot run ${e} effect synchronously — use run()/runExit() instead`),this.operation=e,this._tag=`UnsupportedSyncOperationError`,this.name=`UnsupportedSyncOperationError`}},hn=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 gn=Symbol.for(`functype/IO/effect`),B=e=>e[gn],V=e=>{let t={[Symbol.toStringTag]:`IO`,[gn]: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 hn(n.max)));let r=i=>t.flatMap(t=>{if(e(t))return z(W.succeed(t));if(i<=1)return z(W.fail(new hn(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=xn(e);return T(t?t.value:new pn)},async runOrThrow(){let e=await U(B(this));if(e.isSuccess())return e.orThrow();let t=xn(e);throw t?t.value:new pn},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);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=xn(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(${l(e._tag)})`},toJSON(){return{_tag:`IO`,effect:e._tag}},*[Symbol.iterator](){return yield t}};return t},_n=e=>{if(bn(e)||e instanceof mn)throw e},vn=/* @__PURE__ */ new WeakSet,yn=()=>{let e=new pn;return vn.add(e),e},bn=e=>e instanceof pn&&!vn.has(e),xn=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 _n(t),e.f(t)}case`Recover`:try{return H(B(e.effect),t)}catch(t){return _n(t),e.fallback}case`RecoverWith`:try{return z(H(B(e.effect),t))}catch(n){_n(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 _n(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 pn;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=bn(e)?z(R.interrupted()):e instanceof mn?z(R.die(e)):z(R.fail(e)),e}finally{H(B(e.release(n,r)),t)}}case`All`:return z(e.effects.map(e=>H(B(e),t)));case`Race`:throw new mn(`race`);case`Timeout`:throw new mn(`timeout`);case`InterruptWhen`:if(e.signal.aborted)throw yn();try{return H(B(e.effect),t)}catch(e){throw bn(e)?yn():e}}},Sn=(e,t)=>{if(t)return e.isDie()?z(e):R.interrupted()},Cn=(e,t,n)=>e.isSuccess()||e.isDie()?e:n?R.interrupted():e.isInterrupted()||t.aborted?R.fail(new pn):e,U=async(e,t=I.empty(),n)=>{if(n?.aborted)return R.interrupted();let r=()=>n?.aborted??!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(n);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=xn(i);return a?Sn(i,r())||z(R.fail(e.f(a.value))):z(i)}case`Recover`:{let i=await U(B(e.effect),t,n);return xn(i)?Sn(i,r())??R.succeed(e.fallback):z(i)}case`RecoverWith`:{let i=await U(B(e.effect),t,n),a=xn(i);if(!a)return z(i);let o=Sn(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=xn(i);return a?Sn(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,i=new Promise(t=>{r=setTimeout(()=>t(R.fail(new fn(e.duration))),e.duration)}),a=U(B(e.effect),t,n);try{return await Promise.race([a,i])}finally{clearTimeout(r)}}case`InterruptWhen`:{let{signal:i}=e,a=dn([n,i]);try{let n=await U(B(e.effect),t,a.signal);return z(Cn(n,i,r()))}finally{a.dispose()}}case`All`:return z(await wn(e.effects,e.concurrency,t,n))}}catch(e){return R.die(e)}},wn=(e,t,n,r)=>{if(e.length===0)return Promise.resolve(R.succeed([]));let i=new AbortController,a=dn([r,i.signal]),o=Array(e.length),s={next:0,succeeded:0,settled:!1};return new Promise(r=>{let c=e=>{s.settled=!0,e.isSuccess()||i.abort(),a.dispose(),r(e)},l=()=>{if(s.settled||s.next>=e.length)return;let t=s.next;s.next=t+1,U(B(e[t]),n,a.signal).then(n=>{if(!s.settled){if(!n.isSuccess()){c(z(n));return}o[t]=n.orThrow(),s.succeeded+=1,s.succeeded===e.length?c(R.succeed(o)):l()}})};Array.from({length:ie(t,e.length)}).forEach(l)})},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(t=>{if(!n)return e(t);if(!t)return e(n);let r=dn([n,t]);try{return e(r.signal).finally(r.dispose)}catch(e){throw r.dispose(),e}}).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,t)=>{let n=t?.concurrency??1;if(ie(n,1),n!==1&&e.length>1)return V(z({_tag:`All`,effects:e,concurrency:n}));if(e.length===0)return z(W.succeed([]));let r=z(W.succeed([]));return z(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),r))},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 hn(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,n)=>{let r=n?.concurrency??1;if(ie(r,1),r!==1)return W.unit.flatMap(()=>W.all(e.map(t),n));if(e.length===0)return z(W.succeed([]));let i=z(W.succeed([]));return z(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),i))},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 Tn(W.succeed({}))}},Tn=e=>({effect:e,bind(t,n){let r=e.flatMap(e=>n(e).map(n=>({...e,[t]:n})));return Tn(r)},let(t,n){let r=e.map(e=>({...e,[t]:n(e)}));return Tn(r)},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return Tn(e.tap(t))},tapEffect(t){return Tn(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`})`}}),En={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()))},Dn=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),On=()=>{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})})}}},kn=Dn(`TestClock`),An={make:On,tag:kn,test:async e=>e(On()),get get(){return G.service(kn)},advance:e=>G.serviceWithIO(kn,t=>G.async(()=>t.advance(e))),setTime:e=>G.serviceWithIO(kn,t=>G.async(()=>t.setTime(e))),get runAll(){return G.serviceWithIO(kn,e=>G.async(()=>e.runAll()))},context:()=>{let e=On();return{clock:e,context:I.make(kn,e)}}},jn={make:()=>{let e=On(),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=On();return jn.make().withService(kn,e)}},Mn=Dn(`HttpClient`),Nn={},Pn=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)}}}),Fn=(e,t)=>!e||t.startsWith(`http://`)||t.startsWith(`https://`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`,In=(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},Ln=(e,t,n)=>{let r=Fn(e,t);return n?In(r,n):r},Rn=(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(Rn(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(Rn(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(Rn(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(Rn(e,`List`)){let n=e.toArray().map(e=>q(e,t));return t===`tagged`?{_tag:`List`,value:n}:n}if(Rn(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},zn=(e,t,n)=>{if(e==null)return{serialized:void 0,contentType:void 0};if(n)return{serialized:JSON.stringify(n(e)),contentType:`application/json`};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}},Bn=e=>{let t=e.get(`content-type`)??``;return t.includes(`application/json`)?`json`:t.startsWith(`text/`)?`text`:`raw`},Vn=async(e,t,n,r,i,a)=>{let o=t??Bn(e.headers),s,c={};switch(o){case`json`:{let t=await e.text();c.value=t;try{s=JSON.parse(t)}catch(e){throw Pn.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 Pn.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 Pn.decodeError(n,r,t,e)}else l=s;return{data:l,status:e.status,statusText:e.statusText,headers:e.headers}},Hn=(e,t)=>{let n={url:Ln(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:zn(n.body,r,t.encode)}}catch(e){return{ok:!1,cause:e}}})();if(!i.ok)return G.fail(Pn.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 Pn.httpStatusError(n.url,n.method,e.status,e.statusText,t)}return Vn(e,n.parseAs,n.url,n.method,t.decode,t.validate)}),e=>typeof e==`object`&&e&&`_tag`in e?e:Pn.networkError(n.url,n.method,e));return e.afterResponse?c.flatMap(t=>e.afterResponse(t).map(e=>e)):c})},Un=e=>Hn(Nn,e),Wn=r({},{request:Un,get:(e,t)=>Un({...t,url:e,method:`GET`}),post:(e,t)=>Un({...t,url:e,method:`POST`}),put:(e,t)=>Un({...t,url:e,method:`PUT`}),patch:(e,t)=>Un({...t,url:e,method:`PATCH`}),delete:(e,t)=>Un({...t,url:e,method:`DELETE`}),head:(e,t)=>Un({...t,url:e,method:`HEAD`,parseAs:`raw`}),options:(e,t)=>Un({...t,url:e,method:`OPTIONS`,parseAs:`raw`}),client:e=>({request:t=>Hn(e,t),get:(t,n)=>Hn(e,{...n,url:t,method:`GET`}),post:(t,n)=>Hn(e,{...n,url:t,method:`POST`}),put:(t,n)=>Hn(e,{...n,url:t,method:`PUT`}),patch:(t,n)=>Hn(e,{...n,url:t,method:`PATCH`}),delete:(t,n)=>Hn(e,{...n,url:t,method:`DELETE`}),head:(t,n)=>Hn(e,{...n,url:t,method:`HEAD`,parseAs:`raw`}),options:(t,n)=>Hn(e,{...n,url:t,method:`OPTIONS`,parseAs:`raw`})})}),Gn={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)},Kn=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),J=e=>typeof e==`object`&&!!e&&e._tag===`List`,qn=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),Jn=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),Y=()=>{let e=(e,t)=>{if(Kn(e)||J(e)||qn(e)||Jn(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(Kn(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(qn(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(Jn(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(Kn(e)||J(e)||qn(e)||Jn(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(Kn(e)&&Kn(t)||J(e)&&J(t)||qn(e)&&qn(t)||Jn(e)&&Jn(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},i=e=>{if(Kn(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(Kn(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`}},Yn=Y();Y.map=(e,t)=>Yn.map(e,t),Y.flatten=e=>Yn.flatten(e),Y.flatMap=(e,t)=>Yn.flatMap(e,t),Y.ap=(e,t)=>Yn.ap(e,t),Y.sequence=e=>Yn.sequence(e),Y.traverse=(e,t)=>Yn.traverse(e,t),Y.isOption=Kn,Y.isList=J,Y.isEither=qn,Y.isTry=Jn;const Xn=e=>({id:e,isSame:t=>t.id===e}),Zn=r(Xn,{of:e=>Xn(e),pure:e=>Xn(e)}),X=e=>{let t=!1,n,r,a=!1,c=()=>{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 c()}catch{return e}},orNull:()=>{try{return c()}catch{return null}},orThrow:e=>{try{return c()}catch(t){throw e??t}},or:e=>Z(()=>{try{return c()}catch{return e.orThrow()}}),orUndefined:()=>{try{return c()}catch{return}},map:e=>Z(()=>e(c())),ap:e=>Z(()=>e.orThrow()(c())),mapAsync:async e=>{let t=await e(c());return Z(()=>t)},flatMap:e=>Z(()=>e(c()).orThrow()),flatMapAsync:async e=>{let t=await e(c());return Z(()=>t.orThrow())},filter:e=>Z(()=>{let t=c();return e(t)?d(t):p}),recover:e=>Z(()=>{try{return c()}catch(t){return e(t)}}),recoverWith:e=>Z(()=>{try{return c()}catch(t){return e(t).orThrow()}}),toOption:()=>{try{return d(c())}catch{return p}},toEither:()=>{try{return w(c())}catch(e){return T(e)}},toEitherWith:e=>{try{return w(c())}catch(t){return T(e(t))}},toTry:()=>x(()=>c()),tap:e=>Z(()=>{let t=c();return e(t),t}),tapError:e=>Z(()=>{try{return c()}catch(t){throw e(t),t}}),fold:e=>e(c()),foldWith:(e,t)=>{try{return t(c())}catch(t){return e(t)}},foldLeft:e=>t=>t(e,c()),foldRight:e=>t=>t(c(),e),match:e=>e.Lazy(c()),toString:()=>t&&!a?`Lazy(${l(n)})`:t&&a?`Lazy(<error: ${r instanceof Error?r.message:String(r)}>)`:`Lazy(<not evaluated>)`,toValue:()=>{try{return{_tag:`Lazy`,value:c()}}catch(e){return{_tag:`Lazy`,error:e instanceof Error?e:Error(String(e))}}},get size(){try{return c(),1}catch{return 0}},get isEmpty(){try{return c(),!1}catch{return!0}},contains:e=>{try{return c()===e}catch{return!1}},reduce:e=>c(),reduceRight:e=>c(),count:e=>{try{return+!!e(c())}catch{return 0}},find:e=>{try{let t=c();return e(t)?d(t):p}catch{return p}},exists:e=>{try{return e(c())}catch{return!1}},forEach:e=>{try{e(c())}catch{}},pipe:e=>e(c()),toJSON:()=>{try{return{"@functype":`Lazy`,_tag:`Lazy`,value:c()}}catch(e){return{"@functype":`Lazy`,_tag:`Lazy`,error:o(e)}}},serialize:()=>{try{return s(`Lazy`,c())}catch(e){return i(`Lazy`,`Lazy`,{error:o(e)})}},typeable:`Lazy`}},Qn={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 Qn.fail(e)}return Qn.evaluated(t.value)}},Z=r(X,Qn),$n={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])=>ne([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(${l(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}}}),er=e=>Q(e),tr={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=c(e);return tr.fromJSON(t)}},nr=r(er,tr),$=(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 ee(t,e)},o=e=>{if(t.length===0)throw Error(`Cannot reduce an empty stack`);return te(t,e)},c=e=>$([...t,e]),l=()=>{if(r())return[$([]),m(null)];let e=[...t],n=e.pop();return[$(e),m(n)]},u=()=>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)},ae=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),$([])),d=()=>C(t),f=()=>[...t],p=()=>`Stack(${t.join(`, `)})`,oe=(e,n)=>t.reduce(n,e),se=e=>n=>t.reduce(n,e),h=e=>n=>t.reduceRight((e,t)=>n(t,e),e),g=e=>r()?e.Empty():e.NonEmpty([...t]);return{[Symbol.toStringTag]:`Stack`,_tag:`Stack`,get size(){return n()},get isEmpty(){return r()},contains:i,reduce:a,reduceRight:o,push:c,pop:l,peek:u,map:ne,flatMap:re,ap:ie,flatMapAsync:ae,toList:d,toArray:f,toString:p,fold:oe,foldLeft:se,foldRight:h,match:g,toValue:()=>({_tag:`Stack`,value:t}),toJSON:()=>({"@functype":`Stack`,_tag:`Stack`,value:[...t]}),pipe:e=>e([...t]),serialize:()=>s(`Stack`,t)}},rr=(e=[])=>$(e),ir={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 ar(t.value)},fromYAML:e=>{let t=e.split(`
17
+ `)[1]?.split(`: `)[1];if(!t)return ar([]);let n=JSON.parse(t);return ar(n)},fromBinary:e=>{let t=c(e);return ir.fromJSON(t)}},ar=r(rr,ir);var or=/* @__PURE__ */ e({deserialize:()=>fr,deserializeStrict:()=>pr,fromEnvelope:()=>gr,isFunctypeValue:()=>_r,serialize:()=>mr,toEnvelope:()=>hr});let sr;const cr=()=>(sr===void 0&&(sr={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=>de(e.value),Map:e=>ut(e.value),Obj:e=>nr(e.value),Stack:e=>ar(e.value),Tuple:e=>ne(e.value),LazyList:e=>he(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)}}),sr),lr=e=>typeof e==`object`&&!!e&&!Array.isArray(e),ur=e=>lr(e)&&typeof e[`@functype`]==`string`,dr=e=>{if(Array.isArray(e))return e.map(dr);if(ur(e)){let t=e[u],n=cr()[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]=dr(e[t]);return n(r)}if(lr(e)){let t={};for(let n of Object.keys(e))t[n]=dr(e[n]);return t}return e},fr=e=>x(()=>dr(JSON.parse(e))),pr=e=>x(()=>{let t=JSON.parse(e);if(!ur(t))throw Error(`Serialization.deserializeStrict: input is not a functype envelope (no @functype marker at the top level)`);return dr(t)}),mr=e=>JSON.stringify(e??null),hr=e=>JSON.parse(JSON.stringify(e??null)),gr=e=>x(()=>dr(e)),_r=e=>typeof e==`object`&&!!e&&typeof e.serialize==`function`&&typeof e._tag==`string`;function vr(e){return e._tag}function yr(e){return String(e[Symbol.toStringTag])}function br(e,t,n,r=0){function i(i,a,o,s){return t.emit({spanId:n,seq:r,op:i,tag:yr(e),inTag:vr(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 br(o,t,n,i(`map`,vr(o),a))},flatMap(r,a){let o=e.flatMap(r);return br(o,t,n,i(`flatMap`,vr(o),a))},filter(r,a){let o=e.filter(r),s=vr(o)!==`None`;return br(o,t,n,i(`filter`,vr(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:vr(e)===`None`}),e.orElse(t)},unwrap(){return i(`unwrap`,void 0,void 0),e}}}function xr(e){let t=ve({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{Qe as $,$t as A,de as At,Ut as B,mn as C,Ae as Ct,rn as D,x as Dt,on as E,ye as Et,Ht as F,re as Ft,ot as G,Lt as H,Jt as I,A as J,O as K,Yt as L,Zt as M,m as Mt,Gt as N,oe as Nt,P as O,he as Ot,Bt as P,d as Pt,et as Q,qt as R,fn as S,De as St,I as T,ve as Tt,M as U,Wt as V,ut as W,tt as X,rt as Y,$e as Z,Dn as _,w as _t,nr as a,He as at,pn as b,Ee as bt,Zn as c,Fe as ct,Wn as d,Pe as dt,Ze as et,Pn as f,Ve as ft,jn as g,T as gt,kn as h,Ne as ht,ar as i,ze as it,Qt as j,p as jt,en as k,_ as kt,Y as l,Ge as lt,An as m,E as mt,br as n,Ue as nt,$n as o,Ie as ot,Mn as p,Be as pt,k as q,or as r,We as rt,Z as s,Re as st,xr as t,Je as tt,Gn as u,Le as ut,En as v,ke as vt,R as w,C as wt,hn as x,Te as xt,G as y,Oe as yt,Kt as z};
@@ -1,2 +1,2 @@
1
- import { Ln as Try, Rn as TypeNames } from "../index-BW7LvfTw.js";
1
+ import { Rn as Try, zn as TypeNames } from "../index-JGJQdYpe.js";
2
2
  export { Try, TypeNames };
package/dist/try/index.js CHANGED
@@ -1 +1 @@
1
- import{Dt as e}from"../src-B53wtARh.js";export{e as Try};
1
+ import{Dt as e}from"../src-CoZeVmrF.js";export{e as Try};
@@ -1 +1 @@
1
- import{t as e}from"../Companion-DiOMBHDG.js";import{i as t}from"../serialization-CpbxaV0t.js";const n=e=>{let n={[Symbol.toStringTag]:`Tuple`,_tag:`Tuple`,map:t=>{let n=t(e);return r(n)},flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,length:e.length,[Symbol.iterator](){let t=0;return{next:()=>t<e.length?{value:e[t++],done:!1}:{value:void 0,done:!0}}},fold:(t,n)=>e.reduce(n,t),foldLeft:t=>n=>e.reduce(n,t),foldRight:t=>n=>e.reduceRight((e,t)=>n(t,e),t),pipe:e=>e(n),serialize:()=>t(`Tuple`,e),toJSON:()=>({"@functype":`Tuple`,_tag:`Tuple`,value:[...e]}),toValue:()=>({_tag:`Tuple`,value:e}),toString:()=>`Tuple(${e.map(e=>String(e)).join(`, `)})`};return n},r=e(e=>n(e),{of:(...e)=>n(e),pair:(e,t)=>n([e,t]),triple:(e,t,r)=>n([e,t,r]),empty:()=>n([]),from:e=>n(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Tuple`)throw Error(`Tuple.fromJSON: expected @functype="Tuple", got ${JSON.stringify(t[`@functype`])}`);return n(t.value)}});export{r as Tuple};
1
+ import{t as e}from"../Companion-DiOMBHDG.js";import{i as t}from"../serialization-WH9MifUy.js";const n=e=>{let n={[Symbol.toStringTag]:`Tuple`,_tag:`Tuple`,map:t=>{let n=t(e);return r(n)},flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,length:e.length,[Symbol.iterator](){let t=0;return{next:()=>t<e.length?{value:e[t++],done:!1}:{value:void 0,done:!0}}},fold:(t,n)=>e.reduce(n,t),foldLeft:t=>n=>e.reduce(n,t),foldRight:t=>n=>e.reduceRight((e,t)=>n(t,e),t),pipe:e=>e(n),serialize:()=>t(`Tuple`,e),toJSON:()=>({"@functype":`Tuple`,_tag:`Tuple`,value:[...e]}),toValue:()=>({_tag:`Tuple`,value:e}),toString:()=>`Tuple(${e.map(e=>String(e)).join(`, `)})`};return n},r=e(e=>n(e),{of:(...e)=>n(e),pair:(e,t)=>n([e,t]),triple:(e,t,r)=>n([e,t,r]),empty:()=>n([]),from:e=>n(e),fromJSON:e=>{let t=JSON.parse(e);if(t[`@functype`]!==void 0&&t[`@functype`]!==`Tuple`)throw Error(`Tuple.fromJSON: expected @functype="Tuple", got ${JSON.stringify(t[`@functype`])}`);return n(t.value)}});export{r as Tuple};
@@ -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-BW7LvfTw.js";
1
+ import { Cr as Functor, Er as ContainerOps, Sr as AsyncMonad, Tr as CollectionOps, _r as Widen, br as Promisable, vr as reduceRightWiden, wr as Monad, xr as Applicative, yr as reduceWiden } from "../index-JGJQdYpe.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.16.0",
3
+ "version": "1.17.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.1",
37
- "eslint-config-functype": "2.116.0",
37
+ "eslint-config-functype": "2.117.0",
38
38
  "eslint-plugin-functional": "^10.0.1",
39
39
  "fast-check": "^4.10.2",
40
40
  "globals": "^17.13.0",
@@ -1,4 +0,0 @@
1
- function e(e){if(e===void 0||typeof e==`symbol`||typeof e==`function`)return;let t=/* @__PURE__ */ new Set;function n(e){if(e===null)return`null`;switch(typeof e){case`string`:return JSON.stringify(e);case`number`:return isFinite(e)?String(e):`null`;case`boolean`:return String(e);case`bigint`:return`"${e}"`;case`undefined`:case`symbol`:case`function`:return}let r=e;if(t.has(r))return`"[Circular]"`;t.add(r);try{if(`toJSON`in r&&typeof r.toJSON==`function`)return n(r.toJSON());if(Array.isArray(r))return`[${r.map(e=>n(e)??`null`).join(`,`)}]`;let e=Object.keys(r).sort(),t=[];for(let i of e){let e=n(r[i]);e!==void 0&&t.push(`${JSON.stringify(i)}:${e}`)}return`{${t.join(`,`)}}`}finally{t.delete(r)}}try{return n(e)}catch{return}}const t=t=>t instanceof Error?n(t):typeof t==`string`?t:e(t)??`<unserializable cause>`,n=n=>{if(n instanceof Error){let e={name:n.name,message:n.message};n.stack!==void 0&&(e.stack=n.stack);let{cause:r}=n;return r!==void 0&&(e.cause=t(r)),e}return{name:`NonErrorThrowable`,message:typeof n==`string`?n:e(n)??`<unserializable>`}},r=e=>{if(typeof e==`string`)return Error(e);let t=Error(e.message);if(e.name&&(t.name=e.name),e.stack!==void 0&&(t.stack=e.stack),e.cause!==void 0){let n=t;n.cause=r(e.cause)}return t},i=`@functype`,a=(e,t,n)=>({[i]:e,_tag:t??e,value:n}),o=(e,t,n)=>({[i]:e,_tag:t,...n});function s(t,n,r){let o=arguments.length===3,s=o?n:t,c=o?r:n,l=a(t,s,c);return{toJSON:()=>JSON.stringify(l),toYAML:()=>`${i}: ${t}\n_tag: ${s}\nvalue: ${e(c)}`,toBinary:()=>Buffer.from(JSON.stringify(l)).toString(`base64`)}}const c=(t,n,r)=>{let i=o(t,n,r);return{toJSON:()=>JSON.stringify(i),toYAML:()=>Object.entries(i).map(([t,n])=>`${t}: ${e(n)}`).join(`
2
- `),toBinary:()=>Buffer.from(JSON.stringify(i)).toString(`base64`)}},l=t=>({toJSON:()=>JSON.stringify(t),toYAML:()=>Object.entries(t).map(([t,n])=>`${t}: ${e(n)}`).join(`
3
- `),toBinary:()=>Buffer.from(JSON.stringify(t)).toString(`base64`)}),u=(e,t)=>t(JSON.parse(e)),d=(e,t)=>{let n=e.split(`
4
- `),r={};for(let e of n){let t=e.indexOf(`: `);if(t===-1)continue;let n=e.substring(0,t),i=e.substring(t+2);if(!i){r[n]=null;continue}try{r[n]=i===`null`?null:JSON.parse(i)}catch{r[n]=i}}return t(r)},f=(e,t)=>{let n=Buffer.from(e,`base64`).toString();return u(n,t)},p=e=>({fromJSON:t=>u(t,e),fromYAML:t=>d(t,e),fromBinary:t=>f(t,e)});export{c as a,u as c,r as d,n as f,s as i,d as l,l as n,a as o,e as p,p as r,f as s,i as t,o as u};
@@ -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},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)},mapAsync:async(e,n)=>g(await ie(t,e,n?.concurrency??1)),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=>{try{return w(e(t))}catch(e){return T(M.leaf([],e instanceof Error?e.message:String(e),e))}},wt=e=>t=>t==null?w(null):e(t),Tt=e=>t=>t==null?w(p()):e(t).fold(e=>T(e),e=>w(d(e))),Et={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}))}},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)})}),jt(n,()=>C(r))},Ot=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)})}),jt(n,()=>r)},kt=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 jt(r,()=>lt(i))},At=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 jt(r,()=>i)},jt=(e,t)=>e.length===0?w(t()):e.length===1?T(e[0]):T(M.composite([],C(e))),Mt={string:yt,number:bt,boolean:xt,unknown:St,fromThrowing:Ct,nullable:wt,option:Tt,either:Et,list:Dt,array:Ot,map:kt,object:At},Nt=(e,t)=>M.prepend(e,t),Pt=(e,t,n)=>M.prepend(e,M.prepend(`[${t}]`,n)),Ft={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(Nt(`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(Nt(`value`,e)),e=>w(w(e))):r._tag===`Left`?e(r.value).fold(e=>T(Nt(`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(Nt(`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(Pt(`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)))}},It=r({},{...Mt,tagged:Ft});function Lt(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 Rt={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 zt(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=Lt(s),n!==`unknown`&&n in Rt&&(r=Rt[n]),n===`List`))return Bt(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 Bt(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 Vt(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=Lt(o),n!==`unknown`&&n in Rt&&(r=Rt[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 Ht(e){return typeof e==`object`&&!!e&&`doUnwrap`in e&&typeof e.doUnwrap==`function`}function Ut(e){let t=e.doUnwrap();if(t.ok)return t.value;throw`error`in t?t.error:Error(`Cannot unwrap empty monad`)}function*Wt(e){return yield e}const Gt=(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},Kt=(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},qt=(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},Jt=(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},Yt={includeTasks:!0,includeStackTrace:!1,separator:`
12
- `,includeData:!1,maxStackFrames:3,title:`Error`,colors:!1};function Xt(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`?Zt(n):n},2)}function Zt(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 Qt(e,t){let n={...Yt,...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=Zt(e.stack).split(`
15
- `).slice(1),i=n.maxStackFrames??Yt.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${Xt(e)}`:`\n\nContext:\n${Xt(e)}`;a+=t}}return a}function $t(){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?Zt(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?Zt(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:en(e),context:r,timestamp:(/* @__PURE__ */ new Date()).toISOString(),traceId:i?.traceId})},en=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)}},tn={...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`))}},nn=n(F.rule,tn);function rn(e){return typeof e==`object`&&!!e&&`orThrow`in e&&typeof e.orThrow==`function`}function an(e){return rn(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 on=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),on(r)},merge(t){let n=new Map(e);for(let[e,r]of t.services)n.set(e,r);return on(n)},get size(){return e.size},toString(){return`Context(${Array.from(e.keys()).join(`, `)})`}}),I={empty:()=>on(/* @__PURE__ */ new Map),make:(e,t)=>{let n=/* @__PURE__ */ new Map;return n.set(e.id,t),on(n)},isContext:e=>typeof e==`object`&&!!e&&e._tag===`Context`},sn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Success`,isSuccess(){return!0},isFailure(){return!1},isDie(){return!1},isInterrupted(){return!1},map(t){return sn(t(e))},mapError(t){return sn(e)},mapBoth(t,n){return sn(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}}}),cn=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Failure`,isSuccess(){return!1},isFailure(){return!0},isDie(){return!1},isInterrupted(){return!1},map(t){return cn(e)},mapError(t){return cn(t(e))},mapBoth(t,n){return cn(t(e))},flatMap(t){return cn(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}}}),ln=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Die`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!0},isInterrupted(){return!1},map(t){return ln(e)},mapError(t){return ln(e)},mapBoth(t,n){return ln(e)},flatMap(t){return ln(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}}}),un=e=>({[Symbol.toStringTag]:`Exit`,_tag:`Interrupted`,isSuccess(){return!1},isFailure(){return!1},isDie(){return!1},isInterrupted(){return!0},map(t){return un(e)},mapError(t){return un(e)},mapBoth(t,n){return un(e)},flatMap(t){return un(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}}}),L=r(e=>sn(e),{succeed:e=>sn(e),fail:e=>cn(e),die:e=>ln(e),interrupt:e=>un(e),interrupted:()=>un(`interrupted`),isSuccess:e=>e.isSuccess(),isFailure:e=>e.isFailure(),isDie:e=>e.isDie(),isInterrupted:e=>e.isInterrupted(),fromEither:e=>e.isRight()?sn(e.value):cn(e.value),fromOption:(e,t)=>e.isSome()?sn(e.value):cn(t()),zip:(e,t)=>e.isInterrupted()?e:t.isInterrupted()?t:e.isDie()?e:t.isDie()?t:e.isFailure()?e:t.isFailure()?t:sn([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 sn(t)}}),dn=e=>{let t=e.filter(e=>e!==void 0),[n]=t;if(n!==void 0&&t.length===1)return{signal:n,dispose:()=>{}};let r=new AbortController,i=t.find(e=>e.aborted);if(i)return r.abort(i.reason),{signal:r.signal,dispose:()=>{}};let a=t.map(e=>{let t=()=>r.abort(e.reason);return e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)});return{signal:r.signal,dispose:()=>a.forEach(e=>e())}},R=e=>e;var fn=class extends Error{constructor(e,t){super(t??`Effect timed out after ${e}ms`),this.duration=e,this._tag=`TimeoutError`,this.name=`TimeoutError`}},pn=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`}},mn=class extends Error{constructor(e){super(`Cannot run ${e} effect synchronously — use run()/runExit() instead`),this.operation=e,this._tag=`UnsupportedSyncOperationError`,this.name=`UnsupportedSyncOperationError`}},hn=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 gn=Symbol.for(`functype/IO/effect`),z=e=>e[gn],B=e=>{let t={[Symbol.toStringTag]:`IO`,[gn]:e,map(e){return B(R({_tag:`Map`,effect:t,f:e}))},flatMap(e){return B(R({_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 B(R({_tag:`MapError`,effect:t,f:e}))},tapError(e){return t.mapError(t=>(e(t),t))},recover(e){return B(R({_tag:`Recover`,effect:t,fallback:e}))},recoverWith(e){return B(R({_tag:`RecoverWith`,effect:t,f:e}))},fold(e,n){return B(R({_tag:`Fold`,effect:t,onFailure:e,onSuccess:n}))},match(e){return t.fold(e.failure,e.success)},catchTag(e,n){return B(R({_tag:`RecoverWith`,effect:t,f:t=>typeof t==`object`&&t&&`_tag`in t&&t._tag===e?R(n(t)):R(U.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(()=>U.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 R(U.fail(t));let a=n(r-1,i+1);return e.delayMs===void 0?a:R(U.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 R(U.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 R(U.sleep(u).flatMap(()=>ee))});return o(e.n,1)},repeatUntil(e,n){if(n.max<=0)return R(U.fail(new hn(n.max)));let r=i=>t.flatMap(t=>{if(e(t))return R(U.succeed(t));if(i<=1)return R(U.fail(new hn(n.max,t)));let a=r(i-1);return n.delayMs===void 0?a:R(U.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 B(R({_tag:`ProvideContext`,effect:t,context:e}))},provideService(e,n){let r=I.make(e,n);return B(R({_tag:`ProvideContext`,effect:t,context:r}))},provideLayer(e){let n=R(U.async(async()=>{let t=I.empty();return await e.build(R(t))}));return R(n.flatMap(e=>B(R({_tag:`ProvideContext`,effect:t,context:e}))))},async run(){let e=await H(z(this));if(e.isSuccess())return w(e.orThrow());let t=xn(e);return T(t?t.value:new pn)},async runOrThrow(){let e=await H(z(this));if(e.isSuccess())return e.orThrow();let t=xn(e);throw t?t.value:new pn},runSync(){try{return w(V(z(this)))}catch(e){return T(e)}},runSyncOrThrow(){return V(z(this))},async runExit(e){let t=e?.signal;if(!t)return H(z(this));let n=await H(z(this),void 0,t);return t.aborted&&n.isFailure()?L.interrupted():n},async runOption(){let e=await H(z(this));return e.isSuccess()?d(e.orThrow()):p()},async runTry(){let e=await H(z(this));if(e.isSuccess())return R(x(()=>e.orThrow()));let t=xn(e),n=t?t.value:/* @__PURE__ */ Error(`Effect was interrupted`);return R(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 R(U.async(()=>new Promise(t=>setTimeout(t,e))).flatMap(()=>t))},timeout(e){return B(R({_tag:`Timeout`,effect:t,duration:e}))},timeoutTo(e,n){return R(t.timeout(e).recover(R(n)))},interruptOn(e){return B(R({_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},_n=e=>{if(bn(e)||e instanceof mn)throw e},vn=/* @__PURE__ */ new WeakSet,yn=()=>{let e=new pn;return vn.add(e),e},bn=e=>e instanceof pn&&!vn.has(e),xn=e=>{let t=e.toValue();if(t._tag===`Failure`)return{value:t.error};if(t._tag===`Die`)return{value:t.defect}},V=(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=V(z(e.effect),t);return e.f(n)}case`FlatMap`:{let n=V(z(e.effect),t),r=e.f(n);return V(z(r),t)}case`MapError`:try{return V(z(e.effect),t)}catch(t){throw _n(t),e.f(t)}case`Recover`:try{return V(z(e.effect),t)}catch(t){return _n(t),e.fallback}case`RecoverWith`:try{return R(V(z(e.effect),t))}catch(n){_n(n);let r=e.f(n);return V(z(r),t)}case`Fold`:try{let n=V(z(e.effect),t);return e.onSuccess(n)}catch(t){return _n(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 V(z(e.effect),n)}case`Interrupt`:throw new pn;case`Bracket`:{let n=V(z(e.acquire),t);try{return V(z(e.use(n)),t)}finally{V(z(e.release(n)),t)}}case`BracketExit`:{let n=V(z(e.acquire),t),r;try{let i=V(z(e.use(n)),t);return r=R(L.succeed(i)),i}catch(e){throw r=bn(e)?R(L.interrupted()):e instanceof mn?R(L.die(e)):R(L.fail(e)),e}finally{V(z(e.release(n,r)),t)}}case`All`:return R(e.effects.map(e=>V(z(e),t)));case`Race`:throw new mn(`race`);case`Timeout`:throw new mn(`timeout`);case`InterruptWhen`:if(e.signal.aborted)throw yn();try{return V(z(e.effect),t)}catch(e){throw bn(e)?yn():e}}},Sn=(e,t)=>{if(t)return e.isDie()?R(e):L.interrupted()},Cn=(e,t,n)=>e.isSuccess()||e.isDie()?e:n?L.interrupted():e.isInterrupted()||t.aborted?L.fail(new pn):e,H=async(e,t=I.empty(),n)=>{if(n?.aborted)return L.interrupted();let r=()=>n?.aborted??!1;try{switch(e._tag){case`Succeed`:return R(L.succeed(e.value));case`Fail`:return R(L.fail(e.error));case`Die`:return R(L.die(e.defect));case`Sync`:return R(L.succeed(e.thunk()));case`Async`:try{let t=await e.thunk(n);return R(L.succeed(t))}catch(e){return R(L.fail(e))}case`Auto`:try{let t=e.thunk();return t instanceof Promise?R(L.succeed(await t)):R(L.succeed(t))}catch(e){return R(L.fail(e))}case`Map`:{let i=await H(z(e.effect),t,n);return i.isSuccess()?r()?L.interrupted():R(L.succeed(e.f(i.orThrow()))):R(i)}case`FlatMap`:{let i=await H(z(e.effect),t,n);if(!i.isSuccess())return R(i);if(r())return L.interrupted();let a=e.f(i.orThrow());return H(z(a),t,n)}case`MapError`:{let i=await H(z(e.effect),t,n),a=xn(i);return a?Sn(i,r())||R(L.fail(e.f(a.value))):R(i)}case`Recover`:{let i=await H(z(e.effect),t,n);return xn(i)?Sn(i,r())??L.succeed(e.fallback):R(i)}case`RecoverWith`:{let i=await H(z(e.effect),t,n),a=xn(i);if(!a)return R(i);let o=Sn(i,r());if(o)return o;let s=e.f(a.value);return H(z(s),t,n)}case`Fold`:{let i=await H(z(e.effect),t,n),a=xn(i);return a?Sn(i,r())??L.succeed(e.onFailure(a.value)):i.isSuccess()?r()?L.interrupted():L.succeed(e.onSuccess(i.orThrow())):i}case`Service`:{let n=t.get(e.tag);return n.isNone()?L.fail(/* @__PURE__ */ Error(`Service not found: ${e.tag.id}`)):L.succeed(n.orThrow())}case`ProvideContext`:{let r=t.merge(e.context);return H(z(e.effect),r,n)}case`Interrupt`:return L.interrupted();case`Bracket`:{let i=await H(z(e.acquire),t);if(!i.isSuccess())return i;let a=i.orThrow();try{return r()?L.interrupted():await H(z(e.use(a)),t,n)}finally{await H(z(e.release(a)),t)}}case`BracketExit`:{let i=await H(z(e.acquire),t);if(!i.isSuccess())return i;let a=i.orThrow(),o=r()?L.interrupted():await H(z(e.use(a)),t,n);return await H(z(e.release(a,o)),t),o}case`Race`:return e.effects.length===0?L.fail(/* @__PURE__ */ Error(`No effects to race`)):await Promise.race(e.effects.map(e=>H(z(e),t,n)));case`Timeout`:{let r=new Promise(t=>setTimeout(()=>t(L.fail(new fn(e.duration))),e.duration)),i=H(z(e.effect),t,n);return Promise.race([i,r])}case`InterruptWhen`:{let{signal:i}=e,a=dn([n,i]);try{let n=await H(z(e.effect),t,a.signal);return R(Cn(n,i,r()))}finally{a.dispose()}}case`All`:return R(await wn(e.effects,e.concurrency,t,n))}}catch(e){return L.die(e)}},wn=(e,t,n,r)=>{if(e.length===0)return Promise.resolve(L.succeed([]));let i=new AbortController,a=dn([r,i.signal]),o=Array(e.length),s={next:0,succeeded:0,settled:!1};return new Promise(r=>{let c=e=>{s.settled=!0,e.isSuccess()||i.abort(),a.dispose(),r(e)},l=()=>{if(s.settled||s.next>=e.length)return;let t=s.next;s.next=t+1,H(z(e[t]),n,a.signal).then(n=>{if(!s.settled){if(!n.isSuccess()){c(R(n));return}o[t]=n.orThrow(),s.succeeded+=1,s.succeeded===e.length?c(L.succeed(o)):l()}})};Array.from({length:re(t,e.length)}).forEach(l)})},U={sync:e=>B({_tag:`Sync`,thunk:e}),succeed:e=>B({_tag:`Succeed`,value:e}),fail:e=>B({_tag:`Fail`,error:e}),die:e=>B({_tag:`Die`,defect:e}),async:e=>B(R({_tag:`Async`,thunk:e})),tryPromise:e=>B({_tag:`Async`,thunk:e.try}).mapError(e.catch),tryCatch:(e,t)=>U.sync(()=>{try{return e()}catch(e){throw t(e)}}),liftSync:e=>(...t)=>U.sync(()=>e(...t)),liftPromise:e=>(...t)=>U.async(()=>e(...t)),fromEither:e=>R(e.isRight()?U.succeed(e.value):U.fail(e.value)),fromPromiseEither:(e,t)=>{let n=U.async(async()=>e());return(t?n.mapError(t):n.recoverWith(e=>U.die(e))).flatMap(e=>U.fromEither(e))},fromOption:e=>R(e.isSome()?U.succeed(e.value):U.fail(void 0)),fromOptionOrFail:(e,t)=>R(e.isSome()?U.succeed(e.value):U.fail(t())),fromTry:e=>R(e.isSuccess()?U.succeed(e.orThrow()):U.fail(e.error)),fromResult:e=>R(e.error?U.fail(e.error):U.succeed(m(e.data))),tryAsync:(e,t,n)=>n?.aborted?R(U.fail(t(n.reason??new DOMException(`Aborted`,`AbortError`)))):U.async(t=>{if(!n)return e(t);if(!t)return e(n);let r=dn([n,t]);try{return e(r.signal).finally(r.dispose)}catch(e){throw r.dispose(),e}}).mapError(t),asyncResult:(e,t,n)=>{let r=n?.dataKey??`data`,i=n?.errorKey??`error`;return U.tryAsync(t=>e(t),t,n?.signal).flatMap(e=>U.fromResult({data:e[r],error:e[i]}))},service:e=>B({_tag:`Service`,tag:e}),serviceWith:(e,t)=>U.service(e).map(t),serviceWithIO:(e,t)=>U.service(e).flatMap(t),withServices:(e,t)=>{let n=Object.entries(e);if(n.length===0)return R(B({_tag:`Auto`,thunk:()=>t({})}));let r=R(U.succeed({})),i=n.reduce((e,[t,n])=>R(e.flatMap(e=>U.service(n).map(n=>({...e,[t]:n})))),r);return R(i.flatMap(e=>B({_tag:`Auto`,thunk:()=>t(e)})))},all:(e,t)=>{let n=t?.concurrency??1;if(re(n,1),n!==1&&e.length>1)return B(R({_tag:`All`,effects:e,concurrency:n}));if(e.length===0)return R(U.succeed([]));let r=R(U.succeed([]));return R(e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),r))},firstSuccessOf:e=>e.length===0?R(U.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),sleep:e=>R(U.async(()=>new Promise(t=>setTimeout(t,e)))),iterate:(e,t,n,r)=>{let i=r?.max??1e4,a=(e,r)=>n(e)?R(U.succeed(e)):r<=0?R(U.fail(new hn(i,e))):t(e).flatMap(e=>a(e,r-1));return a(e,i)},never:()=>R(U.async(()=>new Promise(()=>{}))),get unit(){return R(B({_tag:`Succeed`,value:void 0}))},fromNullable:e=>R(e==null?U.fail(void 0):U.succeed(e)),interrupt:()=>B({_tag:`Interrupt`}),bracket:(e,t,n)=>B({_tag:`Bracket`,acquire:e,use:t,release:n}),acquireRelease:(e,t,n)=>U.bracket(e,t,n),bracketExit:(e,t,n)=>B({_tag:`BracketExit`,acquire:e,use:t,release:n}),race:e=>B({_tag:`Race`,effects:e}),any:e=>e.length===0?R(U.fail(/* @__PURE__ */ Error(`No effects provided`))):e.reduce((e,t)=>e.recoverWith(()=>t)),forEach:(e,t,n)=>{let r=n?.concurrency??1;if(re(r,1),r!==1)return U.unit.flatMap(()=>U.all(e.map(t),n));if(e.length===0)return R(U.succeed([]));let i=R(U.succeed([]));return R(e.reduce((e,n)=>e.flatMap(e=>t(n).map(t=>[...e,t])),i))},forEachPar:(e,t)=>U.forEach(e,t),timeout:(e,t)=>B(R({_tag:`Timeout`,effect:e,duration:t})),gen:e=>R(U.sync(()=>{let t=e(),n=e=>{let r=t.next(e);return r.done?R(U.succeed(r.value)):R(r.value.flatMap(e=>n(e)))};return n(void 0)}).flatMap(e=>e)),get Do(){return Tn(U.succeed({}))}},Tn=e=>({effect:e,bind(t,n){let r=e.flatMap(e=>n(e).map(n=>({...e,[t]:n})));return Tn(r)},let(t,n){let r=e.map(e=>({...e,[t]:n(e)}));return Tn(r)},map(t){return e.map(t)},flatMap(t){return e.flatMap(t)},tap(t){return Tn(e.tap(t))},tapEffect(t){return Tn(e.tapEffect(t))},done(){return e}}),W=r(e=>B(R({_tag:`Auto`,thunk:e})),U),G=(e,t)=>({_tag:`Layer`,build:e,provideToAndMerge(t){return G(async n=>{let r=await e(n),i=n.merge(r),a=await t.build(i);return r.merge(a)})},merge(t){return G(async n=>{let[r,i]=await Promise.all([e(n),t.build(n)]);return r.merge(i)})},map(t){return G(async n=>t(await e(n)))},toString(){return`Layer(${t??`anonymous`})`}}),En={succeed:(e,t)=>G(()=>Promise.resolve(I.make(e,t)),e.id),effect:(e,t)=>G(async()=>{let n=await t();return I.make(e,n)},e.id),sync:(e,t)=>G(()=>Promise.resolve(I.make(e,t())),e.id),fromService:(e,t,n)=>G(r=>{let i=r.unsafeGet(t);return Promise.resolve(I.make(e,n(i)))},e.id),fromServiceEffect:(e,t,n)=>G(async r=>{let i=await n(r.unsafeGet(t));return I.make(e,i)},e.id),fromContext:e=>G(()=>Promise.resolve(e)),empty:()=>G(()=>Promise.resolve(I.empty()),`empty`),mergeAll:(...e)=>G(async t=>(await Promise.all(e.map(e=>e.build(t)))).reduce((e,t)=>e.merge(t),I.empty()))},Dn=e=>({id:e,_tag:`Tag`,toString(){return`Tag(${e})`}}),On=()=>{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})})}}},kn=Dn(`TestClock`),An={make:On,tag:kn,test:async e=>e(On()),get get(){return W.service(kn)},advance:e=>W.serviceWithIO(kn,t=>W.async(()=>t.advance(e))),setTime:e=>W.serviceWithIO(kn,t=>W.async(()=>t.setTime(e))),get runAll(){return W.serviceWithIO(kn,e=>W.async(()=>e.runAll()))},context:()=>{let e=On();return{clock:e,context:I.make(kn,e)}}},jn={make:()=>{let e=On(),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=On();return jn.make().withService(kn,e)}},Mn=Dn(`HttpClient`),Nn={},Pn=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)}}}),Fn=(e,t)=>!e||t.startsWith(`http://`)||t.startsWith(`https://`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`,In=(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},Ln=(e,t,n)=>{let r=Fn(e,t);return n?In(r,n):r},Rn=(e,t)=>e[Symbol.toStringTag]===t,K=(e,t)=>{if(typeof e!=`object`||!e||e instanceof Date||e instanceof RegExp||typeof Buffer<`u`&&e instanceof Buffer)return e;if(Rn(e,`Option`)){let n=e;return t===`tagged`?n._tag===`None`?{_tag:`None`,value:null}:{_tag:`Some`,value:K(n.value,t)}:n._tag===`None`?null:K(n.value,t)}if(Rn(e,`Either`)){let n=e;if(t===`tagged`)return{_tag:n._tag,value:K(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 K(n.value,t)}if(Rn(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:K(n.value,t)}}if(n._tag===`Failure`)throw n.error??/* @__PURE__ */ Error(`Cannot serialize a Try Failure in a request body`);return K(n.value,t)}if(Rn(e,`List`)){let n=e.toArray().map(e=>K(e,t));return t===`tagged`?{_tag:`List`,value:n}:n}if(Rn(e,`FunctypeMap`)){let n=e.toValue().value;if(t===`tagged`)return{_tag:`Map`,value:n.map(([e,n])=>[e,K(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]=K(i,t)}return r}if(Array.isArray(e))return e.map(e=>K(e,t));let n={};for(let r of Object.keys(e))n[r]=K(e[r],t);return n},zn=(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=K(e,t?`primitive`:`tagged`);return{serialized:JSON.stringify(n),contentType:`application/json`}}return{serialized:String(e),contentType:void 0}},Bn=e=>{let t=e.get(`content-type`)??``;return t.includes(`application/json`)?`json`:t.startsWith(`text/`)?`text`:`raw`},Vn=async(e,t,n,r,i,a)=>{let o=t??Bn(e.headers),s,c={};switch(o){case`json`:{let t=await e.text();c.value=t;try{s=JSON.parse(t)}catch(e){throw Pn.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 Pn.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 Pn.decodeError(n,r,t,e)}else l=s;return{data:l,status:e.status,statusText:e.statusText,headers:e.headers}},q=(e,t)=>{let n={url:Ln(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):W.succeed(n)).flatMap(n=>{let r=n.flatten??!0,i=(()=>{try{return{ok:!0,value:zn(n.body,r)}}catch(e){return{ok:!1,cause:e}}})();if(!i.ok)return W.fail(Pn.networkError(n.url,n.method,i.cause));let{serialized:a,contentType:o}=i.value,s={...n.headers,...o?{"Content-Type":o}:{}},c=W.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 Pn.httpStatusError(n.url,n.method,e.status,e.statusText,t)}return Vn(e,n.parseAs,n.url,n.method,t.decode,t.validate)}),e=>typeof e==`object`&&e&&`_tag`in e?e:Pn.networkError(n.url,n.method,e));return e.afterResponse?c.flatMap(t=>e.afterResponse(t).map(e=>e)):c})},Hn=e=>q(Nn,e),Un=r({},{request:Hn,get:(e,t)=>Hn({...t,url:e,method:`GET`}),post:(e,t)=>Hn({...t,url:e,method:`POST`}),put:(e,t)=>Hn({...t,url:e,method:`PUT`}),patch:(e,t)=>Hn({...t,url:e,method:`PATCH`}),delete:(e,t)=>Hn({...t,url:e,method:`DELETE`}),head:(e,t)=>Hn({...t,url:e,method:`HEAD`,parseAs:`raw`}),options:(e,t)=>Hn({...t,url:e,method:`OPTIONS`,parseAs:`raw`}),client:e=>({request:t=>q(e,t),get:(t,n)=>q(e,{...n,url:t,method:`GET`}),post:(t,n)=>q(e,{...n,url:t,method:`POST`}),put:(t,n)=>q(e,{...n,url:t,method:`PUT`}),patch:(t,n)=>q(e,{...n,url:t,method:`PATCH`}),delete:(t,n)=>q(e,{...n,url:t,method:`DELETE`}),head:(t,n)=>q(e,{...n,url:t,method:`HEAD`,parseAs:`raw`}),options:(t,n)=>q(e,{...n,url:t,method:`OPTIONS`,parseAs:`raw`})})}),Wn={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)},Gn=e=>typeof e==`object`&&!!e&&(e._tag===`Some`||e._tag===`None`),J=e=>typeof e==`object`&&!!e&&e._tag===`List`,Kn=e=>typeof e==`object`&&!!e&&(e._tag===`Left`||e._tag===`Right`),qn=e=>typeof e==`object`&&!!e&&(e._tag===`Success`||e._tag===`Failure`),Y=()=>{let e=(e,t)=>{if(Gn(e)||J(e)||Kn(e)||qn(e))return e.map(e=>t(e));throw Error(`Unsupported functor type: ${JSON.stringify(e)}`)},t=e=>{if(Gn(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(Kn(e))return e.isRight()?e.fold(()=>null,e=>e):e;if(qn(e))return e.isSuccess()?e.orThrow():e;throw Error(`Unsupported functor type for flatten: ${JSON.stringify(e)}`)},n=(e,t)=>{if(Gn(e)||J(e)||Kn(e)||qn(e))return e.flatMap(e=>t(e));throw Error(`Unsupported functor type for flatMap: ${JSON.stringify(e)}`)},r=(e,t)=>{if(Gn(e)&&Gn(t)||J(e)&&J(t)||Kn(e)&&Kn(t)||qn(e)&&qn(t))return e.flatMap(e=>t.map(t=>e(t)));throw Error(`Unsupported functor type for ap: ${JSON.stringify(e)}`)},i=e=>{if(Gn(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(Gn(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`}},Jn=Y();Y.map=(e,t)=>Jn.map(e,t),Y.flatten=e=>Jn.flatten(e),Y.flatMap=(e,t)=>Jn.flatMap(e,t),Y.ap=(e,t)=>Jn.ap(e,t),Y.sequence=e=>Jn.sequence(e),Y.traverse=(e,t)=>Jn.traverse(e,t),Y.isOption=Gn,Y.isList=J,Y.isEither=Kn,Y.isTry=qn;const Yn=e=>({id:e,isSame:t=>t.id===e}),Xn=r(Yn,{of:e=>Yn(e),pure:e=>Yn(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`}},Zn={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 Zn.fail(e)}return Zn.evaluated(t.value)}},Z=r(X,Zn),Qn={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}}}),$n=e=>Q(e),er={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 er.fromJSON(t)}},tr=r($n,er),$=(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)}},nr=(e=[])=>$(e),rr={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 ir(t.value)},fromYAML:e=>{let t=e.split(`
17
- `)[1]?.split(`: `)[1];if(!t)return ir([]);let n=JSON.parse(t);return ir(n)},fromBinary:e=>{let t=Buffer.from(e,`base64`).toString();return rr.fromJSON(t)}},ir=r(nr,rr);var ar=/* @__PURE__ */ e({deserialize:()=>dr,deserializeStrict:()=>fr,fromEnvelope:()=>hr,isFunctypeValue:()=>gr,serialize:()=>pr,toEnvelope:()=>mr});let or;const sr=()=>(or===void 0&&(or={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=>tr(e.value),Stack:e=>ir(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)}}),or),cr=e=>typeof e==`object`&&!!e&&!Array.isArray(e),lr=e=>cr(e)&&typeof e[`@functype`]==`string`,ur=e=>{if(Array.isArray(e))return e.map(ur);if(lr(e)){let t=e[l],n=sr()[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]=ur(e[t]);return n(r)}if(cr(e)){let t={};for(let n of Object.keys(e))t[n]=ur(e[n]);return t}return e},dr=e=>x(()=>ur(JSON.parse(e))),fr=e=>x(()=>{let t=JSON.parse(e);if(!lr(t))throw Error(`Serialization.deserializeStrict: input is not a functype envelope (no @functype marker at the top level)`);return ur(t)}),pr=e=>JSON.stringify(e??null),mr=e=>JSON.parse(JSON.stringify(e??null)),hr=e=>x(()=>ur(e)),gr=e=>typeof e==`object`&&!!e&&typeof e.serialize==`function`&&typeof e._tag==`string`;function _r(e){return e._tag}function vr(e){return String(e[Symbol.toStringTag])}function yr(e,t,n,r=0){function i(i,a,o,s){return t.emit({spanId:n,seq:r,op:i,tag:vr(e),inTag:_r(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 yr(o,t,n,i(`map`,_r(o),a))},flatMap(r,a){let o=e.flatMap(r);return yr(o,t,n,i(`flatMap`,_r(o),a))},filter(r,a){let o=e.filter(r),s=_r(o)!==`None`;return yr(o,t,n,i(`filter`,_r(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:_r(e)===`None`}),e.orElse(t)},unwrap(){return i(`unwrap`,void 0,void 0),e}}}function br(e){let t=_e({_tag:e._tag,impl:e.impl});return{...t,toValue:()=>({_tag:t._tag,value:e.value})}}export{Ze as $,Qt as A,ue as At,Ht as B,mn as C,ke as Ct,nn as D,x as Dt,an as E,ve as Et,Vt as F,ne as Ft,at as G,It as H,qt as I,A as J,O as K,Jt as L,Xt as M,m as Mt,Wt as N,ae as Nt,P as O,me as Ot,zt as P,d as Pt,$e as Q,Kt as R,fn as S,Ee as St,I as T,_e as Tt,M as U,Ut as V,lt as W,et as X,nt as Y,Qe as Z,Dn as _,w as _t,tr as a,Ve as at,pn as b,Te as bt,Xn as c,Pe as ct,Un as d,Ne as dt,Xe as et,Pn as f,Be as ft,jn as g,T as gt,kn as h,Me as ht,ir as i,Re as it,Zt as j,p as jt,$t as k,_ as kt,Y as l,We as lt,An as m,E as mt,yr as n,He as nt,Qn as o,Fe as ot,Mn as p,ze as pt,k as q,ar as r,Ue as rt,Z as s,Le as st,br as t,qe as tt,Wn as u,Ie as ut,En as v,Oe as vt,L as w,C as wt,hn as x,we as xt,W as y,De as yt,Gt as z};