functype 0.8.47 → 0.8.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/index.d.ts +302 -8
  2. package/dist/index.mjs +2 -1
  3. package/dist/index.mjs.map +1 -0
  4. package/package.json +17 -16
  5. package/dist/chunk-2I2NKDFN.mjs +0 -1
  6. package/dist/chunk-2ML63TYF.mjs +0 -0
  7. package/dist/chunk-2U34DUZU.js +0 -1
  8. package/dist/chunk-377WQNCB.mjs +0 -1
  9. package/dist/chunk-3VJERXBP.js +0 -1
  10. package/dist/chunk-44WWBXBL.js +0 -1
  11. package/dist/chunk-4H62YQ42.mjs +0 -0
  12. package/dist/chunk-5GE5W3Y5.mjs +0 -1
  13. package/dist/chunk-5VTXJIR3.js +0 -1
  14. package/dist/chunk-AKJ5AKY4.js +0 -1
  15. package/dist/chunk-E6RS47F7.js +0 -1
  16. package/dist/chunk-HA5XD5KC.mjs +0 -1
  17. package/dist/chunk-HD6YYUHO.mjs +0 -1
  18. package/dist/chunk-K3EKBPQE.js +0 -1
  19. package/dist/chunk-OXLZ6UIZ.js +0 -1
  20. package/dist/chunk-UAFRIAJN.js +0 -1
  21. package/dist/chunk-V2J3R5IU.mjs +0 -0
  22. package/dist/chunk-VK5GL6NM.mjs +0 -1
  23. package/dist/chunk-WTWWDZY6.js +0 -1
  24. package/dist/chunk-XORABVON.js +0 -1
  25. package/dist/chunk-YXECCMSX.mjs +0 -1
  26. package/dist/chunk-Z6YAH4SC.mjs +0 -1
  27. package/dist/collections/index.d.mts +0 -8
  28. package/dist/collections/index.d.ts +0 -8
  29. package/dist/collections/index.js +0 -1
  30. package/dist/collections/index.mjs +0 -0
  31. package/dist/core/base/Base.d.mts +0 -12
  32. package/dist/core/base/Base.d.ts +0 -12
  33. package/dist/core/base/Base.js +0 -1
  34. package/dist/core/base/Base.mjs +0 -1
  35. package/dist/core/error/Throwable.d.mts +0 -12
  36. package/dist/core/error/Throwable.d.ts +0 -12
  37. package/dist/core/error/Throwable.js +0 -1
  38. package/dist/core/error/Throwable.mjs +0 -1
  39. package/dist/core/task/Task.d.mts +0 -8
  40. package/dist/core/task/Task.d.ts +0 -8
  41. package/dist/core/task/Task.js +0 -1
  42. package/dist/core/task/Task.mjs +0 -1
  43. package/dist/either/Either.d.mts +0 -8
  44. package/dist/either/Either.d.ts +0 -8
  45. package/dist/either/Either.js +0 -1
  46. package/dist/either/Either.mjs +0 -1
  47. package/dist/error/ParseError.d.mts +0 -8
  48. package/dist/error/ParseError.d.ts +0 -8
  49. package/dist/error/ParseError.js +0 -1
  50. package/dist/error/ParseError.mjs +0 -1
  51. package/dist/functor/index.d.mts +0 -20
  52. package/dist/functor/index.d.ts +0 -20
  53. package/dist/functor/index.js +0 -1
  54. package/dist/functor/index.mjs +0 -1
  55. package/dist/identity/Identity.d.mts +0 -6
  56. package/dist/identity/Identity.d.ts +0 -6
  57. package/dist/identity/Identity.js +0 -1
  58. package/dist/identity/Identity.mjs +0 -1
  59. package/dist/index-BSGv2rsm.d.mts +0 -240
  60. package/dist/index-Cb-cundW.d.ts +0 -240
  61. package/dist/index.d.mts +0 -8
  62. package/dist/index.js +0 -1
  63. package/dist/iterable/index.d.mts +0 -8
  64. package/dist/iterable/index.d.ts +0 -8
  65. package/dist/iterable/index.js +0 -1
  66. package/dist/iterable/index.mjs +0 -1
  67. package/dist/list/List.d.mts +0 -8
  68. package/dist/list/List.d.ts +0 -8
  69. package/dist/list/List.js +0 -1
  70. package/dist/list/List.mjs +0 -1
  71. package/dist/map/Map.d.mts +0 -8
  72. package/dist/map/Map.d.ts +0 -8
  73. package/dist/map/Map.js +0 -1
  74. package/dist/map/Map.mjs +0 -1
  75. package/dist/map/shim.d.mts +0 -4
  76. package/dist/map/shim.d.ts +0 -4
  77. package/dist/map/shim.js +0 -1
  78. package/dist/map/shim.mjs +0 -1
  79. package/dist/option/Option.d.mts +0 -8
  80. package/dist/option/Option.d.ts +0 -8
  81. package/dist/option/Option.js +0 -1
  82. package/dist/option/Option.mjs +0 -1
  83. package/dist/serializable/Serializable.d.mts +0 -16
  84. package/dist/serializable/Serializable.d.ts +0 -16
  85. package/dist/serializable/Serializable.js +0 -3
  86. package/dist/serializable/Serializable.mjs +0 -3
  87. package/dist/set/Set.d.mts +0 -8
  88. package/dist/set/Set.d.ts +0 -8
  89. package/dist/set/Set.js +0 -1
  90. package/dist/set/Set.mjs +0 -1
  91. package/dist/set/shim.d.mts +0 -4
  92. package/dist/set/shim.d.ts +0 -4
  93. package/dist/set/shim.js +0 -1
  94. package/dist/set/shim.mjs +0 -1
  95. package/dist/try/Try.d.mts +0 -8
  96. package/dist/try/Try.d.ts +0 -8
  97. package/dist/try/Try.js +0 -1
  98. package/dist/try/Try.mjs +0 -1
  99. package/dist/tuple/Tuple.d.mts +0 -12
  100. package/dist/tuple/Tuple.d.ts +0 -12
  101. package/dist/tuple/Tuple.js +0 -1
  102. package/dist/tuple/Tuple.mjs +0 -1
  103. package/dist/typeable/Typeable.d.mts +0 -8
  104. package/dist/typeable/Typeable.d.ts +0 -8
  105. package/dist/typeable/Typeable.js +0 -1
  106. package/dist/typeable/Typeable.mjs +0 -1
  107. package/dist/util/index.d.mts +0 -13
  108. package/dist/util/index.d.ts +0 -13
  109. package/dist/util/index.js +0 -1
  110. package/dist/util/index.mjs +0 -1
  111. package/dist/util/isIterable.d.mts +0 -3
  112. package/dist/util/isIterable.d.ts +0 -3
  113. package/dist/util/isIterable.js +0 -1
  114. package/dist/util/isIterable.mjs +0 -1
  115. package/dist/valuable/Valuable.d.mts +0 -6
  116. package/dist/valuable/Valuable.d.ts +0 -6
  117. package/dist/valuable/Valuable.js +0 -1
  118. package/dist/valuable/Valuable.mjs +0 -1
  119. package/lib/TaskPromise.d.ts +0 -3
  120. package/lib/collections/index.d.ts +0 -8
  121. package/lib/either/Either.d.ts +0 -52
  122. package/lib/either/EitherT.d.ts +0 -9
  123. package/lib/error/ParseError.d.ts +0 -6
  124. package/lib/functor/index.d.ts +0 -15
  125. package/lib/identity/Identity.d.ts +0 -4
  126. package/lib/index.d.ts +0 -21
  127. package/lib/iterable/Seq.d.ts +0 -31
  128. package/lib/iterable/index.d.ts +0 -22
  129. package/lib/list/List.d.ts +0 -26
  130. package/lib/map/Map.d.ts +0 -17
  131. package/lib/map/shim.d.ts +0 -2
  132. package/lib/option/Option.d.ts +0 -30
  133. package/lib/serializable/Serializable.d.ts +0 -15
  134. package/lib/set/Set.d.ts +0 -15
  135. package/lib/set/shim.d.ts +0 -2
  136. package/lib/try/Try.d.ts +0 -18
  137. package/lib/tuple/Tuple.d.ts +0 -9
  138. package/lib/typeable/Typeable.d.ts +0 -4
  139. package/lib/util/index.d.ts +0 -3
  140. package/lib/util/isIterable.d.ts +0 -1
package/dist/index.d.ts CHANGED
@@ -1,8 +1,302 @@
1
- export { AbstractFunctor, ArrayFunctor, ArrayType, AsyncFunctor, Functor, SingleType, Type } from './functor/index.js';
2
- export { Base } from './core/base/Base.js';
3
- export { Throwable } from './core/error/Throwable.js';
4
- export { A as AppException, h as AppResult, k as AsyncTask, E as Either, I as IterableType, c as Left, L as List, M as Map, N as None, O as Option, R as Right, b as Set, S as Some, j as Task, T as TestEither, m as Traversable, l as Try, f as TypeCheckLeft, e as TypeCheckRight, d as isLeft, i as isRight, t as tryCatch, g as tryCatchAsync } from './index-Cb-cundW.js';
5
- export { Identity } from './identity/Identity.js';
6
- export { Tuple } from './tuple/Tuple.js';
7
- export { ExtractTag, Typeable, isTypeable } from './typeable/Typeable.js';
8
- import './valuable/Valuable.js';
1
+ type SingleType = unknown;
2
+ type ArrayType = SingleType[];
3
+ type Type = SingleType | ArrayType;
4
+ type AbstractFunctor<A extends Type> = {
5
+ map(f: (value: A) => Type): AbstractFunctor<Type>;
6
+ flatMap(f: (value: A) => AbstractFunctor<Type>): AbstractFunctor<Type>;
7
+ };
8
+ type Functor<A extends Type> = AbstractFunctor<A> & {
9
+ map<B extends Type>(f: (value: A) => B): Functor<B>;
10
+ flatMap<B extends Type>(f: (value: A) => Functor<B>): Functor<B>;
11
+ };
12
+ type AsyncFunctor<A extends Type> = {
13
+ flatMapAsync(f: (value: A) => PromiseLike<AsyncFunctor<A>>): PromiseLike<AsyncFunctor<A>>;
14
+ };
15
+ type ArrayFunctor<A extends ArrayType> = AbstractFunctor<A> & {
16
+ map<U extends ArrayType>(f: (value: A) => U): ArrayFunctor<U>;
17
+ flatMap<U extends ArrayType>(f: (value: A) => ArrayFunctor<U>): ArrayFunctor<U>;
18
+ };
19
+
20
+ /**
21
+ * Base Object from which most other objects inherit
22
+ * @param type
23
+ * @param body
24
+ * @constructor
25
+ */
26
+ declare function Base<T>(type: string, body: T): T & {
27
+ toString(): string;
28
+ _tag: string;
29
+ };
30
+
31
+ type ExtractTag<T> = T extends Typeable<infer Tag, unknown> ? Tag : never;
32
+ type Typeable<Tag extends string, T = object> = T & {
33
+ readonly _tag: Tag;
34
+ };
35
+ declare function Typeable<Tag extends string, T>(tag: Tag, data: T): Typeable<Tag, T>;
36
+ declare function isTypeable<T>(value: unknown, tag: string): value is T;
37
+
38
+ declare const NAME: "Throwable";
39
+ type ThrowableType = Error & Typeable<typeof NAME> & {
40
+ readonly data?: unknown;
41
+ readonly cause?: Error;
42
+ };
43
+ declare class Throwable extends Error implements ThrowableType {
44
+ readonly _tag: typeof NAME;
45
+ readonly data?: unknown;
46
+ readonly cause?: Error;
47
+ protected constructor(message: string, options?: {
48
+ data?: unknown;
49
+ cause?: Error;
50
+ stack?: string;
51
+ });
52
+ static apply(srcError: unknown, data?: unknown): ThrowableType;
53
+ }
54
+
55
+ declare function Valuable<Tag extends string, V, T = object>(tag: Tag, data: T, value: V): {
56
+ toValue: () => {
57
+ _tag: Tag;
58
+ value: V;
59
+ };
60
+ };
61
+ type Valuable<Tag extends string, V, T = object> = ReturnType<typeof Valuable<Tag, V, T>>;
62
+
63
+ declare const Some: <T extends Type>(value: T) => Option<T>;
64
+ declare const None: <T extends Type>() => Option<T>;
65
+ type Option<T extends Type> = {
66
+ readonly _tag: "Some" | "None";
67
+ readonly value: T | undefined;
68
+ isEmpty: boolean;
69
+ get(): T;
70
+ getOrElse(defaultValue: T): T;
71
+ getOrThrow(error: Error): T;
72
+ orElse(alternative: Option<T>): Option<T>;
73
+ orNull(): T | null;
74
+ map<U extends Type>(f: (value: T) => U): Option<U>;
75
+ filter(predicate: (value: T) => boolean): Option<T>;
76
+ flatMap<U extends Type>(f: (value: T) => Option<U>): Option<U>;
77
+ flatMapAsync<U extends Type>(f: (value: T) => Promise<Option<U>>): Promise<Option<U>>;
78
+ reduce<U>(f: (acc: U, value: T) => U): U;
79
+ reduceRight<U>(f: (acc: U, value: T) => U): U;
80
+ fold<U>(onNone: () => U, onSome: (value: T) => U): U;
81
+ foldLeft<B>(z: B): (op: (b: B, a: T) => B) => B;
82
+ foldRight<B>(z: B): (op: (a: T, b: B) => B) => B;
83
+ toList(): List<T>;
84
+ contains(value: T): boolean;
85
+ size: number;
86
+ toEither<E>(left: E): Either<E, T>;
87
+ toString(): string;
88
+ toValue(): {
89
+ _tag: "Some" | "None";
90
+ value: T;
91
+ };
92
+ } & (Traversable<T> & Functor<T> & Typeable<"Some" | "None"> & Valuable<"Some" | "None", T> & AsyncFunctor<T>);
93
+ declare const Option: {
94
+ <T extends Type>(value: T | null | undefined): Option<T>;
95
+ from<T>(value: T): Option<T>;
96
+ none<T>(): Option<T>;
97
+ };
98
+
99
+ type IterableType<A extends Type> = {
100
+ count(p: (x: A) => boolean): number;
101
+ find(p: (a: A) => boolean): Option<A>;
102
+ forEach(f: (a: A) => void): void;
103
+ drop(n: number): IterableType<A>;
104
+ dropRight(n: number): IterableType<A>;
105
+ dropWhile(p: (a: A) => boolean): IterableType<A>;
106
+ exists(p: (a: A) => boolean): boolean;
107
+ filter(p: (a: A) => boolean): IterableType<A>;
108
+ filterNot(p: (a: A) => boolean): IterableType<A>;
109
+ flatten<B>(): IterableType<B>;
110
+ reduce(f: (b: A, a: A) => A): A;
111
+ reduceRight(f: (b: A, a: A) => A): A;
112
+ foldLeft<B>(z: B): (op: (b: B, a: A) => B) => B;
113
+ foldRight<B>(z: B): (op: (a: A, b: B) => B) => B;
114
+ get head(): A;
115
+ get headOption(): Option<A>;
116
+ get isEmpty(): boolean;
117
+ map<B extends Type>(f: (a: A) => B): IterableType<B>;
118
+ flatMap<B extends Type>(f: (a: A) => IterableType<B>): IterableType<B>;
119
+ get size(): number;
120
+ toArray<B = A>(): readonly B[];
121
+ } & Iterable<A> & Functor<A> & AsyncFunctor<A>;
122
+
123
+ type Converters<A> = {
124
+ toList(): List<A>;
125
+ toSet(): Set<A>;
126
+ toString(): string;
127
+ };
128
+ type Collection<A> = Converters<A>;
129
+
130
+ type Set<A> = {
131
+ add: (value: A) => Set<A>;
132
+ remove: (value: A) => Set<A>;
133
+ contains: (value: A) => boolean;
134
+ has: (value: A) => boolean;
135
+ map: <B>(f: (a: A) => B) => Set<B>;
136
+ flatMap: <B>(f: (a: A) => IterableType<B>) => Set<B>;
137
+ toList: () => List<A>;
138
+ toSet: () => Set<A>;
139
+ toString: () => string;
140
+ } & IterableType<A> & Collection<A> & Typeable<"Set">;
141
+ declare const Set: <A>(iterable?: Iterable<A> | IterableType<A>) => Set<A>;
142
+
143
+ type List<A> = {
144
+ readonly length: number;
145
+ readonly [Symbol.iterator]: () => Iterator<A>;
146
+ map: <B>(f: (a: A) => B) => List<B>;
147
+ flatMap: <B>(f: (a: A) => IterableType<B>) => List<B>;
148
+ flatMapAsync: <B>(f: (a: A) => PromiseLike<IterableType<B>>) => PromiseLike<List<B>>;
149
+ forEach: (f: (a: A) => void) => void;
150
+ count: (p: (x: A) => boolean) => number;
151
+ exists: (p: (a: A) => boolean) => boolean;
152
+ filter<S extends A>(predicate: (a: A) => a is S): List<S>;
153
+ filter(predicate: (a: A) => unknown): List<A>;
154
+ filterNot: (p: (a: A) => boolean) => List<A>;
155
+ filterType: <T extends Typeable<string, unknown>>(tag: string) => List<T & A>;
156
+ find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => Option<T>;
157
+ readonly head: A;
158
+ readonly headOption: Option<A>;
159
+ readonly isEmpty: boolean;
160
+ toArray: <B = A>() => B[];
161
+ reduce: (f: (prev: A, curr: A) => A) => A;
162
+ reduceRight: (f: (prev: A, curr: A) => A) => A;
163
+ foldLeft: <B>(z: B) => (op: (b: B, a: A) => B) => B;
164
+ foldRight: <B>(z: B) => (op: (a: A, b: B) => B) => B;
165
+ remove: (value: A) => List<A>;
166
+ removeAt: (index: number) => List<A>;
167
+ add: (item: A) => List<A>;
168
+ get: (index: number) => Option<A>;
169
+ concat: (other: List<A>) => List<A>;
170
+ toList: () => List<A>;
171
+ toSet: () => Set<A>;
172
+ toString: () => string;
173
+ } & IterableType<A> & AsyncFunctor<A> & Typeable<"List"> & Valuable<"List", A[]>;
174
+ declare const List: <A>(values?: Iterable<A>) => List<A>;
175
+
176
+ type TestEither<L extends Type, R extends Type> = Either<L, R> & Functor<R> & AsyncFunctor<R>;
177
+ declare const Right: <L extends Type, R extends Type>(value: R) => Either<L, R>;
178
+ declare const Left: <L extends Type, R extends Type>(value: L) => Either<L, R>;
179
+ declare const isRight: <L extends Type, R extends Type>(either: Either<L, R>) => either is Either<L, R> & {
180
+ value: R;
181
+ };
182
+ declare const isLeft: <L extends Type, R extends Type>(either: Either<L, R>) => either is Either<L, R> & {
183
+ value: L;
184
+ };
185
+ declare const tryCatch: <L extends Type, R extends Type>(f: () => R, onError: (error: unknown) => L) => Either<L, R>;
186
+ declare const TypeCheckRight: <L extends Type, R extends Type>(value: R) => TestEither<L, R>;
187
+ declare const TypeCheckLeft: <L extends Type, R extends Type>(value: L) => TestEither<L, R>;
188
+ declare const tryCatchAsync: <L extends Type, R extends Type>(f: () => Promise<R>, onError: (error: unknown) => L) => Promise<Either<L, R>>;
189
+ type Either<L extends Type, R extends Type> = {
190
+ readonly _tag: "Left" | "Right";
191
+ value: L | R;
192
+ isLeft: () => boolean;
193
+ isRight: () => boolean;
194
+ getOrElse: (defaultValue: R) => R;
195
+ getOrThrow: () => R;
196
+ map: <U extends Type>(f: (value: R) => U) => Either<L, U>;
197
+ merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>) => Either<L | L1, [R, R1]>;
198
+ mapAsync: <U extends Type>(f: (value: R) => Promise<U>) => Promise<Either<L, U>>;
199
+ flatMap: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U>;
200
+ flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>) => Promise<Either<L, U>>;
201
+ toOption: () => Option<R>;
202
+ toList: () => List<R>;
203
+ toString: () => string;
204
+ [Symbol.iterator]: () => Iterator<R>;
205
+ yield: () => Generator<R, void, unknown>;
206
+ traverse: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U[]>;
207
+ lazyMap: <U extends Type>(f: (value: R) => U) => Generator<Either<L, U>, void, unknown>;
208
+ tap: (f: (value: R) => void) => Either<L, R>;
209
+ tapLeft: (f: (value: L) => void) => Either<L, R>;
210
+ mapLeft: <L2 extends Type>(f: (value: L) => L2) => Either<L2, R>;
211
+ bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, fr: (value: R) => R2) => Either<L2, R2>;
212
+ fold: <T extends Type>(onLeft: (value: L) => T, onRight: (value: R) => T) => T;
213
+ swap: () => Either<R, L>;
214
+ } & Typeable<"Left" | "Right"> & Valuable<"Left" | "Right", L | R> & PromiseLike<R> & AsyncFunctor<R>;
215
+ declare const Either: {
216
+ sequence: <L extends Type, R extends Type>(eithers: Either<L, R>[]) => Either<L, R[]>;
217
+ traverse: <L extends Type, R extends Type, U extends Type>(arr: R[], f: (value: R) => Either<L, U>) => Either<L, U[]>;
218
+ fromNullable: <L extends Type, R extends Type>(value: R | null | undefined, leftValue: L) => Either<L, R>;
219
+ fromPredicate: <L extends Type, R extends Type>(value: R, predicate: (value: R) => boolean, leftValue: L) => Either<L, R>;
220
+ ap: <L extends Type, R extends Type, U extends Type>(eitherF: Either<L, (value: R) => U>, eitherV: Either<L, R>) => Either<L, U>;
221
+ fromPromise: <L, R>(promise: Promise<R>, onRejected: (reason: unknown) => L) => Promise<Either<L, R>>;
222
+ };
223
+
224
+ type AppException<T> = Either<Throwable, T>;
225
+ /**
226
+ * AppException factory function
227
+ * @param error
228
+ * @param data
229
+ * @constructor
230
+ */
231
+ declare const AppException: <T>(error: unknown, data?: unknown) => AppException<T>;
232
+ type AppResult<T> = Either<Throwable, T>;
233
+ declare const AppResult: <T>(data: T) => AppResult<T>;
234
+ type Task<T> = Either<Throwable, T>;
235
+ declare function Task<T>(t: () => T, e?: (error: unknown) => unknown, f?: () => void): Task<T>;
236
+ declare namespace Task {
237
+ var success: <T>(data: T) => AppResult<T>;
238
+ var fail: <T>(error: unknown) => AppException<T>;
239
+ }
240
+ type AsyncTask<T> = Promise<Task<T>>;
241
+ declare function AsyncTask<T>(t: () => T, e?: (error: unknown) => unknown, f?: () => Promise<void> | void): AsyncTask<T>;
242
+ declare namespace AsyncTask {
243
+ var success: <T>(data: T) => AppResult<T>;
244
+ var fail: <T>(error: unknown) => AppException<T>;
245
+ }
246
+
247
+ type Identity<T> = {
248
+ id: T;
249
+ isSame?: (other: Identity<T>) => boolean;
250
+ };
251
+
252
+ type Tuple<T extends ArrayType> = {
253
+ get<K extends number>(index: K): T[K];
254
+ map<U extends ArrayType>(f: (value: T) => U): Tuple<U>;
255
+ flatMap<U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U>;
256
+ toArray(): T;
257
+ [Symbol.iterator](): Iterator<T[number]>;
258
+ } & ArrayFunctor<T> & Typeable<"Tuple"> & Valuable<"Tuple", T>;
259
+ declare const Tuple: <T extends ArrayType>(values: T) => Tuple<T>;
260
+
261
+ type IESMap<K, V> = Map<K, V>;
262
+
263
+ type SafeTraversable<K, V> = Omit<Traversable<Tuple<[K, V]>>, "map" | "flatMap">;
264
+ type Map$1<K, V> = {
265
+ add(item: Tuple<[K, V]>): Map$1<K, V>;
266
+ remove(value: K): Map$1<K, V>;
267
+ map<U>(f: (value: V) => U): Map$1<K, U>;
268
+ flatMap<K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map$1<K2, V2>;
269
+ get(key: K): Option<V>;
270
+ getOrElse(key: K, defaultValue: V): V;
271
+ orElse(key: K, alternative: Option<V>): Option<V>;
272
+ } & SafeTraversable<K, V> & Collection<Tuple<[K, V]>> & Typeable<"Map"> & Valuable<"Map", IESMap<K, V>>;
273
+ declare const Map$1: <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null) => Map$1<K, V>;
274
+
275
+ type TypeNames = "Success" | "Failure";
276
+ type Try<T> = {
277
+ readonly _tag: TypeNames;
278
+ readonly error: Error | undefined;
279
+ isSuccess: () => boolean;
280
+ isFailure: () => boolean;
281
+ get: () => T;
282
+ getOrElse: (defaultValue: T) => T;
283
+ orElse: (alternative: Try<T>) => Try<T>;
284
+ orThrow: (error: Error) => T;
285
+ toEither: () => Either<Error, T>;
286
+ map: <U>(f: (value: T) => U) => Try<U>;
287
+ flatMap: <U>(f: (value: T) => Try<U>) => Try<U>;
288
+ toString: () => string;
289
+ } & Typeable<TypeNames> & Valuable<TypeNames, T | Error>;
290
+ declare const Try: <T>(f: () => T) => Try<T>;
291
+
292
+ type Traversable<A extends Type> = Functor<A> & {
293
+ get size(): number;
294
+ get isEmpty(): boolean;
295
+ contains(value: A): boolean;
296
+ reduce(f: (b: A, a: A) => A): A;
297
+ reduceRight(f: (b: A, a: A) => A): A;
298
+ foldLeft<B>(z: B): (op: (b: B, a: A) => B) => B;
299
+ foldRight<B>(z: B): (op: (a: A, b: B) => B) => B;
300
+ };
301
+
302
+ export { type AbstractFunctor, AppException, AppResult, type ArrayFunctor, type ArrayType, type AsyncFunctor, AsyncTask, Base, Either, type ExtractTag, type Functor, type Identity, type IterableType, Left, List, Map$1 as Map, None, Option, Right, Set, type SingleType, Some, Task, type TestEither, Throwable, type ThrowableType, type Traversable, Try, Tuple, type Type, TypeCheckLeft, TypeCheckRight, Typeable, isLeft, isRight, isTypeable, tryCatch, tryCatchAsync };
package/dist/index.mjs CHANGED
@@ -1 +1,2 @@
1
- import{a as e,b as f,c as g,d as h,e as i,f as j,g as k,h as l,i as m,j as n,k as o,l as p,m as q,n as r,o as s,p as t,q as u,r as v,s as x,t as y}from"./chunk-YXECCMSX.mjs";import{a as d}from"./chunk-HD6YYUHO.mjs";import{a as c}from"./chunk-Z6YAH4SC.mjs";import{a,b}from"./chunk-5GE5W3Y5.mjs";import"./chunk-377WQNCB.mjs";import"./chunk-HA5XD5KC.mjs";import{a as w}from"./chunk-2I2NKDFN.mjs";import"./chunk-2ML63TYF.mjs";import"./chunk-V2J3R5IU.mjs";import"./chunk-4H62YQ42.mjs";export{s as AppException,t as AppResult,v as AsyncTask,c as Base,r as Either,k as Left,i as List,x as Map,f as None,g as Option,j as Right,h as Set,e as Some,u as Task,d as Throwable,y as Try,w as Tuple,p as TypeCheckLeft,o as TypeCheckRight,a as Typeable,m as isLeft,l as isRight,b as isTypeable,n as tryCatch,q as tryCatchAsync};
1
+ import M from'safe-stable-stringify';var ee=Object.defineProperty;var te=(e,t,r)=>t in e?ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var h=(e,t,r)=>te(e,typeof t!="symbol"?t+"":t,r);function k(e,t){return {...t,_tag:e}}function U(e,t){return !e||typeof e!="object"||!("_tag"in e)?!1:t?e._tag===t:!0}function v(e,t){return {...k(e,t),toString(){return `${e}()`}}}var S="Throwable",A=class e extends Error{constructor(r,o){super(r,{cause:o?.cause});h(this,"_tag");h(this,"data");h(this,"cause");this.name=S,Object.defineProperties(this,{_tag:{value:S,writable:!1,configurable:!1},data:{value:o?.data,writable:!1,configurable:!1},name:{value:S,writable:!1,configurable:!1}}),o?.cause&&Object.defineProperty(this,"cause",{value:o.cause,writable:!1,configurable:!1}),o?.stack?this.stack=o.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}static apply(r,o){if(r instanceof Error)return new e(r.message,{data:o,cause:r.cause,stack:r.stack});let n=typeof r=="string"?r:"An unknown error occurred";return new e(n,{data:o})}};var m=e=>({_tag:"Some",value:e,isEmpty:!1,get:()=>e,getOrElse:()=>e,getOrThrow:()=>e,orElse:()=>m(e),orNull:()=>e,map:t=>m(t(e)),filter(t){return t(e)?m(e):d},fold:(t,r)=>r(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:()=>l([e]),contains:t=>t===e,size:1,toEither:t=>i(e),toString:()=>`Some(${M(e)})`,toValue:()=>({_tag:"Some",value:e})}),d={_tag:"None",value:void 0,isEmpty:!0,get:()=>{throw new Error("Cannot call get() on None")},getOrElse:e=>e,getOrThrow(e){throw e},orElse:e=>e,orNull:()=>null,map:e=>d,filter(e){return d},flatMap:e=>d,flatMapAsync:async e=>d,reduce:()=>{},reduceRight:()=>{},fold:(e,t)=>e(),foldLeft:e=>()=>e,foldRight:e=>()=>e,toList:()=>l([]),contains:()=>!1,size:0,toEither:e=>a(e),toString:()=>"None",toValue:()=>({_tag:"None",value:void 0})},L=()=>d,f=e=>e!=null?m(e):L();f.from=e=>f(e);f.none=()=>L();var B=Set;var R=e=>{let t=new B(e),r=l(t),o={...r,_tag:"Set",add:n=>R([...t,n]),remove:n=>{let u=new B(t);return u.delete(n),R(u)},contains:n=>t.has(n),has:n=>t.has(n),map:n=>R(r.map(n)),flatMap:n=>R(r.flatMap(n)),toList:()=>l(t),toSet:()=>o,toString:()=>`Set(${Array.from(t).toString()})`};return o},g=e=>R(e);var T=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:o=>T(t.map(o)),flatMap:o=>T(t.flatMap(n=>Array.from(o(n)))),flatMapAsync:async o=>{let n=await Promise.all(t.map(async u=>await o(u)));return T(n.flatMap(u=>Array.from(u)))},forEach:o=>t.forEach(o),count:o=>t.filter(o).length,exists:o=>t.some(o),filter:o=>T(t.filter(o)),filterNot:o=>T(t.filter(n=>!o(n))),filterType:o=>T(t.filter(n=>U(n,o))),find:(o,n)=>{let u=t.find(c=>o(c)&&(n?U(c,n):!0));return f(u)},get head(){return t[0]},get headOption(){return t.length>0?f(t[0]):L()},get isEmpty(){return t.length===0},toArray:()=>[...t],reduce:o=>t.reduce(o),reduceRight:o=>t.reduceRight(o),foldLeft:o=>n=>t.reduce(n,o),foldRight:o=>n=>t.reduceRight((u,c)=>n(c,u),o),remove:o=>T(t.filter(n=>n!==o)),removeAt:o=>o<0||o>=t.length?r:T([...t.slice(0,o),...t.slice(o+1)]),add:o=>T([...t,o]),get:o=>f(t[o]),concat:o=>T([...t,...o.toArray()]),drop:o=>T(t.slice(o)),dropRight:o=>T(t.slice(0,-o)),dropWhile:o=>T(t.slice(t.findIndex(n=>!o(n)))),flatten:()=>T(t.flatMap(o=>Array.isArray(o)?o:[o])),toList:()=>r,toSet:()=>g(t),toString:()=>`List(${M(t)})`,toValue:()=>({_tag:"List",value:t})};return r},l=e=>T(e);var O=e=>({_tag:"Right",value:e,isLeft:()=>!1,isRight:()=>!0,getOrElse:t=>e,getOrThrow:()=>e,map:t=>i(t(e)),mapAsync:t=>t(e).then(r=>i(r)).catch(r=>Promise.resolve(a(r))),merge:t=>t.isLeft()?a(t.value):i([e,t.value]),flatMap:t=>t(e),flatMapAsync:t=>t(e).catch(r=>a(r)),toOption:()=>m(e),toList:()=>l([e]),toString:()=>`Right(${M(e)})`,[Symbol.iterator]:function*(){yield e;},yield:function*(){yield e;},traverse:t=>{let r=t(e);return r.isLeft()?a(r.value):i([r.value])},lazyMap:function*(t){yield i(t(e));},tap:t=>(t(e),i(e)),tapLeft:t=>i(e),mapLeft:t=>i(e),bimap:(t,r)=>i(r(e)),fold:(t,r)=>r(e),swap:()=>a(e),then:(t,r)=>Promise.resolve(e).then(t,r),toValue:()=>({_tag:"Right",value:e})}),K=e=>({_tag:"Left",value:e,isLeft:()=>!0,isRight:()=>!1,getOrElse:t=>t,getOrThrow:()=>{throw e},map:t=>a(e),mapAsync:t=>Promise.resolve(a(e)),merge:t=>a(e),flatMap:t=>a(e),flatMapAsync:t=>Promise.resolve(a(e)),toOption:()=>L(),toList:()=>l(),toString:()=>`Left(${M(e)})`,[Symbol.iterator]:function*(){},yield:function*(){},traverse:t=>a(e),lazyMap:function*(t){yield a(e);},tap:t=>a(e),tapLeft:t=>(t(e),a(e)),mapLeft:t=>a(t(e)),bimap:(t,r)=>a(t(e)),fold:(t,r)=>t(e),swap:()=>i(e),then:(t,r)=>Promise.reject(e).then(null,r),toValue:()=>({_tag:"Right",value:e})}),i=e=>O(e),a=e=>K(e),Pe=e=>e.isRight(),Ie=e=>e.isLeft(),Ne=(e,t)=>{try{return i(e())}catch(r){return a(t(r))}},ne=e=>O(e);console.assert(ne);var ae=e=>K(e);console.assert(ae);var Fe=async(e,t)=>{try{let r=await e();return i(r)}catch(r){return a(t(r))}},se={sequence:e=>{let t=[];for(let r of e){if(r.isLeft())return a(r.value);t.push(r.value);}return i(t)},traverse:(e,t)=>se.sequence(e.map(t)),fromNullable:(e,t)=>e==null?a(t):i(e),fromPredicate:(e,t,r)=>t(e)?i(e):a(r),ap:(e,t)=>e.flatMap(r=>t.map(r)),fromPromise:async(e,t)=>{try{let r=await e;return i(r)}catch(r){return a(t(r))}}};var x=(e,t)=>{let r=A.apply(e,t);return {...v("AppException",a(r))}},E=e=>({...v("AppResult",i(e))});function _(e,t=o=>o,r=()=>{}){try{return E(e())}catch(o){return x(t(o))}finally{r();}}_.success=e=>E(e);_.fail=e=>x(e);async function P(e,t=o=>o,r=async()=>{}){try{let o=await e();return E(o)}catch(o){let n=await t(o);return x(n)}finally{await r();}}P.success=e=>E(e);P.fail=e=>x(e);var V=e=>({_tag:"Tuple",map:t=>{let r=t(e);return V(r)},flatMap:t=>t(e),get:t=>e[t],toArray:()=>e,[Symbol.iterator](){let t=0;return {next:()=>t<e.length?{value:e[t++],done:!1}:{value:void 0,done:!0}}},toValue:()=>({_tag:"Tuple",value:e})});var b=Map;var y=e=>{let t="Map",r={values:new b(e)},o=()=>Array.from(r.values.entries()).map(([s,p])=>V([s,p])),n=s=>y(new b(r.values).set(s.toArray()[0],s.toArray()[1]).entries()),u=s=>{let p=new b(r.values);return p.delete(s)?y(p.entries()):y(r.values.entries())},c=s=>r.values.get(s[0])===s[1],F=()=>r.values.size,z=s=>y(Array.from(r.values.entries()).map(([p,Z])=>[p,s(Z)])),C=s=>{let p=y(r.values.entries()).toList();return y(p.flatMap(s).toArray())},$=s=>l(o()).reduce(s),j=s=>l(o()).reduceRight(s),q=s=>p=>l(o()).foldLeft(s)(p),G=s=>p=>l(o()).foldRight(s)(p),W=s=>f(r.values.get(s)),D=(s,p)=>f(r.values.get(s)).getOrElse(p),H=()=>r.values.size===0,J=(s,p)=>f(r.values.get(s)).orElse(p),Q=()=>l(o()),X=()=>g(o()),Y=()=>`Map(${o().toString()})`;return {_tag:t,add:n,remove:u,contains:c,get size(){return F()},map:z,flatMap:C,reduce:$,reduceRight:j,foldLeft:q,foldRight:G,get:W,getOrElse:D,get isEmpty(){return H()},orElse:J,toList:Q,toSet:X,toString:Y,toValue:()=>({_tag:"Map",value:r.values})}},et=e=>y(e);var N=e=>({_tag:"Success",error:void 0,isSuccess:()=>!0,isFailure:()=>!1,get:()=>e,getOrElse:t=>e,orElse:t=>N(e),orThrow:t=>e,toEither:()=>i(e),map:t=>ie(()=>t(e)),flatMap:t=>t(e),toString:()=>`Success(${M(e)})`,toValue:()=>({_tag:"Success",value:e})}),w=e=>({_tag:"Failure",error:e,isSuccess:()=>!1,isFailure:()=>!0,get:()=>{throw e},getOrElse:t=>t,orElse:t=>t,orThrow:t=>{throw t},toEither:()=>a(e),map:t=>w(e),flatMap:t=>w(e),toString:()=>`Failure(${M(e)}))`,toValue:()=>({_tag:"Failure",value:e})}),ie=e=>{try{return N(e())}catch(t){return w(t instanceof Error?t:new Error(String(t)))}};export{x as AppException,E as AppResult,P as AsyncTask,v as Base,se as Either,a as Left,l as List,et as Map,L as None,f as Option,i as Right,g as Set,m as Some,_ as Task,A as Throwable,ie as Try,V as Tuple,ae as TypeCheckLeft,ne as TypeCheckRight,k as Typeable,Ie as isLeft,Pe as isRight,U as isTypeable,Ne as tryCatch,Fe as tryCatchAsync};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/typeable/Typeable.ts","../src/core/base/Base.ts","../src/core/throwable/Throwable.ts","../src/option/Option.ts","../src/set/shim.ts","../src/set/Set.ts","../src/list/List.ts","../src/either/Either.ts","../src/core/task/Task.ts","../src/tuple/Tuple.ts","../src/map/shim.ts","../src/map/Map.ts","../src/try/Try.ts"],"names":["Typeable","tag","data","isTypeable","value","Base","type","body","NAME","Throwable","_Throwable","message","options","__publicField","srcError","Some","f","predicate","NONE","_onNone","onSome","z","op","List","val","_left","Right","stringify","defaultValue","error","alternative","_f","_predicate","onNone","_onSome","left","Left","None","Option","ESSet","createSet","iterable","values","seqMethods","set","newSet","Set","createList","array","list","a","results","p","x","result","acc","index","item","other","n","RightConstructor","_defaultValue","_fl","fr","_onLeft","onRight","onfulfilled","onrejected","LeftConstructor","_other","fl","_fr","onLeft","_onRight","_onfulfilled","isRight","either","isLeft","tryCatch","onError","TypeCheckRight","TypeCheckLeft","tryCatchAsync","Either","eithers","rights","arr","leftValue","eitherF","eitherV","promise","onRejected","AppException","appError","AppResult","Task","t","e","AsyncTask","errorResult","Tuple","mapValue","ESMap","createMap","entries","_tag","state","getEntries","key","add","remove","newMap","contains","size","map","k","v","flatMap","reduce","reduceRight","foldLeft","foldRight","get","getOrElse","isEmpty","orElse","toList","toSet","toString","toValue","Map","Success","_alternative","_error","Try","Failure"],"mappings":"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","file":"index.mjs","sourcesContent":["// Core type for Typeable objects\nexport type Typeable<Tag extends string, T = object> = T & {\n readonly _tag: Tag\n}\n\n// Utility type to extract the Tag from a Typeable type\nexport type ExtractTag<T> = T extends Typeable<infer Tag, unknown> ? Tag : never\n\n// Create a tagged object with type inference\nexport function Typeable<Tag extends string, T>(tag: Tag, data: T): Typeable<Tag, T> {\n return {\n ...data,\n _tag: tag,\n }\n}\n\n// Type guard with automatic type inference using the full type\nexport function isTypeable<T>(value: unknown, tag: string): value is T {\n if (!value || typeof value !== \"object\" || !(\"_tag\" in value)) {\n return false\n }\n\n return tag ? value._tag === tag : true\n}\n\n// // Usage\n// type User = Typeable<\n// \"User\",\n// {\n// id: string\n// name: string\n// email: string\n// }\n// >\n//\n// const user = Typeable(\"User\", {\n// id: \"123\",\n// name: \"John\",\n// email: \"john@example.com\",\n// })\n//\n// const maybeUser: unknown = user\n//\n// // Now we only need to specify User type\n// if (isTypeable<User>(maybeUser, \"User\")) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n//\n// // Can still check just for Typeable without specific tag\n// if (isTypeable<User>(maybeUser)) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n","import { Typeable } from \"@/typeable/Typeable\"\n\n/**\n * Base Object from which most other objects inherit\n * @param type\n * @param body\n * @constructor\n */\nexport function Base<T>(type: string, body: T) {\n return {\n ...Typeable(type, body),\n toString() {\n return `${type}()`\n },\n }\n}\n","import { Typeable } from \"@/typeable/Typeable\"\n\nconst NAME = \"Throwable\" as const\n\nexport type ThrowableType = Error &\n Typeable<typeof NAME> & {\n readonly data?: unknown\n readonly cause?: Error\n }\n\nexport class Throwable extends Error implements ThrowableType {\n public readonly _tag: typeof NAME\n public readonly data?: unknown\n public readonly cause?: Error\n\n protected constructor(message: string, options?: { data?: unknown; cause?: Error; stack?: string }) {\n super(message, { cause: options?.cause })\n\n // Set name before we capture stack trace\n this.name = NAME\n\n // Set immutable properties\n Object.defineProperties(this, {\n _tag: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n data: {\n value: options?.data,\n writable: false,\n configurable: false,\n },\n name: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n })\n\n // Handle cause separately since it comes from Error\n if (options?.cause) {\n Object.defineProperty(this, \"cause\", {\n value: options.cause,\n writable: false,\n configurable: false,\n })\n }\n\n // Handle stack trace\n if (options?.stack) {\n // If we have a stack from an original error, use it\n this.stack = options.stack\n } else if (Error.captureStackTrace) {\n // Otherwise capture a new stack trace\n Error.captureStackTrace(this, this.constructor)\n }\n }\n\n static apply(srcError: unknown, data?: unknown): ThrowableType {\n if (srcError instanceof Error) {\n // For Error instances, preserve the original stack trace\n return new Throwable(srcError.message, {\n data,\n cause: srcError.cause as Error | undefined,\n stack: srcError.stack,\n })\n }\n\n const message = typeof srcError === \"string\" ? srcError : \"An unknown error occurred\"\n return new Throwable(message, { data })\n }\n}\n","import stringify from \"safe-stable-stringify\"\n\nimport { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { Either, Left, List, Right, Traversable } from \"../index\"\n\nexport type Option<T extends Type> = {\n readonly _tag: \"Some\" | \"None\"\n readonly value: T | undefined\n isEmpty: boolean\n get(): T\n getOrElse(defaultValue: T): T\n getOrThrow(error: Error): T\n orElse(alternative: Option<T>): Option<T>\n orNull(): T | null\n map<U extends Type>(f: (value: T) => U): Option<U>\n filter(predicate: (value: T) => boolean): Option<T>\n flatMap<U extends Type>(f: (value: T) => Option<U>): Option<U>\n flatMapAsync<U extends Type>(f: (value: T) => Promise<Option<U>>): Promise<Option<U>>\n reduce<U>(f: (acc: U, value: T) => U): U\n reduceRight<U>(f: (acc: U, value: T) => U): U\n fold<U>(onNone: () => U, onSome: (value: T) => U): U\n foldLeft<B>(z: B): (op: (b: B, a: T) => B) => B\n foldRight<B>(z: B): (op: (a: T, b: B) => B) => B\n toList(): List<T>\n contains(value: T): boolean\n size: number\n toEither<E>(left: E): Either<E, T>\n toString(): string\n toValue(): { _tag: \"Some\" | \"None\"; value: T }\n} & (Traversable<T> & Functor<T> & Typeable<\"Some\" | \"None\"> & Valuable<\"Some\" | \"None\", T> & AsyncFunctor<T>)\n\nexport const Some = <T extends Type>(value: T): Option<T> => ({\n _tag: \"Some\",\n value,\n isEmpty: false,\n get: () => value,\n getOrElse: () => value,\n getOrThrow: () => value,\n orElse: () => Some(value),\n orNull: () => value,\n map: <U extends Type>(f: (value: T) => U) => Some(f(value)),\n filter(predicate: (value: T) => boolean) {\n if (predicate(value)) {\n return Some<T>(value) // type narrowing\n } else {\n return NONE as unknown as Option<T>\n }\n },\n fold: <U extends Type>(_onNone: () => U, onSome: (value: T) => U) => {\n return onSome(value)\n },\n flatMap: <U extends Type>(f: (value: T) => Option<U>) => f(value),\n flatMapAsync: async <U extends Type>(f: (value: T) => Promise<Option<U>>) => {\n return await f(value)\n },\n reduce: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n reduceRight: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: T) => B) =>\n op(z, value),\n foldRight:\n <B>(z: B) =>\n (op: (a: T, b: B) => B) =>\n op(value, z),\n toList: () => List<T>([value]),\n contains: (val: T) => val === value,\n size: 1,\n toEither: <E>(_left: E) => Right<E, T>(value),\n toString: () => `Some(${stringify(value)})`,\n toValue: () => ({ _tag: \"Some\", value }),\n})\n\nconst NONE: Option<never> = {\n _tag: \"None\",\n value: undefined as never,\n isEmpty: true,\n get: () => {\n throw new Error(\"Cannot call get() on None\")\n },\n getOrElse: <T>(defaultValue: T) => defaultValue,\n getOrThrow<T>(error: Error): T {\n throw error\n },\n orElse: <T>(alternative: Option<T>) => alternative,\n orNull: () => null,\n map: <U extends Type>(_f: (value: never) => U) => NONE as unknown as Option<U>,\n filter(_predicate: (value: never) => boolean): Option<never> {\n return NONE\n },\n flatMap: <U extends Type>(_f: (value: never) => Option<U>) => NONE as unknown as Option<U>,\n flatMapAsync: async <U extends Type>(_f: (value: never) => Promise<Option<U>>) => {\n return NONE as unknown as Option<U>\n },\n reduce: () => undefined as never,\n reduceRight: () => undefined as never,\n fold: <U extends Type>(onNone: () => U, _onSome: (value: never) => U) => {\n return onNone()\n },\n foldLeft:\n <B>(z: B) =>\n () =>\n z,\n foldRight:\n <B>(z: B) =>\n () =>\n z,\n toList: () => List([]),\n contains: () => false,\n size: 0,\n toEither: <E>(left: E) => Left<E, never>(left),\n toString: () => \"None\",\n toValue: () => ({ _tag: \"None\", value: undefined as never }),\n}\n\nexport const None = <T extends Type>(): Option<T> => NONE as unknown as Option<T>\n\nexport const Option = <T extends Type>(value: T | null | undefined): Option<T> =>\n value !== null && value !== undefined ? Some<T>(value) : None<T>()\n\nOption.from = <T>(value: T) => Option(value)\nOption.none = <T>() => None<T>()\n","export type IESSet<T> = Set<T>\nexport const ESSet = Set\n","import { Collection } from \"@/collections\"\nimport { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Typeable } from \"@/typeable/Typeable\"\n\nimport { ESSet, IESSet } from \"./shim\"\n\nexport type Set<A> = {\n add: (value: A) => Set<A>\n remove: (value: A) => Set<A>\n contains: (value: A) => boolean\n has: (value: A) => boolean\n map: <B>(f: (a: A) => B) => Set<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => Set<B>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n Collection<A> &\n Typeable<\"Set\">\n\nconst createSet = <A>(iterable?: Iterable<A>): Set<A> => {\n const values: IESSet<A> = new ESSet<A>(iterable)\n\n const seqMethods = List(values)\n\n const set: Set<A> = {\n ...seqMethods,\n _tag: \"Set\",\n\n add: (value: A): Set<A> => createSet([...values, value]),\n\n remove: (value: A): Set<A> => {\n const newSet = new ESSet(values)\n newSet.delete(value)\n return createSet(newSet)\n },\n\n contains: (value: A): boolean => values.has(value),\n\n has: (value: A): boolean => values.has(value),\n\n map: <B>(f: (a: A) => B): Set<B> => createSet(seqMethods.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>): Set<B> => createSet(seqMethods.flatMap(f)),\n\n toList: (): List<A> => List(values),\n\n toSet: (): Set<A> => set,\n\n toString: (): string => `Set(${Array.from(values).toString()})`,\n }\n\n return set\n}\n\nexport const Set = <A>(iterable?: Iterable<A> | IterableType<A>): Set<A> => createSet(iterable)\n","import stringify from \"safe-stable-stringify\"\n\nimport { AsyncFunctor } from \"@/functor\"\nimport { IterableType } from \"@/iterable\"\nimport { None, Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { ExtractTag, isTypeable, Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type List<A> = {\n readonly length: number\n readonly [Symbol.iterator]: () => Iterator<A>\n map: <B>(f: (a: A) => B) => List<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => List<B>\n flatMapAsync: <B>(f: (a: A) => PromiseLike<IterableType<B>>) => PromiseLike<List<B>>\n forEach: (f: (a: A) => void) => void\n count: (p: (x: A) => boolean) => number\n exists: (p: (a: A) => boolean) => boolean\n filter<S extends A>(predicate: (a: A) => a is S): List<S>\n filter(predicate: (a: A) => unknown): List<A>\n filterNot: (p: (a: A) => boolean) => List<A>\n filterType: <T extends Typeable<string, unknown>>(tag: string) => List<T & A>\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => Option<T>\n readonly head: A\n readonly headOption: Option<A>\n readonly isEmpty: boolean\n toArray: <B = A>() => B[]\n reduce: (f: (prev: A, curr: A) => A) => A\n reduceRight: (f: (prev: A, curr: A) => A) => A\n foldLeft: <B>(z: B) => (op: (b: B, a: A) => B) => B\n foldRight: <B>(z: B) => (op: (a: A, b: B) => B) => B\n remove: (value: A) => List<A>\n removeAt: (index: number) => List<A>\n add: (item: A) => List<A>\n get: (index: number) => Option<A>\n concat: (other: List<A>) => List<A>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n AsyncFunctor<A> &\n Typeable<\"List\"> &\n Valuable<\"List\", A[]>\n\nconst createList = <A>(values?: Iterable<A>): List<A> => {\n const array: A[] = Array.from(values || [])\n\n const list: List<A> = {\n _tag: \"List\",\n\n [Symbol.iterator]: () => array[Symbol.iterator](),\n\n get size() {\n return array.length\n },\n\n get length() {\n return array.length\n },\n\n map: <B>(f: (a: A) => B) => createList(array.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>) => createList(array.flatMap((a) => Array.from(f(a)))),\n\n flatMapAsync: async <B>(f: (a: A) => PromiseLike<IterableType<B>>): Promise<List<B>> => {\n const results = await Promise.all(array.map(async (a) => await f(a)))\n return createList(results.flatMap((iterable) => Array.from(iterable)))\n },\n\n forEach: (f: (a: A) => void) => array.forEach(f),\n\n count: (p: (x: A) => boolean) => array.filter(p).length,\n\n exists: (p: (a: A) => boolean) => array.some(p),\n\n filter: (predicate: (a: A) => unknown) => createList(array.filter(predicate as (a: A) => boolean)),\n\n filterNot: (p: (a: A) => boolean) => createList(array.filter((x) => !p(x))),\n\n filterType: <T extends Typeable<string, unknown>>(tag: string) =>\n createList(array.filter((x): x is T & A => isTypeable(x, tag))),\n\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => {\n const result = array.find((x) => predicate(x) && (tag ? isTypeable(x, tag) : true))\n return Option<T>(result as T | null | undefined)\n },\n\n get head() {\n return array[0]\n },\n\n get headOption() {\n return array.length > 0 ? Option(array[0]) : None<A>()\n },\n\n get isEmpty() {\n return array.length === 0\n },\n\n toArray: <B = A>(): B[] => [...array] as unknown as B[],\n\n reduce: (f: (prev: A, curr: A) => A) => array.reduce(f),\n\n reduceRight: (f: (prev: A, curr: A) => A) => array.reduceRight(f),\n\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: A) => B) =>\n array.reduce(op, z),\n\n foldRight:\n <B>(z: B) =>\n (op: (a: A, b: B) => B) =>\n array.reduceRight((acc, value) => op(value, acc), z),\n\n remove: (value: A) => createList(array.filter((x) => x !== value)),\n\n removeAt: (index: number) =>\n index < 0 || index >= array.length ? list : createList([...array.slice(0, index), ...array.slice(index + 1)]),\n\n add: (item: A) => createList([...array, item]),\n\n get: (index: number) => Option(array[index]),\n\n concat: (other: List<A>) => createList([...array, ...other.toArray()]),\n\n drop: (n: number) => createList(array.slice(n)),\n\n dropRight: (n: number) => createList(array.slice(0, -n)),\n\n dropWhile: (p: (a: A) => boolean) => createList(array.slice(array.findIndex((x) => !p(x)))),\n\n flatten: <B>() => createList(array.flatMap((item) => (Array.isArray(item) ? item : ([item] as unknown as B[])))),\n\n toList: () => list,\n\n toSet: () => Set(array),\n\n toString: () => `List(${stringify(array)})`,\n\n toValue: () => ({ _tag: \"List\", value: array }),\n }\n\n return list\n}\n\nexport const List = <A>(values?: Iterable<A>): List<A> => createList(values)\n","import stringify from \"safe-stable-stringify\"\n\nimport { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { List } from \"@/list/List\"\nimport { None, Option, Some } from \"@/option/Option\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Either<L extends Type, R extends Type> = {\n readonly _tag: \"Left\" | \"Right\"\n value: L | R\n isLeft: () => boolean\n isRight: () => boolean\n getOrElse: (defaultValue: R) => R\n getOrThrow: () => R\n map: <U extends Type>(f: (value: R) => U) => Either<L, U>\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>) => Either<L | L1, [R, R1]>\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>) => Promise<Either<L, U>>\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U>\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>) => Promise<Either<L, U>>\n toOption: () => Option<R>\n toList: () => List<R>\n toString: () => string\n [Symbol.iterator]: () => Iterator<R>\n yield: () => Generator<R, void, unknown>\n traverse: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U[]>\n lazyMap: <U extends Type>(f: (value: R) => U) => Generator<Either<L, U>, void, unknown>\n tap: (f: (value: R) => void) => Either<L, R>\n tapLeft: (f: (value: L) => void) => Either<L, R>\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Either<L2, R>\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, fr: (value: R) => R2) => Either<L2, R2>\n fold: <T extends Type>(onLeft: (value: L) => T, onRight: (value: R) => T) => T\n swap: () => Either<R, L>\n} & Typeable<\"Left\" | \"Right\"> &\n Valuable<\"Left\" | \"Right\", L | R> &\n PromiseLike<R> &\n AsyncFunctor<R>\n\nexport type TestEither<L extends Type, R extends Type> = Either<L, R> & Functor<R> & AsyncFunctor<R>\n\nconst RightConstructor = <L extends Type, R extends Type>(value: R): Either<L, R> => ({\n _tag: \"Right\",\n value,\n isLeft: () => false,\n isRight: () => true,\n getOrElse: (_defaultValue: R) => value,\n getOrThrow: () => value,\n map: <U extends Type>(f: (value: R) => U): Either<L, U> => Right(f(value)),\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n f(value)\n .then((result) => Right<L, U>(result))\n .catch((error: unknown) => Promise.resolve(Left<L, U>(error as L))) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n other.isLeft() ? Left<L | L1, [R, R1]>(other.value as L1) : Right<L | L1, [R, R1]>([value, other.value as R1]),\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U> => f(value),\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n f(value).catch((error: unknown) => Left<L, U>(error as L)) as Promise<Either<L, U>>,\n toOption: () => Some<R>(value),\n toList: () => List<R>([value]),\n toString: () => `Right(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n yield value\n },\n yield: function* () {\n yield value\n },\n traverse: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U[]> => {\n const result = f(value)\n return result.isLeft() ? Left(result.value as L) : Right([result.value as U])\n },\n lazyMap: function* <U extends Type>(f: (value: R) => U) {\n yield Right<L, U>(f(value))\n },\n tap: (f: (value: R) => void) => {\n f(value)\n return Right<L, R>(value)\n },\n tapLeft: (_f: (value: L) => void) => Right<L, R>(value),\n mapLeft: <L2 extends Type>(_f: (value: L) => L2) => Right<L2, R>(value),\n bimap: <L2 extends Type, R2 extends Type>(_fl: (value: L) => L2, fr: (value: R) => R2) => Right<L2, R2>(fr(value)),\n fold: <T extends Type>(_onLeft: (value: L) => T, onRight: (value: R) => T) => onRight(value),\n swap: () => Left<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.resolve(value).then(onfulfilled, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nconst LeftConstructor = <L extends Type, R extends Type>(value: L): Either<L, R> => ({\n _tag: \"Left\",\n value,\n isLeft: () => true,\n isRight: () => false,\n getOrElse: (defaultValue: R): R => defaultValue,\n getOrThrow: () => {\n throw value\n },\n map: <U extends Type>(_f: (value: R) => U): Either<L, U> => Left<L, U>(value),\n mapAsync: <U extends Type>(_f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(_other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n Left<L | L1, [R, R1]>(value),\n flatMap: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U> => Left<L, U>(value),\n flatMapAsync: <U extends Type>(_f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n toOption: () => None<R>(),\n toList: () => List<R>(),\n toString: () => `Left(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n // Left doesn't yield any values\n },\n yield: function* () {\n // Left doesn't yield any values\n },\n traverse: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U[]> => Left(value),\n lazyMap: function* <U extends Type>(_f: (value: R) => U) {\n yield Left<L, U>(value)\n },\n tap: (_f: (value: R) => void) => Left<L, R>(value),\n tapLeft: (f: (value: L) => void) => {\n f(value)\n return Left<L, R>(value)\n },\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Left<L2, R>(f(value)),\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, _fr: (value: R) => R2) => Left<L2, R2>(fl(value)),\n fold: <T extends Type>(onLeft: (value: L) => T, _onRight: (value: R) => T) => onLeft(value),\n swap: () => Right<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n _onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.reject(value).then(null, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nexport const Right = <L extends Type, R extends Type>(value: R): Either<L, R> => RightConstructor(value)\nexport const Left = <L extends Type, R extends Type>(value: L): Either<L, R> => LeftConstructor(value)\n\nexport const isRight = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: R } =>\n either.isRight()\nexport const isLeft = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: L } =>\n either.isLeft()\n\nexport const tryCatch = <L extends Type, R extends Type>(f: () => R, onError: (error: unknown) => L): Either<L, R> => {\n try {\n return Right<L, R>(f())\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const TypeCheckRight = <L extends Type, R extends Type>(value: R): TestEither<L, R> => RightConstructor(value)\nconsole.assert(TypeCheckRight)\nexport const TypeCheckLeft = <L extends Type, R extends Type>(value: L): TestEither<L, R> => LeftConstructor(value)\nconsole.assert(TypeCheckLeft)\n\nexport const tryCatchAsync = async <L extends Type, R extends Type>(\n f: () => Promise<R>,\n onError: (error: unknown) => L,\n): Promise<Either<L, R>> => {\n try {\n const result = await f()\n return Right<L, R>(result)\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const Either = {\n sequence: <L extends Type, R extends Type>(eithers: Either<L, R>[]): Either<L, R[]> => {\n const rights: R[] = []\n for (const either of eithers) {\n if (either.isLeft()) {\n return Left(either.value as L)\n }\n rights.push(either.value as R)\n }\n return Right(rights)\n },\n\n traverse: <L extends Type, R extends Type, U extends Type>(\n arr: R[],\n f: (value: R) => Either<L, U>,\n ): Either<L, U[]> => {\n return Either.sequence(arr.map(f))\n },\n\n fromNullable: <L extends Type, R extends Type>(value: R | null | undefined, leftValue: L): Either<L, R> =>\n value === null || value === undefined ? Left(leftValue) : Right(value as R),\n\n fromPredicate: <L extends Type, R extends Type>(\n value: R,\n predicate: (value: R) => boolean,\n leftValue: L,\n ): Either<L, R> => (predicate(value) ? Right(value) : Left(leftValue)),\n\n ap: <L extends Type, R extends Type, U extends Type>(\n eitherF: Either<L, (value: R) => U>,\n eitherV: Either<L, R>,\n ): Either<L, U> => eitherF.flatMap((f) => eitherV.map(f)),\n\n fromPromise: async <L, R>(promise: Promise<R>, onRejected: (reason: unknown) => L): Promise<Either<L, R>> => {\n try {\n const result = await promise\n return Right<L, R>(result)\n } catch (error) {\n return Left<L, R>(onRejected(error))\n }\n },\n}\n","import { Throwable } from \"@/core/throwable/Throwable\"\nimport { Either, Left, Right } from \"@/either/Either\"\n\nimport { Base } from \"../base/Base\"\n\nexport type AppException<T> = Either<Throwable, T>\n\n/**\n * AppException factory function\n * @param error\n * @param data\n * @constructor\n */\nexport const AppException = <T>(error: unknown, data?: unknown): AppException<T> => {\n const appError = Throwable.apply(error, data)\n return {\n ...Base(\"AppException\", Left(appError)),\n }\n}\n\nexport type AppResult<T> = Either<Throwable, T>\n\nexport const AppResult = <T>(data: T): AppResult<T> => {\n return {\n ...Base(\"AppResult\", Right(data)),\n ///..Right(data),\n }\n}\n\nexport type Task<T> = Either<Throwable, T>\n\nexport function Task<T>(\n t: () => T,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => void = () => {},\n): Task<T> {\n try {\n return AppResult<T>(t())\n } catch (error) {\n return AppException<T>(e(error))\n } finally {\n f()\n }\n}\n\nTask.success = <T>(data: T) => AppResult<T>(data)\nTask.fail = <T>(error: unknown) => AppException<T>(error)\n\nexport type AsyncTask<T> = Promise<Task<T>>\n\nexport async function AsyncTask<T>(\n t: () => T,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => Promise<void> | void = async () => {},\n): AsyncTask<T> {\n try {\n const result = await t()\n return AppResult<T>(result)\n } catch (error) {\n const errorResult = await e(error)\n return AppException<T>(errorResult)\n } finally {\n await f()\n }\n}\n\nAsyncTask.success = <T>(data: T): AppResult<T> => AppResult<T>(data)\nAsyncTask.fail = <T>(error: unknown): AppException<T> => AppException<T>(error)\n","import { ArrayFunctor, ArrayType } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Tuple<T extends ArrayType> = {\n get<K extends number>(index: K): T[K]\n\n map<U extends ArrayType>(f: (value: T) => U): Tuple<U>\n\n flatMap<U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U>\n\n toArray(): T\n\n [Symbol.iterator](): Iterator<T[number]>\n} & ArrayFunctor<T> &\n Typeable<\"Tuple\"> &\n Valuable<\"Tuple\", T>\n\nexport const Tuple = <T extends ArrayType>(values: T): Tuple<T> => {\n return {\n _tag: \"Tuple\",\n map: <U extends ArrayType>(f: (value: T) => U): Tuple<U> => {\n const mapValue = f(values)\n return Tuple(mapValue)\n },\n\n flatMap: <U extends ArrayType>(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 [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 toValue: () => ({ _tag: \"Tuple\", value: values }),\n }\n}\n","export type IESMap<K, V> = Map<K, V>\nexport const ESMap = Map\n","import { Collection } from \"@/collections\"\nimport { Traversable, Typeable } from \"@/index\"\nimport { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { Tuple } from \"@/tuple/Tuple\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { ESMap, IESMap } from \"./shim\"\n\ntype SafeTraversable<K, V> = Omit<Traversable<Tuple<[K, V]>>, \"map\" | \"flatMap\">\n\nexport type Map<K, V> = {\n add(item: Tuple<[K, V]>): Map<K, V>\n remove(value: K): Map<K, V>\n map<U>(f: (value: V) => U): Map<K, U>\n flatMap<K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2>\n get(key: K): Option<V>\n getOrElse(key: K, defaultValue: V): V\n orElse(key: K, alternative: Option<V>): Option<V>\n} & SafeTraversable<K, V> &\n Collection<Tuple<[K, V]>> &\n Typeable<\"Map\"> &\n Valuable<\"Map\", IESMap<K, V>>\n\ntype MapState<K, V> = {\n values: IESMap<K, V>\n}\n\nconst createMap = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> => {\n const _tag = \"Map\"\n const state: MapState<K, V> = {\n values: new ESMap<K, V>(entries),\n }\n\n const getEntries = () => Array.from(state.values.entries()).map(([key, value]) => Tuple<[K, V]>([key, value]))\n\n const add = (item: Tuple<[K, V]>): Map<K, V> =>\n createMap(new ESMap(state.values).set(item.toArray()[0], item.toArray()[1]).entries())\n\n const remove = (value: K): Map<K, V> => {\n const newMap = new ESMap(state.values)\n return newMap.delete(value) ? createMap(newMap.entries()) : createMap(state.values.entries())\n }\n\n const contains = (value: Tuple<[K, V]>): boolean => state.values.get(value[0]) === value[1]\n\n const size = (): number => state.values.size\n\n const map = <U>(f: (value: V) => U): Map<K, U> =>\n createMap(Array.from(state.values.entries()).map(([k, v]) => [k, f(v)]))\n\n const flatMap = <K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2> => {\n const list = createMap(state.values.entries()).toList()\n return createMap(list.flatMap(f).toArray())\n }\n\n const reduce = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduce(f)\n\n const reduceRight = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduceRight(f)\n\n const foldLeft =\n <B>(z: B) =>\n (op: (b: B, a: Tuple<[K, V]>) => B): B =>\n List(getEntries()).foldLeft(z)(op)\n\n const foldRight =\n <B>(z: B) =>\n (op: (a: Tuple<[K, V]>, b: B) => B): B =>\n List(getEntries()).foldRight(z)(op)\n\n const get = (key: K): Option<V> => Option(state.values.get(key))\n\n const getOrElse = (key: K, defaultValue: V): V => Option(state.values.get(key)).getOrElse(defaultValue)\n\n const isEmpty = (): boolean => state.values.size === 0\n\n const orElse = (key: K, alternative: Option<V>): Option<V> => Option(state.values.get(key)).orElse(alternative)\n\n const toList = (): List<Tuple<[K, V]>> => List(getEntries())\n\n const toSet = (): Set<Tuple<[K, V]>> => Set(getEntries())\n\n const toString = (): string => `Map(${getEntries().toString()})`\n\n const toValue = () => ({ _tag: \"Map\", value: state.values })\n\n return {\n _tag,\n add,\n remove,\n contains,\n get size() {\n return size()\n },\n map,\n flatMap,\n reduce,\n reduceRight,\n foldLeft,\n foldRight,\n get,\n getOrElse,\n get isEmpty() {\n return isEmpty()\n },\n orElse,\n toList,\n toSet,\n toString,\n toValue: () => ({ _tag: \"Map\", value: state.values }),\n }\n}\n\nexport const Map = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> =>\n createMap(entries)\n\n// Example usage\n// const myMap = createMap<string, unknown>([\n// [\"a\", 1],\n// [\"b\", 2],\n// [\"c\", 3],\n// ])\n","import stringify from \"safe-stable-stringify\"\n\nimport { Either, Left, Right } from \"@/either/Either\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\ntype TypeNames = \"Success\" | \"Failure\"\n\nexport type Try<T> = {\n readonly _tag: TypeNames\n readonly error: Error | undefined\n isSuccess: () => boolean\n isFailure: () => boolean\n get: () => T\n getOrElse: (defaultValue: T) => T\n orElse: (alternative: Try<T>) => Try<T>\n orThrow: (error: Error) => T\n toEither: () => Either<Error, T>\n map: <U>(f: (value: T) => U) => Try<U>\n flatMap: <U>(f: (value: T) => Try<U>) => Try<U>\n toString: () => string\n} & Typeable<TypeNames> &\n Valuable<TypeNames, T | Error>\n\nconst Success = <T>(value: T): Try<T> => ({\n _tag: \"Success\",\n error: undefined,\n isSuccess: () => true,\n isFailure: () => false,\n get: () => value,\n getOrElse: (_defaultValue: T) => value,\n orElse: (_alternative: Try<T>) => Success(value),\n orThrow: (_error: Error) => value,\n toEither: () => Right<Error, T>(value),\n map: <U>(f: (value: T) => U) => Try(() => f(value)),\n flatMap: <U>(f: (value: T) => Try<U>) => f(value),\n toString: () => `Success(${stringify(value)})`,\n toValue: () => ({ _tag: \"Success\", value }),\n})\n\nconst Failure = <T>(error: Error): Try<T> => ({\n _tag: \"Failure\",\n error,\n isSuccess: () => false,\n isFailure: () => true,\n get: () => {\n throw error\n },\n getOrElse: (defaultValue: T) => defaultValue,\n orElse: (alternative: Try<T>) => alternative,\n orThrow: (error: Error) => {\n throw error\n },\n toEither: () => Left<Error, T>(error),\n map: <U>(_f: (value: T) => U) => Failure<U>(error),\n flatMap: <U>(_f: (value: T) => Try<U>) => Failure<U>(error),\n toString: () => `Failure(${stringify(error)}))`,\n toValue: () => ({ _tag: \"Failure\", value: error }),\n})\n\nexport const Try = <T>(f: () => T): Try<T> => {\n try {\n return Success(f())\n } catch (error) {\n return Failure(error instanceof Error ? error : new Error(String(error)))\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "functype",
3
- "version": "0.8.47",
3
+ "version": "0.8.49",
4
+ "type": "module",
4
5
  "description": "A smallish functional library for TypeScript",
5
6
  "author": "jordan.burke@gmail.com",
6
7
  "license": "MIT",
@@ -14,10 +15,11 @@
14
15
  "@eslint/compat": "^1.2.4",
15
16
  "@eslint/eslintrc": "^3.2.0",
16
17
  "@eslint/js": "^9.17.0",
17
- "@types/jest": "29.5.14",
18
18
  "@types/node": "^22.10.2",
19
19
  "@typescript-eslint/eslint-plugin": "^8.18.1",
20
20
  "@typescript-eslint/parser": "^8.18.1",
21
+ "@vitest/coverage-v8": "^2.1.8",
22
+ "@vitest/ui": "^2.1.8",
21
23
  "cross-env": "^7.0.3",
22
24
  "eslint": "^9.17.0",
23
25
  "eslint-config-prettier": "^9.1.0",
@@ -25,26 +27,24 @@
25
27
  "eslint-plugin-prettier": "^5.2.1",
26
28
  "eslint-plugin-simple-import-sort": "^12.1.1",
27
29
  "globals": "^15.14.0",
28
- "jest": "^29.7.0",
29
30
  "prettier": "^3.4.2",
30
31
  "rimraf": "^6.0.1",
31
- "ts-jest": "^29.2.5",
32
32
  "ts-node": "^10.9.2",
33
33
  "tsup": "^8.3.5",
34
- "typescript": "5.7.2"
34
+ "typescript": "5.7.2",
35
+ "vitest": "^2.1.8"
35
36
  },
36
- "main": "./dist/index.js",
37
- "module": "./dist/index.mjs",
38
37
  "types": "./dist/index.d.ts",
38
+ "module": "./dist/index.mjs",
39
39
  "exports": {
40
40
  ".": {
41
- "require": "./dist/index.js",
42
- "import": "./dist/index.mjs",
43
- "types": "./dist/index.d.ts"
41
+ "import": {
42
+ "types": "./dist/index.d.ts",
43
+ "default": "./dist/index.mjs"
44
+ }
44
45
  }
45
46
  },
46
47
  "files": [
47
- "lib",
48
48
  "dist"
49
49
  ],
50
50
  "dependencies": {
@@ -52,15 +52,16 @@
52
52
  },
53
53
  "scripts": {
54
54
  "compile": "tsc --noEmit",
55
- "build:dev": "rimraf lib && tsup --watch",
56
- "build:prod": "tsc --noEmit && rimraf dist && cross-env NODE_ENV=production tsup",
55
+ "build:dev": "tsup --watch",
56
+ "build:prod": "cross-env NODE_ENV=production tsup",
57
57
  "build:watch": "tsup --watch",
58
58
  "build:publish": "pnpm build:prod && pnpm publish --access public",
59
59
  "lint:fix": "eslint ./src --quiet --fix",
60
60
  "lint:format": "prettier --loglevel warn --write \"./**/*.{ts,tsx,css,md,json}\" ",
61
61
  "lint": "pnpm lint:format && pnpm lint:fix ",
62
- "test": "tsc --noEmit && jest",
63
- "test:watch": "tsc --noEmit && jest --watch",
64
- "test:cov": "tsc --noEmit && jest --coverage"
62
+ "test": "vitest run",
63
+ "test:watch": "vitest",
64
+ "test:coverage": "vitest run --coverage",
65
+ "test:ui": "vitest --ui"
65
66
  }
66
67
  }
@@ -1 +0,0 @@
1
- var n=r=>({map:e=>{let t=e(r);return n(t)},flatMap:e=>e(r),get:e=>r[e],toArray:()=>r,[Symbol.iterator](){let e=0;return{next:()=>e<r.length?{value:r[e++],done:!1}:{value:void 0,done:!0}}}});export{n as a};
File without changes
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var o="Throwable",r= exports.a =(e,a)=>{let t=e instanceof Error?e.message:typeof e=="string"?e:"An unknown error occurred",s=e instanceof Error?e.stack:void 0,n=new Error(t);return n.name=o,{_tag:o,name:n.name,message:n.message,stack:_nullishCoalesce(s, () => (n.stack)),data:a}};r.NAME=o;exports.a = r;
@@ -1 +0,0 @@
1
- var p=Map;export{p as a};
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var t=Set;exports.a = t;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkAKJ5AKY4js = require('./chunk-AKJ5AKY4.js');function o(r,n){return{..._chunkAKJ5AKY4js.a.call(void 0, r,n),toString(){return`${r}()`}}}exports.a = o;
File without changes
@@ -1 +0,0 @@
1
- function n(e,t){return{...t,_tag:e}}function T(e,t){return!e||typeof e!="object"||!("_tag"in e)?!1:t?e._tag===t:!0}export{n as a,T as b};
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var p=Map;exports.a = p;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});function n(e,t){return{...t,_tag:e}}function T(e,t){return!e||typeof e!="object"||!("_tag"in e)?!1:t?e._tag===t:!0}exports.a = n; exports.b = T;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var o=e=>{let r=new Error(e);return r.name="ParseError",r};exports.a = o;
@@ -1 +0,0 @@
1
- var t=Set;export{t as a};
@@ -1 +0,0 @@
1
- var o="Throwable",r=(e,a)=>{let t=e instanceof Error?e.message:typeof e=="string"?e:"An unknown error occurred",s=e instanceof Error?e.stack:void 0,n=new Error(t);return n.name=o,{_tag:o,name:n.name,message:n.message,stack:s??n.stack,data:a}};r.NAME=o;export{r as a};
@@ -1 +0,0 @@
1
- "use strict";
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var n=r=>({map:e=>{let t=e(r);return n(t)},flatMap:e=>e(r),get:e=>r[e],toArray:()=>r,[Symbol.iterator](){let e=0;return{next:()=>e<r.length?{value:r[e++],done:!1}:{value:void 0,done:!0}}}});exports.a = n;