functype 0.12.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,6 +23,7 @@ Functype is a lightweight functional programming library for TypeScript, drawing
23
23
  - **Either Type**: Express computation results with potential failures using `Left` and `Right`
24
24
  - **List, Set, Map**: Immutable collection types with functional operators
25
25
  - **Try Type**: Safely execute operations that might throw exceptions
26
+ - **Do-notation**: Scala-like for-comprehensions using JavaScript generators for monadic composition
26
27
  - **Task**: Handle synchronous and asynchronous operations with error handling
27
28
  - **Lazy**: Deferred computation with memoization
28
29
  - **Tuple**: Type-safe fixed-length arrays
@@ -189,6 +190,67 @@ const result = Lazy(() => 10)
189
190
  .get() // 30
190
191
  ```
191
192
 
193
+ ### Do-notation (Scala-like For-Comprehensions)
194
+
195
+ Functype provides generator-based Do-notation for monadic composition, similar to Scala's for-comprehensions:
196
+
197
+ ```typescript
198
+ import { Do, DoAsync, $ } from "functype"
199
+ import { Option, Right, Left, List, Try } from "functype"
200
+
201
+ // Chain multiple Option operations
202
+ const result = Do(function* () {
203
+ const x = yield* $(Option(5)) // Extract value from Option
204
+ const y = yield* $(Option(10)) // Extract value from another Option
205
+ const z = x + y // Regular computation
206
+ return z * 2 // Return final result
207
+ })
208
+ // result: Option<number> with value 30
209
+
210
+ // Mix different monad types (with Reshapeable)
211
+ const mixed = Do(function* () {
212
+ const a = yield* $(Option(5)) // From Option
213
+ const b = yield* $(Right<string, number>(10)) // From Either
214
+ const c = yield* $(List([15])) // From List
215
+ const d = yield* $(Try(() => 20)) // From Try
216
+ return a + b + c + d
217
+ })
218
+ // Convert result to desired type
219
+ const asOption = mixed.toOption() // Option<number> with value 50
220
+
221
+ // Error propagation - short-circuits on failure
222
+ const validation = Do(function* () {
223
+ const email = yield* $(validateEmail("user@example.com")) // Returns Option
224
+ const user = yield* $(fetchUser(email)) // Returns Either
225
+ const profile = yield* $(loadProfile(user.id)) // Returns Try
226
+ return profile
227
+ })
228
+ // If any step fails, the entire computation short-circuits
229
+
230
+ // List comprehensions (cartesian products)
231
+ const pairs = Do(function* () {
232
+ const x = yield* $(List([1, 2, 3]))
233
+ const y = yield* $(List([10, 20]))
234
+ return { x, y, product: x * y }
235
+ })
236
+ // pairs: List with 6 elements (all combinations)
237
+
238
+ // Async operations with DoAsync
239
+ const asyncResult = await DoAsync(async function* () {
240
+ const user = yield* $(await fetchUserAsync(userId)) // Async Option
241
+ const score = yield* $(await getScoreAsync(user.id)) // Async Either
242
+ const bonus = yield* $(await calculateBonus(score)) // Async Try
243
+ return score + bonus
244
+ })
245
+ ```
246
+
247
+ **Key Differences from Scala:**
248
+
249
+ - Uses `yield* $(monad)` instead of `x <- monad`
250
+ - No native guard syntax (use conditions with early return)
251
+ - Always returns the type of the first yielded monad
252
+ - Mixed types supported via Reshapeable interface
253
+
192
254
  ### Task
193
255
 
194
256
  Task v2 provides structured error handling with the **Ok/Err pattern**, returning `TaskOutcome<T>` for all operations:
@@ -1,4 +1,89 @@
1
- import { T as Type, a as Typeable, S as Serializable, F as Foldable, P as Pipe } from './Serializable-CK9upOU0.js';
1
+ import { T as Type, P as Pipe, a as Typeable, S as Serializable, F as Foldable } from './Typeable-CitTP1ay.js';
2
+
3
+ /**
4
+ * Protocol definitions for Do-notation
5
+ * Separated from main Do module to avoid circular dependencies
6
+ */
7
+ /**
8
+ * Protocol symbol for Do-notation unwrapping
9
+ * All monads that support Do-notation should implement this protocol
10
+ */
11
+ declare const DO_PROTOCOL: unique symbol;
12
+ /**
13
+ * Type for the DO_PROTOCOL symbol
14
+ */
15
+ type DO_PROTOCOL_TYPE = typeof DO_PROTOCOL;
16
+ /**
17
+ * Result type for Do-notation unwrapping
18
+ * Indicates whether unwrapping succeeded and provides the value or error
19
+ */
20
+ type DoResult<T> = {
21
+ ok: true;
22
+ value: T;
23
+ } | {
24
+ ok: false;
25
+ empty: true;
26
+ } | {
27
+ ok: false;
28
+ empty: false;
29
+ error: unknown;
30
+ };
31
+ /**
32
+ * Interface for types that support Do-notation
33
+ * Implementing this interface allows a type to be yielded in Do-comprehensions
34
+ */
35
+ interface DoProtocol<T> {
36
+ [DO_PROTOCOL]: () => DoResult<T>;
37
+ }
38
+
39
+ /**
40
+ * Extractable type class for data structures that can extract their values
41
+ * with various fallback strategies.
42
+ *
43
+ * This interface is implemented by Option, Either, and other types that
44
+ * wrap values and need safe extraction methods.
45
+ */
46
+ interface Extractable<T extends Type> {
47
+ /**
48
+ * Extracts the value unsafely
49
+ * @throws Error if the container is empty
50
+ * @returns The contained value
51
+ */
52
+ get(): T;
53
+ /**
54
+ * Returns the contained value or a default value
55
+ * @param defaultValue - The value to return if extraction fails
56
+ * @returns The contained value or defaultValue
57
+ */
58
+ getOrElse(defaultValue: T): T;
59
+ /**
60
+ * Returns the contained value or throws an error
61
+ * @param error - Optional error to throw (implementations may have defaults)
62
+ * @returns The contained value
63
+ * @throws The specified error if extraction fails
64
+ */
65
+ getOrThrow(error?: Error): T;
66
+ /**
67
+ * Returns this container if it has a value, otherwise returns the alternative
68
+ * @param alternative - The alternative container
69
+ * @returns This container or the alternative
70
+ */
71
+ orElse(alternative: Extractable<T>): Extractable<T>;
72
+ /**
73
+ * Returns the contained value or null
74
+ * @returns The contained value or null
75
+ */
76
+ orNull(): T | null;
77
+ /**
78
+ * Returns the contained value or undefined
79
+ * @returns The contained value or undefined
80
+ */
81
+ orUndefined(): T | undefined;
82
+ }
83
+ /**
84
+ * Type guard to check if a value implements ExtractableOption
85
+ */
86
+ declare function isExtractable<T extends Type>(value: unknown): value is Extractable<T>;
2
87
 
3
88
  /**
4
89
  * Universal operations that work on any container (single-value or collection).
@@ -144,6 +229,164 @@ interface Promisable<A extends Type> {
144
229
  toPromise(): Promise<A>;
145
230
  }
146
231
 
232
+ /**
233
+ * Possible types of Try instances
234
+ */
235
+ type TypeNames = "Success" | "Failure";
236
+ interface Try<T> extends FunctypeBase<T, TypeNames>, Extractable<T>, Pipe<T>, Promisable<T>, DoProtocol<T>, Reshapeable<T> {
237
+ readonly _tag: TypeNames;
238
+ readonly error: Error | undefined;
239
+ isSuccess(): this is Try<T> & {
240
+ readonly _tag: "Success";
241
+ error: undefined;
242
+ };
243
+ isFailure(): this is Try<T> & {
244
+ readonly _tag: "Failure";
245
+ error: Error;
246
+ };
247
+ get: () => T;
248
+ getOrElse: (defaultValue: T) => T;
249
+ getOrThrow: (error?: Error) => T;
250
+ orElse: (alternative: Try<T>) => Try<T>;
251
+ orNull: () => T | null;
252
+ orUndefined: () => T | undefined;
253
+ orThrow: (error: Error) => T;
254
+ toOption: () => Option<T>;
255
+ toEither: <E extends Type>(leftValue: E) => Either<E, T>;
256
+ toList: () => List<T>;
257
+ toTry: () => Try<T>;
258
+ map: <U>(f: (value: T) => U) => Try<U>;
259
+ ap: <U>(ff: Try<(value: T) => U>) => Try<U>;
260
+ flatMap: <U>(f: (value: T) => Try<U>) => Try<U>;
261
+ flatMapAsync: <U>(f: (value: T) => Promise<Try<U>>) => Promise<Try<U>>;
262
+ /**
263
+ * Pattern matches over the Try, applying onFailure if Failure and onSuccess if Success
264
+ * @param onFailure - Function to apply if the Try is Failure
265
+ * @param onSuccess - Function to apply if the Try is Success
266
+ * @returns The result of applying the appropriate function
267
+ */
268
+ fold: <U extends Type>(onFailure: (error: Error) => U, onSuccess: (value: T) => U) => U;
269
+ toString: () => string;
270
+ /**
271
+ * Pattern matches over the Try, applying a handler function based on the variant
272
+ * @param patterns - Object with handler functions for Success and Failure variants
273
+ * @returns The result of applying the matching handler function
274
+ */
275
+ match<R>(patterns: {
276
+ Success: (value: T) => R;
277
+ Failure: (error: Error) => R;
278
+ }): R;
279
+ toValue(): {
280
+ _tag: TypeNames;
281
+ value: T | Error;
282
+ };
283
+ }
284
+ declare const Try: (<T>(f: () => T) => Try<T>) & {
285
+ /**
286
+ * Creates a Try from JSON string
287
+ * @param json - The JSON string
288
+ * @returns Try instance
289
+ */
290
+ fromJSON: <T>(json: string) => Try<T>;
291
+ /**
292
+ * Creates a Try from YAML string
293
+ * @param yaml - The YAML string
294
+ * @returns Try instance
295
+ */
296
+ fromYAML: <T>(yaml: string) => Try<T>;
297
+ /**
298
+ * Creates a Try from binary string
299
+ * @param binary - The binary string
300
+ * @returns Try instance
301
+ */
302
+ fromBinary: <T>(binary: string) => Try<T>;
303
+ };
304
+
305
+ /**
306
+ * Interface for types that can be reshaped (converted) between different monadic containers.
307
+ * Provides standard conversion methods to transform between Option, Either, List, and Try types.
308
+ *
309
+ * @typeParam T - The type of the value contained in the monad
310
+ *
311
+ * @example
312
+ * // Convert Option to Either
313
+ * const opt = Option(5)
314
+ * const either = opt.toEither("None value") // Right(5)
315
+ *
316
+ * @example
317
+ * // Convert Either to Option
318
+ * const right = Right(10)
319
+ * const option = right.toOption() // Some(10)
320
+ *
321
+ * @example
322
+ * // Convert List to Try
323
+ * const list = List([1, 2, 3])
324
+ * const tryVal = list.toTry() // Success(1) - uses first element
325
+ *
326
+ * @example
327
+ * // Use with Do comprehensions
328
+ * const result = Do(function* () {
329
+ * const x = yield* $(Option(5))
330
+ * const y = yield* $(Right<string, number>(10))
331
+ * return x + y
332
+ * })
333
+ *
334
+ * // Convert to desired type for chaining
335
+ * const asOption = result.toOption()
336
+ * asOption.map(x => x * 2).getOrElse(0)
337
+ */
338
+ interface Reshapeable<T extends Type> {
339
+ /**
340
+ * Converts this monad to an Option.
341
+ *
342
+ * Conversion rules:
343
+ * - Option: returns self
344
+ * - Either: Right → Some, Left → None
345
+ * - List: non-empty → Some(head), empty → None
346
+ * - Try: Success → Some, Failure → None
347
+ *
348
+ * @returns An Option containing the value if present, None otherwise
349
+ */
350
+ toOption(): Option<T>;
351
+ /**
352
+ * Converts this monad to an Either.
353
+ *
354
+ * Conversion rules:
355
+ * - Option: Some → Right, None → Left(leftValue)
356
+ * - Either: returns self
357
+ * - List: non-empty → Right(head), empty → Left(leftValue)
358
+ * - Try: Success → Right, Failure → Left(error)
359
+ *
360
+ * @param leftValue - The value to use for the Left case when the source is empty/none/failure
361
+ * @returns An Either with the value as Right or the provided leftValue as Left
362
+ */
363
+ toEither<E extends Type>(leftValue: E): Either<E, T>;
364
+ /**
365
+ * Converts this monad to a List.
366
+ *
367
+ * Conversion rules:
368
+ * - Option: Some → List([value]), None → List([])
369
+ * - Either: Right → List([value]), Left → List([])
370
+ * - List: returns self
371
+ * - Try: Success → List([value]), Failure → List([])
372
+ *
373
+ * @returns A List containing the value(s) if present, empty List otherwise
374
+ */
375
+ toList(): List<T>;
376
+ /**
377
+ * Converts this monad to a Try.
378
+ *
379
+ * Conversion rules:
380
+ * - Option: Some → Success, None → Failure(Error("None"))
381
+ * - Either: Right → Success, Left → Failure(Error(leftValue))
382
+ * - List: non-empty → Success(head), empty → Failure(Error("Empty list"))
383
+ * - Try: returns self
384
+ *
385
+ * @returns A Try containing Success with the value or Failure with an appropriate error
386
+ */
387
+ toTry(): Try<T>;
388
+ }
389
+
147
390
  /**
148
391
  * Creates a Some variant of Option containing a value.
149
392
  * @param value - The value to wrap in Some
@@ -175,7 +418,7 @@ declare const OptionConstructor: <T extends Type>(value: T | null | undefined) =
175
418
  * It's used to handle potentially null or undefined values in a type-safe way.
176
419
  * @typeParam T - The type of the value contained in the Option
177
420
  */
178
- interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T> {
421
+ interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T>, DoProtocol<T>, Reshapeable<T> {
179
422
  /** The contained value (undefined for None) */
180
423
  readonly value: T | undefined;
181
424
  /** Whether this Option contains no value */
@@ -368,7 +611,7 @@ declare const Option: (<T extends Type>(value: T | null | undefined) => Option<T
368
611
  fromBinary: <T>(binary: string) => Option<T>;
369
612
  };
370
613
 
371
- interface List<A> extends FunctypeCollection<A, "List"> {
614
+ interface List<A> extends FunctypeCollection<A, "List">, DoProtocol<A>, Reshapeable<A> {
372
615
  readonly length: number;
373
616
  readonly [Symbol.iterator]: () => Iterator<A>;
374
617
  map: <B>(f: (a: A) => B) => List<B>;
@@ -464,55 +707,6 @@ interface Collection<A> {
464
707
  toString(): string;
465
708
  }
466
709
 
467
- /**
468
- * Extractable type class for data structures that can extract their values
469
- * with various fallback strategies.
470
- *
471
- * This interface is implemented by Option, Either, and other types that
472
- * wrap values and need safe extraction methods.
473
- */
474
- interface Extractable<T extends Type> {
475
- /**
476
- * Extracts the value unsafely
477
- * @throws Error if the container is empty
478
- * @returns The contained value
479
- */
480
- get(): T;
481
- /**
482
- * Returns the contained value or a default value
483
- * @param defaultValue - The value to return if extraction fails
484
- * @returns The contained value or defaultValue
485
- */
486
- getOrElse(defaultValue: T): T;
487
- /**
488
- * Returns the contained value or throws an error
489
- * @param error - Optional error to throw (implementations may have defaults)
490
- * @returns The contained value
491
- * @throws The specified error if extraction fails
492
- */
493
- getOrThrow(error?: Error): T;
494
- /**
495
- * Returns this container if it has a value, otherwise returns the alternative
496
- * @param alternative - The alternative container
497
- * @returns This container or the alternative
498
- */
499
- orElse(alternative: Extractable<T>): Extractable<T>;
500
- /**
501
- * Returns the contained value or null
502
- * @returns The contained value or null
503
- */
504
- orNull(): T | null;
505
- /**
506
- * Returns the contained value or undefined
507
- * @returns The contained value or undefined
508
- */
509
- orUndefined(): T | undefined;
510
- }
511
- /**
512
- * Type guard to check if a value implements ExtractableOption
513
- */
514
- declare function isExtractable<T extends Type>(value: unknown): value is Extractable<T>;
515
-
516
710
  /**
517
711
  * Pattern matching interface for functional data types.
518
712
  *
@@ -628,7 +822,7 @@ declare const tryCatchAsync: <L extends Type, R extends Type>(f: () => Promise<R
628
822
  * @module Either
629
823
  * @category Core
630
824
  */
631
- interface Either<L extends Type, R extends Type> extends FunctypeBase<R, "Left" | "Right">, Promisable<R> {
825
+ interface Either<L extends Type, R extends Type> extends FunctypeBase<R, "Left" | "Right">, Promisable<R>, DoProtocol<R>, Reshapeable<R> {
632
826
  readonly _tag: "Left" | "Right";
633
827
  value: L | R;
634
828
  isLeft(): this is Either<L, R> & {
@@ -713,4 +907,4 @@ declare const Either: {
713
907
  fromBinary: <L extends Type, R extends Type>(binary: string) => Either<L, R>;
714
908
  };
715
909
 
716
- export { type Applicative as A, type Collection as C, Either as E, type FunctypeBase as F, List as L, type Matchable as M, None as N, Option as O, type Promisable as P, Right as R, Some as S, type Traversable as T, type Extractable as a, type TestEither as b, Left as c, isLeft as d, TypeCheckRight as e, TypeCheckLeft as f, tryCatchAsync as g, isExtractable as h, isRight as i, type Functype as j, type FunctypeCollection as k, MatchableUtils as l, OptionConstructor as m, Set as n, type CollectionOps as o, type ContainerOps as p, type AsyncMonad as q, type Functor as r, type Monad as s, tryCatch as t };
910
+ export { type Applicative as A, type Collection as C, DO_PROTOCOL as D, Either as E, type FunctypeBase as F, List as L, type Matchable as M, None as N, Option as O, type Promisable as P, Right as R, Some as S, Try as T, type DoResult as a, type Extractable as b, type Traversable as c, type DO_PROTOCOL_TYPE as d, type DoProtocol as e, type TestEither as f, Left as g, isLeft as h, isRight as i, TypeCheckRight as j, TypeCheckLeft as k, tryCatchAsync as l, isExtractable as m, type Functype as n, type FunctypeCollection as o, MatchableUtils as p, OptionConstructor as q, Set as r, type TypeNames as s, tryCatch as t, type CollectionOps as u, type ContainerOps as v, type AsyncMonad as w, type Functor as x, type Monad as y, type Reshapeable as z };
@@ -0,0 +1,43 @@
1
+ import {a,b as b$1}from'./chunk-BQJB6CCW.mjs';import {a as a$1}from'./chunk-YBBRJTHY.mjs';import me from'safe-stable-stringify';var k=Symbol.for("functype.do.unwrap");var q=Set;var M=t=>{let e=new q(t),r={_tag:"Set",[Symbol.iterator]:()=>e[Symbol.iterator](),add:n=>M([...e,n]),remove:n=>{let o=new q(e);return o.delete(n),M(o)},contains:n=>e.has(n),has:n=>e.has(n),map:n=>M(Array.from(e).map(n)),ap:n=>{let o=new q;for(let a of e)for(let s of n)o.add(s(a));return M(o)},flatMap:n=>{let o=new q;for(let a of e)for(let s of n(a))o.add(s);return M(o)},flatMapAsync:async n=>{let o=new q;for(let a of e){let s=await n(a);for(let i of s)o.add(i);}return M(o)},fold:(n,o)=>{if(e.size===0)return n();let a=Array.from(e);if(a.length===0)return n();let s=a[0];return s===void 0?n():o(s)},foldLeft:n=>o=>{let a=n;for(let s of e)a=o(a,s);return a},foldRight:n=>o=>Array.from(e).reduceRight((s,i)=>o(i,s),n),get size(){return e.size},get isEmpty(){return e.size===0},reduce:n=>{let o=Array.from(e);if(o.length===0)throw new Error("Cannot reduce empty Set");return o.reduce(n)},reduceRight:n=>{let o=Array.from(e);if(o.length===0)throw new Error("Cannot reduceRight empty Set");return o.reduceRight(n)},count:n=>{let o=0;for(let a of e)n(a)&&o++;return o},find:n=>{for(let o of e)if(n(o))return f(o);return f(null)},exists:n=>{for(let o of e)if(n(o))return true;return false},forEach:n=>{e.forEach(n);},filter:n=>{let o=new q;for(let a of e)n(a)&&o.add(a);return M(o)},filterNot:n=>{let o=new q;for(let a of e)n(a)||o.add(a);return M(o)},drop:n=>M(Array.from(e).slice(n)),dropRight:n=>M(Array.from(e).slice(0,-n)),dropWhile:n=>{let o=Array.from(e),a=o.findIndex(s=>!n(s));return M(a===-1?[]:o.slice(a))},flatten:()=>{let n=new q;for(let o of e)if(Array.isArray(o))for(let a of o)n.add(a);else if(o&&typeof o=="object"&&Symbol.iterator in o)for(let a of o)n.add(a);else n.add(o);return M(n)},get head(){return Array.from(e)[0]},get headOption(){let n=Array.from(e)[0];return f(n)},toList:()=>m(Array.from(e)),toSet:()=>r,toArray:()=>Array.from(e),toString:()=>`Set(${Array.from(e).toString()})`,toValue:()=>({_tag:"Set",value:Array.from(e)}),pipe:n=>n(Array.from(e)),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Set",value:Array.from(e)}),toYAML:()=>`_tag: Set
2
+ value: ${JSON.stringify(Array.from(e))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Set",value:Array.from(e)})).toString("base64")})};return r},rt=t=>M(t),Me={fromJSON:t=>{let e=JSON.parse(t);return ne(e.value)},fromYAML:t=>{let r=t.split(`
3
+ `)[1]?.split(": ")[1];if(!r)return ne([]);let n=JSON.parse(r);return ne(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Me.fromJSON(e)}},ne=a(rt,Me);function x(t){let e=t;return {get(){return e},set(n){e=n;},update(n){e=n(e);},getAndSet(n){let o=e;return e=n,o},updateAndGet(n){return e=n(e),e},getAndUpdate(n){let o=e;return e=n(e),o},compareAndSet(n,o){return e===n?(e=o,true):false},modify(n){let[o,a]=n(e);return e=o,a}}}x.of=x;var ie=(t=0)=>{let e=x(t),r=t;return {get:()=>e.get(),set:n=>e.set(n),increment:()=>e.updateAndGet(n=>n+1),decrement:()=>e.updateAndGet(n=>n-1),reset:()=>e.set(r),compareAndSet:(n,o)=>e.compareAndSet(n,o)}};var Ae=()=>{let t=x([]);return {add:e=>t.update(r=>[...r,e]),addAll:e=>t.update(r=>[...r,...e]),build:()=>t.get(),clear:()=>t.set([]),size:()=>t.get().length}};var v=t=>{let e={_tag:"LazyList",[Symbol.iterator]:()=>t[Symbol.iterator](),map:r=>v((function*(){for(let n of t)yield r(n);})()),flatMap:r=>v((function*(){for(let n of t)yield*r(n);})()),filter:r=>v((function*(){for(let n of t)r(n)&&(yield n);})()),take:r=>v((function*(){let n=ie(0);for(let o of t){if(n.get()>=r)break;yield o,n.increment();}})()),drop:r=>v((function*(){let n=ie(0);for(let o of t)n.get()>=r&&(yield o),n.increment();})()),takeWhile:r=>v((function*(){for(let n of t){if(!r(n))break;yield n;}})()),dropWhile:r=>v((function*(){let n=x(true);for(let o of t)n.get()&&r(o)||(n.set(false),yield o);})()),concat:r=>v((function*(){yield*t,yield*r;})()),zip:r=>v((function*(){let n=t[Symbol.iterator](),o=r[Symbol.iterator]();for(;;){let a=n.next(),s=o.next();if(a.done||s.done)break;yield [a.value,s.value];}})()),toList:()=>m(Array.from(t)),toArray:()=>Array.from(t),forEach:r=>{for(let n of t)r(n);},reduce:(r,n)=>{let o=x(n);for(let a of t)o.set(r(o.get(),a));return o.get()},find:r=>{for(let n of t)if(r(n))return f(n);return f.none()},some:r=>{for(let n of t)if(r(n))return true;return false},every:r=>{for(let n of t)if(!r(n))return false;return true},count:()=>{let r=ie(0);for(let n of t)r.increment();return r.get()},first:()=>{let n=t[Symbol.iterator]().next();return n.done?f.none():f(n.value)},last:()=>{let r=x(void 0),n=x(false);for(let o of t)r.set(o),n.set(true);return n.get()?f(r.get()):f.none()},fold:(r,n)=>{let a=t[Symbol.iterator]().next();return a.done?r():n(a.value)},foldLeft:r=>n=>{let o=x(r);for(let a of t)o.set(n(o.get(),a));return o.get()},foldRight:r=>n=>Array.from(t).reduceRight((a,s)=>n(s,a),r),pipe:r=>r(e),serialize:()=>{let r=Array.from(t);return {toJSON:()=>JSON.stringify({_tag:"LazyList",value:r}),toYAML:()=>`_tag: LazyList
4
+ value: ${me(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"LazyList",value:r})).toString("base64")}},toString:()=>{let n=[],o=ie(0),a=x(false);for(let i of t)if(o.get()<10)n.push(i),o.increment();else {a.set(true);break}let s=n.map(i=>String(i)).join(", ");return a.get()?`LazyList(${s}, ...)`:`LazyList(${s})`}};return e},ot=t=>v(t),at={empty:()=>v([]),of:t=>v([t]),from:(...t)=>v(t),iterate:(t,e)=>v((function*(){let r=x(t);for(;;)yield r.get(),r.set(e(r.get()));})()),generate:t=>v((function*(){for(;;)yield t();})()),range:(t,e,r=1)=>v((function*(){if(r===0)throw new Error("Step cannot be zero");let n=x(t);if(r>0)for(;n.get()<e;)yield n.get(),n.set(n.get()+r);else for(;n.get()>e;)yield n.get(),n.set(n.get()+r);})()),repeat:(t,e)=>v((function*(){if(e===void 0)for(;;)yield t;else {let r=ie(0);for(;r.get()<e;)yield t,r.increment();}})()),cycle:t=>v((function*(){let e=Array.from(t);if(e.length!==0)for(;;)yield*e;})())},$t=a(ot,at);var de=t=>({_tag:"Success",error:void 0,isSuccess(){return true},isFailure(){return false},get:()=>t,getOrElse:e=>t,getOrThrow:e=>t,orElse:e=>de(t),orNull:()=>t,orUndefined:()=>t,orThrow:e=>t,toEither:e=>c(t),map:e=>P(()=>e(t)),ap:e=>e.map(r=>r(t)),flatMap:e=>e(t),flatMapAsync:async e=>e(t),fold:(e,r)=>r(t),match:e=>e.Success(t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),toString:()=>`Success(${me(t)})`,toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:"Success",value:t}),toOption:()=>U(t),toList:()=>m([t]),toTry:()=>de(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Success",value:t}),toYAML:()=>`_tag: Success
5
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Success",value:t})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?f(t):f(void 0),exists:e=>e(t),forEach:e=>e(t),[k](){return {ok:true,value:t}}}),$=t=>({_tag:"Failure",error:t,isSuccess(){return false},isFailure(){return true},get:()=>{throw t},getOrElse:e=>e,getOrThrow:e=>{throw e??t},orElse:e=>e,orNull:()=>null,orUndefined:()=>{},orThrow:e=>{throw e},toEither:e=>p(t),map:e=>$(t),ap:e=>$(t),flatMap:e=>$(t),flatMapAsync:e=>Promise.resolve($(t)),fold:(e,r)=>e(t),match:e=>e.Failure(t),foldLeft:e=>r=>e,foldRight:e=>r=>e,toString:()=>`Failure(${me(t)}))`,toPromise:()=>Promise.reject(t),toValue:()=>({_tag:"Failure",value:t}),toOption:()=>w(),toList:()=>m([]),toTry:()=>$(t),pipe:e=>{throw t},serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Failure",error:t.message,stack:t.stack}),toYAML:()=>`_tag: Failure
6
+ error: ${t.message}
7
+ stack: ${t.stack}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Failure",error:t.message,stack:t.stack})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:e=>false,reduce:e=>{throw new Error("Cannot reduce a Failure")},reduceRight:e=>{throw new Error("Cannot reduceRight a Failure")},count:e=>0,find:e=>f(null),exists:e=>false,forEach:e=>{},[k](){return {ok:false,empty:false,error:t}}}),st=t=>{try{return de(t())}catch(e){return $(e instanceof Error?e:new Error(String(e)))}},Ce={fromJSON:t=>{let e=JSON.parse(t);if(e._tag==="Success")return de(e.value);{let r=new Error(e.error);return e.stack&&(r.stack=e.stack),$(r)}},fromYAML:t=>{let e=t.split(`
8
+ `),r=e[0]?.split(": ")[1];if(!r)return $(new Error("Invalid YAML format for Try"));if(r==="Success"){let n=e[1]?.split(": ")[1];if(!n)return $(new Error("Invalid YAML format for Try Success"));let o=JSON.parse(n);return de(o)}else {let n=e[1]?.split(": ")[1];if(!n)return $(new Error("Invalid YAML format for Try Failure"));let o=e[2]?.split(": "),a=o&&o.length>1?o.slice(1).join(": "):void 0,s=new Error(n);return a&&(s.stack=a),$(s)}},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ce.fromJSON(e)}},P=a(st,Ce);function Le({_tag:t,impl:e}){return {...e,_tag:t}}function we(t,e){return !t||typeof t!="object"||!("_tag"in t)?false:e?t._tag===e:true}var O=t=>{let e=Array.from(t??[]),r={_tag:"List",[Symbol.iterator]:()=>e[Symbol.iterator](),get size(){return e.length},get length(){return e.length},map:n=>O(e.map(n)),ap:n=>O(e.flatMap(o=>Array.from(n).map(a=>a(o)))),flatMap:n=>O(e.flatMap(o=>Array.from(n(o)))),flatMapAsync:async n=>{let o=await Promise.all(e.map(async a=>await n(a)));return O(o.flatMap(a=>Array.from(a)))},forEach:n=>e.forEach(n),contains:n=>e.includes(n),count:n=>e.filter(n).length,exists:n=>e.some(n),filter:n=>O(e.filter(n)),filterNot:n=>O(e.filter(o=>!n(o))),filterType:n=>O(e.filter(o=>we(o,n))),find:(n,o)=>{let a=e.find(s=>n(s)&&(o?we(s,o):true));return f(a)},get head(){return e[0]},get headOption(){return e.length>0?f(e[0]):w()},get isEmpty(){return e.length===0},toArray:()=>[...e],reduce:n=>e.reduce(n),reduceRight:n=>e.reduceRight(n),fold:(n,o)=>{if(e.length===0)return n();let a=e[0];return o(a)},foldLeft:n=>o=>e.reduce(o,n),foldRight:n=>o=>e.reduceRight((a,s)=>o(s,a),n),match:n=>e.length===0?n.Empty():n.NonEmpty([...e]),remove:n=>O(e.filter(o=>o!==n)),removeAt:n=>n<0||n>=e.length?r:O([...e.slice(0,n),...e.slice(n+1)]),add:n=>O([...e,n]),get:n=>f(e[n]),concat:n=>O([...e,...n.toArray()]),drop:n=>O(e.slice(n)),dropRight:n=>O(e.slice(0,-n)),dropWhile:n=>O(e.slice(e.findIndex(o=>!n(o)))),flatten:()=>O(e.flatMap(n=>Array.isArray(n)?n:[n])),toList:()=>r,toSet:()=>ne(e),toOption:()=>e.length>0?f(e[0]):w(),toEither:n=>e.length>0?c(e[0]):p(n),toTry:()=>e.length>0?P(()=>e[0]):P(()=>{throw new Error("Empty list")}),toString:()=>`List(${me(e)})`,toValue:()=>({_tag:"List",value:e}),pipe:n=>n([...e]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"List",value:e}),toYAML:()=>`_tag: List
9
+ value: ${me(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"List",value:e})).toString("base64")}),[k](){return e.length===0?{ok:false,empty:true}:{ok:true,value:e[0]}}};return r},it=t=>O(t),Ve={fromJSON:t=>{let e=JSON.parse(t);return m(e.value)},fromYAML:t=>{let r=t.split(`
10
+ `)[1]?.split(": ")[1];if(!r)return m([]);let n=JSON.parse(r);return m(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ve.fromJSON(e)}},m=a(it,Ve);var ze=t=>({_tag:"Right",value:t,isLeft(){return false},isRight(){return true},get:()=>t,getOrElse:e=>t,getOrThrow:()=>t,orElse:e=>c(t),orNull:()=>t,orUndefined:()=>t,map:e=>c(e(t)),ap:e=>e._tag==="Right"?c(e.value(t)):p(e.value),mapAsync:e=>e(t).then(r=>c(r)).catch(r=>Promise.resolve(p(r))),merge:e=>e.isLeft()?p(e.value):c([t,e.value]),flatMap:e=>e(t),flatMapAsync:e=>e(t).catch(r=>p(r)),toOption:()=>U(t),toList:()=>m([t]),toEither:e=>c(t),toTry:()=>P(()=>t),toJSON(){return {_tag:"Right",value:t}},toString:()=>`Right(${me(t)})`,*[Symbol.iterator](){yield t;},*yield(){yield t;},traverse:e=>{let r=e(t);return r.isLeft()?p(r.value):c([r.value])},*lazyMap(e){yield c(e(t));},tap:e=>(e(t),c(t)),tapLeft:e=>c(t),mapLeft:e=>c(t),bimap:(e,r)=>c(r(t)),fold:(e,r)=>r(t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),match:e=>e.Right(t),swap:()=>p(t),toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:"Right",value:t}),pipeEither:(e,r)=>r(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Right",value:t}),toYAML:()=>`_tag: Right
11
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Right",value:t})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?U(t):w(),exists:e=>e(t),forEach:e=>e(t),[k](){return {ok:true,value:t}}}),De=t=>({_tag:"Left",value:t,isLeft(){return true},isRight(){return false},get:()=>{throw new Error(`Cannot call get() on Left(${me(t)})`)},getOrElse:e=>e,getOrThrow:e=>{throw e??t},orElse:e=>e,orNull:()=>null,orUndefined:()=>{},map:e=>p(t),ap:e=>p(t),mapAsync:e=>Promise.resolve(p(t)),merge:e=>p(t),flatMap:e=>p(t),flatMapAsync:e=>Promise.resolve(p(t)),toOption:()=>w(),toList:()=>m(),toEither:e=>p(e),toTry:()=>P(()=>{throw new Error(String(t))}),toJSON(){return {_tag:"Left",value:t}},toString:()=>`Left(${me(t)})`,*[Symbol.iterator](){},*yield(){},traverse:e=>p(t),*lazyMap(e){yield p(t);},tap:e=>p(t),tapLeft:e=>(e(t),p(t)),mapLeft:e=>p(e(t)),bimap:(e,r)=>p(e(t)),fold:(e,r)=>e(t),foldLeft:e=>r=>e,foldRight:e=>r=>e,match:e=>e.Left(t),swap:()=>c(t),toPromise:()=>Promise.reject(t),toValue:()=>({_tag:"Left",value:t}),pipeEither:(e,r)=>e(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Left",value:t}),toYAML:()=>`_tag: Left
12
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Left",value:t})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:e=>false,reduce:e=>{throw new Error("Cannot reduce a Left")},reduceRight:e=>{throw new Error("Cannot reduceRight a Left")},count:e=>0,find:e=>w(),exists:e=>false,forEach:e=>{},[k](){return {ok:false,empty:false,error:t}}}),c=t=>ze(t),p=t=>De(t),fr=t=>t.isRight(),dr=t=>t.isLeft(),mr=(t,e)=>{try{return c(t())}catch(r){return p(e(r))}},ut=t=>ze(t);console.assert(ut);var lt=t=>De(t);console.assert(lt);var yr=async(t,e)=>{try{let r=await t();return c(r)}catch(r){return p(e(r))}},Ie={sequence:t=>t.reduce((e,r)=>e.isLeft()?e:r.isLeft()?p(r.value):e.map(n=>[...n,r.value]),c([])),traverse:(t,e)=>Ie.sequence(t.map(e)),fromNullable:(t,e)=>t==null?p(e):c(t),fromPredicate:(t,e,r)=>e(t)?c(t):p(r),ap:(t,e)=>t.flatMap(r=>e.map(r)),fromPromise:async(t,e)=>{try{let r=await t;return c(r)}catch(r){return p(e(r))}},fromJSON:t=>{let e=JSON.parse(t);return e._tag==="Right"?c(e.value):p(e.value)},fromYAML:t=>{let e=t.split(`
13
+ `),r=e[0]?.split(": ")[1],n=e[1]?.split(": ")[1];if(!r||!n)throw new Error("Invalid YAML format for Either");let o=JSON.parse(n);return r==="Right"?c(o):p(o)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ie.fromJSON(e)}};function I(t,e){return {brand:t,validate:e,of:r=>e(r)?f(a$1(t,r)):f.none(),from:r=>e(r)?c(a$1(t,r)):p(`Invalid ${t}: validation failed`),unsafeOf:r=>{if(!e(r))throw new Error(`Invalid ${t}: validation failed`);return a$1(t,r)},is:r=>{try{return e(r)}catch{return false}},unwrap:r=>r,refine:(r,n)=>I(r,o=>e(o)&&n(o))}}var pt=I("PositiveNumber",t=>t>0),Ar=I("NonNegativeNumber",t=>t>=0),Lr=I("IntegerNumber",t=>Number.isInteger(t)),kr=pt.refine("PositiveInteger",t=>Number.isInteger(t)),xr=I("NonEmptyString",t=>t.length>0),br=I("EmailAddress",t=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)),wr=I("UrlString",t=>{try{return new URL(t),!0}catch{return !1}}),Ur=I("UUID",t=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)),Sr=I("ISO8601Date",t=>!isNaN(Date.parse(t))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(t));function vr(t,e,r){return I(t,n=>n>=e&&n<=r)}function Or(t,e,r){return I(t,n=>n.length>=e&&n.length<=r)}function Br(t,e){return I(t,r=>e.test(r))}var Ue=t=>{let e=n=>typeof n=="function"?n():n,r={when:(n,o)=>t.resolved?r:n?Ue({resolved:true,value:e(o)}):r,elseWhen:(n,o)=>t.resolved?r:n?Ue({resolved:true,value:e(o)}):r,else:n=>t.resolved?t.value:e(n),getOrThrow:()=>{if(!t.resolved)throw new Error("Conditional expression has no matching condition");return t.value}};return r},Ke=()=>Ue({resolved:false}),ct={of:()=>Ke(),match:t=>e=>{let r=e[t];if(r===void 0)throw new Error(`No case defined for value: ${String(t)}`);return typeof r=="function"?r():r},lazy:()=>{let t={resolved:false},e={when:(r,n)=>(t.resolved||r()&&(t.resolved=true,t.value=n()),e),elseWhen:(r,n)=>(t.resolved||r()&&(t.resolved=true,t.value=n()),e),else:r=>t.resolved?t.value:r()};return e}},Nr=a(Ke,ct);var ue=(t,e)=>e===t?true:typeof e=="function"?e(t):e&&typeof e=="object"&&"_"in e?e._(t):typeof e=="object"&&e!==null&&typeof t=="object"&&t!==null?Object.entries(e).every(([r,n])=>{let o=t[r];return ue(o,n)}):false,oe=t=>{let e=(o,a)=>typeof o=="function"?o(a):o,r=()=>{for(let{pattern:o,result:a}of t.patterns)if(ue(t.value,o))return {matched:true,result:e(a,t.value)};return {matched:false}},n={case:(o,a)=>{if(t.resolved)return n;let s={...t,patterns:[...t.patterns,{pattern:o,result:a}]};return ue(t.value,o)?oe({...s,resolved:true,result:e(a,t.value)}):oe(s)},caseValue:(o,a)=>{if(t.resolved)return n;if(t.value===o){let s=typeof a=="function"?a():a;return oe({...t,resolved:true,result:s})}return n},caseValues:(o,a)=>{if(t.resolved)return n;if(o.includes(t.value)){let s=typeof a=="function"?a():a;return oe({...t,resolved:true,result:s})}return n},when:(o,a)=>n.case(o,a),caseAny:(o,a)=>{if(t.resolved)return n;for(let s of o)if(ue(t.value,s))return oe({...t,resolved:true,result:e(a,t.value),patterns:[...t.patterns,{pattern:s,result:a}]});return oe({...t,patterns:[...t.patterns,...o.map(s=>({pattern:s,result:a}))]})},default:o=>t.resolved?t.result:e(o,t.value),exhaustive:()=>{let o=r();if(!o.matched)throw new Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(t.value)}`);return o.result},getOrThrow:o=>{let a=r();if(!a.matched)throw new Error(o??`No matching pattern for value: ${JSON.stringify(t.value)}`);return a.result},toOption:()=>{let o=r();return o.matched?f(o.result):f.none()}};return n},Tt=t=>oe({value:t,resolved:false,patterns:[]}),ft={exhaustive:t=>e=>{let r=t[e];if(r===void 0)throw new Error(`No case defined for value: ${String(e)}`);return r},partial:t=>({withDefault:e=>r=>{let n=t[r];return n!==void 0?typeof n=="function"?n(r):n:typeof e=="function"?e(r):e}}),withGuards:t=>({withDefault:e=>r=>{for(let[n,o]of t)if(n(r))return typeof o=="function"?o(r):o;return typeof e=="function"?e(r):e}}),struct:()=>{let t=[],e={case:(r,n)=>(t.push({pattern:r,handler:n}),e),build:()=>r=>{for(let{pattern:n,handler:o}of t)if(ue(r,n))return o(r);throw new Error(`No matching pattern for value: ${JSON.stringify(r)}`)}};return e},builder:()=>{let t=[],e,r={case:(n,o)=>(t.push({pattern:n,result:o}),r),when:(n,o)=>(t.push({pattern:n,result:o}),r),default:n=>(e=n,{build:()=>o=>{for(let{pattern:a,result:s}of t)if(ue(o,a))return typeof s=="function"?s(o):s;if(e!==void 0)return typeof e=="function"?e(o):e;throw new Error(`No matching pattern for value: ${JSON.stringify(o)}`)}})};return r}},Vr=a(Tt,ft);function $e(t,e){return {...Le({_tag:t,impl:e}),toString(){return `${t}()`},[k](){if("isSome"in e&&"isNone"in e){if(typeof e.isSome=="function"&&e.isSome()&&"get"in e&&typeof e.get=="function")return {ok:true,value:e.get()};if(typeof e.isNone=="function"&&e.isNone())return {ok:false,empty:true}}if("isLeft"in e&&"isRight"in e){if(typeof e.isRight=="function"&&e.isRight()&&"value"in e)return {ok:true,value:e.value};if(typeof e.isLeft=="function"&&e.isLeft()&&"value"in e)return {ok:false,empty:false,error:e.value}}if("isSuccess"in e&&"isFailure"in e){if(typeof e.isSuccess=="function"&&e.isSuccess()&&"get"in e&&typeof e.get=="function")return {ok:true,value:e.get()};if(typeof e.isFailure=="function"&&e.isFailure()&&"getError"in e&&typeof e.getError=="function")return {ok:false,empty:false,error:e.getError()}}if("isEmpty"in e&&"head"in e){if(typeof e.isEmpty=="function"&&e.isEmpty())return {ok:false,empty:true};if(typeof e.head=="function")return {ok:true,value:e.head()};if("head"in e)return {ok:true,value:e.head}}return {ok:true,value:e}}}}function Je(t){if(!t||typeof t!="object"||!("_tag"in t))return "unknown";switch(t._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"}}var ee={Option:{of:t=>f(t),empty:()=>f.none()},Either:{of:t=>c(t),empty:t=>p(t)},List:{of:t=>m([t]),empty:()=>m([])},Try:{of:t=>P(()=>t),empty:t=>P(()=>{throw t??new Error("Try failed")})}};function Yr(t){let e=t(),r=null;function n(o){let a=e.next(o);if(a.done)return r&&r in ee?ee[r]?.of(a.value):m([a.value]);let s=a.value;if(!r&&s&&typeof s=="object"&&"_tag"in s&&(r=Je(s),r==="List"))return dt(t);if(s&&typeof s=="object"&&k in s){let i=s[k]();if(!i.ok){if(!r||!(r in ee))return m([]);let u=ee[r];if("empty"in i&&!i.empty&&"error"in i){if(r==="Either")return u?.empty(i.error);if(r==="Try")return u?.empty(i.error instanceof Error?i.error:new Error(String(i.error)))}return u?.empty()}return n(i.value)}throw new 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 n()}function dt(t){function e(o){if(!o||typeof o!="object"||!(k in o))return [o];let a=o;if("toArray"in a&&typeof a.toArray=="function"){let i=a.toArray();return i.length===0?[]:i}let s=a[k]();return s.ok?[s.value]:[]}function r(o){let a=t(),s=[],i=[],u=0;function l(d){let y=a.next(d);if(y.done){s.push(y.value);return}if(u<o.length){let R=o[u];i.push(R),u++,l(R);return}let A=e(y.value);if(A.length!==0)if(A.length>1){let R=A.flatMap(E=>{let F=[...i,E];return r(F)});s.push(...R);}else i.push(A[0]),u++,l(A[0]);}return l(void 0),s}let n=r([]);return m(n)}async function qr(t){let e=t(),r=null;async function n(o){let a=await e.next(o);if(a.done)return r&&r in ee?ee[r]?.of(a.value):m([a.value]);let s=await Promise.resolve(a.value);if(!r&&s&&typeof s=="object"&&"_tag"in s&&(r=Je(s)),s&&typeof s=="object"&&k in s){let i=s[k]();if(!i.ok){if(!r||!(r in ee))return m([]);let u=ee[r];if("empty"in i&&!i.empty&&"error"in i){if(r==="Either")return u?.empty(i.error);if(r==="Try")return u?.empty(i.error instanceof Error?i.error:new Error(String(i.error)))}return u?.empty()}return n(i.value)}return n(s)}return n()}function Qr(t){return t!==null&&typeof t=="object"&&k in t}function Hr(t){let e=t[k]();if(e.ok)return e.value;throw "error"in e?e.error:new Error("Cannot unwrap empty monad")}function*Zr(t){return yield t}var Xr=(t="Cannot unwrap None in Do-notation")=>{let e=new Error(t),r=Object.create(Error.prototype);return r.message=e.message,r.stack=e.stack,r.name="NoneError",r},en=(t,e="Cannot unwrap Left in Do-notation")=>{let r=new Error(e),n=Object.create(Error.prototype);return n.message=r.message,n.stack=r.stack,n.name="LeftError",n.value=t,n},tn=(t="Cannot unwrap empty List in Do-notation")=>{let e=new Error(t),r=Object.create(Error.prototype);return r.message=e.message,r.stack=e.stack,r.name="EmptyListError",r},rn=(t,e="Cannot unwrap Failure in Do-notation")=>{let r=new Error(e),n=Object.create(Error.prototype);return n.message=r.message,n.stack=r.stack,n.name="FailureError",n.cause=t,n};var ke="Throwable",Q=class t extends Error{constructor(r,n){super(r,{cause:n?.cause});this._tag=ke;this.name=n?.taskInfo?.name??ke,Object.defineProperties(this,{_tag:{value:ke,writable:false,configurable:false},data:{value:n?.data,writable:false,configurable:false},taskInfo:{value:n?.taskInfo,writable:false,configurable:false},name:{value:n?.taskInfo?.name??ke,writable:false,configurable:false}}),n?.cause&&Object.defineProperty(this,"cause",{value:n.cause,writable:false,configurable:false}),n?.stack?this.stack=n.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}static apply(r,n,o){if(r instanceof Error){let u=new t(r.message,{data:n,cause:r.cause??void 0,stack:r.stack??void 0,taskInfo:o});for(let l of Object.keys(r))if(!(l in u)){let d=u,y=r;d[l]=y[l];}return u}if(r&&typeof r=="object"){let u=r,l=typeof u.message=="string"?u.message:typeof u.error=="string"?u.error:`Object error: ${JSON.stringify(u,Object.getOwnPropertyNames(u).filter(y=>u[y]!==void 0))}`,d=new t(l,{data:n??u,taskInfo:o});for(let y of Object.keys(u))if(!(y in d)){let A=d;A[y]=u[y];}return d}if(typeof r=="function"){let u=r.name??"anonymous function",l=r.toString().substring(0,100)+(r.toString().length>100?"...":"");return new t(`Function error: ${u}`,{data:n??{functionType:typeof r,functionName:u,functionString:l},taskInfo:o})}let a=typeof r,s=r===null?"null":r===void 0?"undefined":String(r);if(a==="number"){let u=r,l=Number.isNaN(u)?"Number error: NaN":Number.isFinite(u)?`Number error: ${u}`:`Number error: ${u>0?"Infinity":"-Infinity"}`;return new t(l,{data:n??{errorType:a,errorValue:u,originalError:r},taskInfo:o})}if(a==="bigint")return new t(`BigInt error: ${r}n`,{data:n??{errorType:a,errorValue:String(r),originalError:r},taskInfo:o});if(a==="boolean")return new t(`Boolean error: ${r}`,{data:n??{errorType:a,errorValue:r,originalError:r},taskInfo:o});if(a==="symbol"){let u=r.description??"unnamed symbol";return new t(`Symbol error: Symbol(${u})`,{data:n??{errorType:a,symbolDescription:u,originalError:r},taskInfo:o})}let i=typeof r=="string"?r:`${a.charAt(0).toUpperCase()+a.slice(1)} error: ${s}`;return new t(i,{data:n??{errorType:a,errorValue:s,originalError:r},taskInfo:o})}};var b=t=>{let e=new Promise((r,n)=>{try{t(r,n);}catch(o){n(o);}});return {_tag:"FPromise",map:r=>b((n,o)=>{e.then(a=>{try{n(r(a));}catch(s){o(s);}}).catch(o);}),flatMap:r=>b((n,o)=>{e.then(a=>{try{let s=r(a);"_tag"in s&&s._tag==="FPromise"?s.then(n,o):Promise.resolve(s).then(n,o);}catch(s){o(s);}}).catch(o);}),flatMapAsync:async r=>{let n=await e,o=r(n);return o instanceof Promise?o:new Promise((a,s)=>{o.then(a,s);})},tap:r=>b((n,o)=>{e.then(a=>{try{r(a),n(a);}catch(s){o(s);}}).catch(o);}),mapError:r=>b((n,o)=>{e.then(n).catch(a=>{try{let s={originalError:a,stack:a instanceof Error?a.stack:void 0,timestamp:Date.now()};o(r(a,s));}catch(s){o(s);}});}),tapError:r=>b((n,o)=>{e.then(n).catch(a=>{try{r(a),o(a);}catch(s){o(s);}});}),recover:r=>b(n=>{e.then(n).catch(()=>n(r));}),recoverWith:r=>b(n=>{e.then(n).catch(o=>{try{n(r(o));}catch{n(null);}});}),recoverWithF:r=>b((n,o)=>{e.then(n).catch(a=>{try{r(a).then(n,o);}catch(s){o(s);}});}),filterError:(r,n)=>b((o,a)=>{e.then(o).catch(s=>{if(r(s))try{n(s).then(o,a);}catch(i){a(i);}else a(s);});}),logError:r=>b((n,o)=>{e.then(n).catch(a=>{try{let s={originalError:a,stack:a instanceof Error?a.stack:void 0,timestamp:Date.now()};r(a,s);}catch{}finally{o(a);}});}),then:(r,n)=>e.then(r,n),toPromise:()=>e,toEither:async()=>{try{let r=await e;return c(r)}catch(r){return p(r)}},fold:(r,n)=>b((o,a)=>{e.then(s=>{try{o(n(s));}catch(i){a(i);}}).catch(s=>{try{o(r(s));}catch(i){a(i);}});})}},mt={resolve:t=>b(e=>e(t)),reject:t=>b((e,r)=>r(t)),from:t=>b((e,r)=>{t.then(e).catch(r);}),fromEither:t=>t.isRight()?b(e=>e(t.value)):b((e,r)=>r(t.value)),all:t=>b((e,r)=>{Promise.all(t.map(n=>n instanceof Promise?n:Promise.resolve(n))).then(e).catch(r);}),allSettled:t=>b(e=>{let r=[],n=0;if(t.length===0){e([]);return}t.forEach((o,a)=>{Promise.resolve(o).then(s=>{r[a]=c(s),n++,n===t.length&&e(r);}).catch(s=>{r[a]=p(s),n++,n===t.length&&e(r);});});}),race:t=>b((e,r)=>{Promise.race(t).then(e,r);}),any:t=>b((e,r)=>{if(typeof Promise.any=="function")Promise.any(t).then(e,r);else {let n=0,o=[];if(t.length===0){r(new AggregateError([],"All promises were rejected"));return}t.forEach((a,s)=>{Promise.resolve(a).then(e).catch(i=>{o[s]=i,n++,n===t.length&&r(new AggregateError(o,"All promises were rejected"));});});}}),retryWithBackoff:(t,e)=>{let{maxRetries:r,baseDelay:n=100,shouldRetry:o=()=>true}=e;return b((a,s)=>{let i=0,u=()=>{t().toPromise().then(a).catch(l=>{if(i++,i<=r&&o(l,i)){let d=n*Math.pow(2,i-1);setTimeout(u,d);}else s(l);});};u();})}},Se=a(b,mt);function yt(t){return t instanceof Error&&typeof t=="object"&&true&&t._tag==="Throwable"}var z=(t,e)=>{if(t.isRight())return H(t.get(),e);if(t.isLeft())return ye(t,void 0,e);throw new Error("Unrecognized task outcome")},ye=(t,e,r)=>{let n={name:r?.name??"Task",description:r?.description??""},o=Q.apply(t,e,n),a=p(o),{isLeft:s,isRight:i,...u}=a;return {...u,_tag:"TaskFailure",_meta:n,error:o,map:l=>{let d=a.map(l);return z(d,r)},flatMap:l=>{let d=a.flatMap(l);return z(d,r)},ap:l=>{let d=a.ap(l);return z(d,r)},merge:l=>{let d=a.merge(l);return z(d,r)},mapAsync:async l=>{let d=await a.mapAsync(l);return z(d,r)},flatMapAsync:async l=>{let d=await a.flatMapAsync(l);return z(d,r)},isSuccess(){return false},isFailure(){return true},mapError:l=>ye(l(o),e,r),recover:l=>H(l,r),recoverWith:l=>H(l(o),r)}},H=(t,e)=>{let r={name:e?.name??"Task",description:e?.description??""},n=c(t),{isLeft:o,isRight:a,...s}=n;return {...s,_tag:"TaskSuccess",_meta:r,map:i=>{let u=n.map(i);return z(u,e)},flatMap:i=>{let u=n.flatMap(i);return z(u,e)},ap:i=>{let u=n.ap(i);return z(u,e)},merge:i=>{let u=n.merge(i);return z(u,e)},mapAsync:async i=>{let u=await n.mapAsync(i);return z(u,e)},flatMapAsync:async i=>{let u=await n.flatMapAsync(i);return z(u,e)},isSuccess(){return true},isFailure(){return false},mapError:i=>H(t,e),recover:i=>H(t,e),recoverWith:i=>H(t,e)}},Oe=(t,e)=>H(t,e),N=(t,e,r)=>ye(t,e,r),ve=()=>{let t=new AbortController,e=Ae();return {token:{get isCancelled(){return t.signal.aborted},get signal(){return t.signal},onCancel(n){t.signal.aborted?n():e.add(n);}},cancel(){t.signal.aborted||(t.abort(),e.build().forEach(n=>{try{n();}catch(o){console.error("Error in cancellation callback:",o);}}));}}},gt=t=>{let e=t?.name??"Task",r=t?.description??"",n={Async:(o,a=u=>u,s=()=>{},i)=>Se((u,l)=>{(async()=>{let d=x(false),y=x(null),A=x(()=>{});if(i){if(i.isCancelled){try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}u(N(new Error("Task was cancelled before execution started"),void 0,{name:e,description:r}));return}let R=()=>{d.set(true),y.set(new Error("Task was cancelled during execution"));};i.onCancel(R),A.set(()=>{});}try{let R=await o();try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}if(d.get()){y.get()?u(N(y.get(),void 0,{name:e,description:r})):u(N(new Error("Task was cancelled during execution"),void 0,{name:e,description:r}));return}if(R&&typeof R=="object"&&"_tag"in R){let E=R;E._tag==="TaskSuccess"||E._tag==="TaskFailure"?u(E):u(Oe(R,{name:e,description:r}));}else u(Oe(R,{name:e,description:r}));}catch(R){try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}if(d.get()){y.get()?u(N(y.get(),void 0,{name:e,description:r})):u(N(new Error("Task was cancelled during execution"),void 0,{name:e,description:r}));return}try{if(R instanceof Error&&yt(R)){let E=new Error(`${e}: ${R.message}`),F=Q.apply(E,void 0,{name:e,description:r});Object.defineProperty(F,"cause",{value:R,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{a(R);}catch(X){console.error("Error in error handler:",X);}}),u(N(F,void 0,{name:e,description:r}));}else {let E=await a(R);if(E&&typeof E=="object"&&"_tag"in E){let F=E;F._tag==="TaskSuccess"||F._tag==="TaskFailure"?u(F):u(N(E,void 0,{name:e,description:r}));}else u(N(E,void 0,{name:e,description:r}));}}catch(E){u(N(E,void 0,{name:e,description:r}));}}finally{A.get()();}})().catch(d=>u(N(d,void 0,{name:e,description:r})));}),Sync:(o,a=i=>i,s=()=>{})=>{try{return H(o(),{name:e,description:r})}catch(i){return ye(a(i),void 0,{name:e,description:r})}finally{s();}},AsyncWithProgress:(o,a,s=l=>l,i=()=>{},u)=>{let l=d=>{let y=Math.max(0,Math.min(100,d));y<=100&&a(y);};return n.Async(()=>o(l),s,i,u)}};return {...$e("Task",n),_type:"Task"}},je={success:(t,e)=>H(t,e),fail:(t,e,r)=>ye(t,e,r),ok:(t,e)=>Oe(t,e),err:(t,e,r)=>N(t,e,r),getErrorChain:t=>{if(!t)return [];let e=Ae();e.add(t);let r=x(t);for(;r.get()&&r.get().cause;){let{cause:n}=r.get();if(n)e.add(n),r.set(n);else break;if(e.size()>100)break}return e.build()},formatErrorChain:(t,e)=>{let r=je.getErrorChain(t),n=e?.separator??`
14
+ `;return r.map((o,a)=>{if(!o)return `${a>0?"\u21B3 ":""}Unknown error`;let{taskInfo:s}=o,i=e?.includeTasks&&s?.name?`[${s.name}] `:"",u=o.message??"No message",l=x(`${a>0?"\u21B3 ":""}${i}${u}`);return e?.includeStackTrace&&o.stack&&l.set(`${l.get()}
15
+ ${o.stack.split(`
16
+ `).slice(1).join(`
17
+ `)}`),l.get()}).join(n)},fromPromise:(t,e)=>(...r)=>J(e??{name:"PromiseTask",description:"Task from Promise"}).Async(()=>t(...r),o=>o),toPromise:t=>new Promise((e,r)=>{t.isSuccess()?e(t.get()):r(t.error);}),race:(t,e,r)=>{let n=r?.name??"TaskRace",o=r?.description??"Race between multiple tasks";return J({name:n,description:o}).Async(async()=>{let s=Ae();t.forEach(u=>s.add(u));let i=x(void 0);if(typeof e=="number"&&e>0){let u=Se((l,d)=>{i.set(setTimeout(()=>{d(new Error(`Task race timed out after ${e}ms`));},e));});s.add(u);}try{return await new Promise((u,l)=>{s.build().forEach(d=>{d.then(y=>{if(y&&typeof y=="object"&&"_tag"in y){let A=y;A._tag==="TaskSuccess"?u(A.get()):A._tag==="TaskFailure"?l(A.error):u(y);}else u(y);},y=>l(y));});})}finally{i.get()&&clearTimeout(i.get());}},s=>s)},fromNodeCallback:(t,e)=>{let r=e?.name??"NodeCallbackTask",n=e?.description??"Task from Node.js callback function",o={name:r,description:n};return (...a)=>J(o).Async(()=>new Promise((s,i)=>{try{t(...a,(u,l)=>{u?i(u):s(l);});}catch(u){i(u);}}),s=>s)},createCancellationTokenSource:ve,cancellable:(t,e)=>{let r=ve();return {task:J(e).Async(()=>t(r.token),o=>o,()=>{},r.token),cancel:()=>r.cancel()}},withProgress:(t,e=()=>{},r)=>{let n=ve(),o=x(0),a=i=>{o.set(Math.max(0,Math.min(100,i))),e(o.get());};return {task:J(r).Async(()=>t(a,n.token),i=>i,()=>{},n.token),cancel:()=>n.cancel(),currentProgress:()=>o.get()}}},J=a(gt,je);var We={includeTasks:true,includeStackTrace:false,separator:`
18
+ `,includeData:false,maxStackFrames:3,title:"Error",colors:false};function Ge(t){let e=new WeakSet;return JSON.stringify(t,(r,n)=>{if(typeof n=="bigint")return `${n.toString()}n`;if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular Reference]";e.add(n);}return r==="stack"&&typeof n=="string"?xe(n):n},2)}function xe(t){if(t===void 0||t==="")return "";let e=t.split(`
19
+ `),r=e[0],n=e.slice(1).map(o=>o.trim());return [r,...n].join(`
20
+ `)}function An(t,e){let r={...We,...e},n=t instanceof Error?t:Q.apply(t),o=J?.getErrorChain?J.getErrorChain(n):[n],a=r.colors?`\x1B[31m${r.title}:\x1B[0m ${n.message}`:`${r.title}: ${n.message}`,s=o.map((u,l)=>{let d=" ".repeat(l),y=l>0?"\u21B3 ":"",{taskInfo:A}=u,R=r.includeTasks&&A?.name?r.colors?`\x1B[36m[${A.name}]\x1B[0m `:`[${A.name}] `:"",E=`${d}${y}${R}${u.message}`;if(r.includeStackTrace&&u.stack){let X=xe(u.stack).split(`
21
+ `).slice(1),ae=r.maxStackFrames??We.maxStackFrames??3,he=X.slice(0,ae).map(Ee=>`${d} ${r.colors?"\x1B[90m":""}${Ee}${r.colors?"\x1B[0m":""}`).join(`
22
+ `);E+=`
23
+ ${he}`,X.length>ae&&(E+=`
24
+ ${d} ${r.colors?"\x1B[90m":""}...${X.length-ae} more stack frames${r.colors?"\x1B[0m":""}`);}return E}).join(r.separator),i=`${a}
25
+
26
+ ${s}`;if(r.includeData){let{data:u}=n;if(u){let l=r.colors?`
27
+
28
+ \x1B[33mContext:\x1B[0m
29
+ ${Ge(u)}`:`
30
+
31
+ Context:
32
+ ${Ge(u)}`;i+=l;}}return i}function Ln(){return function(e){if(!e)return e;let r=e instanceof Error?e:new Error(String(e)),n={message:r.message,name:r.name||"Error",stack:r.stack?xe(r.stack):void 0};if(r.taskInfo&&(n.taskInfo=r.taskInfo),r.data&&(n.data=r.data),typeof J?.getErrorChain=="function")try{let o=J.getErrorChain(r);o.length>1&&(n.errorChain=J.formatErrorChain(r,{includeTasks:!0}),n.structuredErrorChain=o.map(a=>({message:a.message,name:a.name,taskInfo:a.taskInfo,stack:a.stack?xe(a.stack):void 0})));}catch{}return Object.getOwnPropertyNames(r).forEach(o=>{if(!n[o]){let a=r[o];n[o]=a;}}),n}}var xn=t=>{let e=new Error(t);return e.name="ParseError",e};var j=(t,e,r,n)=>{let o=Q.apply(e,r,{name:t,description:e});return Object.assign(o,{code:t,message:e,status:ht(t),context:r,timestamp:new Date().toISOString(),traceId:n?.traceId})},ht=t=>({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})[t],Et={validation:(t,e,r)=>j("VALIDATION_FAILED",`Validation failed: ${t} ${r}`,{field:t,value:e,rule:r}),network:(t,e,r)=>j("NETWORK_ERROR",`Network error: ${e} ${t}${r?` (${r})`:""}`,{url:t,method:e,statusCode:r}),auth:(t,e)=>j("AUTH_REQUIRED",`Authentication required: ${t}${e?` (role: ${e})`:""}`,{resource:t,requiredRole:e}),notFound:(t,e)=>j("NOT_FOUND",`Not found: ${t} with id ${e}`,{resource:t,id:e}),permission:(t,e,r)=>j("PERMISSION_DENIED",`Permission denied: cannot ${t} ${e}`,{action:t,resource:e,userId:r}),rateLimit:(t,e,r)=>j("RATE_LIMITED",`Rate limit exceeded: ${t} requests per ${e}`,{limit:t,window:e,retryAfter:r}),internal:t=>j("INTERNAL_ERROR",`Internal server error: ${t}`,{errorId:t,timestamp:new Date().toISOString()}),badRequest:(t,e)=>j("BAD_REQUEST",`Bad request: ${t}`,{reason:t,expected:e}),conflict:(t,e)=>j("CONFLICT",`Conflict: ${t} already exists with value ${e}`,{resource:t,conflictingValue:e}),timeout:(t,e)=>j("TIMEOUT",`Request timeout: ${e} exceeded ${t}ms`,{duration:t,operation:e}),isTypedError:t=>typeof t=="object"&&t!==null&&"code"in t&&"message"in t&&"status"in t&&"context"in t&&"_tag"in t&&t._tag==="Throwable",hasCode:(t,e)=>t.code===e},S=Object.assign(j,Et);var C={rule:t=>e=>{if(t==="email")return typeof e!="string"||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?p(S.validation("value",e,"must be a valid email")):c(e);if(t==="url")try{return new URL(String(e)),c(e)}catch{return p(S.validation("value",e,"must be a valid URL"))}if(t==="uuid")return typeof e!="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(e)?p(S.validation("value",e,"must be a valid UUID")):c(e);if(t==="required")return e==null||e===""?p(S.validation("value",e,"is required")):c(e);if(t==="numeric")return typeof e!="number"&&!/^\d+$/.test(String(e))?p(S.validation("value",e,"must be numeric")):c(e);if(t==="alpha")return typeof e!="string"||!/^[a-zA-Z]+$/.test(e)?p(S.validation("value",e,"must contain only letters")):c(e);if(t==="alphanumeric")return typeof e!="string"||!/^[a-zA-Z0-9]+$/.test(e)?p(S.validation("value",e,"must be alphanumeric")):c(e);if(t.startsWith("min:")){let r=Number(t.split(":")[1]),n=Number(e);return isNaN(n)||n<r?p(S.validation("value",e,`must be at least ${r}`)):c(e)}if(t.startsWith("max:")){let r=Number(t.split(":")[1]),n=Number(e);return isNaN(n)||n>r?p(S.validation("value",e,`must be at most ${r}`)):c(e)}if(t.startsWith("minLength:")){let r=Number(t.split(":")[1]);return String(e).length<r?p(S.validation("value",e,`must be at least ${r} characters`)):c(e)}if(t.startsWith("maxLength:")){let r=Number(t.split(":")[1]);return String(e).length>r?p(S.validation("value",e,`must be at most ${r} characters`)):c(e)}if(t.startsWith("pattern:")){let r=t.substring(8);return new RegExp(r).test(String(e))?c(e):p(S.validation("value",e,`must match pattern ${r}`))}if(t.startsWith("in:")){let r=t.substring(3).split(",");return r.includes(String(e))?c(e):p(S.validation("value",e,`must be one of: ${r.join(", ")}`))}if(t.startsWith("notIn:")){let r=t.substring(6).split(",");return r.includes(String(e))?p(S.validation("value",e,`must not be one of: ${r.join(", ")}`)):c(e)}if(t==="date"){let r=new Date(String(e));return isNaN(r.getTime())?p(S.validation("value",e,"must be a valid date")):c(e)}if(t==="future"){let r=new Date(String(e));return isNaN(r.getTime())||r<=new Date?p(S.validation("value",e,"must be a future date")):c(e)}if(t==="past"){let r=new Date(String(e));return isNaN(r.getTime())||r>=new Date?p(S.validation("value",e,"must be a past date")):c(e)}return c(e)},combine:(...t)=>e=>{for(let r of t){let n=r(e);if(n.isLeft())return n}return c(e)},custom:(t,e)=>r=>t(r)?c(r):p(S.validation("value",r,e)),form:(t,e)=>{let r=[],n={};for(let[o,a]of Object.entries(t)){let s=e[o],i=a(s);if(i.isLeft()){let u=i.fold(d=>d,()=>{throw new Error("Should not be left")}),l=S.validation(o,s,u.context.rule);r.push(l);}else n[o]=i.get();}return r.length>0?p(m(r)):c(n)}},Rt={...C,validators:{email:C.rule("email"),url:C.rule("url"),uuid:C.rule("uuid"),required:C.rule("required"),numeric:C.rule("numeric"),positiveNumber:C.combine(C.rule("numeric"),C.rule("min:0")),nonEmptyString:C.combine(C.rule("required"),C.custom(t=>typeof t=="string"&&t.trim().length>0,"must not be empty"))}},Bn=Object.assign(C.rule,Rt);function At(t){return t!=null&&typeof t=="object"&&"getOrElse"in t&&typeof t.getOrElse=="function"&&"getOrThrow"in t&&typeof t.getOrThrow=="function"&&"get"in t&&typeof t.get=="function"&&"orElse"in t&&typeof t.orElse=="function"&&"orNull"in t&&typeof t.orNull=="function"&&"orUndefined"in t&&typeof t.orUndefined=="function"}var In={toOption:t=>t.fold(()=>w(),e=>U(e)),toList:t=>t.fold(()=>m([]),e=>m([e])),toEither:(t,e)=>t.fold(()=>p(e),r=>c(r)),isEmpty:t=>t.fold(()=>true,()=>false),size:t=>t.fold(()=>0,()=>1)};var te=t=>t!==null&&typeof t=="object"&&(t._tag==="Some"||t._tag==="None"),Y=t=>t!==null&&typeof t=="object"&&t._tag==="List",le=t=>t!==null&&typeof t=="object"&&(t._tag==="Left"||t._tag==="Right"),pe=t=>t!==null&&typeof t=="object"&&(t._tag==="Success"||t._tag==="Failure"),W=()=>{let t=(s,i)=>{if(te(s))return s.map(u=>i(u));if(Y(s))return s.map(u=>i(u));if(le(s))return s.map(u=>i(u));if(pe(s))return s.map(u=>i(u));throw new Error(`Unsupported functor type: ${JSON.stringify(s)}`)},e=s=>{if(te(s))return s.get();if(Y(s)){let i=s.toArray();if(i.length>0&&Y(i[0])){let u=[];for(let l of i)Y(l)&&u.push(...l.toArray());return m(u)}return s.flatten()}if(le(s))return s.isRight()?s.fold(()=>null,i=>i):s;if(pe(s))return s.isSuccess()?s.get():s;throw new Error(`Unsupported functor type for flatten: ${JSON.stringify(s)}`)},r=(s,i)=>{if(te(s))return s.flatMap(u=>i(u));if(Y(s))return s.flatMap(u=>i(u));if(le(s))return s.flatMap(u=>i(u));if(pe(s))return s.flatMap(u=>i(u));throw new Error(`Unsupported functor type for flatMap: ${JSON.stringify(s)}`)},n=(s,i)=>{if(te(s)&&te(i))return s.flatMap(u=>i.map(l=>u(l)));if(Y(s)&&Y(i))return s.flatMap(u=>i.map(l=>u(l)));if(le(s)&&le(i))return s.flatMap(u=>i.map(l=>u(l)));if(pe(s)&&pe(i))return s.flatMap(u=>i.map(l=>u(l)));throw new Error(`Unsupported functor type for ap: ${JSON.stringify(s)}`)},o=s=>{if(te(s)){let i=s;if(i.isEmpty)return m([f.none()]);let u=i.get();if(Y(u))return u.map(l=>f(l));throw new Error("Unsupported inner container type for sequence")}if(Y(s)){let u=s.toArray();if(u.length===0)return f.none();let l=u[0];if(te(l)){for(let y of u)if(y.isEmpty)return f.none();let d=u.map(y=>y.get());return f(m(d))}throw new Error("Unsupported inner container type for sequence")}throw new Error(`Unsupported outer container type for sequence: ${JSON.stringify(s)}`)};return {_tag:"HKT",map:t,flatten:e,flatMap:r,ap:n,sequence:o,traverse:(s,i)=>o(t(s,u=>i(u))),_type:"HKT"}},ce=W();W.map=(t,e)=>ce.map(t,e);W.flatten=t=>ce.flatten(t);W.flatMap=(t,e)=>ce.flatMap(t,e);W.ap=(t,e)=>ce.ap(t,e);W.sequence=t=>ce.sequence(t);W.traverse=(t,e)=>ce.traverse(t,e);W.isOption=te;W.isList=Y;W.isEither=le;W.isTry=pe;function Jn(t){return {id:t,isSame:r=>r.id===t}}var re=t=>{let e=false,r,n,o=false,a=()=>{if(!e)try{r=t(),e=!0;}catch(i){throw n=i,o=true,e=true,i}if(o)throw n;return r};return {_tag:"Lazy",get isEvaluated(){return e},get:a,getOrElse:i=>{try{return a()}catch{return i}},getOrNull:()=>{try{return a()}catch{return null}},orNull:()=>{try{return a()}catch{return null}},getOrThrow:i=>{try{return a()}catch(u){throw i??u}},orElse:i=>D(()=>{try{return a()}catch{return i.get()}}),orUndefined:()=>{try{return a()}catch{return}},map:i=>D(()=>i(a())),ap:i=>D(()=>i.get()(a())),mapAsync:async i=>{let u=a(),l=await i(u);return D(()=>l)},flatMap:i=>D(()=>i(a()).get()),flatMapAsync:async i=>{let u=a(),l=await i(u);return D(()=>l.get())},filter:i=>D(()=>{let u=a();return i(u)?U(u):w}),recover:i=>D(()=>{try{return a()}catch(u){return i(u)}}),recoverWith:i=>D(()=>{try{return a()}catch(u){return i(u).get()}}),toOption:()=>{try{return U(a())}catch{return w}},toEither:()=>{try{return c(a())}catch(i){return p(i)}},toEitherWith:i=>{try{return c(a())}catch(u){return p(i(u))}},toTry:()=>P(()=>a()),tap:i=>D(()=>{let u=a();return i(u),u}),tapError:i=>D(()=>{try{return a()}catch(u){throw i(u),u}}),fold:i=>i(a()),foldWith:(i,u)=>{try{return u(a())}catch(l){return i(l)}},foldLeft:i=>u=>u(i,a()),foldRight:i=>u=>u(a(),i),match:i=>i.Lazy(a()),toString:()=>e&&!o?`Lazy(${me(r)})`:e&&o?`Lazy(<error: ${n instanceof Error?n.message:String(n)}>)`:"Lazy(<not evaluated>)",toValue:()=>e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false},get size(){try{return a(),1}catch{return 0}},get isEmpty(){try{return a(),!1}catch{return true}},contains:i=>{try{return a()===i}catch{return false}},reduce:i=>a(),reduceRight:i=>a(),count:i=>{try{return i(a())?1:0}catch{return 0}},find:i=>{try{let u=a();return i(u)?U(u):w}catch{return w}},exists:i=>{try{return i(a())}catch{return false}},forEach:i=>{try{i(a());}catch{}},pipe:i=>i(a()),serialize:()=>({toJSON:()=>JSON.stringify(e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false}),toYAML:()=>e&&!o?`_tag: Lazy
33
+ evaluated: true
34
+ value: ${me(r)}`:`_tag: Lazy
35
+ evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false})).toString("base64")}),typeable:"Lazy"}},Lt={of:t=>re(t),fromValue:t=>re(()=>t),fromOption:(t,e)=>re(()=>t._tag==="Some"?t.value:e()),fromTry:t=>re(()=>t.get()),fromEither:t=>re(()=>t.fold(e=>{throw e},e=>e)),fromPromise:t=>re(()=>{throw new Error("Promise not yet resolved. Use await on the promise before creating Lazy.")}),fail:t=>re(()=>{throw t})},D=a(re,Lt);var ge=Map;var Z=t=>{let r={values:new ge(t)},n=()=>Array.from(r.values.entries()).map(([T,h])=>b$1([T,h])),o=T=>Z(new ge(r.values).set(T.toArray()[0],T.toArray()[1]).entries()),a=T=>{let h=new ge(r.values);return h.delete(T)?Z(h.entries()):Z(r.values.entries())},s=T=>{let h=T.toArray();return r.values.get(h[0])===h[1]},i=()=>r.values.size,u=T=>Z(Array.from(r.values.entries()).map(([h,V])=>[h,T(V)])),l=T=>{let h=Z(r.values.entries()).toList();return Z(h.flatMap(T).toArray())},d=T=>{let h=[];for(let[V,se]of r.values.entries()){let fe=T.get(V);fe._tag==="Some"&&fe.value&&h.push([V,fe.value(se)]);}return Z(h)},y=async T=>{let h=new ge;for(let[V,se]of r.values.entries()){let fe=await T(se);for(let Xe of fe.toList()){let[et,tt]=Xe.toArray();h.set(et,tt);}}return Z(h.entries())},A=T=>m(n()).reduce(T),R=T=>m(n()).reduceRight(T),E=T=>h=>m(n()).foldLeft(T)(h),F=T=>h=>m(n()).foldRight(T)(h),X=T=>f(r.values.get(T)),ae=(T,h)=>f(r.values.get(T)).getOrElse(h),Te=()=>r.values.size===0,he=(T,h)=>f(r.values.get(T)).orElse(h),Ee=(T,h)=>{if(Te())return T();let V=n();if(V.length===0)return T();let se=V[0];return se===void 0?T():h(se)},_e=()=>m(n()),g=()=>ne(n()),B=()=>`Map(${n().toString()})`,_=T=>Te()?T.Empty():T.NonEmpty(n());return {_tag:"Map",[Symbol.iterator]:()=>r.values.entries(),add:o,remove:a,contains:s,get size(){return i()},map:u,ap:d,flatMap:l,flatMapAsync:y,reduce:A,reduceRight:R,foldLeft:E,foldRight:F,fold:Ee,match:_,get:X,getOrElse:ae,get isEmpty(){return Te()},orElse:he,toList:_e,toSet:g,toString:B,toValue:()=>({_tag:"Map",value:Array.from(r.values.entries())}),pipe:T=>T(Array.from(r.values.entries())),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())}),toYAML:()=>`_tag: Map
36
+ value: ${JSON.stringify(Array.from(r.values.entries()))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())})).toString("base64")})}},kt=t=>Z(t),qe={fromJSON:t=>{let e=JSON.parse(t);return Be(e.value)},fromYAML:t=>{let r=t.split(`
37
+ `)[1]?.split(": ")[1];if(!r)return Be([]);let n=JSON.parse(r);return Be(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return qe.fromJSON(e)}},Be=a(kt,qe);var xt={default:t=>e=>t(e),when:(t,e)=>r=>t(r)?e(r):void 0};var K=(t=[])=>{let e="Stack",r=[...t],n=()=>r.length,o=()=>r.length===0;return {_tag:e,get size(){return n()},get isEmpty(){return o()},contains:g=>r.includes(g),reduce:g=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduce(g)},reduceRight:g=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduceRight(g)},push:g=>K([...r,g]),pop:()=>{if(o())return [K([]),f(null)];let g=[...r],B=g.pop();return [K(g),f(B)]},peek:()=>o()?f(null):f(r[r.length-1]),map:g=>K(r.map(g)),flatMap:g=>o()?K([]):r.reduce((B,_)=>g(_).toArray().reduce((h,V)=>h.push(V),B),K([])),ap:g=>{let B=[];return r.forEach(_=>{g.toArray().forEach(T=>{B.push(T(_));});}),K(B)},flatMapAsync:async g=>o()?K([]):(await Promise.all(r.map(async _=>await g(_)))).reduce((_,T)=>T.toArray().reduce((h,V)=>h.push(V),_),K([])),toList:()=>m(r),toArray:()=>[...r],toString:()=>`Stack(${r.join(", ")})`,fold:(g,B)=>{if(o())return g();let _=r[r.length-1];return _!==void 0?B(_):g()},foldLeft:g=>B=>r.reduce(B,g),foldRight:g=>B=>r.reduceRight((_,T)=>B(T,_),g),match:g=>o()?g.Empty():g.NonEmpty([...r]),toValue:()=>({_tag:"Stack",value:r}),pipe:g=>g([...r]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Stack",value:r}),toYAML:()=>`_tag: Stack
38
+ value: ${JSON.stringify(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Stack",value:r})).toString("base64")})}},bt=(t=[])=>K(t),Qe={empty:()=>K([]),of:t=>K([t]),fromJSON:t=>{let e=JSON.parse(t);return Pe(e.value)},fromYAML:t=>{let r=t.split(`
39
+ `)[1]?.split(": ")[1];if(!r)return Pe([]);let n=JSON.parse(r);return Pe(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Qe.fromJSON(e)}},Pe=a(bt,Qe);function Eo(t){let e=Le({_tag:t._tag,impl:t.impl});return {...e,toValue:()=>({_tag:e._tag,value:t.value})}}var U=t=>({_tag:"Some",value:t,isEmpty:false,isSome(){return true},isNone(){return false},get:()=>t,getOrElse:()=>t,getOrThrow:()=>t,orElse:e=>U(t),orNull:()=>t,orUndefined:()=>t,map:e=>U(e(t)),ap:e=>e._tag==="Some"&&e.value?U(e.value(t)):G,filter(e){return e(t)?U(t):G},count:e=>e(t)?1:0,find:e=>e(t)?U(t):G,exists:e=>e(t),forEach:e=>e(t),fold:(e,r)=>r(t),match:e=>e.Some(t),flatMap:e=>e(t),flatMapAsync:async e=>await e(t),reduce:e=>e(void 0,t),reduceRight:e=>e(void 0,t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),toList:()=>m([t]),contains:e=>e===t,size:1,toOption:()=>U(t),toEither:e=>c(t),toTry:()=>P(()=>t),toPromise:()=>Promise.resolve(t),toString:()=>`Some(${me(t)})`,toValue:()=>({_tag:"Some",value:t}),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Some",value:t}),toYAML:()=>`_tag: Some
40
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Some",value:t})).toString("base64")}),[k](){return {ok:true,value:t}}}),G={_tag:"None",value:void 0,isEmpty:true,isSome(){return false},isNone(){return true},get:()=>{throw new Error("Cannot call get() on None")},getOrElse:t=>t,getOrThrow(t){throw t},orElse:t=>t,orNull:()=>null,orUndefined:()=>{},map:t=>G,ap:t=>G,filter(t){return G},count:t=>0,find:t=>G,exists:t=>false,forEach:t=>{},flatMap:t=>G,flatMapAsync:t=>Promise.resolve(G),reduce:()=>{},reduceRight:()=>{},fold:(t,e)=>t(),match:t=>t.None(),foldLeft:t=>()=>t,foldRight:t=>()=>t,toList:()=>m([]),contains:()=>false,size:0,toOption:()=>G,toEither:t=>p(t),toTry:()=>P(()=>{throw new Error("None")}),toPromise:()=>Promise.reject(new Error("Cannot convert None to Promise")),toString:()=>"None",toValue:()=>({_tag:"None",value:void 0}),pipe:t=>t(void 0),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"None",value:null}),toYAML:()=>`_tag: None
41
+ value: null`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"None",value:null})).toString("base64")}),[k](){return {ok:false,empty:true}}},w=()=>G,wt=t=>t!=null?U(t):w(),Ze={from:t=>f(t),none:()=>w(),fromJSON:t=>{let e=JSON.parse(t);return e._tag==="Some"?U(e.value):w()},fromYAML:t=>{let e=t.split(`
42
+ `),r=e[0]?.split(": ")[1],n=e[1]?.split(": ")[1];if(!r||!n)return w();let o=n==="null"?null:JSON.parse(n);return r==="Some"?U(o):w()},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ze.fromJSON(e)}},f=a(wt,Ze);export{Oe as $,xr as A,br as B,wr as C,Ur as D,Sr as E,vr as F,Or as G,Br as H,Nr as I,Vr as J,$e as K,Yr as L,qr as M,Qr as N,Hr as O,Zr as P,Xr as Q,en as R,tn as S,rn as T,ke as U,Q as V,mt as W,Se as X,yt as Y,ye as Z,H as _,k as a,N as aa,U as b,ve as ba,w as c,J as ca,wt as d,Ge as da,f as e,xe as ea,ne as f,An as fa,x as g,Ln as ga,$t as h,xn as ha,P as i,S as ia,Le as j,Bn as ja,we as k,At as ka,m as l,In as la,c as m,W as ma,p as n,Jn as na,fr as o,D as oa,dr as p,ge as pa,mr as q,Be as qa,ut as r,xt as ra,lt as s,Pe as sa,yr as t,Eo as ta,Ie as u,I as v,pt as w,Ar as x,Lr as y,kr as z};//# sourceMappingURL=chunk-RQFW23A2.mjs.map
43
+ //# sourceMappingURL=chunk-RQFW23A2.mjs.map