lite-fp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +178 -0
- package/dist/index.d.mts +177 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.global.js +236 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +287 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +248 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(() => {
|
|
3
|
+
// src/Result.ts
|
|
4
|
+
var Result = {
|
|
5
|
+
// Constructors
|
|
6
|
+
done: (value) => ({ $: "Done", value }),
|
|
7
|
+
fail: (error) => ({ $: "Fail", error }),
|
|
8
|
+
new: (value, error) => value === void 0 || value === null ? { $: "Fail", error } : { $: "Done", value },
|
|
9
|
+
// Guards
|
|
10
|
+
isDone: (result) => result.$ === "Done",
|
|
11
|
+
isFail: (result) => result.$ === "Fail",
|
|
12
|
+
// Conversions
|
|
13
|
+
fromNullable: (value, error) => value == null ? Result.fail(error) : Result.done(value),
|
|
14
|
+
fromThrowable: (fn, onError) => {
|
|
15
|
+
try {
|
|
16
|
+
return Result.done(fn());
|
|
17
|
+
} catch (e) {
|
|
18
|
+
return Result.fail(onError(e));
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
fromPromise: async (promise, onError) => {
|
|
22
|
+
try {
|
|
23
|
+
const value = await promise;
|
|
24
|
+
return Result.done(value);
|
|
25
|
+
} catch (e) {
|
|
26
|
+
return Result.fail(onError(e));
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
// Ops
|
|
30
|
+
map: (result, fn) => result.$ === "Done" ? Result.done(fn(result.value)) : result,
|
|
31
|
+
mapError: (result, fn) => result.$ === "Fail" ? Result.fail(fn(result.error)) : result,
|
|
32
|
+
flatMap: (result, fn) => result.$ === "Done" ? fn(result.value) : result,
|
|
33
|
+
match: (result, matcher) => result.$ === "Done" ? matcher.done(result.value) : matcher.fail(result.error),
|
|
34
|
+
recover: (result, fn) => result.$ === "Fail" ? Result.done(fn(result.error)) : result,
|
|
35
|
+
// Extract
|
|
36
|
+
getOrElse: (result, defaultValue) => result.$ === "Done" ? result.value : defaultValue,
|
|
37
|
+
getOrThrow: (result, onError) => result.$ === "Done" ? result.value : onError(result.error),
|
|
38
|
+
// Combine
|
|
39
|
+
zip: (a, b) => {
|
|
40
|
+
if (a.$ === "Fail") return a;
|
|
41
|
+
if (b.$ === "Fail") return b;
|
|
42
|
+
return Result.done([a.value, b.value]);
|
|
43
|
+
},
|
|
44
|
+
apply: (fn, arg) => {
|
|
45
|
+
if (fn.$ === "Fail") return fn;
|
|
46
|
+
if (arg.$ === "Fail") return arg;
|
|
47
|
+
return Result.done(fn.value(arg.value));
|
|
48
|
+
},
|
|
49
|
+
// Convert
|
|
50
|
+
toOption: (result) => result.$ === "Done" ? some(result.value) : none()
|
|
51
|
+
};
|
|
52
|
+
var done = Result.done;
|
|
53
|
+
var fail = Result.fail;
|
|
54
|
+
Promise.prototype.toResult = function(onError) {
|
|
55
|
+
const mapErr = (e) => onError ? onError(e) : e;
|
|
56
|
+
return Result.fromPromise(this, mapErr);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// src/Option.ts
|
|
60
|
+
var Option = {
|
|
61
|
+
// Constructors
|
|
62
|
+
none: () => ({ $: "None" }),
|
|
63
|
+
some: (value) => ({ $: "Some", value }),
|
|
64
|
+
new: (value) => value === void 0 || value === null ? { $: "None" } : { $: "Some", value },
|
|
65
|
+
// Guards
|
|
66
|
+
isSome: (option) => option.$ === "Some",
|
|
67
|
+
isNone: (option) => option.$ === "None",
|
|
68
|
+
// Conversions
|
|
69
|
+
fromNullable: (value) => value == null ? Option.none() : Option.some(value),
|
|
70
|
+
fromPredicate: (value, predicate) => predicate(value) ? Option.some(value) : Option.none(),
|
|
71
|
+
fromThrowable: (fn) => {
|
|
72
|
+
try {
|
|
73
|
+
return Option.some(fn());
|
|
74
|
+
} catch {
|
|
75
|
+
return Option.none();
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
fromPromise: async (promise) => {
|
|
79
|
+
try {
|
|
80
|
+
const value = await promise;
|
|
81
|
+
return Option.some(value);
|
|
82
|
+
} catch {
|
|
83
|
+
return Option.none();
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
// Ops
|
|
87
|
+
map: (option, fn) => option.$ === "Some" ? Option.some(fn(option.value)) : Option.none(),
|
|
88
|
+
flatMap: (option, fn) => option.$ === "Some" ? fn(option.value) : Option.none(),
|
|
89
|
+
filter: (option, predicate) => option.$ === "Some" && predicate(option.value) ? option : Option.none(),
|
|
90
|
+
match: (option, matcher) => option.$ === "Some" ? matcher.some(option.value) : matcher.none(),
|
|
91
|
+
// Extract
|
|
92
|
+
getOrElse: (option, defaultValue) => option.$ === "Some" ? option.value : defaultValue,
|
|
93
|
+
getOrUndefined: (option) => option.$ === "Some" ? option.value : void 0,
|
|
94
|
+
getOrThrow: (option, error) => {
|
|
95
|
+
if (option.$ === "Some") return option.value;
|
|
96
|
+
throw error;
|
|
97
|
+
},
|
|
98
|
+
// Combine
|
|
99
|
+
zip: (a, b) => a.$ === "Some" && b.$ === "Some" ? Option.some([a.value, b.value]) : Option.none(),
|
|
100
|
+
apply: (fn, opt) => fn.$ === "Some" && opt.$ === "Some" ? Option.some(fn.value(opt.value)) : Option.none(),
|
|
101
|
+
orElse: (opt, other) => opt.$ === "Some" ? opt : other,
|
|
102
|
+
// Convert
|
|
103
|
+
toResult: (option, error) => option.$ === "Some" ? done(option.value) : fail(error)
|
|
104
|
+
};
|
|
105
|
+
var none = Option.none;
|
|
106
|
+
var some = Option.some;
|
|
107
|
+
Array.prototype.firstOption = function() {
|
|
108
|
+
return this[0] ? some(this[0]) : none();
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/Pair.ts
|
|
112
|
+
var Pair = {
|
|
113
|
+
fst: (p) => p[0],
|
|
114
|
+
snd: (p) => p[1],
|
|
115
|
+
new: (fst, snd) => [fst, snd],
|
|
116
|
+
fromArray: ([fst, snd]) => [fst, snd],
|
|
117
|
+
fromObject: (obj) => [obj.fst, obj.snd],
|
|
118
|
+
curry: (fst) => (snd) => [fst, snd],
|
|
119
|
+
mapFirst: (p, fn) => pair(fn(p[0]), p[1]),
|
|
120
|
+
mapSecond: (p, fn) => pair(p[0], fn(p[1])),
|
|
121
|
+
map: (p, fnA, fnB) => pair(fnA(p[0]), fnB(p[1])),
|
|
122
|
+
swap: (p) => pair(p[1], p[0]),
|
|
123
|
+
apply: (p, value) => pair(p[0](value), p[1]),
|
|
124
|
+
apply2: (fnPair, vPair) => pair(vPair[0], fnPair[1](vPair[1])),
|
|
125
|
+
reduce: (p, fn) => fn(p[0], p[1]),
|
|
126
|
+
toArray: (p) => [p[0], p[1]],
|
|
127
|
+
toObject: (p) => ({
|
|
128
|
+
fst: p[0],
|
|
129
|
+
snd: p[1]
|
|
130
|
+
}),
|
|
131
|
+
eq: (p1, p2) => p1[0] === p2[0] && p1[1] === p2[1],
|
|
132
|
+
equals: (p1, p2, eqA, eqB) => eqA(p1[0], p2[0]) && eqB(p1[1], p2[1]),
|
|
133
|
+
traverseOption: (p, fn) => p[1].$ === "Some" ? some(Pair.new(p[0], fn(p[0], p[1].value))) : none(),
|
|
134
|
+
traverseResult: (p, fn) => p[1].$ === "Done" ? done(Pair.new(p[0], fn(p[0], p[1].value))) : fail(p[1].error),
|
|
135
|
+
zip: (p1, p2) => pair({ ...p1[0], ...p2[0] }, pair(p1[1], p2[1]))
|
|
136
|
+
};
|
|
137
|
+
var pair = Pair.new;
|
|
138
|
+
|
|
139
|
+
// src/Either.ts
|
|
140
|
+
var Either = {
|
|
141
|
+
// Constructors
|
|
142
|
+
left: (value) => ({ $: "Left", value }),
|
|
143
|
+
right: (value) => ({ $: "Right", value }),
|
|
144
|
+
new: (rgt, lft) => rgt === void 0 || rgt === null ? Either.left(lft) : Either.right(rgt),
|
|
145
|
+
// Guards
|
|
146
|
+
isLeft: (e) => e.$ === "Left",
|
|
147
|
+
isRight: (e) => e.$ === "Right",
|
|
148
|
+
// Conversions
|
|
149
|
+
fromNullable: (value, error) => value == null ? Either.left(error) : Either.right(value),
|
|
150
|
+
fromThrowable: (fn, onError) => {
|
|
151
|
+
try {
|
|
152
|
+
return Either.right(fn());
|
|
153
|
+
} catch (e) {
|
|
154
|
+
return Either.left(onError(e));
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
fromPromise: async (promise, onError) => {
|
|
158
|
+
try {
|
|
159
|
+
const value = await promise;
|
|
160
|
+
return Either.right(value);
|
|
161
|
+
} catch (e) {
|
|
162
|
+
return Either.left(onError(e));
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
// Ops
|
|
166
|
+
map: (e, fn) => e.$ === "Right" ? Either.right(fn(e.value)) : e,
|
|
167
|
+
mapLeft: (e, fn) => e.$ === "Left" ? Either.left(fn(e.value)) : e,
|
|
168
|
+
bimap: (e, fl, fr) => e.$ === "Left" ? Either.left(fl(e.value)) : Either.right(fr(e.value)),
|
|
169
|
+
flatMap: (e, fn) => e.$ === "Right" ? fn(e.value) : e,
|
|
170
|
+
chain: (e, fn) => e.$ === "Right" ? fn(e.value) : e,
|
|
171
|
+
fold: (e, onLeft, onRight) => e.$ === "Left" ? onLeft(e.value) : onRight(e.value),
|
|
172
|
+
match: (e, matcher) => e.$ === "Right" ? matcher.right(e.value) : matcher.left(e.value),
|
|
173
|
+
swap: (e) => e.$ === "Right" ? Either.left(e.value) : Either.right(e.value),
|
|
174
|
+
// Extract
|
|
175
|
+
getOrElse: (e, defaultValue) => e.$ === "Right" ? e.value : defaultValue,
|
|
176
|
+
// Combine
|
|
177
|
+
zip: (a, b) => {
|
|
178
|
+
if (a.$ === "Left") return a;
|
|
179
|
+
if (b.$ === "Left") return b;
|
|
180
|
+
return Either.right(pair(a.value, b.value));
|
|
181
|
+
},
|
|
182
|
+
apply: (fn, arg) => {
|
|
183
|
+
if (fn.$ === "Left") return fn;
|
|
184
|
+
if (arg.$ === "Left") return arg;
|
|
185
|
+
return Either.right(fn.value(arg.value));
|
|
186
|
+
},
|
|
187
|
+
tap: (e, f) => {
|
|
188
|
+
if (e.$ === "Right") f(e.value);
|
|
189
|
+
return e;
|
|
190
|
+
},
|
|
191
|
+
tapLeft: (e, f) => {
|
|
192
|
+
if (e.$ === "Left") f(e.value);
|
|
193
|
+
return e;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
Promise.prototype.toEither = async function(onError) {
|
|
197
|
+
try {
|
|
198
|
+
const v = await this;
|
|
199
|
+
return right(v);
|
|
200
|
+
} catch (e_1) {
|
|
201
|
+
return left(onError(e_1));
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
var left = Either.left;
|
|
205
|
+
var right = Either.right;
|
|
206
|
+
|
|
207
|
+
// src/Triple.ts
|
|
208
|
+
var Triple = {
|
|
209
|
+
fst: (t) => t[0],
|
|
210
|
+
snd: (t) => t[1],
|
|
211
|
+
thd: (t) => t[2],
|
|
212
|
+
new: (fst, snd, thd) => [fst, snd, thd],
|
|
213
|
+
fromArray: ([fst, snd, thd]) => [
|
|
214
|
+
fst,
|
|
215
|
+
snd,
|
|
216
|
+
thd
|
|
217
|
+
],
|
|
218
|
+
toArray: (t) => [t[0], t[1], t[2]],
|
|
219
|
+
fromObject: (obj) => [
|
|
220
|
+
obj.fst,
|
|
221
|
+
obj.snd,
|
|
222
|
+
obj.thd
|
|
223
|
+
],
|
|
224
|
+
curry: (fst) => (snd) => (thd) => [fst, snd, thd],
|
|
225
|
+
equals: (t1, t2, eqA, eqB, eqC) => eqA(t1[0], t2[0]) && eqB(t1[1], t2[1]) && eqC(t1[2], t2[2]),
|
|
226
|
+
map: (t, fnA, fnB, fnC) => triple(fnA(t[0]), fnB(t[1]), fnC(t[2])),
|
|
227
|
+
zip: (t1, t2) => triple(
|
|
228
|
+
{ ...t1[0], ...t2[0] },
|
|
229
|
+
{ ...t1[1], ...t2[1] },
|
|
230
|
+
{ ...t1[2], ...t2[2] }
|
|
231
|
+
),
|
|
232
|
+
apply: (t, value) => triple(t[0](value), t[1](t[0](value)), t[2](t[1](t[0](value))))
|
|
233
|
+
};
|
|
234
|
+
var triple = Triple.new;
|
|
235
|
+
})();
|
|
236
|
+
//# sourceMappingURL=index.global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Result.ts","../src/Option.ts","../src/Pair.ts","../src/Either.ts","../src/Triple.ts"],"sourcesContent":["import { none, some, type Option } from \"./Option\";\nimport { Pair } from \"./Pair\";\n\nexport type Done<T> = { readonly $: \"Done\"; readonly value: T };\nexport type Fail<E> = { readonly $: \"Fail\"; readonly error: E };\nexport type Result<T, E> = Done<T> | Fail<E>;\n\nexport const Result = {\n // Constructors\n done: <T>(value: T): Done<T> => ({ $: \"Done\", value }),\n fail: <E>(error: E): Fail<E> => ({ $: \"Fail\", error }),\n new: <T, E = unknown>(value: T, error: E): Result<T, E> =>\n value === undefined || value === null\n ? { $: \"Fail\", error }\n : { $: \"Done\", value },\n\n // Guards\n isDone: <T, E>(result: Result<T, E>): result is Done<T> =>\n result.$ === \"Done\",\n isFail: <T, E>(result: Result<T, E>): result is Fail<E> =>\n result.$ === \"Fail\",\n\n // Conversions\n fromNullable: <T, E = unknown>(\n value: T | null | undefined,\n error: E,\n ): Result<T, E> => (value == null ? Result.fail(error) : Result.done(value)),\n fromThrowable: <T, E = unknown>(\n fn: () => T,\n onError: (e: unknown) => E,\n ): Result<T, E> => {\n try {\n return Result.done(fn());\n } catch (e) {\n return Result.fail(onError(e));\n }\n },\n fromPromise: async <T, E = unknown>(\n promise: Promise<T>,\n onError: (e: unknown) => E,\n ): Promise<Result<T, E>> => {\n try {\n const value = await promise;\n return Result.done(value);\n } catch (e) {\n return Result.fail(onError(e));\n }\n },\n\n // Ops\n map: <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> =>\n result.$ === \"Done\" ? Result.done(fn(result.value)) : result,\n mapError: <T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n ): Result<T, F> =>\n result.$ === \"Fail\" ? Result.fail(fn(result.error)) : result,\n flatMap: <T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>,\n ): Result<U, E> => (result.$ === \"Done\" ? fn(result.value) : result),\n match: <T, E, U>(\n result: Result<T, E>,\n matcher: { done: (value: T) => U; fail: (error: E) => U },\n ): U =>\n result.$ === \"Done\"\n ? matcher.done(result.value)\n : matcher.fail(result.error),\n recover: <T, E>(\n result: Result<T, E>,\n fn: (error: E) => T,\n ): Result<T, never> =>\n result.$ === \"Fail\" ? Result.done(fn(result.error)) : result,\n\n // Extract\n getOrElse: <T, E>(result: Result<T, E>, defaultValue: T): T =>\n result.$ === \"Done\" ? result.value : defaultValue,\n getOrThrow: <T, E>(result: Result<T, E>, onError: (error: E) => never): T =>\n result.$ === \"Done\" ? result.value : onError(result.error),\n\n // Combine\n zip: <A, B, E>(a: Result<A, E>, b: Result<B, E>): Result<Pair<A, B>, E> => {\n if (a.$ === \"Fail\") return a;\n if (b.$ === \"Fail\") return b;\n return Result.done([a.value, b.value]);\n },\n apply: <T, U, E>(\n fn: Result<(value: T) => U, E>,\n arg: Result<T, E>,\n ): Result<U, E> => {\n if (fn.$ === \"Fail\") return fn;\n if (arg.$ === \"Fail\") return arg;\n return Result.done(fn.value(arg.value));\n },\n\n // Convert\n toOption: <T, E>(result: Result<T, E>): Option<T> =>\n result.$ === \"Done\" ? some(result.value) : none(),\n};\n\nexport const done = Result.done;\nexport const fail = Result.fail;\n\ndeclare global {\n interface Promise<T> {\n toResult<E = unknown>(onError?: (e: unknown) => E): Promise<Result<T, E>>;\n }\n}\n\nPromise.prototype.toResult = function <T, E = unknown>(\n this: Promise<T>,\n onError?: (e: unknown) => E,\n): Promise<Result<T, E>> {\n const mapErr = (e: unknown) => (onError ? onError(e) : (e as E));\n return Result.fromPromise(this, mapErr);\n};\n","import { done, fail, type Result } from \"./Result\";\n\nexport type None = { readonly $: \"None\" };\nexport type Some<T> = { readonly $: \"Some\"; readonly value: T };\nexport type Option<T> = None | Some<T>;\n\nexport const Option = {\n // Constructors\n none: <T>(): Option<T> => ({ $: \"None\" }),\n some: <T>(value: T): Option<T> => ({ $: \"Some\", value }),\n new: <T>(value: T): Option<T> =>\n value === undefined || value === null\n ? ({ $: \"None\" } as None)\n : ({ $: \"Some\", value } as Some<T>),\n\n // Guards\n isSome: <T>(option: Option<T>): option is Some<T> => option.$ === \"Some\",\n isNone: <T>(option: Option<T>): option is None => option.$ === \"None\",\n\n // Conversions\n fromNullable: <T>(value: T | null | undefined): Option<T> =>\n value == null ? Option.none() : Option.some(value),\n fromPredicate: <T>(value: T, predicate: (value: T) => boolean): Option<T> =>\n predicate(value) ? Option.some(value) : Option.none(),\n fromThrowable: <T>(fn: () => T): Option<T> => {\n try {\n return Option.some(fn());\n } catch {\n return Option.none();\n }\n },\n fromPromise: async <T>(promise: Promise<T>): Promise<Option<T>> => {\n try {\n const value = await promise;\n return Option.some(value);\n } catch {\n return Option.none();\n }\n },\n\n // Ops\n map: <T, U>(option: Option<T>, fn: (value: T) => U): Option<U> =>\n option.$ === \"Some\" ? Option.some(fn(option.value)) : Option.none(),\n flatMap: <T, U>(option: Option<T>, fn: (value: T) => Option<U>): Option<U> =>\n option.$ === \"Some\" ? fn(option.value) : Option.none(),\n filter: <T>(\n option: Option<T>,\n predicate: (value: T) => boolean,\n ): Option<T> =>\n option.$ === \"Some\" && predicate(option.value) ? option : Option.none(),\n match: <T, U>(\n option: Option<T>,\n matcher: { some: (value: T) => U; none: () => U },\n ): U => (option.$ === \"Some\" ? matcher.some(option.value) : matcher.none()),\n\n // Extract\n getOrElse: <T>(option: Option<T>, defaultValue: T): T =>\n option.$ === \"Some\" ? option.value : defaultValue,\n getOrUndefined: <T>(option: Option<T>): T | undefined =>\n option.$ === \"Some\" ? option.value : undefined,\n getOrThrow: <T>(option: Option<T>, error: Error): T => {\n if (option.$ === \"Some\") return option.value;\n throw error;\n },\n\n // Combine\n zip: <T, U>(a: Option<T>, b: Option<U>): Option<[T, U]> =>\n a.$ === \"Some\" && b.$ === \"Some\"\n ? Option.some([a.value, b.value])\n : Option.none(),\n apply: <T, U>(fn: Option<(value: T) => U>, opt: Option<T>): Option<U> =>\n fn.$ === \"Some\" && opt.$ === \"Some\"\n ? Option.some(fn.value(opt.value))\n : Option.none(),\n orElse: <T>(opt: Option<T>, other: Option<T>): Option<T> =>\n opt.$ === \"Some\" ? opt : other,\n\n // Convert\n toResult: <T, E>(option: Option<T>, error: E): Result<T, E> =>\n option.$ === \"Some\" ? done(option.value) : fail(error),\n};\n\nexport const none = Option.none;\nexport const some = Option.some;\n\ndeclare global {\n interface Array<T> {\n firstOption(): Option<T>;\n }\n}\n\nArray.prototype.firstOption = function <T>(this: T[]): Option<T> {\n return this[0] ? some(this[0]) : none();\n};\n","import { none, some, type Option } from \"./Option\";\nimport { done, fail, type Result } from \"./Result\";\n\nexport type Pair<A, B> = readonly [A, B];\n\nexport const Pair = {\n fst: <A, B>(p: Pair<A, B>): A => p[0],\n snd: <A, B>(p: Pair<A, B>): B => p[1],\n new: <A, B>(fst: A, snd: B): Pair<A, B> => [fst, snd],\n\n fromArray: <A, B>([fst, snd]: [A, B]): Pair<A, B> => [fst, snd],\n fromObject: <A, B>(obj: { fst: A; snd: B }): Pair<A, B> => [obj.fst, obj.snd],\n curry:\n <A>(fst: A) =>\n <B>(snd: B): Pair<A, B> => [fst, snd],\n\n mapFirst: <A, B, C>(p: Pair<A, B>, fn: (a: A) => C): Pair<C, B> =>\n pair(fn(p[0]), p[1]),\n mapSecond: <A, B, C>(p: Pair<A, B>, fn: (b: B) => C): Pair<A, C> =>\n pair(p[0], fn(p[1])),\n map: <A, B, C, D>(\n p: Pair<A, B>,\n fnA: (a: A) => C,\n fnB: (b: B) => D,\n ): Pair<C, D> => pair(fnA(p[0]), fnB(p[1])),\n\n swap: <A, B>(p: Pair<A, B>): Pair<B, A> => pair(p[1], p[0]),\n\n apply: <A, B, C>(p: Pair<(a: A) => B, C>, value: A): Pair<B, C> =>\n pair(p[0](value), p[1]),\n apply2: <A, B, C>(\n fnPair: Pair<(a: A) => B, (b: B) => C>,\n vPair: Pair<A, B>,\n ): Pair<A, C> => pair(vPair[0], fnPair[1](vPair[1])),\n\n reduce: <A, B, C>(p: Pair<A, B>, fn: (a: A, b: B) => C): C => fn(p[0], p[1]),\n toArray: <A, B>(p: Pair<A, B>): [A, B] => [p[0], p[1]],\n toObject: <A, B>(p: Pair<A, B>): { fst: A; snd: B } => ({\n fst: p[0],\n snd: p[1],\n }),\n\n eq: <A, B>(p1: Pair<A, B>, p2: Pair<A, B>): boolean =>\n p1[0] === p2[0] && p1[1] === p2[1],\n equals: <A, B>(\n p1: Pair<A, B>,\n p2: Pair<A, B>,\n eqA: (a1: A, a2: A) => boolean,\n eqB: (b1: B, b2: B) => boolean,\n ): boolean => eqA(p1[0], p2[0]) && eqB(p1[1], p2[1]),\n\n traverseOption: <A, B, C>(\n p: Pair<A, Option<B>>,\n fn: (a: A, b: B) => C,\n ): Option<Pair<A, C>> =>\n p[1].$ === \"Some\" ? some(Pair.new(p[0], fn(p[0], p[1].value))) : none(),\n traverseResult: <A, B, C, E>(\n p: Pair<A, Result<B, E>>,\n fn: (a: A, b: B) => C,\n ): Result<Pair<A, C>, E> =>\n p[1].$ === \"Done\"\n ? done(Pair.new(p[0], fn(p[0], p[1].value)))\n : fail(p[1].error),\n\n zip: <A, B, C, D>(p1: Pair<A, B>, p2: Pair<C, D>): Pair<A & C, Pair<B, D>> =>\n pair({ ...(p1[0] as any), ...(p2[0] as any) }, pair(p1[1], p2[1])),\n};\n\nexport const pair = Pair.new;\n","import { pair, Pair } from \"./Pair\";\n\nexport type Left<A> = { readonly $: \"Left\"; readonly value: A };\nexport type Right<B> = { readonly $: \"Right\"; readonly value: B };\nexport type Either<A, B> = Left<A> | Right<B>;\n\nexport const Either = {\n // Constructors\n left: <A>(value: A): Left<A> => ({ $: \"Left\", value }),\n right: <B>(value: B): Right<B> => ({ $: \"Right\", value }),\n new: <A, B>(rgt: B, lft: A): Either<A, B> =>\n rgt === undefined || rgt === null ? Either.left(lft) : Either.right(rgt),\n\n // Guards\n isLeft: <A, B>(e: Either<A, B>): e is Left<A> => e.$ === \"Left\",\n isRight: <A, B>(e: Either<A, B>): e is Right<B> => e.$ === \"Right\",\n\n // Conversions\n fromNullable: <A, B>(value: B | null | undefined, error: A): Either<A, B> =>\n value == null ? Either.left(error) : Either.right(value),\n fromThrowable: <A, B>(\n fn: () => B,\n onError: (e: unknown) => A,\n ): Either<A, B> => {\n try {\n return Either.right(fn());\n } catch (e) {\n return Either.left(onError(e));\n }\n },\n fromPromise: async <A, B>(\n promise: Promise<B>,\n onError: (e: unknown) => A,\n ): Promise<Either<A, B>> => {\n try {\n const value = await promise;\n return Either.right(value);\n } catch (e) {\n return Either.left(onError(e));\n }\n },\n\n // Ops\n map: <A, B, C>(e: Either<A, B>, fn: (r: B) => C): Either<A, C> =>\n e.$ === \"Right\" ? Either.right(fn(e.value)) : e,\n mapLeft: <A, B, C>(e: Either<A, B>, fn: (l: A) => C): Either<C, B> =>\n e.$ === \"Left\" ? Either.left(fn(e.value)) : e,\n bimap: <A, B, C, D>(\n e: Either<A, B>,\n fl: (l: A) => C,\n fr: (r: B) => D,\n ): Either<C, D> =>\n e.$ === \"Left\" ? Either.left(fl(e.value)) : Either.right(fr(e.value)),\n flatMap: <A, B, C>(\n e: Either<A, B>,\n fn: (value: B) => Either<A, C>,\n ): Either<A, C> => (e.$ === \"Right\" ? fn(e.value) : e),\n chain: <A, B, C>(\n e: Either<A, B>,\n fn: (r: B) => Either<A, C>,\n ): Either<A, C> => (e.$ === \"Right\" ? fn(e.value) : e),\n fold: <A, B, C>(\n e: Either<A, B>,\n onLeft: (l: A) => C,\n onRight: (r: B) => C,\n ): C => (e.$ === \"Left\" ? onLeft(e.value) : onRight(e.value)),\n match: <A, B, C>(\n e: Either<A, B>,\n matcher: { right: (value: B) => C; left: (value: A) => C },\n ): C => (e.$ === \"Right\" ? matcher.right(e.value) : matcher.left(e.value)),\n swap: <A, B>(e: Either<A, B>): Either<B, A> =>\n e.$ === \"Right\" ? Either.left(e.value) : Either.right(e.value),\n\n // Extract\n getOrElse: <A, B>(e: Either<A, B>, defaultValue: B): B =>\n e.$ === \"Right\" ? e.value : defaultValue,\n\n // Combine\n zip: <E, A, B>(a: Either<E, A>, b: Either<E, B>): Either<E, Pair<A, B>> => {\n if (a.$ === \"Left\") return a;\n if (b.$ === \"Left\") return b;\n return Either.right(pair(a.value, b.value));\n },\n apply: <E, A, B>(\n fn: Either<E, (value: A) => B>,\n arg: Either<E, A>,\n ): Either<E, B> => {\n if (fn.$ === \"Left\") return fn;\n if (arg.$ === \"Left\") return arg;\n return Either.right(fn.value(arg.value));\n },\n tap: <A, B>(e: Either<A, B>, f: (r: B) => void): Either<A, B> => {\n if (e.$ === \"Right\") f(e.value);\n return e;\n },\n tapLeft: <A, B>(e: Either<A, B>, f: (l: A) => void): Either<A, B> => {\n if (e.$ === \"Left\") f(e.value);\n return e;\n },\n};\n\ndeclare global {\n interface Promise<T> {\n toEither<A>(onError: (e: unknown) => A): Promise<Either<A, T>>;\n }\n}\n\nPromise.prototype.toEither = async function <T, L = unknown>(\n this: Promise<T>,\n onError: (e: unknown) => L,\n): Promise<Either<L, T>> {\n try {\n const v = await this;\n return right<T>(v);\n } catch (e_1) {\n return left<L>(onError(e_1));\n }\n};\n\nexport const left = Either.left;\nexport const right = Either.right;\n","export type Triple<A, B, C> = readonly [A, B, C];\n\nexport const Triple = {\n fst: <A, B, C>(t: Triple<A, B, C>): A => t[0],\n snd: <A, B, C>(t: Triple<A, B, C>): B => t[1],\n thd: <A, B, C>(t: Triple<A, B, C>): C => t[2],\n new: <A, B, C>(fst: A, snd: B, thd: C): Triple<A, B, C> => [fst, snd, thd],\n\n fromArray: <A, B, C>([fst, snd, thd]: [A, B, C]): Triple<A, B, C> => [\n fst,\n snd,\n thd,\n ],\n toArray: <A, B, C>(t: Triple<A, B, C>): [A, B, C] => [t[0], t[1], t[2]],\n\n fromObject: <A, B, C>(obj: { fst: A; snd: B; thd: C }): Triple<A, B, C> => [\n obj.fst,\n obj.snd,\n obj.thd,\n ],\n curry:\n <A>(fst: A) =>\n <B>(snd: B) =>\n <C>(thd: C): Triple<A, B, C> => [fst, snd, thd],\n\n equals: <A, B, C>(\n t1: Triple<A, B, C>,\n t2: Triple<A, B, C>,\n eqA: (a1: A, a2: A) => boolean,\n eqB: (b1: B, b2: B) => boolean,\n eqC: (c1: C, c2: C) => boolean,\n ): boolean => eqA(t1[0], t2[0]) && eqB(t1[1], t2[1]) && eqC(t1[2], t2[2]),\n\n map: <A, B, C, D, E, F>(\n t: Triple<A, B, C>,\n fnA: (a: A) => D,\n fnB: (b: B) => E,\n fnC: (c: C) => F,\n ): Triple<D, E, F> => triple(fnA(t[0]), fnB(t[1]), fnC(t[2])),\n zip: <A, B, C, D, E, F>(\n t1: Triple<A, B, C>,\n t2: Triple<D, E, F>,\n ): Triple<A & D, B & E, C & F> =>\n triple(\n { ...(t1[0] as any), ...(t2[0] as any) },\n { ...(t1[1] as any), ...(t2[1] as any) },\n { ...(t1[2] as any), ...(t2[2] as any) },\n ),\n apply: <A, B, C, D>(\n t: Triple<(a: A) => B, (b: B) => C, (c: C) => D>,\n value: A,\n ): Triple<B, C, D> =>\n triple(t[0](value), t[1](t[0](value)), t[2](t[1](t[0](value)))),\n};\n\nexport const triple = Triple.new;\n"],"mappings":"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","names":[]}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
Either: () => Either,
|
|
24
|
+
Option: () => Option,
|
|
25
|
+
Pair: () => Pair,
|
|
26
|
+
Result: () => Result,
|
|
27
|
+
Triple: () => Triple,
|
|
28
|
+
done: () => done,
|
|
29
|
+
fail: () => fail,
|
|
30
|
+
left: () => left,
|
|
31
|
+
none: () => none,
|
|
32
|
+
pair: () => pair,
|
|
33
|
+
right: () => right,
|
|
34
|
+
some: () => some,
|
|
35
|
+
triple: () => triple
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
|
+
|
|
39
|
+
// src/Result.ts
|
|
40
|
+
var Result = {
|
|
41
|
+
// Constructors
|
|
42
|
+
done: (value) => ({ $: "Done", value }),
|
|
43
|
+
fail: (error) => ({ $: "Fail", error }),
|
|
44
|
+
new: (value, error) => value === void 0 || value === null ? { $: "Fail", error } : { $: "Done", value },
|
|
45
|
+
// Guards
|
|
46
|
+
isDone: (result) => result.$ === "Done",
|
|
47
|
+
isFail: (result) => result.$ === "Fail",
|
|
48
|
+
// Conversions
|
|
49
|
+
fromNullable: (value, error) => value == null ? Result.fail(error) : Result.done(value),
|
|
50
|
+
fromThrowable: (fn, onError) => {
|
|
51
|
+
try {
|
|
52
|
+
return Result.done(fn());
|
|
53
|
+
} catch (e) {
|
|
54
|
+
return Result.fail(onError(e));
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
fromPromise: async (promise, onError) => {
|
|
58
|
+
try {
|
|
59
|
+
const value = await promise;
|
|
60
|
+
return Result.done(value);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
return Result.fail(onError(e));
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
// Ops
|
|
66
|
+
map: (result, fn) => result.$ === "Done" ? Result.done(fn(result.value)) : result,
|
|
67
|
+
mapError: (result, fn) => result.$ === "Fail" ? Result.fail(fn(result.error)) : result,
|
|
68
|
+
flatMap: (result, fn) => result.$ === "Done" ? fn(result.value) : result,
|
|
69
|
+
match: (result, matcher) => result.$ === "Done" ? matcher.done(result.value) : matcher.fail(result.error),
|
|
70
|
+
recover: (result, fn) => result.$ === "Fail" ? Result.done(fn(result.error)) : result,
|
|
71
|
+
// Extract
|
|
72
|
+
getOrElse: (result, defaultValue) => result.$ === "Done" ? result.value : defaultValue,
|
|
73
|
+
getOrThrow: (result, onError) => result.$ === "Done" ? result.value : onError(result.error),
|
|
74
|
+
// Combine
|
|
75
|
+
zip: (a, b) => {
|
|
76
|
+
if (a.$ === "Fail") return a;
|
|
77
|
+
if (b.$ === "Fail") return b;
|
|
78
|
+
return Result.done([a.value, b.value]);
|
|
79
|
+
},
|
|
80
|
+
apply: (fn, arg) => {
|
|
81
|
+
if (fn.$ === "Fail") return fn;
|
|
82
|
+
if (arg.$ === "Fail") return arg;
|
|
83
|
+
return Result.done(fn.value(arg.value));
|
|
84
|
+
},
|
|
85
|
+
// Convert
|
|
86
|
+
toOption: (result) => result.$ === "Done" ? some(result.value) : none()
|
|
87
|
+
};
|
|
88
|
+
var done = Result.done;
|
|
89
|
+
var fail = Result.fail;
|
|
90
|
+
Promise.prototype.toResult = function(onError) {
|
|
91
|
+
const mapErr = (e) => onError ? onError(e) : e;
|
|
92
|
+
return Result.fromPromise(this, mapErr);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// src/Option.ts
|
|
96
|
+
var Option = {
|
|
97
|
+
// Constructors
|
|
98
|
+
none: () => ({ $: "None" }),
|
|
99
|
+
some: (value) => ({ $: "Some", value }),
|
|
100
|
+
new: (value) => value === void 0 || value === null ? { $: "None" } : { $: "Some", value },
|
|
101
|
+
// Guards
|
|
102
|
+
isSome: (option) => option.$ === "Some",
|
|
103
|
+
isNone: (option) => option.$ === "None",
|
|
104
|
+
// Conversions
|
|
105
|
+
fromNullable: (value) => value == null ? Option.none() : Option.some(value),
|
|
106
|
+
fromPredicate: (value, predicate) => predicate(value) ? Option.some(value) : Option.none(),
|
|
107
|
+
fromThrowable: (fn) => {
|
|
108
|
+
try {
|
|
109
|
+
return Option.some(fn());
|
|
110
|
+
} catch {
|
|
111
|
+
return Option.none();
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
fromPromise: async (promise) => {
|
|
115
|
+
try {
|
|
116
|
+
const value = await promise;
|
|
117
|
+
return Option.some(value);
|
|
118
|
+
} catch {
|
|
119
|
+
return Option.none();
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
// Ops
|
|
123
|
+
map: (option, fn) => option.$ === "Some" ? Option.some(fn(option.value)) : Option.none(),
|
|
124
|
+
flatMap: (option, fn) => option.$ === "Some" ? fn(option.value) : Option.none(),
|
|
125
|
+
filter: (option, predicate) => option.$ === "Some" && predicate(option.value) ? option : Option.none(),
|
|
126
|
+
match: (option, matcher) => option.$ === "Some" ? matcher.some(option.value) : matcher.none(),
|
|
127
|
+
// Extract
|
|
128
|
+
getOrElse: (option, defaultValue) => option.$ === "Some" ? option.value : defaultValue,
|
|
129
|
+
getOrUndefined: (option) => option.$ === "Some" ? option.value : void 0,
|
|
130
|
+
getOrThrow: (option, error) => {
|
|
131
|
+
if (option.$ === "Some") return option.value;
|
|
132
|
+
throw error;
|
|
133
|
+
},
|
|
134
|
+
// Combine
|
|
135
|
+
zip: (a, b) => a.$ === "Some" && b.$ === "Some" ? Option.some([a.value, b.value]) : Option.none(),
|
|
136
|
+
apply: (fn, opt) => fn.$ === "Some" && opt.$ === "Some" ? Option.some(fn.value(opt.value)) : Option.none(),
|
|
137
|
+
orElse: (opt, other) => opt.$ === "Some" ? opt : other,
|
|
138
|
+
// Convert
|
|
139
|
+
toResult: (option, error) => option.$ === "Some" ? done(option.value) : fail(error)
|
|
140
|
+
};
|
|
141
|
+
var none = Option.none;
|
|
142
|
+
var some = Option.some;
|
|
143
|
+
Array.prototype.firstOption = function() {
|
|
144
|
+
return this[0] ? some(this[0]) : none();
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// src/Pair.ts
|
|
148
|
+
var Pair = {
|
|
149
|
+
fst: (p) => p[0],
|
|
150
|
+
snd: (p) => p[1],
|
|
151
|
+
new: (fst, snd) => [fst, snd],
|
|
152
|
+
fromArray: ([fst, snd]) => [fst, snd],
|
|
153
|
+
fromObject: (obj) => [obj.fst, obj.snd],
|
|
154
|
+
curry: (fst) => (snd) => [fst, snd],
|
|
155
|
+
mapFirst: (p, fn) => pair(fn(p[0]), p[1]),
|
|
156
|
+
mapSecond: (p, fn) => pair(p[0], fn(p[1])),
|
|
157
|
+
map: (p, fnA, fnB) => pair(fnA(p[0]), fnB(p[1])),
|
|
158
|
+
swap: (p) => pair(p[1], p[0]),
|
|
159
|
+
apply: (p, value) => pair(p[0](value), p[1]),
|
|
160
|
+
apply2: (fnPair, vPair) => pair(vPair[0], fnPair[1](vPair[1])),
|
|
161
|
+
reduce: (p, fn) => fn(p[0], p[1]),
|
|
162
|
+
toArray: (p) => [p[0], p[1]],
|
|
163
|
+
toObject: (p) => ({
|
|
164
|
+
fst: p[0],
|
|
165
|
+
snd: p[1]
|
|
166
|
+
}),
|
|
167
|
+
eq: (p1, p2) => p1[0] === p2[0] && p1[1] === p2[1],
|
|
168
|
+
equals: (p1, p2, eqA, eqB) => eqA(p1[0], p2[0]) && eqB(p1[1], p2[1]),
|
|
169
|
+
traverseOption: (p, fn) => p[1].$ === "Some" ? some(Pair.new(p[0], fn(p[0], p[1].value))) : none(),
|
|
170
|
+
traverseResult: (p, fn) => p[1].$ === "Done" ? done(Pair.new(p[0], fn(p[0], p[1].value))) : fail(p[1].error),
|
|
171
|
+
zip: (p1, p2) => pair({ ...p1[0], ...p2[0] }, pair(p1[1], p2[1]))
|
|
172
|
+
};
|
|
173
|
+
var pair = Pair.new;
|
|
174
|
+
|
|
175
|
+
// src/Either.ts
|
|
176
|
+
var Either = {
|
|
177
|
+
// Constructors
|
|
178
|
+
left: (value) => ({ $: "Left", value }),
|
|
179
|
+
right: (value) => ({ $: "Right", value }),
|
|
180
|
+
new: (rgt, lft) => rgt === void 0 || rgt === null ? Either.left(lft) : Either.right(rgt),
|
|
181
|
+
// Guards
|
|
182
|
+
isLeft: (e) => e.$ === "Left",
|
|
183
|
+
isRight: (e) => e.$ === "Right",
|
|
184
|
+
// Conversions
|
|
185
|
+
fromNullable: (value, error) => value == null ? Either.left(error) : Either.right(value),
|
|
186
|
+
fromThrowable: (fn, onError) => {
|
|
187
|
+
try {
|
|
188
|
+
return Either.right(fn());
|
|
189
|
+
} catch (e) {
|
|
190
|
+
return Either.left(onError(e));
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
fromPromise: async (promise, onError) => {
|
|
194
|
+
try {
|
|
195
|
+
const value = await promise;
|
|
196
|
+
return Either.right(value);
|
|
197
|
+
} catch (e) {
|
|
198
|
+
return Either.left(onError(e));
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
// Ops
|
|
202
|
+
map: (e, fn) => e.$ === "Right" ? Either.right(fn(e.value)) : e,
|
|
203
|
+
mapLeft: (e, fn) => e.$ === "Left" ? Either.left(fn(e.value)) : e,
|
|
204
|
+
bimap: (e, fl, fr) => e.$ === "Left" ? Either.left(fl(e.value)) : Either.right(fr(e.value)),
|
|
205
|
+
flatMap: (e, fn) => e.$ === "Right" ? fn(e.value) : e,
|
|
206
|
+
chain: (e, fn) => e.$ === "Right" ? fn(e.value) : e,
|
|
207
|
+
fold: (e, onLeft, onRight) => e.$ === "Left" ? onLeft(e.value) : onRight(e.value),
|
|
208
|
+
match: (e, matcher) => e.$ === "Right" ? matcher.right(e.value) : matcher.left(e.value),
|
|
209
|
+
swap: (e) => e.$ === "Right" ? Either.left(e.value) : Either.right(e.value),
|
|
210
|
+
// Extract
|
|
211
|
+
getOrElse: (e, defaultValue) => e.$ === "Right" ? e.value : defaultValue,
|
|
212
|
+
// Combine
|
|
213
|
+
zip: (a, b) => {
|
|
214
|
+
if (a.$ === "Left") return a;
|
|
215
|
+
if (b.$ === "Left") return b;
|
|
216
|
+
return Either.right(pair(a.value, b.value));
|
|
217
|
+
},
|
|
218
|
+
apply: (fn, arg) => {
|
|
219
|
+
if (fn.$ === "Left") return fn;
|
|
220
|
+
if (arg.$ === "Left") return arg;
|
|
221
|
+
return Either.right(fn.value(arg.value));
|
|
222
|
+
},
|
|
223
|
+
tap: (e, f) => {
|
|
224
|
+
if (e.$ === "Right") f(e.value);
|
|
225
|
+
return e;
|
|
226
|
+
},
|
|
227
|
+
tapLeft: (e, f) => {
|
|
228
|
+
if (e.$ === "Left") f(e.value);
|
|
229
|
+
return e;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
Promise.prototype.toEither = async function(onError) {
|
|
233
|
+
try {
|
|
234
|
+
const v = await this;
|
|
235
|
+
return right(v);
|
|
236
|
+
} catch (e_1) {
|
|
237
|
+
return left(onError(e_1));
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
var left = Either.left;
|
|
241
|
+
var right = Either.right;
|
|
242
|
+
|
|
243
|
+
// src/Triple.ts
|
|
244
|
+
var Triple = {
|
|
245
|
+
fst: (t) => t[0],
|
|
246
|
+
snd: (t) => t[1],
|
|
247
|
+
thd: (t) => t[2],
|
|
248
|
+
new: (fst, snd, thd) => [fst, snd, thd],
|
|
249
|
+
fromArray: ([fst, snd, thd]) => [
|
|
250
|
+
fst,
|
|
251
|
+
snd,
|
|
252
|
+
thd
|
|
253
|
+
],
|
|
254
|
+
toArray: (t) => [t[0], t[1], t[2]],
|
|
255
|
+
fromObject: (obj) => [
|
|
256
|
+
obj.fst,
|
|
257
|
+
obj.snd,
|
|
258
|
+
obj.thd
|
|
259
|
+
],
|
|
260
|
+
curry: (fst) => (snd) => (thd) => [fst, snd, thd],
|
|
261
|
+
equals: (t1, t2, eqA, eqB, eqC) => eqA(t1[0], t2[0]) && eqB(t1[1], t2[1]) && eqC(t1[2], t2[2]),
|
|
262
|
+
map: (t, fnA, fnB, fnC) => triple(fnA(t[0]), fnB(t[1]), fnC(t[2])),
|
|
263
|
+
zip: (t1, t2) => triple(
|
|
264
|
+
{ ...t1[0], ...t2[0] },
|
|
265
|
+
{ ...t1[1], ...t2[1] },
|
|
266
|
+
{ ...t1[2], ...t2[2] }
|
|
267
|
+
),
|
|
268
|
+
apply: (t, value) => triple(t[0](value), t[1](t[0](value)), t[2](t[1](t[0](value))))
|
|
269
|
+
};
|
|
270
|
+
var triple = Triple.new;
|
|
271
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
272
|
+
0 && (module.exports = {
|
|
273
|
+
Either,
|
|
274
|
+
Option,
|
|
275
|
+
Pair,
|
|
276
|
+
Result,
|
|
277
|
+
Triple,
|
|
278
|
+
done,
|
|
279
|
+
fail,
|
|
280
|
+
left,
|
|
281
|
+
none,
|
|
282
|
+
pair,
|
|
283
|
+
right,
|
|
284
|
+
some,
|
|
285
|
+
triple
|
|
286
|
+
});
|
|
287
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Result.ts","../src/Option.ts","../src/Pair.ts","../src/Either.ts","../src/Triple.ts"],"sourcesContent":["export * from \"./Option\";\nexport * from \"./Either\";\nexport * from \"./Result\";\nexport * from \"./Pair\";\nexport * from \"./Triple\";\n","import { none, some, type Option } from \"./Option\";\nimport { Pair } from \"./Pair\";\n\nexport type Done<T> = { readonly $: \"Done\"; readonly value: T };\nexport type Fail<E> = { readonly $: \"Fail\"; readonly error: E };\nexport type Result<T, E> = Done<T> | Fail<E>;\n\nexport const Result = {\n // Constructors\n done: <T>(value: T): Done<T> => ({ $: \"Done\", value }),\n fail: <E>(error: E): Fail<E> => ({ $: \"Fail\", error }),\n new: <T, E = unknown>(value: T, error: E): Result<T, E> =>\n value === undefined || value === null\n ? { $: \"Fail\", error }\n : { $: \"Done\", value },\n\n // Guards\n isDone: <T, E>(result: Result<T, E>): result is Done<T> =>\n result.$ === \"Done\",\n isFail: <T, E>(result: Result<T, E>): result is Fail<E> =>\n result.$ === \"Fail\",\n\n // Conversions\n fromNullable: <T, E = unknown>(\n value: T | null | undefined,\n error: E,\n ): Result<T, E> => (value == null ? Result.fail(error) : Result.done(value)),\n fromThrowable: <T, E = unknown>(\n fn: () => T,\n onError: (e: unknown) => E,\n ): Result<T, E> => {\n try {\n return Result.done(fn());\n } catch (e) {\n return Result.fail(onError(e));\n }\n },\n fromPromise: async <T, E = unknown>(\n promise: Promise<T>,\n onError: (e: unknown) => E,\n ): Promise<Result<T, E>> => {\n try {\n const value = await promise;\n return Result.done(value);\n } catch (e) {\n return Result.fail(onError(e));\n }\n },\n\n // Ops\n map: <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> =>\n result.$ === \"Done\" ? Result.done(fn(result.value)) : result,\n mapError: <T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n ): Result<T, F> =>\n result.$ === \"Fail\" ? Result.fail(fn(result.error)) : result,\n flatMap: <T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>,\n ): Result<U, E> => (result.$ === \"Done\" ? fn(result.value) : result),\n match: <T, E, U>(\n result: Result<T, E>,\n matcher: { done: (value: T) => U; fail: (error: E) => U },\n ): U =>\n result.$ === \"Done\"\n ? matcher.done(result.value)\n : matcher.fail(result.error),\n recover: <T, E>(\n result: Result<T, E>,\n fn: (error: E) => T,\n ): Result<T, never> =>\n result.$ === \"Fail\" ? Result.done(fn(result.error)) : result,\n\n // Extract\n getOrElse: <T, E>(result: Result<T, E>, defaultValue: T): T =>\n result.$ === \"Done\" ? result.value : defaultValue,\n getOrThrow: <T, E>(result: Result<T, E>, onError: (error: E) => never): T =>\n result.$ === \"Done\" ? result.value : onError(result.error),\n\n // Combine\n zip: <A, B, E>(a: Result<A, E>, b: Result<B, E>): Result<Pair<A, B>, E> => {\n if (a.$ === \"Fail\") return a;\n if (b.$ === \"Fail\") return b;\n return Result.done([a.value, b.value]);\n },\n apply: <T, U, E>(\n fn: Result<(value: T) => U, E>,\n arg: Result<T, E>,\n ): Result<U, E> => {\n if (fn.$ === \"Fail\") return fn;\n if (arg.$ === \"Fail\") return arg;\n return Result.done(fn.value(arg.value));\n },\n\n // Convert\n toOption: <T, E>(result: Result<T, E>): Option<T> =>\n result.$ === \"Done\" ? some(result.value) : none(),\n};\n\nexport const done = Result.done;\nexport const fail = Result.fail;\n\ndeclare global {\n interface Promise<T> {\n toResult<E = unknown>(onError?: (e: unknown) => E): Promise<Result<T, E>>;\n }\n}\n\nPromise.prototype.toResult = function <T, E = unknown>(\n this: Promise<T>,\n onError?: (e: unknown) => E,\n): Promise<Result<T, E>> {\n const mapErr = (e: unknown) => (onError ? onError(e) : (e as E));\n return Result.fromPromise(this, mapErr);\n};\n","import { done, fail, type Result } from \"./Result\";\n\nexport type None = { readonly $: \"None\" };\nexport type Some<T> = { readonly $: \"Some\"; readonly value: T };\nexport type Option<T> = None | Some<T>;\n\nexport const Option = {\n // Constructors\n none: <T>(): Option<T> => ({ $: \"None\" }),\n some: <T>(value: T): Option<T> => ({ $: \"Some\", value }),\n new: <T>(value: T): Option<T> =>\n value === undefined || value === null\n ? ({ $: \"None\" } as None)\n : ({ $: \"Some\", value } as Some<T>),\n\n // Guards\n isSome: <T>(option: Option<T>): option is Some<T> => option.$ === \"Some\",\n isNone: <T>(option: Option<T>): option is None => option.$ === \"None\",\n\n // Conversions\n fromNullable: <T>(value: T | null | undefined): Option<T> =>\n value == null ? Option.none() : Option.some(value),\n fromPredicate: <T>(value: T, predicate: (value: T) => boolean): Option<T> =>\n predicate(value) ? Option.some(value) : Option.none(),\n fromThrowable: <T>(fn: () => T): Option<T> => {\n try {\n return Option.some(fn());\n } catch {\n return Option.none();\n }\n },\n fromPromise: async <T>(promise: Promise<T>): Promise<Option<T>> => {\n try {\n const value = await promise;\n return Option.some(value);\n } catch {\n return Option.none();\n }\n },\n\n // Ops\n map: <T, U>(option: Option<T>, fn: (value: T) => U): Option<U> =>\n option.$ === \"Some\" ? Option.some(fn(option.value)) : Option.none(),\n flatMap: <T, U>(option: Option<T>, fn: (value: T) => Option<U>): Option<U> =>\n option.$ === \"Some\" ? fn(option.value) : Option.none(),\n filter: <T>(\n option: Option<T>,\n predicate: (value: T) => boolean,\n ): Option<T> =>\n option.$ === \"Some\" && predicate(option.value) ? option : Option.none(),\n match: <T, U>(\n option: Option<T>,\n matcher: { some: (value: T) => U; none: () => U },\n ): U => (option.$ === \"Some\" ? matcher.some(option.value) : matcher.none()),\n\n // Extract\n getOrElse: <T>(option: Option<T>, defaultValue: T): T =>\n option.$ === \"Some\" ? option.value : defaultValue,\n getOrUndefined: <T>(option: Option<T>): T | undefined =>\n option.$ === \"Some\" ? option.value : undefined,\n getOrThrow: <T>(option: Option<T>, error: Error): T => {\n if (option.$ === \"Some\") return option.value;\n throw error;\n },\n\n // Combine\n zip: <T, U>(a: Option<T>, b: Option<U>): Option<[T, U]> =>\n a.$ === \"Some\" && b.$ === \"Some\"\n ? Option.some([a.value, b.value])\n : Option.none(),\n apply: <T, U>(fn: Option<(value: T) => U>, opt: Option<T>): Option<U> =>\n fn.$ === \"Some\" && opt.$ === \"Some\"\n ? Option.some(fn.value(opt.value))\n : Option.none(),\n orElse: <T>(opt: Option<T>, other: Option<T>): Option<T> =>\n opt.$ === \"Some\" ? opt : other,\n\n // Convert\n toResult: <T, E>(option: Option<T>, error: E): Result<T, E> =>\n option.$ === \"Some\" ? done(option.value) : fail(error),\n};\n\nexport const none = Option.none;\nexport const some = Option.some;\n\ndeclare global {\n interface Array<T> {\n firstOption(): Option<T>;\n }\n}\n\nArray.prototype.firstOption = function <T>(this: T[]): Option<T> {\n return this[0] ? some(this[0]) : none();\n};\n","import { none, some, type Option } from \"./Option\";\nimport { done, fail, type Result } from \"./Result\";\n\nexport type Pair<A, B> = readonly [A, B];\n\nexport const Pair = {\n fst: <A, B>(p: Pair<A, B>): A => p[0],\n snd: <A, B>(p: Pair<A, B>): B => p[1],\n new: <A, B>(fst: A, snd: B): Pair<A, B> => [fst, snd],\n\n fromArray: <A, B>([fst, snd]: [A, B]): Pair<A, B> => [fst, snd],\n fromObject: <A, B>(obj: { fst: A; snd: B }): Pair<A, B> => [obj.fst, obj.snd],\n curry:\n <A>(fst: A) =>\n <B>(snd: B): Pair<A, B> => [fst, snd],\n\n mapFirst: <A, B, C>(p: Pair<A, B>, fn: (a: A) => C): Pair<C, B> =>\n pair(fn(p[0]), p[1]),\n mapSecond: <A, B, C>(p: Pair<A, B>, fn: (b: B) => C): Pair<A, C> =>\n pair(p[0], fn(p[1])),\n map: <A, B, C, D>(\n p: Pair<A, B>,\n fnA: (a: A) => C,\n fnB: (b: B) => D,\n ): Pair<C, D> => pair(fnA(p[0]), fnB(p[1])),\n\n swap: <A, B>(p: Pair<A, B>): Pair<B, A> => pair(p[1], p[0]),\n\n apply: <A, B, C>(p: Pair<(a: A) => B, C>, value: A): Pair<B, C> =>\n pair(p[0](value), p[1]),\n apply2: <A, B, C>(\n fnPair: Pair<(a: A) => B, (b: B) => C>,\n vPair: Pair<A, B>,\n ): Pair<A, C> => pair(vPair[0], fnPair[1](vPair[1])),\n\n reduce: <A, B, C>(p: Pair<A, B>, fn: (a: A, b: B) => C): C => fn(p[0], p[1]),\n toArray: <A, B>(p: Pair<A, B>): [A, B] => [p[0], p[1]],\n toObject: <A, B>(p: Pair<A, B>): { fst: A; snd: B } => ({\n fst: p[0],\n snd: p[1],\n }),\n\n eq: <A, B>(p1: Pair<A, B>, p2: Pair<A, B>): boolean =>\n p1[0] === p2[0] && p1[1] === p2[1],\n equals: <A, B>(\n p1: Pair<A, B>,\n p2: Pair<A, B>,\n eqA: (a1: A, a2: A) => boolean,\n eqB: (b1: B, b2: B) => boolean,\n ): boolean => eqA(p1[0], p2[0]) && eqB(p1[1], p2[1]),\n\n traverseOption: <A, B, C>(\n p: Pair<A, Option<B>>,\n fn: (a: A, b: B) => C,\n ): Option<Pair<A, C>> =>\n p[1].$ === \"Some\" ? some(Pair.new(p[0], fn(p[0], p[1].value))) : none(),\n traverseResult: <A, B, C, E>(\n p: Pair<A, Result<B, E>>,\n fn: (a: A, b: B) => C,\n ): Result<Pair<A, C>, E> =>\n p[1].$ === \"Done\"\n ? done(Pair.new(p[0], fn(p[0], p[1].value)))\n : fail(p[1].error),\n\n zip: <A, B, C, D>(p1: Pair<A, B>, p2: Pair<C, D>): Pair<A & C, Pair<B, D>> =>\n pair({ ...(p1[0] as any), ...(p2[0] as any) }, pair(p1[1], p2[1])),\n};\n\nexport const pair = Pair.new;\n","import { pair, Pair } from \"./Pair\";\n\nexport type Left<A> = { readonly $: \"Left\"; readonly value: A };\nexport type Right<B> = { readonly $: \"Right\"; readonly value: B };\nexport type Either<A, B> = Left<A> | Right<B>;\n\nexport const Either = {\n // Constructors\n left: <A>(value: A): Left<A> => ({ $: \"Left\", value }),\n right: <B>(value: B): Right<B> => ({ $: \"Right\", value }),\n new: <A, B>(rgt: B, lft: A): Either<A, B> =>\n rgt === undefined || rgt === null ? Either.left(lft) : Either.right(rgt),\n\n // Guards\n isLeft: <A, B>(e: Either<A, B>): e is Left<A> => e.$ === \"Left\",\n isRight: <A, B>(e: Either<A, B>): e is Right<B> => e.$ === \"Right\",\n\n // Conversions\n fromNullable: <A, B>(value: B | null | undefined, error: A): Either<A, B> =>\n value == null ? Either.left(error) : Either.right(value),\n fromThrowable: <A, B>(\n fn: () => B,\n onError: (e: unknown) => A,\n ): Either<A, B> => {\n try {\n return Either.right(fn());\n } catch (e) {\n return Either.left(onError(e));\n }\n },\n fromPromise: async <A, B>(\n promise: Promise<B>,\n onError: (e: unknown) => A,\n ): Promise<Either<A, B>> => {\n try {\n const value = await promise;\n return Either.right(value);\n } catch (e) {\n return Either.left(onError(e));\n }\n },\n\n // Ops\n map: <A, B, C>(e: Either<A, B>, fn: (r: B) => C): Either<A, C> =>\n e.$ === \"Right\" ? Either.right(fn(e.value)) : e,\n mapLeft: <A, B, C>(e: Either<A, B>, fn: (l: A) => C): Either<C, B> =>\n e.$ === \"Left\" ? Either.left(fn(e.value)) : e,\n bimap: <A, B, C, D>(\n e: Either<A, B>,\n fl: (l: A) => C,\n fr: (r: B) => D,\n ): Either<C, D> =>\n e.$ === \"Left\" ? Either.left(fl(e.value)) : Either.right(fr(e.value)),\n flatMap: <A, B, C>(\n e: Either<A, B>,\n fn: (value: B) => Either<A, C>,\n ): Either<A, C> => (e.$ === \"Right\" ? fn(e.value) : e),\n chain: <A, B, C>(\n e: Either<A, B>,\n fn: (r: B) => Either<A, C>,\n ): Either<A, C> => (e.$ === \"Right\" ? fn(e.value) : e),\n fold: <A, B, C>(\n e: Either<A, B>,\n onLeft: (l: A) => C,\n onRight: (r: B) => C,\n ): C => (e.$ === \"Left\" ? onLeft(e.value) : onRight(e.value)),\n match: <A, B, C>(\n e: Either<A, B>,\n matcher: { right: (value: B) => C; left: (value: A) => C },\n ): C => (e.$ === \"Right\" ? matcher.right(e.value) : matcher.left(e.value)),\n swap: <A, B>(e: Either<A, B>): Either<B, A> =>\n e.$ === \"Right\" ? Either.left(e.value) : Either.right(e.value),\n\n // Extract\n getOrElse: <A, B>(e: Either<A, B>, defaultValue: B): B =>\n e.$ === \"Right\" ? e.value : defaultValue,\n\n // Combine\n zip: <E, A, B>(a: Either<E, A>, b: Either<E, B>): Either<E, Pair<A, B>> => {\n if (a.$ === \"Left\") return a;\n if (b.$ === \"Left\") return b;\n return Either.right(pair(a.value, b.value));\n },\n apply: <E, A, B>(\n fn: Either<E, (value: A) => B>,\n arg: Either<E, A>,\n ): Either<E, B> => {\n if (fn.$ === \"Left\") return fn;\n if (arg.$ === \"Left\") return arg;\n return Either.right(fn.value(arg.value));\n },\n tap: <A, B>(e: Either<A, B>, f: (r: B) => void): Either<A, B> => {\n if (e.$ === \"Right\") f(e.value);\n return e;\n },\n tapLeft: <A, B>(e: Either<A, B>, f: (l: A) => void): Either<A, B> => {\n if (e.$ === \"Left\") f(e.value);\n return e;\n },\n};\n\ndeclare global {\n interface Promise<T> {\n toEither<A>(onError: (e: unknown) => A): Promise<Either<A, T>>;\n }\n}\n\nPromise.prototype.toEither = async function <T, L = unknown>(\n this: Promise<T>,\n onError: (e: unknown) => L,\n): Promise<Either<L, T>> {\n try {\n const v = await this;\n return right<T>(v);\n } catch (e_1) {\n return left<L>(onError(e_1));\n }\n};\n\nexport const left = Either.left;\nexport const right = Either.right;\n","export type Triple<A, B, C> = readonly [A, B, C];\n\nexport const Triple = {\n fst: <A, B, C>(t: Triple<A, B, C>): A => t[0],\n snd: <A, B, C>(t: Triple<A, B, C>): B => t[1],\n thd: <A, B, C>(t: Triple<A, B, C>): C => t[2],\n new: <A, B, C>(fst: A, snd: B, thd: C): Triple<A, B, C> => [fst, snd, thd],\n\n fromArray: <A, B, C>([fst, snd, thd]: [A, B, C]): Triple<A, B, C> => [\n fst,\n snd,\n thd,\n ],\n toArray: <A, B, C>(t: Triple<A, B, C>): [A, B, C] => [t[0], t[1], t[2]],\n\n fromObject: <A, B, C>(obj: { fst: A; snd: B; thd: C }): Triple<A, B, C> => [\n obj.fst,\n obj.snd,\n obj.thd,\n ],\n curry:\n <A>(fst: A) =>\n <B>(snd: B) =>\n <C>(thd: C): Triple<A, B, C> => [fst, snd, thd],\n\n equals: <A, B, C>(\n t1: Triple<A, B, C>,\n t2: Triple<A, B, C>,\n eqA: (a1: A, a2: A) => boolean,\n eqB: (b1: B, b2: B) => boolean,\n eqC: (c1: C, c2: C) => boolean,\n ): boolean => eqA(t1[0], t2[0]) && eqB(t1[1], t2[1]) && eqC(t1[2], t2[2]),\n\n map: <A, B, C, D, E, F>(\n t: Triple<A, B, C>,\n fnA: (a: A) => D,\n fnB: (b: B) => E,\n fnC: (c: C) => F,\n ): Triple<D, E, F> => triple(fnA(t[0]), fnB(t[1]), fnC(t[2])),\n zip: <A, B, C, D, E, F>(\n t1: Triple<A, B, C>,\n t2: Triple<D, E, F>,\n ): Triple<A & D, B & E, C & F> =>\n triple(\n { ...(t1[0] as any), ...(t2[0] as any) },\n { ...(t1[1] as any), ...(t2[1] as any) },\n { ...(t1[2] as any), ...(t2[2] as any) },\n ),\n apply: <A, B, C, D>(\n t: Triple<(a: A) => B, (b: B) => C, (c: C) => D>,\n value: A,\n ): Triple<B, C, D> =>\n triple(t[0](value), t[1](t[0](value)), t[2](t[1](t[0](value)))),\n};\n\nexport const triple = Triple.new;\n"],"mappings":"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","names":[]}
|