functype 0.8.85 → 0.9.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 +108 -27
- package/dist/{Either-BlY4VB1r.d.ts → Either-BHep7I0d.d.ts} +5 -53
- package/dist/Serializable-BbKuhDDL.d.ts +78 -0
- package/dist/branded/index.d.ts +8 -7
- package/dist/branded/index.mjs +1 -1
- package/dist/chunk-BQJB6CCW.mjs +3 -0
- package/dist/chunk-BQJB6CCW.mjs.map +1 -0
- package/dist/chunk-GHBOC52G.mjs +43 -0
- package/dist/chunk-GHBOC52G.mjs.map +1 -0
- package/dist/chunk-R2TQJN3P.mjs +2 -0
- package/dist/chunk-R2TQJN3P.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 +554 -147
- 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 +75 -2
- package/dist/tuple/index.mjs +1 -1
- package/package.json +13 -13
- package/readme/BUNDLE_OPTIMIZATION.md +74 -0
- package/readme/FPromise-Assessment.md +43 -0
- package/readme/HKT.md +110 -0
- package/readme/ROADMAP.md +113 -0
- package/readme/TASK-TODO.md +33 -0
- package/readme/TUPLE-EXAMPLES.md +76 -0
- package/readme/TaskMigration.md +129 -0
- package/readme/ai-guide.md +406 -0
- package/readme/examples.md +2093 -0
- package/readme/quick-reference.md +514 -0
- package/readme/task-error-handling.md +283 -0
- package/readme/tasks.md +203 -0
- package/readme/type-index.md +238 -0
- package/dist/Tuple-ZYh96cGE.d.ts +0 -41
- package/dist/Typeable-BBXrKPTY.d.ts +0 -14
- package/dist/chunk-B6FR572T.mjs +0 -2
- package/dist/chunk-B6FR572T.mjs.map +0 -1
- package/dist/chunk-JAPOUVPL.mjs +0 -42
- package/dist/chunk-JAPOUVPL.mjs.map +0 -1
- package/dist/chunk-TQJDL6YW.mjs +0 -2
- package/dist/chunk-TQJDL6YW.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -228,26 +228,27 @@ const promise = Task().toPromise(taskResult) // Promise<string>
|
|
|
228
228
|
### Branded Types
|
|
229
229
|
|
|
230
230
|
```typescript
|
|
231
|
-
import { Brand } from "functype/branded"
|
|
232
|
-
|
|
233
|
-
// Create branded types for stronger type safety
|
|
234
|
-
type UserId = Brand<string, "UserId">
|
|
235
|
-
type Email = Brand<string, "Email">
|
|
236
|
-
|
|
237
|
-
// Create factory functions with validation
|
|
238
|
-
const UserId = (id: string): UserId => {
|
|
239
|
-
if (!/^U\d{6}$/.test(id)) {
|
|
240
|
-
throw new Error("Invalid user ID format")
|
|
241
|
-
}
|
|
242
|
-
return id as UserId
|
|
243
|
-
}
|
|
231
|
+
import { Brand, ValidatedBrand } from "functype/branded"
|
|
244
232
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
233
|
+
// Create branded types for stronger type safety (with instance methods!)
|
|
234
|
+
type UserId = Brand<"UserId", string>
|
|
235
|
+
type Email = Brand<"Email", string>
|
|
236
|
+
|
|
237
|
+
// Simple branding
|
|
238
|
+
const userId = Brand("UserId", "U123456")
|
|
239
|
+
console.log(userId.unbrand()) // "U123456"
|
|
240
|
+
console.log(userId.toString()) // "UserId(U123456)"
|
|
241
|
+
|
|
242
|
+
// Runtime-validated branding for safer input handling
|
|
243
|
+
const EmailValidator = ValidatedBrand("Email", (s: string) => /^[^@]+@[^@]+\.[^@]+$/.test(s))
|
|
244
|
+
const UserIdValidator = ValidatedBrand("UserId", (s: string) => /^U\d{6}$/.test(s))
|
|
245
|
+
|
|
246
|
+
// Safe creation with Option/Either return types
|
|
247
|
+
const email = EmailValidator.of("user@example.com") // Some(Brand<"Email", string>)
|
|
248
|
+
const invalidEmail = EmailValidator.of("invalid") // None
|
|
249
|
+
|
|
250
|
+
const userResult = UserIdValidator.from("U123456") // Right(Brand<"UserId", string>)
|
|
251
|
+
const userError = UserIdValidator.from("invalid") // Left("Invalid UserId: validation failed")
|
|
251
252
|
|
|
252
253
|
// Type safety in action
|
|
253
254
|
function getUserByEmail(email: Email): User {
|
|
@@ -331,6 +332,46 @@ console.log(numberType(42)) // "positive"
|
|
|
331
332
|
console.log(numberType(-5)) // "negative"
|
|
332
333
|
```
|
|
333
334
|
|
|
335
|
+
### Advanced Pattern Matching
|
|
336
|
+
|
|
337
|
+
Match supports exhaustive matching, nested patterns, and guards:
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
import { Match } from "functype"
|
|
341
|
+
|
|
342
|
+
// Exhaustive matching with compile-time checking
|
|
343
|
+
type Status = "idle" | "loading" | "success" | "error"
|
|
344
|
+
const result = Match<Status, string>("success")
|
|
345
|
+
.case("idle", "Waiting...")
|
|
346
|
+
.case("loading", "Loading...")
|
|
347
|
+
.case("success", "Done!")
|
|
348
|
+
.case("error", "Failed!")
|
|
349
|
+
.exhaustive() // Compile error if any case is missing
|
|
350
|
+
|
|
351
|
+
// Nested pattern matching
|
|
352
|
+
type User = {
|
|
353
|
+
name: string
|
|
354
|
+
age: number
|
|
355
|
+
role: "admin" | "user"
|
|
356
|
+
preferences?: { theme: "light" | "dark" }
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const message = Match<User, string>(user)
|
|
360
|
+
.case({ role: "admin", age: (n) => n >= 18, preferences: { theme: "dark" } }, "Adult admin with dark mode")
|
|
361
|
+
.case({ role: "user" }, (u) => `Regular user: ${u.name}`)
|
|
362
|
+
.when((u) => u.age < 18, "Minor user - restricted access")
|
|
363
|
+
.default("Unknown user type")
|
|
364
|
+
|
|
365
|
+
// Reusable pattern matchers
|
|
366
|
+
const classifier = Match.builder<Animal, string>()
|
|
367
|
+
.when((a) => a.canFly, "Flying creature")
|
|
368
|
+
.case({ legs: 0 }, "Legless")
|
|
369
|
+
.case({ legs: 2 }, "Biped")
|
|
370
|
+
.case({ legs: 4 }, "Quadruped")
|
|
371
|
+
.default("Other")
|
|
372
|
+
.build()
|
|
373
|
+
```
|
|
374
|
+
|
|
334
375
|
## Fold
|
|
335
376
|
|
|
336
377
|
Functype includes a powerful `fold` operation for pattern matching and extracting values:
|
|
@@ -575,16 +616,56 @@ For more details, see the [Error Formatting Guide](docs/error-formatting.md).
|
|
|
575
616
|
|
|
576
617
|
## Roadmap / TODO
|
|
577
618
|
|
|
578
|
-
###
|
|
579
|
-
|
|
580
|
-
- [
|
|
581
|
-
-
|
|
582
|
-
-
|
|
583
|
-
-
|
|
584
|
-
-
|
|
619
|
+
### High Priority
|
|
620
|
+
|
|
621
|
+
- [x] Complete LazyList Implementation
|
|
622
|
+
- ✓ Add Foldable interface (fold, foldLeft, foldRight)
|
|
623
|
+
- ✓ Add Pipe interface for composition
|
|
624
|
+
- ✓ Add Serializable for persistence
|
|
625
|
+
- ✓ Add Typeable support
|
|
626
|
+
- [ ] Implement NonEmptyList<A>
|
|
627
|
+
- List guaranteed to have at least one element
|
|
628
|
+
- Prevents empty list errors at compile time
|
|
629
|
+
- Full standard interface implementation
|
|
630
|
+
- Methods like `head` return `A` instead of `Option<A>`
|
|
631
|
+
|
|
632
|
+
### Medium Priority
|
|
633
|
+
|
|
634
|
+
- [ ] Implement ValidatedNel<E, A> for validation with error accumulation
|
|
635
|
+
- Unlike Either, collects multiple errors
|
|
636
|
+
- Uses NonEmptyList for error collection
|
|
637
|
+
- Applicative instance combines errors
|
|
638
|
+
- [x] Enhance Pattern Matching
|
|
639
|
+
- ✓ Add exhaustiveness checking at compile time
|
|
640
|
+
- ✓ Support nested pattern matching
|
|
641
|
+
- ✓ Add guard clauses (when conditions)
|
|
642
|
+
- ✓ Support destructuring patterns
|
|
643
|
+
- ✓ Consolidated into unified Match implementation
|
|
644
|
+
- [ ] Implement IO<A> monad for functional side effects
|
|
645
|
+
- Lazy execution of effects
|
|
646
|
+
- Composable IO operations
|
|
647
|
+
- Integration with Task for async IO
|
|
648
|
+
|
|
649
|
+
### Low Priority
|
|
650
|
+
|
|
651
|
+
- [x] Complete Tuple Implementation
|
|
652
|
+
- ✓ Add Foldable for tuple operations
|
|
653
|
+
- ✓ Add Pipe interface for composition
|
|
654
|
+
- ✓ Add Serializable for persistence
|
|
655
|
+
- ✓ Add Companion pattern with utility methods
|
|
656
|
+
- ✓ Added specialized pair() and triple() constructors
|
|
657
|
+
- [ ] Implement Lens<S, A> for immutable updates
|
|
658
|
+
- Composable property access
|
|
659
|
+
- Type-safe nested updates
|
|
660
|
+
- Works with all functype data structures
|
|
661
|
+
- [ ] Add Reader/State monads for dependency injection and state management
|
|
662
|
+
|
|
663
|
+
### Completed Functionality
|
|
664
|
+
|
|
665
|
+
- [x] Add lazy evaluation structures (LazyList implemented, needs interface completion)
|
|
585
666
|
- [x] Add a proper Foldable type class interface
|
|
586
667
|
- [x] Implement Matchable type class for pattern matching
|
|
587
|
-
- [
|
|
668
|
+
- [x] Implement Applicative and other functional type classes (for most types)
|
|
588
669
|
|
|
589
670
|
### Performance Optimizations
|
|
590
671
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as Type, a as Typeable } from './
|
|
1
|
+
import { T as Type, a as Typeable, S as Serializable, F as Foldable, P as Pipe } from './Serializable-BbKuhDDL.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Creates a Some variant of Option containing a value.
|
|
@@ -218,6 +218,7 @@ interface List<A> extends FunctypeCollection<A, "List"> {
|
|
|
218
218
|
filter<S extends A>(predicate: (a: A) => a is S): List<S>;
|
|
219
219
|
filter(predicate: (a: A) => unknown): List<A>;
|
|
220
220
|
filterNot: (p: (a: A) => boolean) => List<A>;
|
|
221
|
+
/** @internal */
|
|
221
222
|
filterType: <T extends Typeable<string, unknown>>(tag: string) => List<T & A>;
|
|
222
223
|
remove: (value: A) => List<A>;
|
|
223
224
|
removeAt: (index: number) => List<A>;
|
|
@@ -347,33 +348,10 @@ interface Extractable<T extends Type> {
|
|
|
347
348
|
*/
|
|
348
349
|
orUndefined(): T | undefined;
|
|
349
350
|
}
|
|
350
|
-
|
|
351
351
|
/**
|
|
352
|
-
*
|
|
353
|
-
*
|
|
354
|
-
* @typeParam A - The type of elements in the data structure
|
|
352
|
+
* Type guard to check if a value implements ExtractableOption
|
|
355
353
|
*/
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Pattern matches over the structure, applying specific handlers for each variant
|
|
359
|
-
* @param onEmpty - Function to apply if the structure is empty or has no value
|
|
360
|
-
* @param onValue - Function to apply if the structure has a value
|
|
361
|
-
* @returns The result of applying the appropriate function
|
|
362
|
-
*/
|
|
363
|
-
fold<B>(onEmpty: () => B, onValue: (value: A) => B): B;
|
|
364
|
-
/**
|
|
365
|
-
* Left-associative fold using the provided zero value and operation
|
|
366
|
-
* @param z - Zero/identity value
|
|
367
|
-
* @returns A function that takes an operation to apply
|
|
368
|
-
*/
|
|
369
|
-
foldLeft<B>(z: B): (op: (b: B, a: A) => B) => B;
|
|
370
|
-
/**
|
|
371
|
-
* Right-associative fold using the provided zero value and operation
|
|
372
|
-
* @param z - Zero/identity value
|
|
373
|
-
* @returns A function that takes an operation to apply
|
|
374
|
-
*/
|
|
375
|
-
foldRight<B>(z: B): (op: (a: A, b: B) => B) => B;
|
|
376
|
-
}
|
|
354
|
+
declare function isExtractable<T extends Type>(value: unknown): value is Extractable<T>;
|
|
377
355
|
|
|
378
356
|
/**
|
|
379
357
|
* Pattern matching interface for functional data types.
|
|
@@ -414,32 +392,6 @@ declare const MatchableUtils: {
|
|
|
414
392
|
when: <A, R>(predicate: (value: A) => boolean, handler: (value: A) => R) => (value: A) => R | undefined;
|
|
415
393
|
};
|
|
416
394
|
|
|
417
|
-
/**
|
|
418
|
-
* Pipe interface for functional data structures
|
|
419
|
-
* @typeParam T - The type of value to pipe
|
|
420
|
-
*/
|
|
421
|
-
interface Pipe<T extends Type> {
|
|
422
|
-
/**
|
|
423
|
-
* Pipes the value through the provided function
|
|
424
|
-
* @param f - The function to apply to the value
|
|
425
|
-
* @returns The result of applying the function to the value
|
|
426
|
-
* @typeParam U - The return type of the function
|
|
427
|
-
*/
|
|
428
|
-
pipe<U extends Type>(f: (value: T) => U): U;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* Methods for different serialization formats
|
|
433
|
-
*/
|
|
434
|
-
interface SerializationMethods<T> {
|
|
435
|
-
toJSON(): string;
|
|
436
|
-
toYAML(): string;
|
|
437
|
-
toBinary(): string;
|
|
438
|
-
}
|
|
439
|
-
interface Serializable<T> {
|
|
440
|
-
serialize(): SerializationMethods<T>;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
395
|
/**
|
|
444
396
|
* Universal operations that work on any container (single-value or collection).
|
|
445
397
|
* These operations make sense for Option, Either, Try, List, Set, etc.
|
|
@@ -706,4 +658,4 @@ declare const Either: {
|
|
|
706
658
|
fromBinary: <L extends Type, R extends Type>(binary: string) => Either<L, R>;
|
|
707
659
|
};
|
|
708
660
|
|
|
709
|
-
export { type Applicative as A, type Collection as C, Either as E, type
|
|
661
|
+
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, 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 };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
type Type = unknown;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Parameters for creating a Typeable instance
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
type TypeableParams<Tag extends string, T> = {
|
|
8
|
+
_tag: Tag;
|
|
9
|
+
impl: T;
|
|
10
|
+
};
|
|
11
|
+
type Typeable<Tag extends string, T = object> = T & {
|
|
12
|
+
readonly _tag: Tag;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Core utility for creating nominal typing in TypeScript by adding a type tag to any object.
|
|
16
|
+
* This allows for creating distinct types that are structurally identical but considered different by TypeScript's type system.
|
|
17
|
+
*
|
|
18
|
+
* @param params - The parameters containing the tag and implementation
|
|
19
|
+
* @returns A Typeable object with the specified tag
|
|
20
|
+
* @typeParam Tag - The string literal type used as the discriminator
|
|
21
|
+
* @typeParam T - The base type to extend with the tag
|
|
22
|
+
*/
|
|
23
|
+
declare function Typeable<Tag extends string, T>({ _tag, impl }: TypeableParams<Tag, T>): Typeable<Tag, T>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Foldable type class represents data structures that can be folded to a summary value.
|
|
27
|
+
*
|
|
28
|
+
* @typeParam A - The type of elements in the data structure
|
|
29
|
+
*/
|
|
30
|
+
interface Foldable<A> {
|
|
31
|
+
/**
|
|
32
|
+
* Pattern matches over the structure, applying specific handlers for each variant
|
|
33
|
+
* @param onEmpty - Function to apply if the structure is empty or has no value
|
|
34
|
+
* @param onValue - Function to apply if the structure has a value
|
|
35
|
+
* @returns The result of applying the appropriate function
|
|
36
|
+
*/
|
|
37
|
+
fold<B>(onEmpty: () => B, onValue: (value: A) => B): B;
|
|
38
|
+
/**
|
|
39
|
+
* Left-associative fold using the provided zero value and operation
|
|
40
|
+
* @param z - Zero/identity value
|
|
41
|
+
* @returns A function that takes an operation to apply
|
|
42
|
+
*/
|
|
43
|
+
foldLeft<B>(z: B): (op: (b: B, a: A) => B) => B;
|
|
44
|
+
/**
|
|
45
|
+
* Right-associative fold using the provided zero value and operation
|
|
46
|
+
* @param z - Zero/identity value
|
|
47
|
+
* @returns A function that takes an operation to apply
|
|
48
|
+
*/
|
|
49
|
+
foldRight<B>(z: B): (op: (a: A, b: B) => B) => B;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Pipe interface for functional data structures
|
|
54
|
+
* @typeParam T - The type of value to pipe
|
|
55
|
+
*/
|
|
56
|
+
interface Pipe<T extends Type> {
|
|
57
|
+
/**
|
|
58
|
+
* Pipes the value through the provided function
|
|
59
|
+
* @param f - The function to apply to the value
|
|
60
|
+
* @returns The result of applying the function to the value
|
|
61
|
+
* @typeParam U - The return type of the function
|
|
62
|
+
*/
|
|
63
|
+
pipe<U extends Type>(f: (value: T) => U): U;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Methods for different serialization formats
|
|
68
|
+
*/
|
|
69
|
+
interface SerializationMethods<T> {
|
|
70
|
+
toJSON(): string;
|
|
71
|
+
toYAML(): string;
|
|
72
|
+
toBinary(): string;
|
|
73
|
+
}
|
|
74
|
+
interface Serializable<T> {
|
|
75
|
+
serialize(): SerializationMethods<T>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { type Foldable as F, type Pipe as P, type Serializable as S, type Type as T, Typeable as a, type SerializationMethods as b };
|
package/dist/branded/index.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
type Unbrand<T> = T extends Brand<string, infer U> ? U : never;
|
|
2
2
|
type ExtractBrand<T> = T extends Brand<infer K, unknown> ? K : never;
|
|
3
|
-
/**
|
|
4
|
-
* Brand is a utility for creating nominal typing in TypeScript
|
|
5
|
-
* It allows for creating distinct types that are structurally identical
|
|
6
|
-
* but considered different by TypeScript's type system
|
|
7
|
-
*/
|
|
8
3
|
type Brand<K extends string, T> = T & {
|
|
9
4
|
readonly __brand: K;
|
|
5
|
+
readonly unbrand: () => T;
|
|
6
|
+
readonly unwrap: () => T;
|
|
10
7
|
};
|
|
11
8
|
/**
|
|
12
|
-
*
|
|
9
|
+
* Brand is a utility for creating nominal typing in TypeScript.
|
|
10
|
+
* It allows for creating distinct types that are structurally identical
|
|
11
|
+
* but considered different by TypeScript's type system.
|
|
12
|
+
*
|
|
13
|
+
* @param brand - The brand name
|
|
13
14
|
* @param value - The value to brand
|
|
14
|
-
* @returns The branded value
|
|
15
|
+
* @returns The branded value with unbrand/unwrap methods
|
|
15
16
|
*/
|
|
16
17
|
declare function Brand<K extends string, T>(brand: K, value: T): Brand<K, T>;
|
|
17
18
|
/**
|
package/dist/branded/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as Brand,g as BrandedBoolean,f as BrandedNumber,e as BrandedString,d as createBrander,c as hasBrand,b as unbrand}from'../chunk-
|
|
1
|
+
export{a as Brand,g as BrandedBoolean,f as BrandedNumber,e as BrandedString,d as createBrander,c as hasBrand,b as unbrand}from'../chunk-R2TQJN3P.mjs';//# sourceMappingURL=index.mjs.map
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import u from'safe-stable-stringify';function T(e,r){return Object.assign(e,r)}var p=e=>{let r={_tag:"Tuple",map:t=>{let n=t(e);return m(n)},flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,length:e.length,[Symbol.iterator](){let t=0;return {next:()=>t<e.length?{value:e[t++],done:false}:{value:void 0,done:true}}},fold:(t,n)=>e.length===0?t():n(e[0]),foldLeft:t=>n=>e.reduce(n,t),foldRight:t=>n=>e.reduceRight((l,o)=>n(o,l),t),pipe:t=>t(r),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Tuple",value:e}),toYAML:()=>`_tag: Tuple
|
|
2
|
+
value: ${u(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Tuple",value:e})).toString("base64")}),toValue:()=>({_tag:"Tuple",value:e}),toString:()=>`Tuple(${e.map(t=>String(t)).join(", ")})`};return r},a=e=>p(e),i={of:(...e)=>p(e),pair:(e,r)=>p([e,r]),triple:(e,r,t)=>p([e,r,t]),empty:()=>p([]),from:e=>p(e)},m=T(a,i);export{T as a,m as b};//# sourceMappingURL=chunk-BQJB6CCW.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-BQJB6CCW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/companion/Companion.ts","../src/tuple/Tuple.ts"],"names":["Companion","object","companion","TupleObject","values","tuple","f","mapValue","Tuple","index","onEmpty","onValue","z","op","acc","value","stringify","v","TupleConstructor","TupleCompanion","first","second","third"],"mappings":"qCAsBO,SAASA,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACsB,CACtB,OAAO,MAAA,CAAO,MAAA,CAAOD,CAAAA,CAAQC,CAAS,CACxC,CCIA,IAAMC,CAAAA,CAAiCC,CAAAA,EAAwB,CAC7D,IAAMC,CAAAA,CAAkB,CACtB,KAAM,OAAA,CACN,GAAA,CAAwBC,CAAAA,EAAiC,CACvD,IAAMC,CAAAA,CAAWD,CAAAA,CAAEF,CAAM,EACzB,OAAOI,CAAAA,CAAMD,CAAQ,CACvB,CAAA,CAEA,OAAA,CAA4BD,CAAAA,EACnBA,CAAAA,CAAEF,CAAM,CAAA,CAGjB,GAAA,CAAwBK,CAAAA,EACfL,CAAAA,CAAOK,CAAK,CAAA,CAGrB,OAAA,CAAS,IACAL,EAGT,MAAA,CAAQA,CAAAA,CAAO,MAAA,CAEf,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAyB,CACvC,IAAIK,CAAAA,CAAQ,CAAA,CACZ,OAAO,CACL,IAAA,CAAM,IACAA,CAAAA,CAAQL,CAAAA,CAAO,OACV,CACL,KAAA,CAAOA,CAAAA,CAAOK,CAAAA,EAAO,CAAA,CACrB,IAAA,CAAM,KACR,CAAA,CAEO,CACL,KAAA,CAAO,MAAA,CACP,IAAA,CAAM,IACR,CAGN,CACF,CAAA,CAGA,IAAA,CAAM,CAAIC,CAAAA,CAAkBC,CAAAA,GACnBP,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAIM,CAAAA,EAAQ,CAAIC,CAAAA,CAAQP,EAAO,CAAC,CAAE,CAAA,CAG7D,QAAA,CACMQ,CAAAA,EACHC,CAAAA,EACQT,CAAAA,CAAO,MAAA,CAAOS,EAAID,CAAC,CAAA,CAG9B,SAAA,CACMA,CAAAA,EACHC,CAAAA,EACQT,CAAAA,CAAO,WAAA,CAAe,CAACU,EAAKC,CAAAA,GAAUF,CAAAA,CAAGE,CAAAA,CAAOD,CAAG,CAAA,CAAGF,CAAC,CAAA,CAIlE,IAAA,CAAUN,GAAiCA,CAAAA,CAAED,CAAK,CAAA,CAGlD,SAAA,CAAW,KACF,CACL,MAAA,CAAQ,IAAM,KAAK,SAAA,CAAU,CAAE,IAAA,CAAM,OAAA,CAAS,KAAA,CAAOD,CAAO,CAAC,CAAA,CAC7D,OAAQ,IAAM,CAAA;AAAA,OAAA,EAAuBY,CAAAA,CAAUZ,CAAM,CAAC,CAAA,CAAA,CACtD,SAAU,IAAM,MAAA,CAAO,KAAK,IAAA,CAAK,SAAA,CAAU,CAAE,IAAA,CAAM,OAAA,CAAS,MAAOA,CAAO,CAAC,CAAC,CAAA,CAAE,QAAA,CAAS,QAAQ,CACjG,CAAA,CAAA,CAIF,OAAA,CAAS,KAAO,CAAE,IAAA,CAAM,QAAS,KAAA,CAAOA,CAAO,GAE/C,QAAA,CAAU,IAAM,CAAA,MAAA,EAASA,CAAAA,CAAO,GAAA,CAAKa,CAAAA,EAAM,OAAOA,CAAC,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAClE,CAAA,CAEA,OAAOZ,CACT,CAAA,CAEMa,CAAAA,CAAsCd,GACnCD,CAAAA,CAAYC,CAAM,EAGrBe,CAAAA,CAAiB,CAOrB,GAAI,CAAA,GAAsBf,CAAAA,GACjBD,EAAYC,CAAM,CAAA,CAS3B,KAAM,CAAiCgB,CAAAA,CAAUC,IACxClB,CAAAA,CAAY,CAACiB,EAAOC,CAAM,CAAW,CAAA,CAS9C,MAAA,CAAQ,CAAiDD,CAAAA,CAAUC,EAAWC,CAAAA,GACrEnB,CAAAA,CAAY,CAACiB,CAAAA,CAAOC,CAAAA,CAAQC,CAAK,CAAc,CAAA,CASxD,KAAA,CAAO,IACEnB,CAAAA,CAAY,EAAQ,CAAA,CAQ7B,IAAA,CAAyBC,GAChBD,CAAAA,CAAYC,CAAM,CAE7B,CAAA,CAwBaI,CAAAA,CAAQR,CAAAA,CAAUkB,CAAAA,CAAkBC,CAAc","file":"chunk-BQJB6CCW.mjs","sourcesContent":["/**\n * Creates a function-object hybrid similar to Scala's companion objects.\n * This utility allows creating TypeScript function objects with attached methods,\n * mimicking Scala's class + companion object pattern without using classes.\n *\n * @param object The main function that will be invoked when the object is called\n * @param companion Additional static methods to attach to the function\n * @returns A function with the attached methods\n *\n * @example\n * const greet = (name: string) => `Hello, ${name}!`;\n * const methods = {\n * formal: (name: string) => `Good day, ${name}.`,\n * casual: (name: string) => `Hey ${name}!`\n * };\n * const Greeter = createCompanionObject(greet, methods);\n *\n * // Usage:\n * Greeter(\"World\"); // Hello, World!\n * Greeter.formal(\"Sir\"); // Good day, Sir.\n * Greeter.casual(\"Friend\"); // Hey Friend!\n */\nexport function Companion<ObjectF extends object, CompanionF extends object>(\n object: ObjectF,\n companion: CompanionF,\n): ObjectF & CompanionF {\n return Object.assign(object, companion)\n}\n","import stringify from \"safe-stable-stringify\"\n\nimport { Companion } from \"@/companion/Companion\"\nimport type { Foldable } from \"@/foldable/Foldable\"\nimport type { Pipe } from \"@/pipe\"\nimport type { Serializable } from \"@/serializable/Serializable\"\nimport type { Typeable } from \"@/typeable/Typeable\"\nimport type { Type } from \"@/types\"\n\nexport interface Tuple<T extends Type[]>\n extends Foldable<T[number]>,\n Pipe<Tuple<T>>,\n Serializable<Tuple<T>>,\n Typeable<\"Tuple\"> {\n get<K extends number>(index: K): T[K]\n\n map<U extends Type[]>(f: (value: T) => U): Tuple<U>\n\n flatMap<U extends Type[]>(f: (value: T) => Tuple<U>): Tuple<U>\n\n toArray(): T\n\n length: number\n\n [Symbol.iterator](): Iterator<T[number]>\n\n toString(): string\n\n toValue(): { _tag: \"Tuple\"; value: T }\n}\n\nconst TupleObject = <T extends Type[]>(values: T): Tuple<T> => {\n const tuple: Tuple<T> = {\n _tag: \"Tuple\",\n map: <U extends Type[]>(f: (value: T) => U): Tuple<U> => {\n const mapValue = f(values)\n return Tuple(mapValue)\n },\n\n flatMap: <U extends Type[]>(f: (value: T) => Tuple<U>): Tuple<U> => {\n return f(values)\n },\n\n get: <K extends number>(index: K): T[K] => {\n return values[index]\n },\n\n toArray: (): T => {\n return values\n },\n\n length: values.length,\n\n [Symbol.iterator](): Iterator<T[number]> {\n let index = 0\n return {\n next: (): IteratorResult<T[number]> => {\n if (index < values.length) {\n return {\n value: values[index++],\n done: false,\n }\n } else {\n return {\n value: undefined,\n done: true,\n }\n }\n },\n }\n },\n\n // Foldable implementation\n fold: <B>(onEmpty: () => B, onValue: (value: T[number]) => B): B => {\n return values.length === 0 ? onEmpty() : onValue(values[0]!)\n },\n\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: T[number]) => B) => {\n return values.reduce(op, z)\n },\n\n foldRight:\n <B>(z: B) =>\n (op: (a: T[number], b: B) => B): B => {\n return values.reduceRight<B>((acc, value) => op(value, acc), z)\n },\n\n // Pipe implementation\n pipe: <U>(f: (value: Tuple<T>) => U): U => f(tuple),\n\n // Serializable implementation\n serialize: () => {\n return {\n toJSON: () => JSON.stringify({ _tag: \"Tuple\", value: values }),\n toYAML: () => `_tag: Tuple\\nvalue: ${stringify(values)}`,\n toBinary: () => Buffer.from(JSON.stringify({ _tag: \"Tuple\", value: values })).toString(\"base64\"),\n }\n },\n\n // Valuable implementation\n toValue: () => ({ _tag: \"Tuple\", value: values }),\n\n toString: () => `Tuple(${values.map((v) => String(v)).join(\", \")})`,\n }\n\n return tuple\n}\n\nconst TupleConstructor = <T extends Type[]>(values: T): Tuple<T> => {\n return TupleObject(values)\n}\n\nconst TupleCompanion = {\n /**\n * Create a Tuple from multiple arguments\n * @example\n * const t = Tuple.of(1, \"hello\", true)\n * // TypeScript infers: Tuple<[number, string, boolean]>\n */\n of: <T extends Type[]>(...values: T): Tuple<T> => {\n return TupleObject(values)\n },\n\n /**\n * Create a Tuple of size 2 (pair)\n * @example\n * const pair = Tuple.pair(\"key\", 42)\n * // TypeScript infers: Tuple<[string, number]>\n */\n pair: <A extends Type, B extends Type>(first: A, second: B): Tuple<[A, B]> => {\n return TupleObject([first, second] as [A, B])\n },\n\n /**\n * Create a Tuple of size 3 (triple)\n * @example\n * const triple = Tuple.triple(\"x\", 10, true)\n * // TypeScript infers: Tuple<[string, number, boolean]>\n */\n triple: <A extends Type, B extends Type, C extends Type>(first: A, second: B, third: C): Tuple<[A, B, C]> => {\n return TupleObject([first, second, third] as [A, B, C])\n },\n\n /**\n * Create an empty Tuple\n * @example\n * const empty = Tuple.empty()\n * // TypeScript infers: Tuple<[]>\n */\n empty: (): Tuple<[]> => {\n return TupleObject([] as [])\n },\n\n /**\n * Create a Tuple from an array (alias for constructor)\n * @example\n * const t = Tuple.from([1, 2, 3])\n */\n from: <T extends Type[]>(values: T): Tuple<T> => {\n return TupleObject(values)\n },\n}\n\n/**\n * Tuple provides a type-safe, fixed-length array with functional operations.\n *\n * @example\n * // Creating tuples\n * const t1 = Tuple([1, \"hello\", true])\n * const t2 = Tuple.of(1, \"hello\", true)\n * const pair = Tuple.pair(\"key\", 42)\n *\n * @example\n * // Type-safe access\n * const triple = Tuple.triple(\"x\", 10, true)\n * const first = triple.get(0) // string\n * const second = triple.get(1) // number\n * const third = triple.get(2) // boolean\n *\n * @example\n * // Functional operations\n * const doubled = Tuple([1, 2, 3])\n * .map(arr => arr.map(x => x * 2))\n * .toArray() // [2, 4, 6]\n */\nexport const Tuple = Companion(TupleConstructor, TupleCompanion)\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {a,b as b$1}from'./chunk-BQJB6CCW.mjs';import {a as a$1}from'./chunk-R2TQJN3P.mjs';import se from'safe-stable-stringify';var J=Set;var P=e=>{let t=new J(e),r={_tag:"Set",[Symbol.iterator]:()=>t[Symbol.iterator](),add:n=>P([...t,n]),remove:n=>{let o=new J(t);return o.delete(n),P(o)},contains:n=>t.has(n),has:n=>t.has(n),map:n=>P(Array.from(t).map(n)),ap:n=>{let o=new J;for(let a of t)for(let s of n)o.add(s(a));return P(o)},flatMap:n=>{let o=new J;for(let a of t)for(let s of n(a))o.add(s);return P(o)},flatMapAsync:async n=>{let o=new J;for(let a of t){let s=await n(a);for(let i of s)o.add(i);}return P(o)},fold:(n,o)=>{if(t.size===0)return n();let a=Array.from(t);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 t)a=o(a,s);return a},foldRight:n=>o=>Array.from(t).reduceRight((s,i)=>o(i,s),n),get size(){return t.size},get isEmpty(){return t.size===0},reduce:n=>{let o=Array.from(t);if(o.length===0)throw new Error("Cannot reduce empty Set");return o.reduce(n)},reduceRight:n=>{let o=Array.from(t);if(o.length===0)throw new Error("Cannot reduceRight empty Set");return o.reduceRight(n)},count:n=>{let o=0;for(let a of t)n(a)&&o++;return o},find:n=>{for(let o of t)if(n(o))return f(o);return f(null)},exists:n=>{for(let o of t)if(n(o))return true;return false},forEach:n=>{t.forEach(n);},filter:n=>{let o=new J;for(let a of t)n(a)&&o.add(a);return P(o)},filterNot:n=>{let o=new J;for(let a of t)n(a)||o.add(a);return P(o)},drop:n=>P(Array.from(t).slice(n)),dropRight:n=>P(Array.from(t).slice(0,-n)),dropWhile:n=>{let o=Array.from(t),a=o.findIndex(s=>!n(s));return P(a===-1?[]:o.slice(a))},flatten:()=>{let n=new J;for(let o of t)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 P(n)},get head(){return Array.from(t)[0]},get headOption(){let n=Array.from(t)[0];return f(n)},toList:()=>m(Array.from(t)),toSet:()=>r,toArray:()=>Array.from(t),toString:()=>`Set(${Array.from(t).toString()})`,toValue:()=>({_tag:"Set",value:Array.from(t)}),pipe:n=>n(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 r},qe=e=>P(e),we={fromJSON:e=>{let t=JSON.parse(e);return Q(t.value)},fromYAML:e=>{let r=e.split(`
|
|
3
|
+
`)[1]?.split(": ")[1];if(!r)return Q([]);let n=JSON.parse(r);return Q(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return we.fromJSON(t)}},Q=a(qe,we);function ce({_tag:e,impl:t}){return {...t,_tag:e}}function ye(e,t){return !e||typeof e!="object"||!("_tag"in e)?false:t?e._tag===t:true}var U=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=>U(t.map(n)),ap:n=>U(t.flatMap(o=>Array.from(n).map(a=>a(o)))),flatMap:n=>U(t.flatMap(o=>Array.from(n(o)))),flatMapAsync:async n=>{let o=await Promise.all(t.map(async a=>await n(a)));return U(o.flatMap(a=>Array.from(a)))},forEach:n=>t.forEach(n),contains:n=>t.includes(n),count:n=>t.filter(n).length,exists:n=>t.some(n),filter:n=>U(t.filter(n)),filterNot:n=>U(t.filter(o=>!n(o))),filterType:n=>U(t.filter(o=>ye(o,n))),find:(n,o)=>{let a=t.find(s=>n(s)&&(o?ye(s,o):true));return f(a)},get head(){return t[0]},get headOption(){return t.length>0?f(t[0]):b()},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 a=t[0];return o(a)},foldLeft:n=>o=>t.reduce(o,n),foldRight:n=>o=>t.reduceRight((a,s)=>o(s,a),n),match:n=>t.length===0?n.Empty():n.NonEmpty([...t]),remove:n=>U(t.filter(o=>o!==n)),removeAt:n=>n<0||n>=t.length?r:U([...t.slice(0,n),...t.slice(n+1)]),add:n=>U([...t,n]),get:n=>f(t[n]),concat:n=>U([...t,...n.toArray()]),drop:n=>U(t.slice(n)),dropRight:n=>U(t.slice(0,-n)),dropWhile:n=>U(t.slice(t.findIndex(o=>!n(o)))),flatten:()=>U(t.flatMap(n=>Array.isArray(n)?n:[n])),toList:()=>r,toSet:()=>Q(t),toString:()=>`List(${se(t)})`,toValue:()=>({_tag:"List",value:t}),pipe:n=>n([...t]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"List",value:t}),toYAML:()=>`_tag: List
|
|
4
|
+
value: ${se(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"List",value:t})).toString("base64")})};return r},Ye=e=>U(e),Se={fromJSON:e=>{let t=JSON.parse(e);return m(t.value)},fromYAML:e=>{let r=e.split(`
|
|
5
|
+
`)[1]?.split(": ")[1];if(!r)return m([]);let n=JSON.parse(r);return m(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Se.fromJSON(t)}},m=a(Ye,Se);var Be=e=>({_tag:"Right",value:e,isLeft:()=>false,isRight:()=>true,get:()=>e,getOrElse:t=>e,getOrThrow:()=>e,orElse:t=>c(e),orNull:()=>e,orUndefined:()=>e,map:t=>c(t(e)),ap:t=>t._tag==="Right"?c(t.value(e)):p(t.value),mapAsync:t=>t(e).then(r=>c(r)).catch(r=>Promise.resolve(p(r))),merge:t=>t.isLeft()?p(t.value):c([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(r=>p(r)),toOption:()=>w(e),toList:()=>m([e]),toJSON:function(){return {_tag:"Right",value:e}},toString:()=>`Right(${se(e)})`,[Symbol.iterator]:function*(){yield e;},yield:function*(){yield e;},traverse:t=>{let r=t(e);return r.isLeft()?p(r.value):c([r.value])},lazyMap:function*(t){yield c(t(e));},tap:t=>(t(e),c(e)),tapLeft:t=>c(e),mapLeft:t=>c(e),bimap:(t,r)=>c(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: ${se(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Right",value:e})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?w(e):b(),exists:t=>t(e),forEach:t=>t(e)}),Oe=e=>({_tag:"Left",value:e,isLeft:()=>true,isRight:()=>false,get:()=>{throw new Error(`Cannot call get() on Left(${se(e)})`)},getOrElse:t=>t,getOrThrow:t=>{throw t||e},orElse:t=>t,orNull:()=>null,orUndefined:()=>{},map:t=>p(e),ap:t=>p(e),mapAsync:t=>Promise.resolve(p(e)),merge:t=>p(e),flatMap:t=>p(e),flatMapAsync:t=>Promise.resolve(p(e)),toOption:()=>b(),toList:()=>m(),toJSON:function(){return {_tag:"Left",value:e}},toString:()=>`Left(${se(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:()=>c(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: ${se(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Left",value:e})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:t=>false,reduce:t=>{throw new Error("Cannot reduce a Left")},reduceRight:t=>{throw new Error("Cannot reduceRight a Left")},count:t=>0,find:t=>b(),exists:t=>false,forEach:t=>{}}),c=e=>Be(e),p=e=>Oe(e),It=e=>e.isRight(),Mt=e=>e.isLeft(),zt=(e,t)=>{try{return c(e())}catch(r){return p(t(r))}},Qe=e=>Be(e);console.assert(Qe);var He=e=>Oe(e);console.assert(He);var Ft=async(e,t)=>{try{let r=await e();return c(r)}catch(r){return p(t(r))}},ve={sequence:e=>{let t=[];for(let r of e){if(r.isLeft())return p(r.value);t.push(r.value);}return c(t)},traverse:(e,t)=>ve.sequence(e.map(t)),fromNullable:(e,t)=>e==null?p(t):c(e),fromPredicate:(e,t,r)=>t(e)?c(e):p(r),ap:(e,t)=>e.flatMap(r=>t.map(r)),fromPromise:async(e,t)=>{try{let r=await e;return c(r)}catch(r){return p(t(r))}},fromJSON:e=>{let t=JSON.parse(e);return t._tag==="Right"?c(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"?c(o):p(o)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return ve.fromJSON(t)}};function I(e,t){return {brand:e,validate:t,of:r=>t(r)?f(a$1(e,r)):f.none(),from:r=>t(r)?c(a$1(e,r)):p(`Invalid ${e}: validation failed`),unsafeOf:r=>{if(!t(r))throw new Error(`Invalid ${e}: validation failed`);return a$1(e,r)},is:r=>{try{return t(r)}catch{return false}},refine:(r,n)=>I(r,o=>t(o.unbrand())&&n(o))}}var Ge=I("PositiveNumber",e=>e>0),Jt=I("NonNegativeNumber",e=>e>=0),Wt=I("IntegerNumber",e=>Number.isInteger(e)),jt=Ge.refine("PositiveInteger",e=>Number.isInteger(e)),qt=I("NonEmptyString",e=>e.length>0),Yt=I("EmailAddress",e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)),Qt=I("UrlString",e=>{try{return new URL(e),!0}catch{return !1}}),Ht=I("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)),Gt=I("ISO8601Date",e=>!isNaN(Date.parse(e))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e));function Zt(e,t,r){return I(e,n=>n>=t&&n<=r)}function Xt(e,t,r){return I(e,n=>n.length>=t&&n.length<=r)}function er(e,t){return I(e,r=>t.test(r))}var me=e=>{let t=n=>typeof n=="function"?n():n,r={when:(n,o)=>e.resolved?r:n?me({resolved:true,value:t(o)}):r,elseWhen:(n,o)=>e.resolved?r:n?me({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},Pe=()=>me({resolved:false}),Ze={of:()=>Pe(),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}},nr=a(Pe,Ze);var ee=(e,t)=>t===e?true:typeof t=="function"?t(e):t&&typeof t=="object"&&"_"in t?t._(e):typeof t=="object"&&t!==null&&typeof e=="object"&&e!==null?Object.entries(t).every(([r,n])=>{let o=e[r];return ee(o,n)}):false,H=e=>{let t=(o,a)=>typeof o=="function"?o(a):o,r=()=>{for(let{pattern:o,result:a}of e.patterns)if(ee(e.value,o))return {matched:true,result:t(a,e.value)};return {matched:false}},n={case:(o,a)=>{if(e.resolved)return n;let s={...e,patterns:[...e.patterns,{pattern:o,result:a}]};return ee(e.value,o)?H({...s,resolved:true,result:t(a,e.value)}):H(s)},caseValue:(o,a)=>{if(e.resolved)return n;if(e.value===o){let s=typeof a=="function"?a():a;return H({...e,resolved:true,result:s})}return n},caseValues:(o,a)=>{if(e.resolved)return n;if(o.includes(e.value)){let s=typeof a=="function"?a():a;return H({...e,resolved:true,result:s})}return n},when:(o,a)=>n.case(o,a),caseAny:(o,a)=>{if(e.resolved)return n;for(let s of o)if(ee(e.value,s))return H({...e,resolved:true,result:t(a,e.value),patterns:[...e.patterns,{pattern:s,result:a}]});return H({...e,patterns:[...e.patterns,...o.map(s=>({pattern:s,result:a}))]})},default:o=>e.resolved?e.result:t(o,e.value),exhaustive:()=>{let o=r();if(!o.matched)throw new Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(e.value)}`);return o.result},getOrThrow:o=>{let a=r();if(!a.matched)throw new Error(o||`No matching pattern for value: ${JSON.stringify(e.value)}`);return a.result},toOption:()=>{let o=r();return o.matched?f(o.result):f.none()}};return n},Xe=e=>H({value:e,resolved:false,patterns:[]}),et={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}}),struct:()=>{let e=[],t={case:(r,n)=>(e.push({pattern:r,handler:n}),t),build:()=>r=>{for(let{pattern:n,handler:o}of e)if(ee(r,n))return o(r);throw new Error(`No matching pattern for value: ${JSON.stringify(r)}`)}};return t},builder:()=>{let e=[],t,r={case:(n,o)=>(e.push({pattern:n,result:o}),r),when:(n,o)=>(e.push({pattern:n,result:o}),r),default:n=>(t=n,{build:()=>o=>{for(let{pattern:a,result:s}of e)if(ee(o,a))return typeof s=="function"?s(o):s;if(t!==void 0)return typeof t=="function"?t(o):t;throw new Error(`No matching pattern for value: ${JSON.stringify(o)}`)}})};return r}},ir=a(Xe,et);function te(e,t){return {...ce({_tag:e,impl:t}),toString(){return `${e}()`}}}var Te="Throwable",L=class e extends Error{constructor(r,n){super(r,{cause:n?.cause});this._tag=Te;this.name=n?.taskInfo?.name||Te,Object.defineProperties(this,{_tag:{value:Te,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||Te,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 e(r.message,{data:n,cause:r.cause||void 0,stack:r.stack||void 0,taskInfo:o});for(let l of Object.keys(r))l in u||(u[l]=r[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(g=>u[g]!==void 0))}`,E=new e(l,{data:n||u,taskInfo:o});for(let g of Object.keys(u))g in E||(E[g]=u[g]);return E}if(typeof r=="function"){let u=r.name||"anonymous function",l=r.toString().substring(0,100)+(r.toString().length>100?"...":"");return new e(`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 e(l,{data:n||{errorType:a,errorValue:u,originalError:r},taskInfo:o})}if(a==="bigint")return new e(`BigInt error: ${r}n`,{data:n||{errorType:a,errorValue:String(r),originalError:r},taskInfo:o});if(a==="boolean")return new e(`Boolean error: ${r}`,{data:n||{errorType:a,errorValue:r,originalError:r},taskInfo:o});if(a==="symbol"){let u=r.description||"unnamed symbol";return new e(`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 e(i,{data:n||{errorType:a,errorValue:s,originalError:r},taskInfo:o})}};var R=e=>{let t=new Promise((r,n)=>{try{e(r,n);}catch(o){n(o);}});return {_tag:"FPromise",map:r=>R((n,o)=>{t.then(a=>{try{n(r(a));}catch(s){o(s);}}).catch(o);}),flatMap:r=>R((n,o)=>{t.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 t,o=r(n);return o instanceof Promise?o:new Promise((a,s)=>{o.then(a,s);})},tap:r=>R((n,o)=>{t.then(a=>{try{r(a),n(a);}catch(s){o(s);}}).catch(o);}),mapError:r=>R((n,o)=>{t.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=>R((n,o)=>{t.then(n).catch(a=>{try{r(a),o(a);}catch(s){o(s);}});}),recover:r=>R(n=>{t.then(n).catch(()=>n(r));}),recoverWith:r=>R(n=>{t.then(n).catch(o=>{try{n(r(o));}catch{n(null);}});}),recoverWithF:r=>R((n,o)=>{t.then(n).catch(a=>{try{r(a).then(n,o);}catch(s){o(s);}});}),filterError:(r,n)=>R((o,a)=>{t.then(o).catch(s=>{if(r(s))try{n(s).then(o,a);}catch(i){a(i);}else a(s);});}),logError:r=>R((n,o)=>{t.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)=>t.then(r,n),toPromise:()=>t,toEither:()=>t,fold:(r,n)=>R((o,a)=>{t.then(s=>{try{o(n(s));}catch(i){a(i);}}).catch(s=>{try{o(r(s));}catch(i){a(i);}});})}},tt={resolve:e=>R(t=>t(e)),reject:e=>R((t,r)=>r(e)),from:e=>R((t,r)=>{e.then(t).catch(r);}),fromEither:e=>e.isRight()?R(t=>t(e.value)):R((t,r)=>r(e.value)),all:e=>R((t,r)=>{Promise.all(e.map(n=>n instanceof Promise?n:Promise.resolve(n))).then(t).catch(r);}),allSettled:e=>R(t=>{let r=[],n=0;if(e.length===0){t([]);return}e.forEach((o,a)=>{Promise.resolve(o).then(s=>{r[a]=c(s),n++,n===e.length&&t(r);}).catch(s=>{r[a]=p(s),n++,n===e.length&&t(r);});});}),race:e=>R((t,r)=>{Promise.race(e).then(t,r);}),any:e=>R((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((a,s)=>{Promise.resolve(a).then(t).catch(i=>{o[s]=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 R((a,s)=>{let i=0,u=()=>{e().toPromise().then(a).catch(l=>{if(i++,i<=r&&o(l,i)){let E=n*Math.pow(2,i-1);setTimeout(u,E);}else s(l);});};u();})}},ge=a(R,tt);function rt(e){return e instanceof Error&&typeof e=="object"&&true&&e._tag==="Throwable"}var Ne=(e,t,r)=>{let n=r?.name||"TaskException",o=r?.description||"Unspecified TaskException",a={name:n,description:o},s=L.apply(e,t,a);return {...te("TaskException",p(s)),_task:a}},_e=(e,t)=>{let r=t?.name||"TaskResult",n=t?.description||"Unspecified TaskResult";return {...te("TaskResult",c(e)),_task:{name:r,description:n}}},Ee=()=>{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);}}));}}},nt=e=>{let t=e?.name||"Task",r=e?.description||"",n={Async:(o,a=u=>u,s=()=>{},i)=>ge(async(u,l)=>{let E=false,g=null,F=()=>{};if(i){if(i.isCancelled){try{await s();}catch(A){l(L.apply(A,void 0,{name:t,description:r}));return}l(L.apply(new Error("Task was cancelled before execution started"),void 0,{name:t,description:r}));return}let v=()=>{E=true,g=new Error("Task was cancelled during execution");};i.onCancel(v),F=()=>{};}try{let v=await o();if(E){try{await s();}catch(A){l(L.apply(A,void 0,{name:t,description:r}));return}l(g?L.apply(g,void 0,{name:t,description:r}):L.apply(new Error("Task was cancelled during execution"),void 0,{name:t,description:r}));return}try{await s();}catch(A){l(L.apply(A,void 0,{name:t,description:r}));return}u(v);}catch(v){if(E){try{await s();}catch(A){l(L.apply(A,void 0,{name:t,description:r}));return}l(g?L.apply(g,void 0,{name:t,description:r}):L.apply(new Error("Task was cancelled during execution"),void 0,{name:t,description:r}));return}try{await s();}catch(A){l(L.apply(A,void 0,{name:t,description:r}));return}try{if(v instanceof Error&&rt(v)){let A=new Error(`${t}: ${v.message}`),G=L.apply(A,void 0,{name:t,description:r});Object.defineProperty(G,"cause",{value:v,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{a(v);}catch(j){console.error("Error in error handler:",j);}}),l(G);}else {let A=await a(v);l(L.apply(A,void 0,{name:t,description:r}));}}catch(A){l(L.apply(A,void 0,{name:t,description:r}));}}finally{F();}}),Sync:(o,a=i=>i,s=()=>{})=>{try{return _e(o(),{name:t,description:r})}catch(i){return Ne(a(i),void 0,{name:t,description:r})}finally{s();}},AsyncWithProgress:(o,a,s=l=>l,i=()=>{},u)=>{let l=E=>{let g=Math.max(0,Math.min(100,E));g<=100&&a(g);};return n.Async(()=>o(l),s,i,u)}};return {...te("Task",n),_type:"Task"}},Ie={success:(e,t)=>_e(e,t),fail:(e,t,r)=>Ne(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=Ie.getErrorChain(e),n=t?.separator||`
|
|
9
|
+
`;return r.map((o,a)=>{if(!o)return `${a>0?"\u21B3 ":""}Unknown error`;let s=o.taskInfo,i=t?.includeTasks&&s?.name?`[${s.name}] `:"",u=o.message||"No message",l=`${a>0?"\u21B3 ":""}${i}${u}`;return t?.includeStackTrace&&o.stack&&(l+=`
|
|
10
|
+
${o.stack.split(`
|
|
11
|
+
`).slice(1).join(`
|
|
12
|
+
`)}`),l}).join(n)},fromPromise:(e,t)=>(...r)=>V(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 V({name:n,description:o}).Async(async()=>{let s=[...e],i;if(typeof t=="number"&&t>0){let u=ge((l,E)=>{i=setTimeout(()=>{E(new Error(`Task race timed out after ${t}ms`));},t);});s.push(u);}try{return await new Promise((u,l)=>{s.forEach(E=>{E.then(g=>u(g),g=>l(g));});})}finally{i&&clearTimeout(i);}},s=>s)},fromNodeCallback:(e,t)=>{let r=t?.name||"NodeCallbackTask",n=t?.description||"Task from Node.js callback function",o={name:r,description:n};return (...a)=>V(o).Async(()=>new Promise((s,i)=>{try{e(...a,(u,l)=>{u?i(u):s(l);});}catch(u){i(u);}}),s=>s)},createCancellationTokenSource:Ee,cancellable:(e,t)=>{let r=Ee();return {task:V(t).Async(()=>e(r.token),o=>o,()=>{},r.token),cancel:()=>r.cancel()}},withProgress:(e,t=()=>{},r)=>{let n=Ee(),o=0,a=i=>{o=Math.max(0,Math.min(100,i)),t(o);};return {task:V(r).Async(()=>e(a,n.token),i=>i,()=>{},n.token),cancel:()=>n.cancel(),currentProgress:()=>o}}},V=a(nt,Ie);var Me={includeTasks:true,includeStackTrace:false,separator:`
|
|
13
|
+
`,includeData:false,maxStackFrames:3,title:"Error",colors:false};function ze(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"?fe(n):n},2)}function fe(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 kr(e,t){let r={...Me,...t},n=e instanceof Error?e:L.apply(e),o=V?.getErrorChain?V.getErrorChain(n):[n],a=r.colors?`\x1B[31m${r.title}:\x1B[0m ${n.message}`:`${r.title}: ${n.message}`,s=o.map((u,l)=>{let E=" ".repeat(l),g=l>0?"\u21B3 ":"",F=u.taskInfo,v=r.includeTasks&&F?.name?r.colors?`\x1B[36m[${F.name}]\x1B[0m `:`[${F.name}] `:"",A=`${E}${g}${v}${u.message}`;if(r.includeStackTrace&&u.stack){let j=fe(u.stack).split(`
|
|
16
|
+
`).slice(1),Z=r.maxStackFrames??Me.maxStackFrames??3,ue=j.slice(0,Z).map(le=>`${E} ${r.colors?"\x1B[90m":""}${le}${r.colors?"\x1B[0m":""}`).join(`
|
|
17
|
+
`);A+=`
|
|
18
|
+
${ue}`,j.length>Z&&(A+=`
|
|
19
|
+
${E} ${r.colors?"\x1B[90m":""}...${j.length-Z} more stack frames${r.colors?"\x1B[0m":""}`);}return A}).join(r.separator),i=`${a}
|
|
20
|
+
|
|
21
|
+
${s}`;if(r.includeData){let u=n.data;if(u){let l=r.colors?`
|
|
22
|
+
|
|
23
|
+
\x1B[33mContext:\x1B[0m
|
|
24
|
+
${ze(u)}`:`
|
|
25
|
+
|
|
26
|
+
Context:
|
|
27
|
+
${ze(u)}`;i+=l;}}return i}function wr(){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?fe(r.stack):void 0};if(r.taskInfo&&(n.taskInfo=r.taskInfo),r.data&&(n.data=r.data),typeof V?.getErrorChain=="function")try{let o=V.getErrorChain(r);o.length>1&&(n.errorChain=V.formatErrorChain(r,{includeTasks:!0}),n.structuredErrorChain=o.map(a=>({message:a.message,name:a.name,taskInfo:a.taskInfo,stack:a.stack?fe(a.stack):void 0})));}catch{}return Object.getOwnPropertyNames(r).forEach(o=>{if(!n[o]){let a=r[o];n[o]=a;}}),n}}var Sr=e=>{let t=new Error(e);return t.name="ParseError",t};var C=(e,t,r,n)=>{let o=L.apply(t,r,{name:e,description:t});return Object.assign(o,{code:e,message:t,status:ot(e),context:r,timestamp:new Date().toISOString(),traceId:n?.traceId})},ot=e=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[e],at={validation:(e,t,r)=>C("VALIDATION_FAILED",`Validation failed: ${e} ${r}`,{field:e,value:t,rule:r}),network:(e,t,r)=>C("NETWORK_ERROR",`Network error: ${t} ${e}${r?` (${r})`:""}`,{url:e,method:t,statusCode:r}),auth:(e,t)=>C("AUTH_REQUIRED",`Authentication required: ${e}${t?` (role: ${t})`:""}`,{resource:e,requiredRole:t}),notFound:(e,t)=>C("NOT_FOUND",`Not found: ${e} with id ${t}`,{resource:e,id:t}),permission:(e,t,r)=>C("PERMISSION_DENIED",`Permission denied: cannot ${e} ${t}`,{action:e,resource:t,userId:r}),rateLimit:(e,t,r)=>C("RATE_LIMITED",`Rate limit exceeded: ${e} requests per ${t}`,{limit:e,window:t,retryAfter:r}),internal:e=>C("INTERNAL_ERROR",`Internal server error: ${e}`,{errorId:e,timestamp:new Date().toISOString()}),badRequest:(e,t)=>C("BAD_REQUEST",`Bad request: ${e}`,{reason:e,expected:t}),conflict:(e,t)=>C("CONFLICT",`Conflict: ${e} already exists with value ${t}`,{resource:e,conflictingValue:t}),timeout:(e,t)=>C("TIMEOUT",`Request timeout: ${t} exceeded ${e}ms`,{duration:e,operation:t}),isTypedError:e=>typeof e=="object"&&e!==null&&"code"in e&&"message"in e&&"status"in e&&"context"in e&&"_tag"in e&&e._tag==="Throwable",hasCode:(e,t)=>e.code===t},x=Object.assign(C,at);var k=e=>{let t={_tag:"LazyList",[Symbol.iterator]:()=>e[Symbol.iterator](),map:r=>k(function*(){for(let n of e)yield r(n);}()),flatMap:r=>k(function*(){for(let n of e)yield*r(n);}()),filter:r=>k(function*(){for(let n of e)r(n)&&(yield n);}()),take:r=>k(function*(){let n=0;for(let o of e){if(n>=r)break;yield o,n++;}}()),drop:r=>k(function*(){let n=0;for(let o of e)n>=r&&(yield o),n++;}()),takeWhile:r=>k(function*(){for(let n of e){if(!r(n))break;yield n;}}()),dropWhile:r=>k(function*(){let n=true;for(let o of e)n&&r(o)||(n=false,yield o);}()),concat:r=>k(function*(){yield*e,yield*r;}()),zip:r=>k(function*(){let n=e[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(e)),toArray:()=>Array.from(e),forEach:r=>{for(let n of e)r(n);},reduce:(r,n)=>{let o=n;for(let a of e)o=r(o,a);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()},fold:(r,n)=>{let a=e[Symbol.iterator]().next();return a.done?r():n(a.value)},foldLeft:r=>n=>{let o=r;for(let a of e)o=n(o,a);return o},foldRight:r=>n=>Array.from(e).reduceRight((a,s)=>n(s,a),r),pipe:r=>r(t),serialize:()=>{let r=Array.from(e);return {toJSON:()=>JSON.stringify({_tag:"LazyList",value:r}),toYAML:()=>`_tag: LazyList
|
|
28
|
+
value: ${se(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"LazyList",value:r})).toString("base64")}},toString:()=>{let n=[],o=0,a=false;for(let i of e)if(o<10)n.push(i),o++;else {a=true;break}let s=n.map(i=>String(i)).join(", ");return a?`LazyList(${s}, ...)`:`LazyList(${s})`}};return t},it=e=>k(e),ut={empty:()=>k([]),of:e=>k([e]),from:(...e)=>k(e),iterate:(e,t)=>k(function*(){let r=e;for(;;)yield r,r=t(r);}()),generate:e=>k(function*(){for(;;)yield e();}()),range:(e,t,r=1)=>k(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)=>k(function*(){if(t===void 0)for(;;)yield e;else for(let r=0;r<t;r++)yield e;}()),cycle:e=>k(function*(){let t=Array.from(e);if(t.length!==0)for(;;)yield*t;}())},Mr=a(it,ut);var N={rule:e=>t=>{if(e==="email")return typeof t!="string"||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?p(x.validation("value",t,"must be a valid email")):c(t);if(e==="url")try{return new URL(String(t)),c(t)}catch{return p(x.validation("value",t,"must be a valid URL"))}if(e==="uuid")return typeof t!="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)?p(x.validation("value",t,"must be a valid UUID")):c(t);if(e==="required")return t==null||t===""?p(x.validation("value",t,"is required")):c(t);if(e==="numeric")return typeof t!="number"&&!/^\d+$/.test(String(t))?p(x.validation("value",t,"must be numeric")):c(t);if(e==="alpha")return typeof t!="string"||!/^[a-zA-Z]+$/.test(t)?p(x.validation("value",t,"must contain only letters")):c(t);if(e==="alphanumeric")return typeof t!="string"||!/^[a-zA-Z0-9]+$/.test(t)?p(x.validation("value",t,"must be alphanumeric")):c(t);if(e.startsWith("min:")){let r=Number(e.split(":")[1]),n=Number(t);return isNaN(n)||n<r?p(x.validation("value",t,`must be at least ${r}`)):c(t)}if(e.startsWith("max:")){let r=Number(e.split(":")[1]),n=Number(t);return isNaN(n)||n>r?p(x.validation("value",t,`must be at most ${r}`)):c(t)}if(e.startsWith("minLength:")){let r=Number(e.split(":")[1]);return String(t).length<r?p(x.validation("value",t,`must be at least ${r} characters`)):c(t)}if(e.startsWith("maxLength:")){let r=Number(e.split(":")[1]);return String(t).length>r?p(x.validation("value",t,`must be at most ${r} characters`)):c(t)}if(e.startsWith("pattern:")){let r=e.substring(8);return new RegExp(r).test(String(t))?c(t):p(x.validation("value",t,`must match pattern ${r}`))}if(e.startsWith("in:")){let r=e.substring(3).split(",");return r.includes(String(t))?c(t):p(x.validation("value",t,`must be one of: ${r.join(", ")}`))}if(e.startsWith("notIn:")){let r=e.substring(6).split(",");return r.includes(String(t))?p(x.validation("value",t,`must not be one of: ${r.join(", ")}`)):c(t)}if(e==="date"){let r=new Date(String(t));return isNaN(r.getTime())?p(x.validation("value",t,"must be a valid date")):c(t)}if(e==="future"){let r=new Date(String(t));return isNaN(r.getTime())||r<=new Date?p(x.validation("value",t,"must be a future date")):c(t)}if(e==="past"){let r=new Date(String(t));return isNaN(r.getTime())||r>=new Date?p(x.validation("value",t,"must be a past date")):c(t)}return c(t)},combine:(...e)=>t=>{for(let r of e){let n=r(t);if(n.isLeft())return n}return c(t)},custom:(e,t)=>r=>e(r)?c(r):p(x.validation("value",r,t)),form:(e,t)=>{let r=[],n={};for(let[o,a]of Object.entries(e)){let s=t[o],i=a(s);if(i.isLeft()){let u=i.fold(E=>E,()=>{throw new Error("Should not be left")}),l=x.validation(o,s,u.context.rule);r.push(l);}else n[o]=i.get();}return r.length>0?p(m(r)):c(n)}},lt={...N,validators:{email:N.rule("email"),url:N.rule("url"),uuid:N.rule("uuid"),required:N.rule("required"),numeric:N.rule("numeric"),positiveNumber:N.combine(N.rule("numeric"),N.rule("min:0")),nonEmptyString:N.combine(N.rule("required"),N.custom(e=>typeof e=="string"&&e.trim().length>0,"must not be empty"))}},Kr=Object.assign(N.rule,lt);function pt(e){return e!=null&&typeof e=="object"&&"getOrElse"in e&&typeof e.getOrElse=="function"&&"getOrThrow"in e&&typeof e.getOrThrow=="function"&&"get"in e&&typeof e.get=="function"&&"orElse"in e&&typeof e.orElse=="function"&&"orNull"in e&&typeof e.orNull=="function"&&"orUndefined"in e&&typeof e.orUndefined=="function"}var Zr={toOption:e=>e.fold(()=>b(),t=>w(t)),toList:e=>e.fold(()=>m([]),t=>m([t])),toEither:(e,t)=>e.fold(()=>p(t),r=>c(r)),isEmpty:e=>e.fold(()=>true,()=>false),size:e=>e.fold(()=>0,()=>1)};var de=e=>({_tag:"Success",error:void 0,isSuccess:()=>true,isFailure:()=>false,get:()=>e,getOrElse:t=>e,getOrThrow:t=>e,orElse:t=>de(e),orNull:()=>e,orUndefined:()=>e,orThrow:t=>e,toEither:()=>c(e),map:t=>Ae(()=>t(e)),ap:t=>t.map(r=>r(e)),flatMap:t=>t(e),flatMapAsync:async 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(${se(e)})`,toValue:()=>({_tag:"Success",value:e}),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Success",value:e}),toYAML:()=>`_tag: Success
|
|
29
|
+
value: ${se(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Success",value:e})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:t=>e===t,reduce:t=>e,reduceRight:t=>e,count:t=>t(e)?1:0,find:t=>t(e)?f(e):f(void 0),exists:t=>t(e),forEach:t=>t(e)}),$=e=>({_tag:"Failure",error:e,isSuccess:()=>false,isFailure:()=>true,get:()=>{throw e},getOrElse:t=>t,getOrThrow:t=>{throw t||e},orElse:t=>t,orNull:()=>null,orUndefined:()=>{},orThrow:t=>{throw t},toEither:()=>p(e),map:t=>$(e),ap:t=>$(e),flatMap:t=>$(e),flatMapAsync:async t=>$(e),fold:(t,r)=>t(e),match:t=>t.Failure(e),foldLeft:t=>r=>t,foldRight:t=>r=>t,toString:()=>`Failure(${se(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
|
|
30
|
+
error: ${e.message}
|
|
31
|
+
stack: ${e.stack}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Failure",error:e.message,stack:e.stack})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:t=>false,reduce:t=>{throw new Error("Cannot reduce a Failure")},reduceRight:t=>{throw new Error("Cannot reduceRight a Failure")},count:t=>0,find:t=>f(null),exists:t=>false,forEach:t=>{}}),ct=e=>{try{return de(e())}catch(t){return $(t instanceof Error?t:new Error(String(t)))}},Fe={fromJSON:e=>{let t=JSON.parse(e);if(t._tag==="Success")return de(t.value);{let r=new Error(t.error);return t.stack&&(r.stack=t.stack),$(r)}},fromYAML:e=>{let t=e.split(`
|
|
32
|
+
`),r=t[0]?.split(": ")[1];if(!r)return $(new Error("Invalid YAML format for Try"));if(r==="Success"){let n=t[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=t[1]?.split(": ")[1];if(!n)return $(new Error("Invalid YAML format for Try Failure"));let o=t[2]?.split(": "),a=o&&o.length>1?o.slice(1).join(": "):void 0,s=new Error(n);return a&&(s.stack=a),$(s)}},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Fe.fromJSON(t)}},Ae=a(ct,Fe);var q=e=>e!==null&&typeof e=="object"&&(e._tag==="Some"||e._tag==="None"),K=e=>e!==null&&typeof e=="object"&&e._tag==="List",re=e=>e!==null&&typeof e=="object"&&(e._tag==="Left"||e._tag==="Right"),ne=e=>e!==null&&typeof e=="object"&&(e._tag==="Success"||e._tag==="Failure"),S=()=>{let e=(s,i)=>{if(q(s))return s.map(u=>i(u));if(K(s))return s.map(u=>i(u));if(re(s))return s.map(u=>i(u));if(ne(s))return s.map(u=>i(u));throw new Error(`Unsupported functor type: ${JSON.stringify(s)}`)},t=s=>{if(q(s))return s.get();if(K(s)){let i=s.toArray();if(i.length>0&&K(i[0])){let u=[];for(let l of i)K(l)&&u.push(...l.toArray());return m(u)}return s.flatten()}if(re(s))return s.isRight()?s.fold(()=>null,i=>i):s;if(ne(s))return s.isSuccess()?s.get():s;throw new Error(`Unsupported functor type for flatten: ${JSON.stringify(s)}`)},r=(s,i)=>{if(q(s))return s.flatMap(u=>i(u));if(K(s))return s.flatMap(u=>i(u));if(re(s))return s.flatMap(u=>i(u));if(ne(s))return s.flatMap(u=>i(u));throw new Error(`Unsupported functor type for flatMap: ${JSON.stringify(s)}`)},n=(s,i)=>{if(q(s)&&q(i))return s.flatMap(u=>i.map(l=>u(l)));if(K(s)&&K(i))return s.flatMap(u=>i.map(l=>u(l)));if(re(s)&&re(i))return s.flatMap(u=>i.map(l=>u(l)));if(ne(s)&&ne(i))return s.flatMap(u=>i.map(l=>u(l)));throw new Error(`Unsupported functor type for ap: ${JSON.stringify(s)}`)},o=s=>{if(q(s)){let i=s;if(i.isEmpty)return m([f.none()]);let u=i.get();if(K(u))return u.map(l=>f(l));throw new Error("Unsupported inner container type for sequence")}if(K(s)){let u=s.toArray();if(u.length===0)return f.none();let l=u[0];if(q(l)){for(let g of u)if(g.isEmpty)return f.none();let E=u.map(g=>g.get());return f(m(E))}throw new Error("Unsupported inner container type for sequence")}throw new Error(`Unsupported outer container type for sequence: ${JSON.stringify(s)}`)};return {...te("HKT",{map:e,flatten:t,flatMap:r,ap:n,sequence:o,traverse:(s,i)=>o(e(s,u=>i(u)))}),_type:"HKT"}};S.map=(e,t)=>S().map(e,t);S.flatten=e=>S().flatten(e);S.flatMap=(e,t)=>S().flatMap(e,t);S.ap=(e,t)=>S().ap(e,t);S.sequence=e=>S().sequence(e);S.traverse=(e,t)=>S().traverse(e,t);S.isOption=q;S.isList=K;S.isEither=re;S.isTry=ne;function cn(e){return {id:e,isSame:r=>r.id===e}}var Y=e=>{let t=false,r,n,o=false,a=()=>{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: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=>M(()=>{try{return a()}catch{return i.get()}}),orUndefined:()=>{try{return a()}catch{return}},map:i=>M(()=>i(a())),ap:i=>M(()=>i.get()(a())),mapAsync:async i=>{let u=a(),l=await i(u);return M(()=>l)},flatMap:i=>M(()=>i(a()).get()),flatMapAsync:async i=>{let u=a(),l=await i(u);return M(()=>l.get())},filter:i=>M(()=>{let u=a();return i(u)?w(u):b}),recover:i=>M(()=>{try{return a()}catch(u){return i(u)}}),recoverWith:i=>M(()=>{try{return a()}catch(u){return i(u).get()}}),toOption:()=>{try{return w(a())}catch{return b}},toEither:()=>{try{return c(a())}catch(i){return p(i)}},toEitherWith:i=>{try{return c(a())}catch(u){return p(i(u))}},toTry:()=>Ae(()=>a()),tap:i=>M(()=>{let u=a();return i(u),u}),tapError:i=>M(()=>{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:()=>t&&!o?`Lazy(${se(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},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)?w(u):b}catch{return b}},exists:i=>{try{return i(a())}catch{return false}},forEach:i=>{try{i(a());}catch{}},pipe:i=>i(a()),serialize:()=>({toJSON:()=>JSON.stringify(t&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false}),toYAML:()=>t&&!o?`_tag: Lazy
|
|
33
|
+
evaluated: true
|
|
34
|
+
value: ${se(r)}`:`_tag: Lazy
|
|
35
|
+
evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(t&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false})).toString("base64")}),typeable:"Lazy"}},Tt={of:e=>Y(e),fromValue:e=>Y(()=>e),fromOption:(e,t)=>Y(()=>e._tag==="Some"?e.value:t()),fromTry:e=>Y(()=>e.get()),fromEither:e=>Y(()=>e.fold(t=>{throw t},t=>t)),fromPromise:e=>Y(()=>{throw new Error("Promise not yet resolved. Use await on the promise before creating Lazy.")}),fail:e=>Y(()=>{throw e})},M=a(Y,Tt);var ie=Map;var W=e=>{let r={values:new ie(e)},n=()=>Array.from(r.values.entries()).map(([T,y])=>b$1([T,y])),o=T=>W(new ie(r.values).set(T.toArray()[0],T.toArray()[1]).entries()),a=T=>{let y=new ie(r.values);return y.delete(T)?W(y.entries()):W(r.values.entries())},s=T=>{let y=T.toArray();return r.values.get(y[0])===y[1]},i=()=>r.values.size,u=T=>W(Array.from(r.values.entries()).map(([y,_])=>[y,T(_)])),l=T=>{let y=W(r.values.entries()).toList();return W(y.flatMap(T).toArray())},E=T=>{let y=[];for(let[_,X]of r.values.entries()){let ae=T.get(_);ae._tag==="Some"&&ae.value&&y.push([_,ae.value(X)]);}return W(y)},g=async T=>{let y=new ie;for(let[_,X]of r.values.entries()){let ae=await T(X);for(let Je of ae.toList()){let[We,je]=Je.toArray();y.set(We,je);}}return W(y.entries())},F=T=>m(n()).reduce(T),v=T=>m(n()).reduceRight(T),A=T=>y=>m(n()).foldLeft(T)(y),G=T=>y=>m(n()).foldRight(T)(y),j=T=>f(r.values.get(T)),Z=(T,y)=>f(r.values.get(T)).getOrElse(y),oe=()=>r.values.size===0,ue=(T,y)=>f(r.values.get(T)).orElse(y),le=(T,y)=>{if(oe())return T();let _=n();if(_.length===0)return T();let X=_[0];return X===void 0?T():y(X)},be=()=>m(n()),d=()=>Q(n()),B=()=>`Map(${n().toString()})`,O=T=>oe()?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:E,flatMap:l,flatMapAsync:g,reduce:F,reduceRight:v,foldLeft:A,foldRight:G,fold:le,match:O,get:j,getOrElse:Z,get isEmpty(){return oe()},orElse:ue,toList:be,toSet:d,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")})}},ft=e=>W(e),Ce={fromJSON:e=>{let t=JSON.parse(e);return Re(t.value)},fromYAML:e=>{let r=e.split(`
|
|
37
|
+
`)[1]?.split(": ")[1];if(!r)return Re([]);let n=JSON.parse(r);return Re(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return Ce.fromJSON(t)}},Re=a(ft,Ce);var dt={default:e=>t=>e(t),when:(e,t)=>r=>e(r)?t(r):void 0};function Le(e){let t=e;return {get(){return t},set(n){t=n;},update(n){t=n(t);},getAndSet(n){let o=t;return t=n,o},updateAndGet(n){return t=n(t),t},getAndUpdate(n){let o=t;return t=n(t),o},compareAndSet(n,o){return t===n?(t=o,true):false},modify(n){let[o,a]=n(t);return t=o,a}}}Le.of=Le;function Fn(e){let t=ce({_tag:e._tag,impl:e.impl});return {...t,toValue:()=>({_tag:t._tag,value:e.value})}}var z=(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:d=>r.includes(d),reduce:d=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduce(d)},reduceRight:d=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduceRight(d)},push:d=>z([...r,d]),pop:()=>{if(o())return [z([]),f(null)];let d=[...r],B=d.pop();return [z(d),f(B)]},peek:()=>o()?f(null):f(r[r.length-1]),map:d=>z(r.map(d)),flatMap:d=>o()?z([]):r.reduce((B,O)=>d(O).toArray().reduce((y,_)=>y.push(_),B),z([])),ap:d=>{let B=[];return r.forEach(O=>{d.toArray().forEach(T=>{B.push(T(O));});}),z(B)},flatMapAsync:async d=>o()?z([]):(await Promise.all(r.map(async O=>await d(O)))).reduce((O,T)=>T.toArray().reduce((y,_)=>y.push(_),O),z([])),toList:()=>m(r),toArray:()=>[...r],toString:()=>`Stack(${r.join(", ")})`,fold:(d,B)=>{if(o())return d();let O=r[r.length-1];return O!==void 0?B(O):d()},foldLeft:d=>B=>r.reduce(B,d),foldRight:d=>B=>r.reduceRight((O,T)=>B(T,O),d),match:d=>o()?d.Empty():d.NonEmpty([...r]),toValue:()=>({_tag:"Stack",value:r}),pipe:d=>d([...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")})}},yt=(e=[])=>z(e),$e={empty:()=>z([]),of:e=>z([e]),fromJSON:e=>{let t=JSON.parse(e);return xe(t.value)},fromYAML:e=>{let r=e.split(`
|
|
39
|
+
`)[1]?.split(": ")[1];if(!r)return xe([]);let n=JSON.parse(r);return xe(n)},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return $e.fromJSON(t)}},xe=a(yt,$e);var w=e=>({_tag:"Some",value:e,isEmpty:false,get:()=>e,getOrElse:()=>e,getOrThrow:()=>e,orElse:t=>w(e),orNull:()=>e,orUndefined:()=>e,map:t=>w(t(e)),ap:t=>t._tag==="Some"&&t.value?w(t.value(e)):D,filter(t){return t(e)?w(e):D},count:t=>t(e)?1:0,find:t=>t(e)?w(e):D,exists:t=>t(e),forEach:t=>t(e),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:()=>m([e]),contains:t=>t===e,size:1,toEither:t=>c(e),toString:()=>`Some(${se(e)})`,toValue:()=>({_tag:"Some",value:e}),pipe:t=>t(e),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Some",value:e}),toYAML:()=>`_tag: Some
|
|
40
|
+
value: ${se(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Some",value:e})).toString("base64")})}),D={_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=>D,ap:e=>D,filter(e){return D},count:e=>0,find:e=>D,exists:e=>false,forEach:e=>{},flatMap:e=>D,flatMapAsync:async e=>D,reduce:()=>{},reduceRight:()=>{},fold:(e,t)=>e(),match:e=>e.None(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>m([]),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
|
|
41
|
+
value: null`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"None",value:null})).toString("base64")})},b=()=>D,mt=e=>e!=null?w(e):b(),De={from:e=>f(e),none:()=>b(),fromJSON:e=>{let t=JSON.parse(e);return t._tag==="Some"?w(t.value):b()},fromYAML:e=>{let t=e.split(`
|
|
42
|
+
`),r=t[0]?.split(": ")[1],n=t[1]?.split(": ")[1];if(!r||!n)return b();let o=n==="null"?null:JSON.parse(n);return r==="Some"?w(o):b()},fromBinary:e=>{let t=Buffer.from(e,"base64").toString();return De.fromJSON(t)}},f=a(mt,De);export{M as $,Xt as A,er as B,nr as C,ir as D,te as E,Te as F,L as G,tt as H,ge as I,rt as J,Ne as K,_e as L,Ee as M,V as N,ze as O,fe as P,kr as Q,wr as R,Sr as S,x as T,Mr as U,Kr as V,pt as W,Zr as X,Ae as Y,S as Z,cn as _,w as a,ie as aa,b,Re as ba,mt as c,dt as ca,f as d,Le as da,Q as e,Fn as ea,m as f,xe as fa,c as g,p as h,It as i,Mt as j,zt as k,Qe as l,He as m,Ft as n,ve as o,I as p,Ge as q,Jt as r,Wt as s,jt as t,qt as u,Yt as v,Qt as w,Ht as x,Gt as y,Zt as z};//# sourceMappingURL=chunk-GHBOC52G.mjs.map
|
|
43
|
+
//# sourceMappingURL=chunk-GHBOC52G.mjs.map
|