functype 0.8.70 → 0.8.80
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 +181 -3
- package/dist/{Either-DlOLCe3b.d.ts → Either-CfG7OVB-.d.ts} +1 -1
- package/dist/{Map-R4vpSnzG.d.ts → Map-wkGSJvYa.d.ts} +2 -2
- package/dist/{Valuable-D4BtNlTV.d.ts → Valuable-BI2O7E9Q.d.ts} +1 -1
- package/dist/chunk-JIVKCD74.mjs +42 -0
- package/dist/chunk-JIVKCD74.mjs.map +1 -0
- package/dist/either/index.d.ts +2 -2
- package/dist/either/index.mjs +1 -1
- package/dist/fpromise/index.d.ts +2 -2
- package/dist/fpromise/index.mjs +1 -1
- package/dist/index.d.ts +254 -205
- package/dist/index.mjs +1 -1
- package/dist/list/index.d.ts +2 -2
- package/dist/list/index.mjs +1 -1
- package/dist/map/index.d.ts +3 -3
- package/dist/map/index.mjs +1 -1
- package/dist/option/index.d.ts +2 -2
- package/dist/option/index.mjs +1 -1
- package/dist/set/index.d.ts +2 -2
- package/dist/set/index.mjs +1 -1
- package/dist/try/index.d.ts +2 -2
- package/dist/try/index.mjs +1 -1
- package/dist/tuple/index.d.ts +1 -1
- package/package.json +25 -7
- package/readme/TUPLE-EXAMPLES.md +0 -3
- package/readme/task-error-handling.md +0 -1
- package/dist/chunk-5ABR3A24.mjs +0 -49
- package/dist/chunk-5ABR3A24.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Functype is a lightweight functional programming library for TypeScript, drawing
|
|
|
15
15
|
- **Type Safety**: Leverages TypeScript's type system to ensure compile-time safety
|
|
16
16
|
- **Composability**: Provides abstractions for building complex programs from simple components
|
|
17
17
|
- **Functional Paradigms**: Embraces concepts like monads, functors, and type classes
|
|
18
|
+
- **Unified Interface**: All data structures implement a common hierarchy of interfaces for consistency
|
|
18
19
|
|
|
19
20
|
## Key Features
|
|
20
21
|
|
|
@@ -23,11 +24,13 @@ Functype is a lightweight functional programming library for TypeScript, drawing
|
|
|
23
24
|
- **List, Set, Map**: Immutable collection types with functional operators
|
|
24
25
|
- **Try Type**: Safely execute operations that might throw exceptions
|
|
25
26
|
- **Task**: Handle synchronous and asynchronous operations with error handling
|
|
27
|
+
- **Lazy**: Deferred computation with memoization
|
|
26
28
|
- **Tuple**: Type-safe fixed-length arrays
|
|
27
29
|
- **Typeable**: Runtime type identification with compile-time safety
|
|
28
30
|
- **Branded Types**: Nominal typing in TypeScript's structural type system
|
|
29
31
|
- **FPromise**: Enhanced Promise functionality with built-in error handling
|
|
30
32
|
- **Error Formatting**: Utilities for improved error visualization and logging
|
|
33
|
+
- **Unified Type Classes**: Consistent interfaces across all data structures
|
|
31
34
|
|
|
32
35
|
## Installation
|
|
33
36
|
|
|
@@ -128,6 +131,11 @@ const sum = numbers.foldLeft(0)((acc, x) => acc + x) // 10
|
|
|
128
131
|
// Add/remove elements (immutably)
|
|
129
132
|
const withFive = numbers.add(5) // List([1, 2, 3, 4, 5])
|
|
130
133
|
const without3 = numbers.remove(3) // List([1, 2, 4])
|
|
134
|
+
|
|
135
|
+
// Universal container operations
|
|
136
|
+
const hasEven = numbers.exists(x => x % 2 === 0) // true
|
|
137
|
+
const firstEven = numbers.find(x => x % 2 === 0) // Some(2)
|
|
138
|
+
const evenCount = numbers.count(x => x % 2 === 0) // 2
|
|
131
139
|
```
|
|
132
140
|
|
|
133
141
|
### Try
|
|
@@ -155,6 +163,32 @@ const name = result.map((obj) => obj.name)
|
|
|
155
163
|
const either = result.toEither()
|
|
156
164
|
```
|
|
157
165
|
|
|
166
|
+
### Lazy
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
import { Lazy } from "functype"
|
|
170
|
+
|
|
171
|
+
// Create lazy computations
|
|
172
|
+
const expensive = Lazy(() => {
|
|
173
|
+
console.log("Computing...")
|
|
174
|
+
return Math.random() * 1000
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
// Value is computed on first access and memoized
|
|
178
|
+
const value1 = expensive.get() // Logs "Computing...", returns number
|
|
179
|
+
const value2 = expensive.get() // Returns same number, no log
|
|
180
|
+
|
|
181
|
+
// Transform lazy values
|
|
182
|
+
const doubled = expensive.map(x => x * 2)
|
|
183
|
+
const formatted = doubled.map(x => `Value: ${x}`)
|
|
184
|
+
|
|
185
|
+
// Chain computations
|
|
186
|
+
const result = Lazy(() => 10)
|
|
187
|
+
.flatMap(x => Lazy(() => x + 5))
|
|
188
|
+
.map(x => x * 2)
|
|
189
|
+
.get() // 30
|
|
190
|
+
```
|
|
191
|
+
|
|
158
192
|
### Task
|
|
159
193
|
|
|
160
194
|
```typescript
|
|
@@ -230,9 +264,76 @@ getUserByEmail("invalid") // Type error: Argument of type 'string' is not assign
|
|
|
230
264
|
getUserByEmail(userId) // Type error: Argument of type 'UserId' is not assignable to parameter of type 'Email'
|
|
231
265
|
```
|
|
232
266
|
|
|
267
|
+
## Conditional Programming
|
|
268
|
+
|
|
269
|
+
Functype provides `Cond` and `Match` for functional conditional logic without early returns:
|
|
270
|
+
|
|
271
|
+
### Cond
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
import { Cond } from "functype"
|
|
275
|
+
|
|
276
|
+
// Replace if-else chains with Cond
|
|
277
|
+
const grade = Cond<number, string>()
|
|
278
|
+
.case(score => score >= 90, "A")
|
|
279
|
+
.case(score => score >= 80, "B")
|
|
280
|
+
.case(score => score >= 70, "C")
|
|
281
|
+
.case(score => score >= 60, "D")
|
|
282
|
+
.default("F")
|
|
283
|
+
|
|
284
|
+
console.log(grade(85)) // "B"
|
|
285
|
+
console.log(grade(55)) // "F"
|
|
286
|
+
|
|
287
|
+
// With transformation
|
|
288
|
+
const discount = Cond<number, number>()
|
|
289
|
+
.case(
|
|
290
|
+
qty => qty >= 100,
|
|
291
|
+
qty => qty * 0.20 // 20% off for 100+
|
|
292
|
+
)
|
|
293
|
+
.case(
|
|
294
|
+
qty => qty >= 50,
|
|
295
|
+
qty => qty * 0.10 // 10% off for 50+
|
|
296
|
+
)
|
|
297
|
+
.case(
|
|
298
|
+
qty => qty >= 10,
|
|
299
|
+
qty => qty * 0.05 // 5% off for 10+
|
|
300
|
+
)
|
|
301
|
+
.default(0)
|
|
302
|
+
|
|
303
|
+
console.log(discount(150)) // 30 (20% of 150)
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Match
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
import { Match } from "functype"
|
|
310
|
+
|
|
311
|
+
// Pattern matching with Match
|
|
312
|
+
type Status = "pending" | "approved" | "rejected" | "cancelled"
|
|
313
|
+
|
|
314
|
+
const statusMessage = Match<Status, string>()
|
|
315
|
+
.case("pending", "Your request is being processed")
|
|
316
|
+
.case("approved", "Your request has been approved!")
|
|
317
|
+
.case("rejected", "Sorry, your request was rejected")
|
|
318
|
+
.case("cancelled", "Your request was cancelled")
|
|
319
|
+
.exhaustive()
|
|
320
|
+
|
|
321
|
+
console.log(statusMessage("approved")) // "Your request has been approved!"
|
|
322
|
+
|
|
323
|
+
// Match with predicates
|
|
324
|
+
const numberType = Match<number, string>()
|
|
325
|
+
.case(0, "zero")
|
|
326
|
+
.case(n => n > 0, "positive")
|
|
327
|
+
.case(n => n < 0, "negative")
|
|
328
|
+
.exhaustive()
|
|
329
|
+
|
|
330
|
+
console.log(numberType(42)) // "positive"
|
|
331
|
+
console.log(numberType(-5)) // "negative"
|
|
332
|
+
```
|
|
333
|
+
|
|
233
334
|
## Fold
|
|
234
335
|
|
|
235
|
-
|
|
336
|
+
Functype includes a powerful `fold` operation for pattern matching and extracting values:
|
|
236
337
|
|
|
237
338
|
```typescript
|
|
238
339
|
import { Option, Either, Try, List } from "functype"
|
|
@@ -265,7 +366,7 @@ const listResult = list.foldLeft(0)((acc, num) => acc + num) // 6
|
|
|
265
366
|
|
|
266
367
|
## Foldable
|
|
267
368
|
|
|
268
|
-
|
|
369
|
+
Functype includes a `Foldable` type class that all data structures implement:
|
|
269
370
|
|
|
270
371
|
```typescript
|
|
271
372
|
import { FoldableUtils, Option, List, Try } from "functype"
|
|
@@ -296,7 +397,7 @@ const convertedToEither = FoldableUtils.toEither(tryVal, "Error") // Right(10)
|
|
|
296
397
|
|
|
297
398
|
## Matchable
|
|
298
399
|
|
|
299
|
-
|
|
400
|
+
Functype includes a `Matchable` type class for enhanced pattern matching:
|
|
300
401
|
|
|
301
402
|
```typescript
|
|
302
403
|
import { Option, Either, Try, List, MatchableUtils } from "functype"
|
|
@@ -342,6 +443,83 @@ const num = 42
|
|
|
342
443
|
const result = isPositive(num) ?? defaultCase(num) // "Positive: 42"
|
|
343
444
|
```
|
|
344
445
|
|
|
446
|
+
## Interface Hierarchy
|
|
447
|
+
|
|
448
|
+
All data structures in Functype implement a unified hierarchy of interfaces, providing consistent behavior across the library:
|
|
449
|
+
|
|
450
|
+
### Type Classes
|
|
451
|
+
|
|
452
|
+
Functype leverages type classes to provide common operations:
|
|
453
|
+
|
|
454
|
+
- **Functor**: Supports `map` operation for transforming wrapped values
|
|
455
|
+
- **Applicative**: Extends Functor with `ap` for applying wrapped functions
|
|
456
|
+
- **Monad**: Extends Applicative with `flatMap` for chaining operations
|
|
457
|
+
- **AsyncMonad**: Extends Monad with `flatMapAsync` for async operations
|
|
458
|
+
- **ContainerOps**: Universal operations for all containers (single-value and collections)
|
|
459
|
+
- **CollectionOps**: Operations specific to collections like List and Set
|
|
460
|
+
|
|
461
|
+
### Unified Interfaces
|
|
462
|
+
|
|
463
|
+
All data structures implement the `Functype` hierarchy:
|
|
464
|
+
|
|
465
|
+
```typescript
|
|
466
|
+
// Base interface for all data structures
|
|
467
|
+
interface FunctypeBase<A, Tag> extends
|
|
468
|
+
AsyncMonad<A>,
|
|
469
|
+
Traversable<A>,
|
|
470
|
+
Serializable<A>,
|
|
471
|
+
Foldable<A>,
|
|
472
|
+
Typeable<Tag>,
|
|
473
|
+
ContainerOps<A> {
|
|
474
|
+
readonly _tag: Tag
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// For single-value containers (Option, Either, Try)
|
|
478
|
+
interface Functype<A, Tag> extends
|
|
479
|
+
FunctypeBase<A, Tag>,
|
|
480
|
+
Extractable<A>,
|
|
481
|
+
Pipe<A>,
|
|
482
|
+
Matchable<A, Tag> {
|
|
483
|
+
toValue(): { _tag: Tag; value: A }
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// For collections (List, Set, Map)
|
|
487
|
+
interface FunctypeCollection<A, Tag> extends
|
|
488
|
+
FunctypeBase<A, Tag>,
|
|
489
|
+
Iterable<A>,
|
|
490
|
+
Pipe<A[]>,
|
|
491
|
+
Collection<A>,
|
|
492
|
+
CollectionOps<A, FunctypeCollection<A, Tag>> {
|
|
493
|
+
toValue(): { _tag: Tag; value: A[] }
|
|
494
|
+
// Collections work with Iterable instead of Monad
|
|
495
|
+
flatMap<B>(f: (value: A) => Iterable<B>): FunctypeCollection<B, Tag>
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Container Operations
|
|
500
|
+
|
|
501
|
+
All containers (Option, Either, Try, List, Set) support these universal operations:
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
import { Option, List } from "functype"
|
|
505
|
+
|
|
506
|
+
const opt = Option(42)
|
|
507
|
+
const list = List([1, 2, 3, 4, 5])
|
|
508
|
+
|
|
509
|
+
// Universal operations work on both single-value and collections
|
|
510
|
+
opt.count(x => x > 40) // 1
|
|
511
|
+
list.count(x => x > 3) // 2
|
|
512
|
+
|
|
513
|
+
opt.find(x => x > 40) // Some(42)
|
|
514
|
+
list.find(x => x > 3) // Some(4)
|
|
515
|
+
|
|
516
|
+
opt.exists(x => x === 42) // true
|
|
517
|
+
list.exists(x => x === 3) // true
|
|
518
|
+
|
|
519
|
+
opt.forEach(console.log) // Logs: 42
|
|
520
|
+
list.forEach(console.log) // Logs: 1, 2, 3, 4, 5
|
|
521
|
+
```
|
|
522
|
+
|
|
345
523
|
## Type Safety
|
|
346
524
|
|
|
347
525
|
Functype leverages TypeScript's advanced type system to provide compile-time safety for functional patterns, ensuring that your code is both robust and maintainable.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as Type, F as Functor, a as Typeable, V as Valuable,
|
|
1
|
+
import { T as Type, F as Functor, a as Typeable, V as Valuable, A as AsyncFunctor, E as ExtractTag } from './Valuable-BI2O7E9Q.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Foldable type class represents data structures that can be folded to a summary value.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as Traversable, I as IterableType, O as Option, a as Collection, S as Serializable, P as Pipe, F as Foldable, M as Matchable } from './Either-
|
|
2
|
-
import { T as Type, a as Typeable, V as Valuable } from './Valuable-
|
|
1
|
+
import { T as Traversable, I as IterableType, O as Option, a as Collection, S as Serializable, P as Pipe, F as Foldable, M as Matchable } from './Either-CfG7OVB-.js';
|
|
2
|
+
import { T as Type, a as Typeable, V as Valuable } from './Valuable-BI2O7E9Q.js';
|
|
3
3
|
import { Tuple } from './tuple/index.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -56,4 +56,4 @@ declare function Valuable<Tag extends string, V, T = object>(params: ValuablePar
|
|
|
56
56
|
*/
|
|
57
57
|
type Valuable<Tag extends string, V, T = object> = ReturnType<typeof Valuable<Tag, V, T>>;
|
|
58
58
|
|
|
59
|
-
export { type
|
|
59
|
+
export { type AsyncFunctor as A, type ExtractTag as E, type Functor as F, type Type as T, Valuable as V, Typeable as a, type AbstractFunctor as b, type ArrayFunctor as c, type TypeableParams as d, type ValuableParams as e, isTypeable as i };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {b as b$1,a as a$1,d}from'./chunk-7PQA3W7W.mjs';import {a}from'./chunk-TQJDL6YW.mjs';import X from'safe-stable-stringify';function h(e,t){return Object.assign(e,t)}var se=Set;var H=e=>{let t=new se(e),r=y(t),n={...r,_tag:"Set",add:o=>H([...t,o]),remove:o=>{let s=new se(t);return s.delete(o),H(s)},contains:o=>t.has(o),has:o=>t.has(o),map:o=>H(r.map(o)),flatMap:o=>H(r.flatMap(o)),fold:(o,s)=>{if(t.size===0)return o();let a=Array.from(t);if(a.length===0)return o();let i=a[0];return i===void 0?o():s(i)},foldLeft:o=>s=>r.foldLeft(o)(s),foldRight:o=>s=>r.foldRight(o)(s),toList:()=>y(t),toSet:()=>n,toString:()=>`Set(${Array.from(t).toString()})`,toValue:()=>({_tag:"Set",value:Array.from(t)}),pipe:o=>o(Array.from(t)),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Set",value:Array.from(t)}),toYAML:()=>`_tag: Set
|
|
2
|
+
value: ${JSON.stringify(Array.from(t))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Set",value:Array.from(t)})).toString("base64")})};return n},Ne=e=>H(e),he={fromJSON:e=>{let t=JSON.parse(e);return I(t.value)},fromYAML:e=>{let r=e.split(`
|
|
3
|
+
`)[1]?.split(": ")[1];if(!r)return I([]);let n=JSON.parse(r);return I(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return he.fromJSON(t)}},I=h(Ne,he);var v=e=>{let t=Array.from(e||[]),r={_tag:"List",[Symbol.iterator]:()=>t[Symbol.iterator](),get size(){return t.length},get length(){return t.length},map:n=>v(t.map(n)),flatMap:n=>v(t.flatMap(o=>Array.from(n(o)))),flatMapAsync:async n=>{let o=await Promise.all(t.map(async s=>await n(s)));return v(o.flatMap(s=>Array.from(s)))},forEach:n=>t.forEach(n),contains:n=>t.includes(n),count:n=>t.filter(n).length,exists:n=>t.some(n),filter:n=>v(t.filter(n)),filterNot:n=>v(t.filter(o=>!n(o))),filterType:n=>v(t.filter(o=>b$1(o,n))),find:(n,o)=>{let s=t.find(a=>n(a)&&(o?b$1(a,o):true));return f(s)},get head(){return t[0]},get headOption(){return t.length>0?f(t[0]):S()},get isEmpty(){return t.length===0},toArray:()=>[...t],reduce:n=>t.reduce(n),reduceRight:n=>t.reduceRight(n),fold:(n,o)=>{if(t.length===0)return n();let s=t[0];return o(s)},foldLeft:n=>o=>t.reduce(o,n),foldRight:n=>o=>t.reduceRight((s,a)=>o(a,s),n),match:n=>t.length===0?n.Empty():n.NonEmpty([...t]),remove:n=>v(t.filter(o=>o!==n)),removeAt:n=>n<0||n>=t.length?r:v([...t.slice(0,n),...t.slice(n+1)]),add:n=>v([...t,n]),get:n=>f(t[n]),concat:n=>v([...t,...n.toArray()]),drop:n=>v(t.slice(n)),dropRight:n=>v(t.slice(0,-n)),dropWhile:n=>v(t.slice(t.findIndex(o=>!n(o)))),flatten:()=>v(t.flatMap(n=>Array.isArray(n)?n:[n])),toList:()=>r,toSet:()=>I(t),toString:()=>`List(${X(t)})`,toValue:()=>({_tag:"List",value:t}),pipe:n=>n([...t]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"List",value:t}),toYAML:()=>`_tag: List
|
|
4
|
+
value: ${X(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"List",value:t})).toString("base64")})};return r},Ve=e=>v(e),Le={fromJSON:e=>{let t=JSON.parse(e);return y(t.value)},fromYAML:e=>{let r=e.split(`
|
|
5
|
+
`)[1]?.split(": ")[1];if(!r)return y([]);let n=JSON.parse(r);return y(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Le.fromJSON(t)}},y=h(Ve,Le);var be=e=>({_tag:"Right",value:e,isLeft:()=>false,isRight:()=>true,getOrElse:t=>e,getOrThrow:()=>e,map:t=>T(t(e)),mapAsync:t=>t(e).then(r=>T(r)).catch(r=>Promise.resolve(p(r))),merge:t=>t.isLeft()?p(t.value):T([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(r=>p(r)),toOption:()=>w(e),toList:()=>y([e]),toString:()=>`Right(${X(e)})`,[Symbol.iterator]:function*(){yield e;},yield:function*(){yield e;},traverse:t=>{let r=t(e);return r.isLeft()?p(r.value):T([r.value])},lazyMap:function*(t){yield T(t(e));},tap:t=>(t(e),T(e)),tapLeft:t=>T(e),mapLeft:t=>T(e),bimap:(t,r)=>T(r(e)),fold:(t,r)=>r(e),foldLeft:t=>r=>r(t,e),foldRight:t=>r=>r(e,t),match:t=>t.Right(e),swap:()=>p(e),then:(t,r)=>Promise.resolve(e).then(t,r),toValue:()=>({_tag:"Right",value:e}),pipeEither:(t,r)=>r(e),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Right",value:e}),toYAML:()=>`_tag: Right
|
|
6
|
+
value: ${X(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Right",value:e})).toString("base64")})}),Re=e=>({_tag:"Left",value:e,isLeft:()=>true,isRight:()=>false,getOrElse:t=>t,getOrThrow:()=>{throw e},map:t=>p(e),mapAsync:t=>Promise.resolve(p(e)),merge:t=>p(e),flatMap:t=>p(e),flatMapAsync:t=>Promise.resolve(p(e)),toOption:()=>S(),toList:()=>y(),toString:()=>`Left(${X(e)})`,[Symbol.iterator]:function*(){},yield:function*(){},traverse:t=>p(e),lazyMap:function*(t){yield p(e);},tap:t=>p(e),tapLeft:t=>(t(e),p(e)),mapLeft:t=>p(t(e)),bimap:(t,r)=>p(t(e)),fold:(t,r)=>t(e),foldLeft:t=>r=>t,foldRight:t=>r=>t,match:t=>t.Left(e),swap:()=>T(e),then:(t,r)=>Promise.reject(e).then(null,r),toValue:()=>({_tag:"Left",value:e}),pipeEither:(t,r)=>t(e),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Left",value:e}),toYAML:()=>`_tag: Left
|
|
7
|
+
value: ${X(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Left",value:e})).toString("base64")})}),T=e=>be(e),p=e=>Re(e),ht=e=>e.isRight(),At=e=>e.isLeft(),Lt=(e,t)=>{try{return T(e())}catch(r){return p(t(r))}},_e=e=>be(e);console.assert(_e);var Ce=e=>Re(e);console.assert(Ce);var Et=async(e,t)=>{try{let r=await e();return T(r)}catch(r){return p(t(r))}},Ee={sequence:e=>{let t=[];for(let r of e){if(r.isLeft())return p(r.value);t.push(r.value);}return T(t)},traverse:(e,t)=>Ee.sequence(e.map(t)),fromNullable:(e,t)=>e==null?p(t):T(e),fromPredicate:(e,t,r)=>t(e)?T(e):p(r),ap:(e,t)=>e.flatMap(r=>t.map(r)),fromPromise:async(e,t)=>{try{let r=await e;return T(r)}catch(r){return p(t(r))}},fromJSON:e=>{let t=JSON.parse(e);return t._tag==="Right"?T(t.value):p(t.value)},fromYAML:e=>{let t=e.split(`
|
|
8
|
+
`),r=t[0]?.split(": ")[1],n=t[1]?.split(": ")[1];if(!r||!n)throw new Error("Invalid YAML format for Either");let o=JSON.parse(n);return r==="Right"?T(o):p(o)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Ee.fromJSON(t)}};function U(e,t){return {brand:e,validate:t,of:r=>t(r)?f(a(e,r)):f.none(),from:r=>t(r)?T(a(e,r)):p(`Invalid ${e}: validation failed`),unsafeOf:r=>{if(!t(r))throw new Error(`Invalid ${e}: validation failed`);return a(e,r)},is:r=>{try{return t(r)}catch{return false}},refine:(r,n)=>U(r,o=>t(o)&&n(o))}}var Ke=U("PositiveNumber",e=>e>0),St=U("NonNegativeNumber",e=>e>=0),wt=U("IntegerNumber",e=>Number.isInteger(e)),Ut=Ke.refine("PositiveInteger",e=>Number.isInteger(e)),Bt=U("NonEmptyString",e=>e.length>0),Pt=U("EmailAddress",e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),Ot=U("UrlString",e=>{try{return new URL(e),!0}catch{return !1}}),zt=U("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)),Ft=U("ISO8601Date",e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function Mt(e,t,r){return U(e,n=>n>=t&&n<=r)}function Nt(e,t,r){return U(e,n=>n.length>=t&&n.length<=r)}function Vt(e,t){return U(e,r=>t.test(r))}var ie=e=>{let t=n=>typeof n=="function"?n():n,r={when:(n,o)=>e.resolved?r:n?ie({resolved:true,value:t(o)}):r,elseWhen:(n,o)=>e.resolved?r:n?ie({resolved:true,value:t(o)}):r,else:n=>e.resolved?e.value:t(n),getOrThrow:()=>{if(!e.resolved)throw new Error("Conditional expression has no matching condition");return e.value}};return r},ke=()=>ie({resolved:false}),Ie={of:()=>ke(),match:e=>t=>{let r=t[e];if(r===void 0)throw new Error(`No case defined for value: ${String(e)}`);return typeof r=="function"?r():r},lazy:()=>{let e={resolved:false},t={when:(r,n)=>(e.resolved||r()&&(e.resolved=true,e.value=n()),t),elseWhen:(r,n)=>(e.resolved||r()&&(e.resolved=true,e.value=n()),t),else:r=>e.resolved?e.value:r()};return t}},Kt=h(ke,Ie);var Z=e=>{let t=(n,o)=>typeof n=="function"?n(o):n,r={case:(n,o)=>e.resolved?r:n(e.value)?Z({...e,resolved:true,result:t(o,e.value)}):r,caseValue:(n,o)=>{if(e.resolved)return r;if(e.value===n){let s=typeof o=="function"?o():o;return Z({...e,resolved:true,result:s})}return r},caseValues:(n,o)=>{if(e.resolved)return r;if(n.includes(e.value)){let s=typeof o=="function"?o():o;return Z({...e,resolved:true,result:s})}return r},default:n=>e.resolved?e.result:t(n,e.value),getOrThrow:()=>{if(!e.resolved)throw new Error(`No matching case for value: ${String(e.value)}`);return e.result}};return r},$e=e=>Z({value:e,resolved:false}),Je={exhaustive:e=>t=>{let r=e[t];if(r===void 0)throw new Error(`No case defined for value: ${String(t)}`);return r},partial:e=>({withDefault:t=>r=>{let n=e[r];return n!==void 0?typeof n=="function"?n(r):n:typeof t=="function"?t(r):t}}),withGuards:e=>({withDefault:t=>r=>{for(let[n,o]of e)if(n(r))return typeof o=="function"?o(r):o;return typeof t=="function"?t(r):t}})},Jt=h($e,Je);function j(e,t){return {...a$1({_tag:e,impl:t}),toString(){return `${e}()`}}}var ee="Throwable",b=class e extends Error{constructor(r,n){super(r,{cause:n?.cause});this._tag=ee;this.name=n?.taskInfo?.name||ee,Object.defineProperties(this,{_tag:{value:ee,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||ee,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 l=new e(r.message,{data:n,cause:r.cause||void 0,stack:r.stack||void 0,taskInfo:o});for(let u of Object.keys(r))u in l||(l[u]=r[u]);return l}if(r&&typeof r=="object"){let l=r,u=typeof l.message=="string"?l.message:typeof l.error=="string"?l.error:`Object error: ${JSON.stringify(l,Object.getOwnPropertyNames(l).filter(d=>l[d]!==void 0))}`,g=new e(u,{data:n||l,taskInfo:o});for(let d of Object.keys(l))d in g||(g[d]=l[d]);return g}if(typeof r=="function"){let l=r.name||"anonymous function",u=r.toString().substring(0,100)+(r.toString().length>100?"...":"");return new e(`Function error: ${l}`,{data:n||{functionType:typeof r,functionName:l,functionString:u},taskInfo:o})}let s=typeof r,a=r===null?"null":r===void 0?"undefined":String(r);if(s==="number"){let l=r,u=Number.isNaN(l)?"Number error: NaN":Number.isFinite(l)?`Number error: ${l}`:`Number error: ${l>0?"Infinity":"-Infinity"}`;return new e(u,{data:n||{errorType:s,errorValue:l,originalError:r},taskInfo:o})}if(s==="bigint")return new e(`BigInt error: ${r}n`,{data:n||{errorType:s,errorValue:String(r),originalError:r},taskInfo:o});if(s==="boolean")return new e(`Boolean error: ${r}`,{data:n||{errorType:s,errorValue:r,originalError:r},taskInfo:o});if(s==="symbol"){let l=r.description||"unnamed symbol";return new e(`Symbol error: Symbol(${l})`,{data:n||{errorType:s,symbolDescription:l,originalError:r},taskInfo:o})}let i=typeof r=="string"?r:`${s.charAt(0).toUpperCase()+s.slice(1)} error: ${a}`;return new e(i,{data:n||{errorType:s,errorValue:a,originalError:r},taskInfo:o})}};var E=e=>{let t=new Promise((r,n)=>{try{e(r,n);}catch(o){n(o);}});return {_tag:"FPromise",map:r=>E((n,o)=>{t.then(s=>{try{n(r(s));}catch(a){o(a);}}).catch(o);}),flatMap:r=>E((n,o)=>{t.then(s=>{try{let a=r(s);"_tag"in a&&a._tag==="FPromise"?a.then(n,o):Promise.resolve(a).then(n,o);}catch(a){o(a);}}).catch(o);}),flatMapAsync:async r=>{let n=await t,o=r(n);return o instanceof Promise?o:new Promise((s,a)=>{o.then(s,a);})},tap:r=>E((n,o)=>{t.then(s=>{try{r(s),n(s);}catch(a){o(a);}}).catch(o);}),mapError:r=>E((n,o)=>{t.then(n).catch(s=>{try{let a={originalError:s,stack:s instanceof Error?s.stack:void 0,timestamp:Date.now()};o(r(s,a));}catch(a){o(a);}});}),tapError:r=>E((n,o)=>{t.then(n).catch(s=>{try{r(s),o(s);}catch(a){o(a);}});}),recover:r=>E(n=>{t.then(n).catch(()=>n(r));}),recoverWith:r=>E(n=>{t.then(n).catch(o=>{try{n(r(o));}catch{n(null);}});}),recoverWithF:r=>E((n,o)=>{t.then(n).catch(s=>{try{r(s).then(n,o);}catch(a){o(a);}});}),filterError:(r,n)=>E((o,s)=>{t.then(o).catch(a=>{if(r(a))try{n(a).then(o,s);}catch(i){s(i);}else s(a);});}),logError:r=>E((n,o)=>{t.then(n).catch(s=>{try{let a={originalError:s,stack:s instanceof Error?s.stack:void 0,timestamp:Date.now()};r(s,a);}catch{}finally{o(s);}});}),then:(r,n)=>t.then(r,n),toPromise:()=>t,toEither:()=>t,fold:(r,n)=>E((o,s)=>{t.then(a=>{try{o(n(a));}catch(i){s(i);}}).catch(a=>{try{o(r(a));}catch(i){s(i);}});})}},We={resolve:e=>E(t=>t(e)),reject:e=>E((t,r)=>r(e)),from:e=>E((t,r)=>{e.then(t).catch(r);}),fromEither:e=>e.isRight()?E(t=>t(e.value)):E((t,r)=>r(e.value)),all:e=>E((t,r)=>{Promise.all(e.map(n=>n instanceof Promise?n:Promise.resolve(n))).then(t).catch(r);}),allSettled:e=>E(t=>{let r=[],n=0;if(e.length===0){t([]);return}e.forEach((o,s)=>{Promise.resolve(o).then(a=>{r[s]=T(a),n++,n===e.length&&t(r);}).catch(a=>{r[s]=p(a),n++,n===e.length&&t(r);});});}),race:e=>E((t,r)=>{Promise.race(e).then(t,r);}),any:e=>E((t,r)=>{if(typeof Promise.any=="function")Promise.any(e).then(t,r);else {let n=0,o=[];if(e.length===0){r(new AggregateError([],"All promises were rejected"));return}e.forEach((s,a)=>{Promise.resolve(s).then(t).catch(i=>{o[a]=i,n++,n===e.length&&r(new AggregateError(o,"All promises were rejected"));});});}}),retryWithBackoff:(e,t)=>{let{maxRetries:r,baseDelay:n=100,shouldRetry:o=()=>true}=t;return E((s,a)=>{let i=0,l=()=>{e().toPromise().then(s).catch(u=>{if(i++,i<=r&&o(u,i)){let g=n*Math.pow(2,i-1);setTimeout(l,g);}else a(u);});};l();})}},le=h(E,We);function je(e){return e instanceof Error&&typeof e=="object"&&true&&e._tag==="Throwable"}var xe=(e,t,r)=>{let n=r?.name||"TaskException",o=r?.description||"Unspecified TaskException",s={name:n,description:o},a=b.apply(e,t,s);return {...j("TaskException",p(a)),_task:s}},ve=(e,t)=>{let r=t?.name||"TaskResult",n=t?.description||"Unspecified TaskResult";return {...j("TaskResult",T(e)),_task:{name:r,description:n}}},ue=()=>{let e=new AbortController,t=[];return {token:{get isCancelled(){return e.signal.aborted},get signal(){return e.signal},onCancel(n){e.signal.aborted?n():t.push(n);}},cancel(){e.signal.aborted||(e.abort(),t.forEach(n=>{try{n();}catch(o){console.error("Error in cancellation callback:",o);}}));}}},Ye=e=>{let t=e?.name||"Task",r=e?.description||"",n={Async:(o,s=l=>l,a=()=>{},i)=>le(async(l,u)=>{let g=false,d=null,B=()=>{};if(i){if(i.isCancelled){try{await a();}catch(L){u(b.apply(L,void 0,{name:t,description:r}));return}u(b.apply(new Error("Task was cancelled before execution started"),void 0,{name:t,description:r}));return}let x=()=>{g=true,d=new Error("Task was cancelled during execution");};i.onCancel(x),B=()=>{};}try{let x=await o();if(g){try{await a();}catch(L){u(b.apply(L,void 0,{name:t,description:r}));return}u(d?b.apply(d,void 0,{name:t,description:r}):b.apply(new Error("Task was cancelled during execution"),void 0,{name:t,description:r}));return}try{await a();}catch(L){u(b.apply(L,void 0,{name:t,description:r}));return}l(x);}catch(x){if(g){try{await a();}catch(L){u(b.apply(L,void 0,{name:t,description:r}));return}u(d?b.apply(d,void 0,{name:t,description:r}):b.apply(new Error("Task was cancelled during execution"),void 0,{name:t,description:r}));return}try{await a();}catch(L){u(b.apply(L,void 0,{name:t,description:r}));return}try{if(x instanceof Error&&je(x)){let L=new Error(`${t}: ${x.message}`),J=b.apply(L,void 0,{name:t,description:r});Object.defineProperty(J,"cause",{value:x,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{s(x);}catch(O){console.error("Error in error handler:",O);}}),u(J);}else {let L=await s(x);u(b.apply(L,void 0,{name:t,description:r}));}}catch(L){u(b.apply(L,void 0,{name:t,description:r}));}}finally{B();}}),Sync:(o,s=i=>i,a=()=>{})=>{try{return ve(o(),{name:t,description:r})}catch(i){return xe(s(i),void 0,{name:t,description:r})}finally{a();}},AsyncWithProgress:(o,s,a=u=>u,i=()=>{},l)=>{let u=g=>{let d=Math.max(0,Math.min(100,g));d<=100&&s(d);};return n.Async(()=>o(u),a,i,l)}};return {...j("Task",n),_type:"Task"}},Se={success:(e,t)=>ve(e,t),fail:(e,t,r)=>xe(e,t,r),getErrorChain:e=>{if(!e)return [];let t=[e],r=e;for(;r&&r.cause;){let n=r.cause;if(n)t.push(n),r=n;else break;if(t.length>100)break}return t},formatErrorChain:(e,t)=>{let r=Se.getErrorChain(e),n=t?.separator||`
|
|
9
|
+
`;return r.map((o,s)=>{if(!o)return `${s>0?"\u21B3 ":""}Unknown error`;let a=o.taskInfo,i=t?.includeTasks&&a?.name?`[${a.name}] `:"",l=o.message||"No message",u=`${s>0?"\u21B3 ":""}${i}${l}`;return t?.includeStackTrace&&o.stack&&(u+=`
|
|
10
|
+
${o.stack.split(`
|
|
11
|
+
`).slice(1).join(`
|
|
12
|
+
`)}`),u}).join(n)},fromPromise:(e,t)=>(...r)=>P(t||{name:"PromiseTask",description:"Task from Promise"}).Async(()=>e(...r),o=>o),toPromise:e=>new Promise((t,r)=>{e.isRight()?t(e.value):r(e.value);}),race:(e,t,r)=>{let n=r?.name||"TaskRace",o=r?.description||"Race between multiple tasks";return P({name:n,description:o}).Async(async()=>{let a=[...e],i;if(typeof t=="number"&&t>0){let l=le((u,g)=>{i=setTimeout(()=>{g(new Error(`Task race timed out after ${t}ms`));},t);});a.push(l);}try{return await new Promise((l,u)=>{a.forEach(g=>{g.then(d=>l(d),d=>u(d));});})}finally{i&&clearTimeout(i);}},a=>a)},fromNodeCallback:(e,t)=>{let r=t?.name||"NodeCallbackTask",n=t?.description||"Task from Node.js callback function",o={name:r,description:n};return (...s)=>P(o).Async(()=>new Promise((a,i)=>{try{e(...s,(l,u)=>{l?i(l):a(u);});}catch(l){i(l);}}),a=>a)},createCancellationTokenSource:ue,cancellable:(e,t)=>{let r=ue();return {task:P(t).Async(()=>e(r.token),o=>o,()=>{},r.token),cancel:()=>r.cancel()}},withProgress:(e,t=()=>{},r)=>{let n=ue(),o=0,s=i=>{o=Math.max(0,Math.min(100,i)),t(o);};return {task:P(r).Async(()=>e(s,n.token),i=>i,()=>{},n.token),cancel:()=>n.cancel(),currentProgress:()=>o}}},P=h(Ye,Se);var we={includeTasks:true,includeStackTrace:false,separator:`
|
|
13
|
+
`,includeData:false,maxStackFrames:3,title:"Error",colors:false};function Ue(e){let t=new WeakSet;return JSON.stringify(e,(r,n)=>{if(typeof n=="bigint")return n.toString()+"n";if(typeof n=="object"&&n!==null){if(t.has(n))return "[Circular Reference]";t.add(n);}return r==="stack"&&typeof n=="string"?te(n):n},2)}function te(e){if(!e)return "";if(!e)return e;let t=e.split(`
|
|
14
|
+
`),r=t[0],n=t.slice(1).map(o=>o.trim());return [r,...n].join(`
|
|
15
|
+
`)}function ir(e,t){let r={...we,...t},n=e instanceof Error?e:b.apply(e),o=P?.getErrorChain?P.getErrorChain(n):[n],s=r.colors?`\x1B[31m${r.title}:\x1B[0m ${n.message}`:`${r.title}: ${n.message}`,a=o.map((l,u)=>{let g=" ".repeat(u),d=u>0?"\u21B3 ":"",B=l.taskInfo,x=r.includeTasks&&B?.name?r.colors?`\x1B[36m[${B.name}]\x1B[0m `:`[${B.name}] `:"",L=`${g}${d}${x}${l.message}`;if(r.includeStackTrace&&l.stack){let O=te(l.stack).split(`
|
|
16
|
+
`).slice(1),G=r.maxStackFrames??we.maxStackFrames??3,oe=O.slice(0,G).map(m=>`${g} ${r.colors?"\x1B[90m":""}${m}${r.colors?"\x1B[0m":""}`).join(`
|
|
17
|
+
`);L+=`
|
|
18
|
+
${oe}`,O.length>G&&(L+=`
|
|
19
|
+
${g} ${r.colors?"\x1B[90m":""}...${O.length-G} more stack frames${r.colors?"\x1B[0m":""}`);}return L}).join(r.separator),i=`${s}
|
|
20
|
+
|
|
21
|
+
${a}`;if(r.includeData){let l=n.data;if(l){let u=r.colors?`
|
|
22
|
+
|
|
23
|
+
\x1B[33mContext:\x1B[0m
|
|
24
|
+
${Ue(l)}`:`
|
|
25
|
+
|
|
26
|
+
Context:
|
|
27
|
+
${Ue(l)}`;i+=u;}}return i}function lr(){return function(t){if(!t)return t;let r=t instanceof Error?t:new Error(String(t)),n={message:r.message,name:r.name||"Error",stack:r.stack?te(r.stack):void 0};if(r.taskInfo&&(n.taskInfo=r.taskInfo),r.data&&(n.data=r.data),typeof P?.getErrorChain=="function")try{let o=P.getErrorChain(r);o.length>1&&(n.errorChain=P.formatErrorChain(r,{includeTasks:!0}),n.structuredErrorChain=o.map(s=>({message:s.message,name:s.name,taskInfo:s.taskInfo,stack:s.stack?te(s.stack):void 0})));}catch{}return Object.getOwnPropertyNames(r).forEach(o=>{if(!n[o]){let s=r[o];n[o]=s;}}),n}}var pr=e=>{let t=new Error(e);return t.name="ParseError",t};var gr={toOption:e=>e.fold(()=>S(),t=>w(t)),toList:e=>e.fold(()=>y([]),t=>y([t])),toEither:(e,t)=>e.fold(()=>p(t),r=>T(r)),isEmpty:e=>e.fold(()=>true,()=>false),size:e=>e.fold(()=>0,()=>1)};var re=e=>({_tag:"Success",error:void 0,isSuccess:()=>true,isFailure:()=>false,get:()=>e,getOrElse:t=>e,orElse:t=>re(e),orThrow:t=>e,toEither:()=>T(e),map:t=>ce(()=>t(e)),flatMap:t=>t(e),fold:(t,r)=>r(e),match:t=>t.Success(e),foldLeft:t=>r=>r(t,e),foldRight:t=>r=>r(e,t),toString:()=>`Success(${X(e)})`,toValue:()=>({_tag:"Success",value:e}),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Success",value:e}),toYAML:()=>`_tag: Success
|
|
28
|
+
value: ${X(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Success",value:e})).toString("base64")})}),V=e=>({_tag:"Failure",error:e,isSuccess:()=>false,isFailure:()=>true,get:()=>{throw e},getOrElse:t=>t,orElse:t=>t,orThrow:t=>{throw t},toEither:()=>p(e),map:t=>V(e),flatMap:t=>V(e),fold:(t,r)=>t(e),match:t=>t.Failure(e),foldLeft:t=>r=>t,foldRight:t=>r=>t,toString:()=>`Failure(${X(e)}))`,toValue:()=>({_tag:"Failure",value:e}),pipe:t=>{throw e},serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Failure",error:e.message,stack:e.stack}),toYAML:()=>`_tag: Failure
|
|
29
|
+
error: ${e.message}
|
|
30
|
+
stack: ${e.stack}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Failure",error:e.message,stack:e.stack})).toString("base64")})}),De=e=>{try{return re(e())}catch(t){return V(t instanceof Error?t:new Error(String(t)))}},Be={fromJSON:e=>{let t=JSON.parse(e);if(t._tag==="Success")return re(t.value);{let r=new Error(t.error);return t.stack&&(r.stack=t.stack),V(r)}},fromYAML:e=>{let t=e.split(`
|
|
31
|
+
`),r=t[0]?.split(": ")[1];if(!r)return V(new Error("Invalid YAML format for Try"));if(r==="Success"){let n=t[1]?.split(": ")[1];if(!n)return V(new Error("Invalid YAML format for Try Success"));let o=JSON.parse(n);return re(o)}else {let n=t[1]?.split(": ")[1];if(!n)return V(new Error("Invalid YAML format for Try Failure"));let o=t[2]?.split(": "),s=o&&o.length>1?o.slice(1).join(": "):void 0,a=new Error(n);return s&&(a.stack=s),V(a)}},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Be.fromJSON(t)}},ce=h(De,Be);var _=e=>e!==null&&typeof e=="object"&&(e._tag==="Some"||e._tag==="None"),F=e=>e!==null&&typeof e=="object"&&e._tag==="List",Y=e=>e!==null&&typeof e=="object"&&(e._tag==="Left"||e._tag==="Right"),D=e=>e!==null&&typeof e=="object"&&(e._tag==="Success"||e._tag==="Failure"),k=()=>{let e=(a,i)=>{if(_(a))return a.map(l=>i(l));if(F(a))return a.map(l=>i(l));if(Y(a))return a.map(l=>i(l));if(D(a))return a.map(l=>i(l));throw new Error(`Unsupported functor type: ${JSON.stringify(a)}`)},t=a=>{if(_(a))return a.get();if(F(a)){let i=a.toArray();if(i.length>0&&F(i[0])){let l=[];for(let u of i)F(u)&&l.push(...u.toArray());return y(l)}return a.flatten()}if(Y(a))return a.isRight()?a.fold(()=>null,i=>i):a;if(D(a))return a.isSuccess()?a.get():a;throw new Error(`Unsupported functor type for flatten: ${JSON.stringify(a)}`)},r=(a,i)=>{if(_(a))return a.flatMap(l=>i(l));if(F(a))return a.flatMap(l=>i(l));if(Y(a))return a.flatMap(l=>i(l));if(D(a))return a.flatMap(l=>i(l));throw new Error(`Unsupported functor type for flatMap: ${JSON.stringify(a)}`)},n=(a,i)=>{if(_(a)&&_(i))return a.flatMap(l=>i.map(u=>l(u)));if(F(a)&&F(i))return a.flatMap(l=>i.map(u=>l(u)));if(Y(a)&&Y(i))return a.flatMap(l=>i.map(u=>l(u)));if(D(a)&&D(i))return a.flatMap(l=>i.map(u=>l(u)));throw new Error(`Unsupported functor type for ap: ${JSON.stringify(a)}`)},o=a=>{if(_(a)){let i=a;if(i.isEmpty)return y([f.none()]);let l=i.get();if(F(l))return l.map(u=>f(u));throw new Error("Unsupported inner container type for sequence")}if(F(a)){let l=a.toArray();if(l.length===0)return f.none();let u=l[0];if(_(u)){for(let d of l)if(d.isEmpty)return f.none();let g=l.map(d=>d.get());return f(y(g))}throw new Error("Unsupported inner container type for sequence")}throw new Error(`Unsupported outer container type for sequence: ${JSON.stringify(a)}`)};return {...j("HKT",{map:e,flatten:t,flatMap:r,ap:n,sequence:o,traverse:(a,i)=>o(e(a,l=>i(l)))}),_type:"HKT"}};k.map=(e,t)=>k().map(e,t);k.flatten=e=>k().flatten(e);k.flatMap=(e,t)=>k().flatMap(e,t);k.ap=(e,t)=>k().ap(e,t);k.sequence=e=>k().sequence(e);k.traverse=(e,t)=>k().traverse(e,t);k.isOption=_;k.isList=F;k.isEither=Y;k.isTry=D;function wr(e){return {id:e,isSame:r=>r.id===e}}var C=e=>{let t=false,r,n,o=false,s=()=>{if(!t)try{r=e(),t=!0;}catch(i){throw n=i,o=true,t=true,i}if(o)throw n;return r};return {_tag:"Lazy",get isEvaluated(){return t},get:s,getOrElse:i=>{try{return s()}catch{return i}},getOrNull:()=>{try{return s()}catch{return null}},getOrThrow:i=>{try{return s()}catch{throw i}},map:i=>M(()=>i(s())),mapAsync:async i=>{let l=s(),u=await i(l);return M(()=>u)},flatMap:i=>M(()=>i(s()).get()),flatMapAsync:async i=>{let l=s(),u=await i(l);return M(()=>u.get())},filter:i=>M(()=>{let l=s();return i(l)?w(l):S}),recover:i=>M(()=>{try{return s()}catch(l){return i(l)}}),recoverWith:i=>M(()=>{try{return s()}catch(l){return i(l).get()}}),toOption:()=>{try{return w(s())}catch{return S}},toEither:()=>{try{return T(s())}catch(i){return p(i)}},toEitherWith:i=>{try{return T(s())}catch(l){return p(i(l))}},toTry:()=>ce(()=>s()),tap:i=>M(()=>{let l=s();return i(l),l}),tapError:i=>M(()=>{try{return s()}catch(l){throw i(l),l}}),fold:i=>i(s()),foldWith:(i,l)=>{try{return l(s())}catch(u){return i(u)}},foldLeft:i=>l=>l(i,s()),foldRight:i=>l=>l(s(),i),match:i=>i.Lazy(s()),toString:()=>t&&!o?`Lazy(${X(r)})`:t&&o?`Lazy(<error: ${n instanceof Error?n.message:String(n)}>)`:"Lazy(<not evaluated>)",toValue:()=>t&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false},pipe:i=>i(s()),serialize:()=>({toJSON:()=>JSON.stringify(t&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false}),toYAML:()=>t&&!o?`_tag: Lazy
|
|
32
|
+
evaluated: true
|
|
33
|
+
value: ${X(r)}`:`_tag: Lazy
|
|
34
|
+
evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(t&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false})).toString("base64")}),typeable:"Lazy"}},qe={of:e=>C(e),fromValue:e=>C(()=>e),fromOption:(e,t)=>C(()=>e._tag==="Some"?e.value:t()),fromTry:e=>C(()=>e.get()),fromEither:e=>C(()=>e.fold(t=>{throw t},t=>t)),fromPromise:e=>C(()=>{throw new Error("Promise not yet resolved. Use await on the promise before creating Lazy.")}),fail:e=>C(()=>{throw e})},M=h(C,qe);var R=e=>({[Symbol.iterator]:()=>e[Symbol.iterator](),map:r=>R(function*(){for(let n of e)yield r(n);}()),flatMap:r=>R(function*(){for(let n of e)yield*r(n);}()),filter:r=>R(function*(){for(let n of e)r(n)&&(yield n);}()),take:r=>R(function*(){let n=0;for(let o of e){if(n>=r)break;yield o,n++;}}()),drop:r=>R(function*(){let n=0;for(let o of e)n>=r&&(yield o),n++;}()),takeWhile:r=>R(function*(){for(let n of e){if(!r(n))break;yield n;}}()),dropWhile:r=>R(function*(){let n=true;for(let o of e)n&&r(o)||(n=false,yield o);}()),concat:r=>R(function*(){yield*e,yield*r;}()),zip:r=>R(function*(){let n=e[Symbol.iterator](),o=r[Symbol.iterator]();for(;;){let s=n.next(),a=o.next();if(s.done||a.done)break;yield [s.value,a.value];}}()),toList:()=>y(Array.from(e)),toArray:()=>Array.from(e),forEach:r=>{for(let n of e)r(n);},reduce:(r,n)=>{let o=n;for(let s of e)o=r(o,s);return o},find:r=>{for(let n of e)if(r(n))return f(n);return f.none()},some:r=>{for(let n of e)if(r(n))return true;return false},every:r=>{for(let n of e)if(!r(n))return false;return true},count:()=>{let r=0;for(let n of e)r++;return r},first:()=>{let n=e[Symbol.iterator]().next();return n.done?f.none():f(n.value)},last:()=>{let r,n=false;for(let o of e)r=o,n=true;return n?f(r):f.none()}}),Ge=e=>R(e),He={empty:()=>R([]),of:e=>R([e]),from:(...e)=>R(e),iterate:(e,t)=>R(function*(){let r=e;for(;;)yield r,r=t(r);}()),generate:e=>R(function*(){for(;;)yield e();}()),range:(e,t,r=1)=>R(function*(){if(r===0)throw new Error("Step cannot be zero");if(r>0)for(let n=e;n<t;n+=r)yield n;else for(let n=e;n>t;n+=r)yield n;}()),repeat:(e,t)=>R(function*(){if(t===void 0)for(;;)yield e;else for(let r=0;r<t;r++)yield e;}()),cycle:e=>R(function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t;}())},Jr=h(Ge,He);var ne=Map;var $=e=>{let t="Map",r={values:new ne(e)},n=()=>Array.from(r.values.entries()).map(([c,A])=>d([c,A])),o=c=>$(new ne(r.values).set(c.toArray()[0],c.toArray()[1]).entries()),s=c=>{let A=new ne(r.values);return A.delete(c)?$(A.entries()):$(r.values.entries())},a=c=>{let A=c.toArray();return r.values.get(A[0])===A[1]},i=()=>r.values.size,l=c=>$(Array.from(r.values.entries()).map(([A,W])=>[A,c(W)])),u=c=>{let A=$(r.values.entries()).toList();return $(A.flatMap(c).toArray())},g=c=>y(n()).reduce(c),d$1=c=>y(n()).reduceRight(c),B=c=>A=>y(n()).foldLeft(c)(A),x=c=>A=>y(n()).foldRight(c)(A),L=c=>f(r.values.get(c)),J=(c,A)=>f(r.values.get(c)).getOrElse(A),O=()=>r.values.size===0;return {_tag:t,add:o,remove:s,contains:a,get size(){return i()},map:l,flatMap:u,reduce:g,reduceRight:d$1,foldLeft:B,foldRight:x,fold:(c,A)=>{if(O())return c();let W=n();if(W.length===0)return c();let ye=W[0];return ye===void 0?c():A(ye)},match:c=>O()?c.Empty():c.NonEmpty(n()),get:L,getOrElse:J,get isEmpty(){return O()},orElse:(c,A)=>f(r.values.get(c)).orElse(A),toList:()=>y(n()),toSet:()=>I(n()),toString:()=>`Map(${n().toString()})`,toValue:()=>({_tag:"Map",value:r.values}),pipe:c=>c(Array.from(r.values.entries())),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())}),toYAML:()=>`_tag: Map
|
|
35
|
+
value: ${JSON.stringify(Array.from(r.values.entries()))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())})).toString("base64")})}},Qe=e=>$(e),Oe={fromJSON:e=>{let t=JSON.parse(e);return Te(t.value)},fromYAML:e=>{let r=e.split(`
|
|
36
|
+
`)[1]?.split(": ")[1];if(!r)return Te([]);let n=JSON.parse(r);return Te(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Oe.fromJSON(t)}},Te=h(Qe,Oe);var Xe={default:e=>t=>e(t),when:(e,t)=>r=>e(r)?t(r):void 0};var N=(e=[])=>{let t="Stack",r=[...e],n=()=>r.length,o=()=>r.length===0;return {_tag:t,get size(){return n()},get isEmpty(){return o()},contains:m=>r.includes(m),reduce:m=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduce(m)},reduceRight:m=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduceRight(m)},push:m=>N([...r,m]),pop:()=>{if(o())return [N([]),f(null)];let m=[...r],z=m.pop();return [N(m),f(z)]},peek:()=>o()?f(null):f(r[r.length-1]),map:m=>N(r.map(m)),flatMap:m=>o()?N([]):r.reduce((z,K)=>m(K).toArray().reduce((A,W)=>A.push(W),z),N([])),toList:()=>y(r),toArray:()=>[...r],toString:()=>`Stack(${r.join(", ")})`,fold:(m,z)=>{if(o())return m();let K=r[r.length-1];return K!==void 0?z(K):m()},foldLeft:m=>z=>r.reduce(z,m),foldRight:m=>z=>r.reduceRight((K,c)=>z(c,K),m),match:m=>o()?m.Empty():m.NonEmpty([...r]),toValue:()=>({_tag:"Stack",value:r}),pipe:m=>m([...r]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Stack",value:r}),toYAML:()=>`_tag: Stack
|
|
37
|
+
value: ${JSON.stringify(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Stack",value:r})).toString("base64")})}},Ze=(e=[])=>N(e),ze={empty:()=>N([]),of:e=>N([e]),fromJSON:e=>{let t=JSON.parse(e);return fe(t.value)},fromYAML:e=>{let r=e.split(`
|
|
38
|
+
`)[1]?.split(": ")[1];if(!r)return fe([]);let n=JSON.parse(r);return fe(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return ze.fromJSON(t)}},fe=h(Ze,ze);var w=e=>({_tag:"Some",value:e,isEmpty:false,get:()=>e,getOrElse:()=>e,getOrThrow:()=>e,orElse:()=>w(e),orNull:()=>e,orUndefined:()=>e,map:t=>w(t(e)),filter(t){return t(e)?w(e):q},fold:(t,r)=>r(e),match:t=>t.Some(e),flatMap:t=>t(e),flatMapAsync:async t=>await t(e),reduce:t=>t(void 0,e),reduceRight:t=>t(void 0,e),foldLeft:t=>r=>r(t,e),foldRight:t=>r=>r(e,t),toList:()=>y([e]),contains:t=>t===e,size:1,toEither:t=>T(e),toString:()=>`Some(${X(e)})`,toValue:()=>({_tag:"Some",value:e}),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Some",value:e}),toYAML:()=>`_tag: Some
|
|
39
|
+
value: ${X(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Some",value:e})).toString("base64")})}),q={_tag:"None",value:void 0,isEmpty:true,get:()=>{throw new Error("Cannot call get() on None")},getOrElse:e=>e,getOrThrow(e){throw e},orElse:e=>e,orNull:()=>null,orUndefined:()=>{},map:e=>q,filter(e){return q},flatMap:e=>q,flatMapAsync:async e=>q,reduce:()=>{},reduceRight:()=>{},fold:(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>y([]),contains:()=>false,size:0,toEither:e=>p(e),toString:()=>"None",toValue:()=>({_tag:"None",value:void 0}),pipe:e=>e(void 0),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"None",value:null}),toYAML:()=>`_tag: None
|
|
40
|
+
value: null`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"None",value:null})).toString("base64")})},S=()=>q,et=e=>e!=null?w(e):S(),Me={from:e=>f(e),none:()=>S(),fromJSON:e=>{let t=JSON.parse(e);return t._tag==="Some"?w(t.value):S()},fromYAML:e=>{let t=e.split(`
|
|
41
|
+
`),r=t[0]?.split(": ")[1],n=t[1]?.split(": ")[1];if(!r||!n)return S();let o=n==="null"?null:JSON.parse(n);return r==="Some"?w(o):S()},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Me.fromJSON(t)}},f=h(et,Me);export{Te as $,Mt as A,Nt as B,Vt as C,Kt as D,Jt as E,j as F,ee as G,b as H,We as I,le as J,je as K,xe as L,ve as M,ue as N,P as O,Ue as P,te as Q,ir as R,lr as S,pr as T,gr as U,ce as V,k as W,wr as X,M as Y,Jr as Z,ne as _,h as a,Xe as aa,w as b,fe as ba,S as c,et as d,f as e,I as f,y as g,T as h,p as i,ht as j,At as k,Lt as l,_e as m,Ce as n,Et as o,Ee as p,U as q,Ke as r,St as s,wt as t,Ut as u,Bt as v,Pt as w,Ot as x,zt as y,Ft as z};//# sourceMappingURL=chunk-JIVKCD74.mjs.map
|
|
42
|
+
//# sourceMappingURL=chunk-JIVKCD74.mjs.map
|