@nlozgachev/pipelined 0.44.0 → 0.45.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/README.md +7 -6
- package/dist/{InternalTypes-BL23H8Qr.d.mts → InternalTypes-CLE7qlOc.d.mts} +33 -28
- package/dist/{InternalTypes-7o9-yrHq.d.ts → InternalTypes-Mssktd7z.d.ts} +33 -28
- package/dist/{Validation-DM2eh6wj.d.ts → Validation-BMsvixWH.d.ts} +475 -443
- package/dist/{Validation-Dz70wtcG.d.mts → Validation-v38R0qH-.d.mts} +475 -443
- package/dist/{chunk-LKTOK5IT.mjs → chunk-2LKJF45J.mjs} +160 -68
- package/dist/{chunk-X6XQX3OZ.mjs → chunk-KOYYDQH4.mjs} +2 -2
- package/dist/{chunk-ND476266.mjs → chunk-VSU36S2K.mjs} +432 -309
- package/dist/{chunk-74JKKJ4R.mjs → chunk-XTVF5R6R.mjs} +8 -5
- package/dist/composition.d.mts +10 -10
- package/dist/composition.d.ts +10 -10
- package/dist/composition.js +9 -6
- package/dist/composition.mjs +2 -2
- package/dist/core.d.mts +453 -402
- package/dist/core.d.ts +453 -402
- package/dist/core.js +439 -313
- package/dist/core.mjs +2 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +599 -381
- package/dist/index.mjs +4 -4
- package/dist/types.d.mts +23 -21
- package/dist/types.d.ts +23 -21
- package/dist/types.js +8 -5
- package/dist/types.mjs +1 -1
- package/dist/utils.d.mts +466 -216
- package/dist/utils.d.ts +466 -216
- package/dist/utils.js +406 -238
- package/dist/utils.mjs +3 -3
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Duration
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XTVF5R6R.mjs";
|
|
4
4
|
|
|
5
5
|
// src/Core/Combinable.ts
|
|
6
6
|
var Combinable;
|
|
@@ -12,8 +12,8 @@ var Combinable;
|
|
|
12
12
|
Combinable2.any = { empty: false, combine: (b) => (a) => a || b };
|
|
13
13
|
Combinable2.array = () => ({ empty: [], combine: (b) => (a) => [...a, ...b] });
|
|
14
14
|
Combinable2.maybe = (inner) => ({
|
|
15
|
-
empty: Maybe.none(),
|
|
16
|
-
combine: (b) => (a) => Maybe.
|
|
15
|
+
empty: Maybe.make.none(),
|
|
16
|
+
combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
|
|
17
17
|
});
|
|
18
18
|
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
19
19
|
})(Combinable || (Combinable = {}));
|
|
@@ -21,11 +21,17 @@ var Combinable;
|
|
|
21
21
|
// src/Core/Deferred.ts
|
|
22
22
|
var Deferred;
|
|
23
23
|
((Deferred2) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
let from;
|
|
25
|
+
((from2) => {
|
|
26
|
+
from2.Promise = (p) => (
|
|
27
|
+
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
28
|
+
{ then: ((f) => p.then(f)) }
|
|
29
|
+
);
|
|
30
|
+
})(from = Deferred2.from || (Deferred2.from = {}));
|
|
31
|
+
let to;
|
|
32
|
+
((to2) => {
|
|
33
|
+
to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
|
|
34
|
+
})(to = Deferred2.to || (Deferred2.to = {}));
|
|
29
35
|
})(Deferred || (Deferred = {}));
|
|
30
36
|
|
|
31
37
|
// src/Core/Equality.ts
|
|
@@ -69,12 +75,15 @@ var Lazy;
|
|
|
69
75
|
// src/Core/Lens.ts
|
|
70
76
|
var Lens;
|
|
71
77
|
((Lens3) => {
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
let from;
|
|
79
|
+
((from2) => {
|
|
80
|
+
from2.accessors = (get2, set2) => ({ get: get2, set: set2 });
|
|
81
|
+
from2.property = () => (key) => (0, from2.accessors)((s) => s[key], (a) => (s) => ({ ...s, [key]: a }));
|
|
82
|
+
})(from = Lens3.from || (Lens3.from = {}));
|
|
74
83
|
Lens3.get = (lens) => (s) => lens.get(s);
|
|
75
84
|
Lens3.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
76
85
|
Lens3.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
77
|
-
Lens3.andThen = (inner) => (outer) =>
|
|
86
|
+
Lens3.andThen = (inner) => (outer) => from.accessors((s) => inner.get(outer.get(s)), (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s));
|
|
78
87
|
Lens3.andThenOptional = (inner) => (outer) => ({
|
|
79
88
|
get: (s) => inner.get(outer.get(s)),
|
|
80
89
|
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
@@ -88,8 +97,11 @@ var Lens;
|
|
|
88
97
|
// src/Core/Logged.ts
|
|
89
98
|
var Logged;
|
|
90
99
|
((Logged2) => {
|
|
91
|
-
|
|
92
|
-
|
|
100
|
+
let from;
|
|
101
|
+
((from2) => {
|
|
102
|
+
from2.value = (val) => ({ value: val, log: [] });
|
|
103
|
+
from2.entry = (logEntry) => ({ value: void 0, log: [logEntry] });
|
|
104
|
+
})(from = Logged2.from || (Logged2.from = {}));
|
|
93
105
|
Logged2.map = (f) => (data) => ({
|
|
94
106
|
value: f(data.value),
|
|
95
107
|
log: data.log
|
|
@@ -116,47 +128,59 @@ var Logged;
|
|
|
116
128
|
// src/Core/Maybe.ts
|
|
117
129
|
var _none = { kind: "None" };
|
|
118
130
|
var Maybe;
|
|
119
|
-
((
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
131
|
+
((Maybe3) => {
|
|
132
|
+
let make;
|
|
133
|
+
((make2) => {
|
|
134
|
+
make2.some = (value) => ({ kind: "Some", value });
|
|
135
|
+
make2.none = () => _none;
|
|
136
|
+
})(make = Maybe3.make || (Maybe3.make = {}));
|
|
137
|
+
let is;
|
|
138
|
+
((is2) => {
|
|
139
|
+
is2.some = (data) => data.kind === "Some";
|
|
140
|
+
is2.none = (data) => data.kind === "None";
|
|
141
|
+
})(is = Maybe3.is || (Maybe3.is = {}));
|
|
142
|
+
let to;
|
|
143
|
+
((to2) => {
|
|
144
|
+
to2.nullable = (data) => is.some(data) ? data.value : null;
|
|
145
|
+
to2.undefined = (data) => is.some(data) ? data.value : globalThis.undefined;
|
|
146
|
+
to2.Result = (onNone) => (data) => is.some(data) ? Result.make.ok(data.value) : Result.make.err(onNone());
|
|
147
|
+
})(to = Maybe3.to || (Maybe3.to = {}));
|
|
148
|
+
let from;
|
|
149
|
+
((from2) => {
|
|
150
|
+
from2.nullable = (value) => value === null || value === void 0 ? make.none() : make.some(value);
|
|
151
|
+
from2.Predicate = (pred) => (a) => pred(a) ? make.some(a) : make.none();
|
|
152
|
+
from2.Result = (data) => Result.is.ok(data) ? make.some(data.value) : make.none();
|
|
153
|
+
})(from = Maybe3.from || (Maybe3.from = {}));
|
|
154
|
+
Maybe3.map = (f) => (data) => is.some(data) ? make.some(f(data.value)) : data;
|
|
155
|
+
Maybe3.chain = (f) => (data) => is.some(data) ? f(data.value) : data;
|
|
156
|
+
Maybe3.fold = (onNone, onSome) => (data) => is.some(data) ? onSome(data.value) : onNone();
|
|
157
|
+
Maybe3.match = (cases) => (data) => is.some(data) ? cases.some(data.value) : cases.none();
|
|
158
|
+
Maybe3.getOrElse = (defaultValue) => (data) => is.some(data) ? data.value : defaultValue();
|
|
159
|
+
Maybe3.tap = (f) => (data) => {
|
|
160
|
+
if (is.some(data)) {
|
|
137
161
|
f(data.value);
|
|
138
162
|
}
|
|
139
163
|
return data;
|
|
140
164
|
};
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
(a) => (0,
|
|
165
|
+
Maybe3.filter = (predicate) => (data) => is.some(data) ? predicate(data.value) ? data : make.none() : data;
|
|
166
|
+
Maybe3.recover = (fallback) => (data) => is.some(data) ? data : fallback();
|
|
167
|
+
Maybe3.ap = (arg) => (data) => is.some(data) && is.some(arg) ? make.some(data.value(arg.value)) : make.none();
|
|
168
|
+
Maybe3.bindTo = (key) => (data) => (0, Maybe3.map)((a) => ({ [key]: a }))(data);
|
|
169
|
+
Maybe3.bind = (key, f) => (data) => (0, Maybe3.chain)(
|
|
170
|
+
(a) => (0, Maybe3.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
147
171
|
)(data);
|
|
148
|
-
|
|
172
|
+
Maybe3.struct = (fields) => {
|
|
149
173
|
const result = {};
|
|
150
174
|
for (const key in fields) {
|
|
151
175
|
if (Object.hasOwn(fields, key)) {
|
|
152
176
|
const res = fields[key];
|
|
153
|
-
if (
|
|
177
|
+
if (is.none(res)) {
|
|
154
178
|
return res;
|
|
155
179
|
}
|
|
156
180
|
result[key] = res.value;
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
|
-
return
|
|
183
|
+
return make.some(result);
|
|
160
184
|
};
|
|
161
185
|
})(Maybe || (Maybe = {}));
|
|
162
186
|
|
|
@@ -169,7 +193,7 @@ var _idle = { kind: "Idle" };
|
|
|
169
193
|
var _pending = { kind: "Pending" };
|
|
170
194
|
var ok = (value) => ({ kind: "OpOk", value });
|
|
171
195
|
var err = (error) => ({ kind: "OpErr", error });
|
|
172
|
-
var getMs = (duration) => Duration.
|
|
196
|
+
var getMs = (duration) => Duration.to.milliseconds(duration);
|
|
173
197
|
var cancellableWait = (duration, signal) => {
|
|
174
198
|
const rawMs = getMs(duration);
|
|
175
199
|
if (rawMs <= 0) {
|
|
@@ -192,7 +216,7 @@ var runWithRetry = (op, input, signal, options, onRetrying) => {
|
|
|
192
216
|
return typeof backoff === "function" ? backoff(n) : backoff;
|
|
193
217
|
};
|
|
194
218
|
const attempt = async (left) => {
|
|
195
|
-
const result = await Deferred.
|
|
219
|
+
const result = await Deferred.to.Promise(op._factory(input, signal));
|
|
196
220
|
if (result === null || signal.aborted) {
|
|
197
221
|
return null;
|
|
198
222
|
}
|
|
@@ -227,12 +251,12 @@ var runWithRetry = (op, input, signal, options, onRetrying) => {
|
|
|
227
251
|
var execute = (op, input, controller, retryOptions, timeoutOptions, onRetrying) => {
|
|
228
252
|
const { signal } = controller;
|
|
229
253
|
const toOutcome = (r) => r === null ? _abortedNil : r.kind === "Ok" ? ok(r.value) : err(r.error);
|
|
230
|
-
const runPromise = retryOptions !== void 0 && onRetrying !== void 0 ? runWithRetry(op, input, signal, retryOptions, onRetrying).then(toOutcome) : Deferred.
|
|
254
|
+
const runPromise = retryOptions !== void 0 && onRetrying !== void 0 ? runWithRetry(op, input, signal, retryOptions, onRetrying).then(toOutcome) : Deferred.to.Promise(op._factory(input, signal)).then(toOutcome);
|
|
231
255
|
if (timeoutOptions === void 0) {
|
|
232
|
-
return Deferred.
|
|
256
|
+
return Deferred.from.Promise(runPromise);
|
|
233
257
|
}
|
|
234
258
|
let timerId;
|
|
235
|
-
return Deferred.
|
|
259
|
+
return Deferred.from.Promise(Promise.race([
|
|
236
260
|
runPromise.then((outcome) => {
|
|
237
261
|
clearTimeout(timerId);
|
|
238
262
|
return outcome;
|
|
@@ -256,7 +280,7 @@ var makeRestartable = (op, minInterval, retryOptions, timeoutOptions) => {
|
|
|
256
280
|
currentState = state;
|
|
257
281
|
subscribers.forEach((cb) => cb(state));
|
|
258
282
|
};
|
|
259
|
-
const run = (input) => Deferred.
|
|
283
|
+
const run = (input) => Deferred.from.Promise(
|
|
260
284
|
new Promise((resolve) => {
|
|
261
285
|
waitController?.abort();
|
|
262
286
|
waitController = void 0;
|
|
@@ -348,9 +372,9 @@ var makeExclusive = (op, cooldown, retryOptions, timeoutOptions) => {
|
|
|
348
372
|
};
|
|
349
373
|
const run = (input) => {
|
|
350
374
|
if (currentController !== void 0 || cooldownTimer !== void 0) {
|
|
351
|
-
return Deferred.
|
|
375
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
352
376
|
}
|
|
353
|
-
return Deferred.
|
|
377
|
+
return Deferred.from.Promise(
|
|
354
378
|
new Promise((resolve) => {
|
|
355
379
|
currentResolve = resolve;
|
|
356
380
|
currentController = new AbortController();
|
|
@@ -470,14 +494,14 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
470
494
|
}
|
|
471
495
|
}
|
|
472
496
|
if (inFlight < maxConcurrency) {
|
|
473
|
-
return Deferred.
|
|
497
|
+
return Deferred.from.Promise(
|
|
474
498
|
new Promise((resolve) => {
|
|
475
499
|
startOne(input, resolve, myGeneration);
|
|
476
500
|
})
|
|
477
501
|
);
|
|
478
502
|
}
|
|
479
503
|
if (maxSize === void 0 || queue.length < maxSize) {
|
|
480
|
-
return Deferred.
|
|
504
|
+
return Deferred.from.Promise(
|
|
481
505
|
new Promise((resolve) => {
|
|
482
506
|
queue.push({ input, resolve });
|
|
483
507
|
emit({ kind: "Queued", position: queue.length - 1 });
|
|
@@ -485,7 +509,7 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
485
509
|
);
|
|
486
510
|
}
|
|
487
511
|
if (overflow === "replace-last") {
|
|
488
|
-
return Deferred.
|
|
512
|
+
return Deferred.from.Promise(
|
|
489
513
|
new Promise((resolve) => {
|
|
490
514
|
const tail = queue.pop();
|
|
491
515
|
tail.resolve(_evictedNil);
|
|
@@ -494,7 +518,7 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
494
518
|
})
|
|
495
519
|
);
|
|
496
520
|
}
|
|
497
|
-
return Deferred.
|
|
521
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
498
522
|
};
|
|
499
523
|
const abort = () => {
|
|
500
524
|
generation++;
|
|
@@ -566,7 +590,7 @@ var makeBuffered = (op, size, retryOptions, timeoutOptions) => {
|
|
|
566
590
|
}
|
|
567
591
|
});
|
|
568
592
|
};
|
|
569
|
-
const run = (input) => Deferred.
|
|
593
|
+
const run = (input) => Deferred.from.Promise(
|
|
570
594
|
new Promise((resolve) => {
|
|
571
595
|
if (currentController === void 0) {
|
|
572
596
|
startRun(input, resolve);
|
|
@@ -692,7 +716,7 @@ var makeDebounced = (op, duration, leading, maxWait, retryOptions, timeoutOption
|
|
|
692
716
|
timerId = setTimeout(fireTrailing, delay);
|
|
693
717
|
};
|
|
694
718
|
const inDebounceWindow = () => timerId !== void 0 || leadingController !== void 0 || currentController !== void 0;
|
|
695
|
-
const run = (input) => Deferred.
|
|
719
|
+
const run = (input) => Deferred.from.Promise(
|
|
696
720
|
new Promise((resolve) => {
|
|
697
721
|
if (!inDebounceWindow()) {
|
|
698
722
|
firstCallAt = Date.now();
|
|
@@ -807,9 +831,9 @@ var makeThrottled = (op, duration, trailing, retryOptions, timeoutOptions) => {
|
|
|
807
831
|
const run = (input) => {
|
|
808
832
|
if (cooldownTimer !== void 0) {
|
|
809
833
|
if (!trailing) {
|
|
810
|
-
return Deferred.
|
|
834
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
811
835
|
}
|
|
812
|
-
return Deferred.
|
|
836
|
+
return Deferred.from.Promise(
|
|
813
837
|
new Promise((resolve) => {
|
|
814
838
|
const prev = pendingResolve;
|
|
815
839
|
pendingInput = input;
|
|
@@ -818,7 +842,7 @@ var makeThrottled = (op, duration, trailing, retryOptions, timeoutOptions) => {
|
|
|
818
842
|
})
|
|
819
843
|
);
|
|
820
844
|
}
|
|
821
|
-
return Deferred.
|
|
845
|
+
return Deferred.from.Promise(
|
|
822
846
|
new Promise((resolve) => {
|
|
823
847
|
fireOp(input, resolve);
|
|
824
848
|
startCooldown();
|
|
@@ -909,16 +933,16 @@ var makeConcurrent = (op, n, overflow, retryOptions, timeoutOptions) => {
|
|
|
909
933
|
const run = (input) => {
|
|
910
934
|
const myGeneration = generation;
|
|
911
935
|
if (inflight < n) {
|
|
912
|
-
return Deferred.
|
|
936
|
+
return Deferred.from.Promise(
|
|
913
937
|
new Promise((resolve) => {
|
|
914
938
|
startOne(input, resolve, myGeneration);
|
|
915
939
|
})
|
|
916
940
|
);
|
|
917
941
|
}
|
|
918
942
|
if (overflow === "drop") {
|
|
919
|
-
return Deferred.
|
|
943
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
920
944
|
}
|
|
921
|
-
return Deferred.
|
|
945
|
+
return Deferred.from.Promise(
|
|
922
946
|
new Promise((resolve) => {
|
|
923
947
|
overflowQueue.push({ input, resolve });
|
|
924
948
|
emit({ kind: "Queued", position: overflowQueue.length - 1 });
|
|
@@ -971,7 +995,7 @@ var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
|
|
|
971
995
|
const k = keyFn(input);
|
|
972
996
|
if (slots.has(k)) {
|
|
973
997
|
if (perKey === "exclusive") {
|
|
974
|
-
return Deferred.
|
|
998
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
975
999
|
}
|
|
976
1000
|
const existing = slots.get(k);
|
|
977
1001
|
existing.controller.abort();
|
|
@@ -979,7 +1003,7 @@ var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
|
|
|
979
1003
|
slots.delete(k);
|
|
980
1004
|
prev(_replacedNil);
|
|
981
1005
|
}
|
|
982
|
-
return Deferred.
|
|
1006
|
+
return Deferred.from.Promise(
|
|
983
1007
|
new Promise((resolve) => {
|
|
984
1008
|
const controller = new AbortController();
|
|
985
1009
|
slots.set(k, { controller, resolve });
|
|
@@ -1059,9 +1083,9 @@ var makeOnce = (op, retryOptions, timeoutOptions) => {
|
|
|
1059
1083
|
};
|
|
1060
1084
|
const run = (input) => {
|
|
1061
1085
|
if (currentState.kind !== "Idle") {
|
|
1062
|
-
return Deferred.
|
|
1086
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
1063
1087
|
}
|
|
1064
|
-
return Deferred.
|
|
1088
|
+
return Deferred.from.Promise(
|
|
1065
1089
|
new Promise((resolve) => {
|
|
1066
1090
|
currentResolve = resolve;
|
|
1067
1091
|
currentController = new AbortController();
|
|
@@ -1122,10 +1146,8 @@ var Op;
|
|
|
1122
1146
|
((Op2) => {
|
|
1123
1147
|
Op2.nil = (reason) => ({ kind: "OpNil", reason });
|
|
1124
1148
|
Op2.create = (factory, onError) => ({
|
|
1125
|
-
_factory: (input, signal) => Deferred.
|
|
1126
|
-
factory(signal)(input).then((value) => Result.ok(value)).catch(
|
|
1127
|
-
(error) => signal.aborted ? null : Result.err(onError(error))
|
|
1128
|
-
)
|
|
1149
|
+
_factory: (input, signal) => Deferred.from.Promise(
|
|
1150
|
+
factory(signal)(input).then((value) => Result.make.ok(value)).catch((error) => signal.aborted ? null : Result.make.err(onError(error)))
|
|
1129
1151
|
)
|
|
1130
1152
|
});
|
|
1131
1153
|
Op2.lift = (f) => (0, Op2.create)((signal) => (input) => f(input, signal), (e) => e);
|
|
@@ -1167,18 +1189,21 @@ var Op;
|
|
|
1167
1189
|
return outcome;
|
|
1168
1190
|
};
|
|
1169
1191
|
Op2.recover = (f) => (outcome) => outcome.kind === "OpErr" ? f(outcome.error) : outcome;
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1192
|
+
let to;
|
|
1193
|
+
((to2) => {
|
|
1194
|
+
to2.Result = (onNil) => (outcome) => {
|
|
1195
|
+
if (outcome.kind === "OpOk") {
|
|
1196
|
+
return Result.make.ok(outcome.value);
|
|
1197
|
+
}
|
|
1198
|
+
if (outcome.kind === "OpErr") {
|
|
1199
|
+
return Result.make.err(outcome.error);
|
|
1200
|
+
}
|
|
1201
|
+
return Result.make.err(onNil());
|
|
1202
|
+
};
|
|
1203
|
+
to2.Maybe = (outcome) => outcome.kind === "OpOk" ? Maybe.make.some(outcome.value) : Maybe.make.none();
|
|
1204
|
+
})(to = Op2.to || (Op2.to = {}));
|
|
1205
|
+
Op2.all = (invocations) => Deferred.from.Promise(Promise.all(invocations.map(Deferred.to.Promise)));
|
|
1206
|
+
Op2.race = (invocations) => Deferred.from.Promise(Promise.race(invocations.map(Deferred.to.Promise)));
|
|
1182
1207
|
Op2.wire = (source, f) => source.subscribe((state) => {
|
|
1183
1208
|
if ((0, Op2.isOk)(state)) {
|
|
1184
1209
|
f(state.value);
|
|
@@ -1243,12 +1268,18 @@ var Op;
|
|
|
1243
1268
|
// src/Core/Optional.ts
|
|
1244
1269
|
var Optional;
|
|
1245
1270
|
((Optional2) => {
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1271
|
+
let from;
|
|
1272
|
+
((from2) => {
|
|
1273
|
+
from2.accessors = (get2, set2) => ({
|
|
1274
|
+
get: get2,
|
|
1275
|
+
set: set2
|
|
1276
|
+
});
|
|
1277
|
+
from2.property = () => (key) => (0, from2.accessors)((s) => {
|
|
1278
|
+
const val = s[key];
|
|
1279
|
+
return val !== null && val !== void 0 ? Maybe.make.some(val) : Maybe.make.none();
|
|
1280
|
+
}, (a) => (s) => ({ ...s, [key]: a }));
|
|
1281
|
+
})(from = Optional2.from || (Optional2.from = {}));
|
|
1282
|
+
Optional2.index = (i) => from.accessors((arr) => i >= 0 && i < arr.length ? Maybe.make.some(arr[i]) : Maybe.make.none(), (a) => (arr) => {
|
|
1252
1283
|
if (i < 0 || i >= arr.length) {
|
|
1253
1284
|
return arr;
|
|
1254
1285
|
}
|
|
@@ -1274,16 +1305,16 @@ var Optional;
|
|
|
1274
1305
|
const val = opt.get(s);
|
|
1275
1306
|
return val.kind === "Some" ? cases.some(val.value) : cases.none();
|
|
1276
1307
|
};
|
|
1277
|
-
Optional2.andThen = (inner) => (outer) =>
|
|
1308
|
+
Optional2.andThen = (inner) => (outer) => from.accessors((s) => {
|
|
1278
1309
|
const mid = outer.get(s);
|
|
1279
|
-
return mid.kind === "None" ? Maybe.none() : inner.get(mid.value);
|
|
1310
|
+
return mid.kind === "None" ? Maybe.make.none() : inner.get(mid.value);
|
|
1280
1311
|
}, (b) => (s) => {
|
|
1281
1312
|
const mid = outer.get(s);
|
|
1282
1313
|
return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
|
|
1283
1314
|
});
|
|
1284
|
-
Optional2.andThenLens = (inner) => (outer) =>
|
|
1315
|
+
Optional2.andThenLens = (inner) => (outer) => from.accessors((s) => {
|
|
1285
1316
|
const mid = outer.get(s);
|
|
1286
|
-
return mid.kind === "None" ? Maybe.none() : Maybe.some(inner.get(mid.value));
|
|
1317
|
+
return mid.kind === "None" ? Maybe.make.none() : Maybe.make.some(inner.get(mid.value));
|
|
1287
1318
|
}, (b) => (s) => {
|
|
1288
1319
|
const mid = outer.get(s);
|
|
1289
1320
|
return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
|
|
@@ -1313,7 +1344,10 @@ var Predicate;
|
|
|
1313
1344
|
Predicate2.using = (f) => (p) => (b) => p(f(b));
|
|
1314
1345
|
Predicate2.all = (predicates) => (a) => predicates.every((p) => p(a));
|
|
1315
1346
|
Predicate2.any = (predicates) => (a) => predicates.some((p) => p(a));
|
|
1316
|
-
|
|
1347
|
+
let from;
|
|
1348
|
+
((from2) => {
|
|
1349
|
+
from2.Refinement = (r) => r;
|
|
1350
|
+
})(from = Predicate2.from || (Predicate2.from = {}));
|
|
1317
1351
|
})(Predicate || (Predicate = {}));
|
|
1318
1352
|
|
|
1319
1353
|
// src/Core/Reader.ts
|
|
@@ -1341,12 +1375,18 @@ var Reader;
|
|
|
1341
1375
|
// src/Core/Refinement.ts
|
|
1342
1376
|
var Refinement;
|
|
1343
1377
|
((Refinement2) => {
|
|
1344
|
-
|
|
1378
|
+
let from;
|
|
1379
|
+
((from2) => {
|
|
1380
|
+
from2.predicate = (f) => f;
|
|
1381
|
+
})(from = Refinement2.from || (Refinement2.from = {}));
|
|
1345
1382
|
Refinement2.compose = (bc) => (ab) => (a) => ab(a) && bc(a);
|
|
1346
1383
|
Refinement2.and = (second) => (first) => (a) => first(a) && second(a);
|
|
1347
1384
|
Refinement2.or = (second) => (first) => (a) => first(a) || second(a);
|
|
1348
|
-
|
|
1349
|
-
|
|
1385
|
+
let to;
|
|
1386
|
+
((to2) => {
|
|
1387
|
+
to2.Maybe = (r) => (a) => r(a) ? Maybe.make.some(a) : Maybe.make.none();
|
|
1388
|
+
to2.Result = (r, onFail) => (a) => r(a) ? Result.make.ok(a) : Result.make.err(onFail(a));
|
|
1389
|
+
})(to = Refinement2.to || (Refinement2.to = {}));
|
|
1350
1390
|
})(Refinement || (Refinement = {}));
|
|
1351
1391
|
|
|
1352
1392
|
// src/Core/RemoteData.ts
|
|
@@ -1354,31 +1394,37 @@ var _notAsked = { kind: "NotAsked" };
|
|
|
1354
1394
|
var _loading = { kind: "Loading" };
|
|
1355
1395
|
var RemoteData;
|
|
1356
1396
|
((RemoteData2) => {
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
RemoteData2.
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1397
|
+
let make;
|
|
1398
|
+
((make2) => {
|
|
1399
|
+
make2.notAsked = () => _notAsked;
|
|
1400
|
+
make2.loading = () => _loading;
|
|
1401
|
+
make2.failure = (error) => ({ kind: "Failure", error });
|
|
1402
|
+
make2.success = (value) => ({ kind: "Success", value });
|
|
1403
|
+
})(make = RemoteData2.make || (RemoteData2.make = {}));
|
|
1404
|
+
let is;
|
|
1405
|
+
((is2) => {
|
|
1406
|
+
is2.notAsked = (data) => data.kind === "NotAsked";
|
|
1407
|
+
is2.loading = (data) => data.kind === "Loading";
|
|
1408
|
+
is2.failure = (data) => data.kind === "Failure";
|
|
1409
|
+
is2.success = (data) => data.kind === "Success";
|
|
1410
|
+
})(is = RemoteData2.is || (RemoteData2.is = {}));
|
|
1411
|
+
RemoteData2.map = (f) => (data) => is.success(data) ? make.success(f(data.value)) : data;
|
|
1412
|
+
RemoteData2.mapError = (f) => (data) => is.failure(data) ? make.failure(f(data.error)) : data;
|
|
1413
|
+
RemoteData2.chain = (f) => (data) => is.success(data) ? f(data.value) : data;
|
|
1368
1414
|
RemoteData2.ap = (arg) => (data) => {
|
|
1369
|
-
if (
|
|
1370
|
-
return
|
|
1415
|
+
if (is.success(data) && is.success(arg)) {
|
|
1416
|
+
return make.success(data.value(arg.value));
|
|
1371
1417
|
}
|
|
1372
|
-
if (
|
|
1418
|
+
if (is.failure(data)) {
|
|
1373
1419
|
return data;
|
|
1374
1420
|
}
|
|
1375
|
-
if (
|
|
1421
|
+
if (is.failure(arg)) {
|
|
1376
1422
|
return arg;
|
|
1377
1423
|
}
|
|
1378
|
-
if (
|
|
1379
|
-
return
|
|
1424
|
+
if (is.loading(data) || is.loading(arg)) {
|
|
1425
|
+
return make.loading();
|
|
1380
1426
|
}
|
|
1381
|
-
return
|
|
1427
|
+
return make.notAsked();
|
|
1382
1428
|
};
|
|
1383
1429
|
RemoteData2.fold = (onFailure, onNotAsked, onLoading, onSuccess) => (data) => {
|
|
1384
1430
|
switch (data.kind) {
|
|
@@ -1412,69 +1458,78 @@ var RemoteData;
|
|
|
1412
1458
|
}
|
|
1413
1459
|
}
|
|
1414
1460
|
};
|
|
1415
|
-
RemoteData2.getOrElse = (defaultValue) => (data) =>
|
|
1461
|
+
RemoteData2.getOrElse = (defaultValue) => (data) => is.success(data) ? data.value : defaultValue();
|
|
1416
1462
|
RemoteData2.tap = (f) => (data) => {
|
|
1417
|
-
if (
|
|
1463
|
+
if (is.success(data)) {
|
|
1418
1464
|
f(data.value);
|
|
1419
1465
|
}
|
|
1420
1466
|
return data;
|
|
1421
1467
|
};
|
|
1422
1468
|
RemoteData2.tapError = (f) => (data) => {
|
|
1423
|
-
if (
|
|
1469
|
+
if (is.failure(data)) {
|
|
1424
1470
|
f(data.error);
|
|
1425
1471
|
}
|
|
1426
1472
|
return data;
|
|
1427
1473
|
};
|
|
1428
|
-
RemoteData2.recover = (fallback) => (data) =>
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1474
|
+
RemoteData2.recover = (fallback) => (data) => is.failure(data) ? fallback(data.error) : data;
|
|
1475
|
+
let to;
|
|
1476
|
+
((to2) => {
|
|
1477
|
+
to2.Maybe = (data) => is.success(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
1478
|
+
to2.Result = (onNotReady) => (data) => is.success(data) ? Result.make.ok(data.value) : Result.make.err(is.failure(data) ? data.error : onNotReady());
|
|
1479
|
+
})(to = RemoteData2.to || (RemoteData2.to = {}));
|
|
1480
|
+
let from;
|
|
1481
|
+
((from2) => {
|
|
1482
|
+
from2.Result = (data) => Result.is.ok(data) ? make.success(data.value) : make.failure(data.error);
|
|
1483
|
+
from2.Maybe = (onNone) => (data) => Maybe.is.some(data) ? make.success(data.value) : make.failure(onNone());
|
|
1484
|
+
})(from = RemoteData2.from || (RemoteData2.from = {}));
|
|
1485
|
+
RemoteData2.filter = (pred, onFalse) => (data) => is.success(data) ? pred(data.value) ? data : make.failure(onFalse(data.value)) : data;
|
|
1434
1486
|
})(RemoteData || (RemoteData = {}));
|
|
1435
1487
|
|
|
1436
1488
|
// src/Core/Resource.ts
|
|
1437
1489
|
var Resource;
|
|
1438
1490
|
((Resource2) => {
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
release
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
release
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1491
|
+
let from;
|
|
1492
|
+
((from2) => {
|
|
1493
|
+
from2.handlers = (acquire, release) => ({
|
|
1494
|
+
acquire,
|
|
1495
|
+
release
|
|
1496
|
+
});
|
|
1497
|
+
from2.Task = (acquire, release) => ({
|
|
1498
|
+
acquire: Task.map((a) => Result.make.ok(a))(acquire),
|
|
1499
|
+
release
|
|
1500
|
+
});
|
|
1501
|
+
})(from = Resource2.from || (Resource2.from = {}));
|
|
1502
|
+
Resource2.use = (f) => (resource) => Task.from.Promise(
|
|
1503
|
+
(signal) => Deferred.to.Promise(resource.acquire(signal)).then(async (acquired) => {
|
|
1504
|
+
if (Result.is.err(acquired)) {
|
|
1450
1505
|
return acquired;
|
|
1451
1506
|
}
|
|
1452
1507
|
const a = acquired.value;
|
|
1453
1508
|
try {
|
|
1454
|
-
const usageResult = await Deferred.
|
|
1509
|
+
const usageResult = await Deferred.to.Promise(f(a)(signal));
|
|
1455
1510
|
return usageResult;
|
|
1456
1511
|
} finally {
|
|
1457
|
-
await Deferred.
|
|
1512
|
+
await Deferred.to.Promise(resource.release(a)(signal));
|
|
1458
1513
|
}
|
|
1459
1514
|
})
|
|
1460
1515
|
);
|
|
1461
1516
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1462
|
-
acquire: Task.from(
|
|
1463
|
-
(signal) => Deferred.
|
|
1464
|
-
if (Result.
|
|
1517
|
+
acquire: Task.from.Promise(
|
|
1518
|
+
(signal) => Deferred.to.Promise(resourceA.acquire(signal)).then(async (acquiredA) => {
|
|
1519
|
+
if (Result.is.err(acquiredA)) {
|
|
1465
1520
|
return acquiredA;
|
|
1466
1521
|
}
|
|
1467
1522
|
const a = acquiredA.value;
|
|
1468
|
-
const acquiredB = await Deferred.
|
|
1469
|
-
if (Result.
|
|
1470
|
-
await Deferred.
|
|
1523
|
+
const acquiredB = await Deferred.to.Promise(resourceB.acquire(signal));
|
|
1524
|
+
if (Result.is.err(acquiredB)) {
|
|
1525
|
+
await Deferred.to.Promise(resourceA.release(a)(signal));
|
|
1471
1526
|
return acquiredB;
|
|
1472
1527
|
}
|
|
1473
|
-
return Result.ok([a, acquiredB.value]);
|
|
1528
|
+
return Result.make.ok([a, acquiredB.value]);
|
|
1474
1529
|
})
|
|
1475
1530
|
),
|
|
1476
|
-
release: ([a, b]) => Task.from(
|
|
1477
|
-
(signal) => Deferred.
|
|
1531
|
+
release: ([a, b]) => Task.from.Promise(
|
|
1532
|
+
(signal) => Deferred.to.Promise(resourceB.release(b)(signal)).then(() => Deferred.to.Promise(resourceA.release(a)(signal)))
|
|
1478
1533
|
)
|
|
1479
1534
|
});
|
|
1480
1535
|
})(Resource || (Resource = {}));
|
|
@@ -1482,49 +1537,61 @@ var Resource;
|
|
|
1482
1537
|
// src/Core/Result.ts
|
|
1483
1538
|
var Result;
|
|
1484
1539
|
((Result4) => {
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1540
|
+
let make;
|
|
1541
|
+
((make2) => {
|
|
1542
|
+
make2.ok = (value) => ({ kind: "Ok", value });
|
|
1543
|
+
make2.err = (e) => ({ kind: "Err", error: e });
|
|
1544
|
+
})(make = Result4.make || (Result4.make = {}));
|
|
1545
|
+
let is;
|
|
1546
|
+
((is2) => {
|
|
1547
|
+
is2.ok = (data) => data.kind === "Ok";
|
|
1548
|
+
is2.err = (data) => data.kind === "Err";
|
|
1549
|
+
})(is = Result4.is || (Result4.is = {}));
|
|
1489
1550
|
Result4.tryCatch = (f, onError) => {
|
|
1490
1551
|
try {
|
|
1491
|
-
return
|
|
1552
|
+
return make.ok(f());
|
|
1492
1553
|
} catch (error) {
|
|
1493
|
-
return
|
|
1554
|
+
return make.err(onError(error));
|
|
1494
1555
|
}
|
|
1495
1556
|
};
|
|
1496
|
-
Result4.map = (f) => (data) =>
|
|
1497
|
-
Result4.mapError = (f) => (data) =>
|
|
1498
|
-
Result4.chain = (f) => (data) =>
|
|
1499
|
-
Result4.fold = (onErr, onOk) => (data) =>
|
|
1500
|
-
Result4.match = (cases) => (data) =>
|
|
1501
|
-
Result4.getOrElse = (defaultValue) => (data) =>
|
|
1557
|
+
Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
|
|
1558
|
+
Result4.mapError = (f) => (data) => is.err(data) ? make.err(f(data.error)) : data;
|
|
1559
|
+
Result4.chain = (f) => (data) => is.ok(data) ? f(data.value) : data;
|
|
1560
|
+
Result4.fold = (onErr, onOk) => (data) => is.ok(data) ? onOk(data.value) : onErr(data.error);
|
|
1561
|
+
Result4.match = (cases) => (data) => is.ok(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
1562
|
+
Result4.getOrElse = (defaultValue) => (data) => is.ok(data) ? data.value : defaultValue();
|
|
1502
1563
|
Result4.tap = (f) => (data) => {
|
|
1503
|
-
if (
|
|
1564
|
+
if (is.ok(data)) {
|
|
1504
1565
|
f(data.value);
|
|
1505
1566
|
}
|
|
1506
1567
|
return data;
|
|
1507
1568
|
};
|
|
1508
1569
|
Result4.tapError = (f) => (data) => {
|
|
1509
|
-
if (
|
|
1570
|
+
if (is.err(data)) {
|
|
1510
1571
|
f(data.error);
|
|
1511
1572
|
}
|
|
1512
1573
|
return data;
|
|
1513
1574
|
};
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
Result4.
|
|
1575
|
+
let from;
|
|
1576
|
+
((from2) => {
|
|
1577
|
+
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
|
|
1578
|
+
from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
|
|
1579
|
+
from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
|
|
1580
|
+
from2.throwable = (f, onError) => (...args) => {
|
|
1581
|
+
try {
|
|
1582
|
+
return make.ok(f(...args));
|
|
1583
|
+
} catch (error) {
|
|
1584
|
+
return make.err(onError(error));
|
|
1585
|
+
}
|
|
1586
|
+
};
|
|
1587
|
+
})(from = Result4.from || (Result4.from = {}));
|
|
1588
|
+
Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
|
|
1589
|
+
Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
|
|
1590
|
+
let to;
|
|
1591
|
+
((to2) => {
|
|
1592
|
+
to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
1593
|
+
})(to = Result4.to || (Result4.to = {}));
|
|
1594
|
+
Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
|
|
1528
1595
|
Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
|
|
1529
1596
|
Result4.bind = (key, f) => (data) => (0, Result4.chain)(
|
|
1530
1597
|
(a) => (0, Result4.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
@@ -1534,13 +1601,13 @@ var Result;
|
|
|
1534
1601
|
for (const key in fields) {
|
|
1535
1602
|
if (Object.hasOwn(fields, key)) {
|
|
1536
1603
|
const res = fields[key];
|
|
1537
|
-
if (
|
|
1604
|
+
if (is.err(res)) {
|
|
1538
1605
|
return res;
|
|
1539
1606
|
}
|
|
1540
1607
|
result[key] = res.value;
|
|
1541
1608
|
}
|
|
1542
1609
|
}
|
|
1543
|
-
return
|
|
1610
|
+
return make.ok(result);
|
|
1544
1611
|
};
|
|
1545
1612
|
})(Result || (Result = {}));
|
|
1546
1613
|
|
|
@@ -1582,17 +1649,24 @@ var State;
|
|
|
1582
1649
|
// src/Core/TaskMaybe.ts
|
|
1583
1650
|
var TaskMaybe;
|
|
1584
1651
|
((TaskMaybe2) => {
|
|
1585
|
-
TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
|
|
1586
|
-
TaskMaybe2.none = () => Task.resolve(Maybe.none());
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1652
|
+
TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
|
|
1653
|
+
TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
|
|
1654
|
+
let from;
|
|
1655
|
+
((from2) => {
|
|
1656
|
+
from2.Maybe = (option) => Task.resolve(option);
|
|
1657
|
+
from2.nullable = (value) => Task.resolve(Maybe.from.nullable(value));
|
|
1658
|
+
from2.Result = (result) => Task.resolve(Result.to.Maybe(result));
|
|
1659
|
+
from2.Task = (task) => Task.map(Maybe.make.some)(task);
|
|
1660
|
+
})(from = TaskMaybe2.from || (TaskMaybe2.from = {}));
|
|
1661
|
+
TaskMaybe2.tryCatch = (f) => Task.from.Promise(
|
|
1662
|
+
(signal) => Promise.resolve(f(signal)).then(Maybe.make.some).catch(() => Maybe.make.none())
|
|
1663
|
+
);
|
|
1592
1664
|
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
1593
|
-
TaskMaybe2.chain = (f) => (data) => Task.chain(
|
|
1594
|
-
|
|
1595
|
-
|
|
1665
|
+
TaskMaybe2.chain = (f) => (data) => Task.chain(
|
|
1666
|
+
(option) => Maybe.is.some(option) ? f(option.value) : Task.resolve(Maybe.make.none())
|
|
1667
|
+
)(data);
|
|
1668
|
+
TaskMaybe2.ap = (arg) => (data) => Task.from.Promise(
|
|
1669
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1596
1670
|
([of_, oa]) => Maybe.ap(oa)(of_)
|
|
1597
1671
|
)
|
|
1598
1672
|
);
|
|
@@ -1601,25 +1675,30 @@ var TaskMaybe;
|
|
|
1601
1675
|
TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
|
|
1602
1676
|
TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
|
|
1603
1677
|
TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
|
|
1604
|
-
|
|
1678
|
+
let to;
|
|
1679
|
+
((to2) => {
|
|
1680
|
+
to2.Result = (onNone) => (data) => Task.map(Maybe.to.Result(onNone))(data);
|
|
1681
|
+
})(to = TaskMaybe2.to || (TaskMaybe2.to = {}));
|
|
1605
1682
|
TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
|
|
1606
1683
|
TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
|
|
1607
1684
|
(a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1608
1685
|
)(data);
|
|
1609
|
-
TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.
|
|
1610
|
-
|
|
1686
|
+
TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.is.none(maybe) ? fallback() : Task.resolve(maybe))(
|
|
1687
|
+
data
|
|
1688
|
+
);
|
|
1689
|
+
TaskMaybe2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1611
1690
|
const keys = Object.keys(fields);
|
|
1612
|
-
const promises = keys.map((key) => Deferred.
|
|
1691
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1613
1692
|
return Promise.all(promises).then((results) => {
|
|
1614
1693
|
const record = {};
|
|
1615
1694
|
for (let i = 0; i < keys.length; i++) {
|
|
1616
1695
|
const res = results[i];
|
|
1617
|
-
if (Maybe.
|
|
1696
|
+
if (Maybe.is.none(res)) {
|
|
1618
1697
|
return res;
|
|
1619
1698
|
}
|
|
1620
1699
|
record[keys[i]] = res.value;
|
|
1621
1700
|
}
|
|
1622
|
-
return Maybe.some(record);
|
|
1701
|
+
return Maybe.make.some(record);
|
|
1623
1702
|
});
|
|
1624
1703
|
});
|
|
1625
1704
|
})(TaskMaybe || (TaskMaybe = {}));
|
|
@@ -1627,28 +1706,35 @@ var TaskMaybe;
|
|
|
1627
1706
|
// src/Core/TaskResult.ts
|
|
1628
1707
|
var TaskResult;
|
|
1629
1708
|
((TaskResult2) => {
|
|
1630
|
-
TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
|
|
1631
|
-
TaskResult2.err = (error) => Task.resolve(Result.err(error));
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1709
|
+
TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
|
|
1710
|
+
TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
|
|
1711
|
+
let from;
|
|
1712
|
+
((from2) => {
|
|
1713
|
+
from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
|
|
1714
|
+
from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
|
|
1715
|
+
from2.Result = (result) => Task.resolve(result);
|
|
1716
|
+
from2.throwable = (f, onError) => (...args) => Task.from.Promise(
|
|
1717
|
+
() => f(...args).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
|
|
1718
|
+
);
|
|
1719
|
+
})(from = TaskResult2.from || (TaskResult2.from = {}));
|
|
1720
|
+
TaskResult2.tryCatch = (f, onError) => Task.from.Promise(
|
|
1721
|
+
(signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
|
|
1722
|
+
);
|
|
1637
1723
|
TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
1638
1724
|
TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
1639
|
-
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1640
|
-
|
|
1641
|
-
);
|
|
1725
|
+
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1726
|
+
(result) => Result.is.ok(result) ? f(result.value) : Task.resolve(Result.make.err(result.error))
|
|
1727
|
+
)(data);
|
|
1642
1728
|
TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
|
|
1643
1729
|
TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
|
|
1644
1730
|
TaskResult2.recover = (fallback) => (data) => Task.chain(
|
|
1645
|
-
(result) => Result.
|
|
1731
|
+
(result) => Result.is.err(result) ? fallback(result.error) : Task.resolve(result)
|
|
1646
1732
|
)(data);
|
|
1647
1733
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1648
1734
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1649
1735
|
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1650
|
-
TaskResult2.ap = (arg) => (data) => Task.from(
|
|
1651
|
-
(signal) => Promise.all([Deferred.
|
|
1736
|
+
TaskResult2.ap = (arg) => (data) => Task.from.Promise(
|
|
1737
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1652
1738
|
([of_, oa]) => Result.ap(oa)(of_)
|
|
1653
1739
|
)
|
|
1654
1740
|
);
|
|
@@ -1657,19 +1743,19 @@ var TaskResult;
|
|
|
1657
1743
|
TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
|
|
1658
1744
|
(a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1659
1745
|
)(data);
|
|
1660
|
-
TaskResult2.struct = (fields) => Task.from((signal) => {
|
|
1746
|
+
TaskResult2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1661
1747
|
const keys = Object.keys(fields);
|
|
1662
|
-
const promises = keys.map((key) => Deferred.
|
|
1748
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1663
1749
|
return Promise.all(promises).then((results) => {
|
|
1664
1750
|
const record = {};
|
|
1665
1751
|
for (let i = 0; i < keys.length; i++) {
|
|
1666
1752
|
const res = results[i];
|
|
1667
|
-
if (Result.
|
|
1753
|
+
if (Result.is.err(res)) {
|
|
1668
1754
|
return res;
|
|
1669
1755
|
}
|
|
1670
1756
|
record[keys[i]] = res.value;
|
|
1671
1757
|
}
|
|
1672
|
-
return Result.ok(record);
|
|
1758
|
+
return Result.make.ok(record);
|
|
1673
1759
|
});
|
|
1674
1760
|
});
|
|
1675
1761
|
})(TaskResult || (TaskResult = {}));
|
|
@@ -1680,19 +1766,28 @@ var isNonEmptyArr = (list) => list.length > 0;
|
|
|
1680
1766
|
// src/Core/TaskValidation.ts
|
|
1681
1767
|
var TaskValidation;
|
|
1682
1768
|
((TaskValidation2) => {
|
|
1683
|
-
TaskValidation2.passed = (value) => Task.resolve(Validation.passed(value));
|
|
1684
|
-
TaskValidation2.failed = (error) => Task.resolve(Validation.failed(error));
|
|
1685
|
-
TaskValidation2.failedAll = (errors) => Task.resolve(Validation.failedAll(errors));
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1769
|
+
TaskValidation2.passed = (value) => Task.resolve(Validation.make.passed(value));
|
|
1770
|
+
TaskValidation2.failed = (error) => Task.resolve(Validation.make.failed(error));
|
|
1771
|
+
TaskValidation2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
|
|
1772
|
+
let from;
|
|
1773
|
+
((from2) => {
|
|
1774
|
+
from2.Validation = (validation) => Task.resolve(validation);
|
|
1775
|
+
from2.nullable = (onNull) => (value) => Task.resolve(
|
|
1776
|
+
value === null || value === void 0 ? Validation.make.failed(onNull()) : Validation.make.passed(value)
|
|
1777
|
+
);
|
|
1778
|
+
from2.Maybe = (onNone) => (maybe) => Task.resolve(
|
|
1779
|
+
Maybe.is.none(maybe) ? Validation.make.failed(onNone()) : Validation.make.passed(maybe.value)
|
|
1780
|
+
);
|
|
1781
|
+
from2.Result = (result) => Task.resolve(Validation.from.Result(result));
|
|
1782
|
+
})(from = TaskValidation2.from || (TaskValidation2.from = {}));
|
|
1783
|
+
TaskValidation2.tryCatch = (f, onError) => Task.from.Promise(
|
|
1784
|
+
(signal) => Promise.resolve(f(signal)).then(Validation.make.passed).catch(
|
|
1785
|
+
(error) => Validation.make.failed(onError(error))
|
|
1786
|
+
)
|
|
1692
1787
|
);
|
|
1693
1788
|
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
1694
|
-
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
1695
|
-
(signal) => Promise.all([Deferred.
|
|
1789
|
+
TaskValidation2.ap = (arg) => (data) => Task.from.Promise(
|
|
1790
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1696
1791
|
([vf, va]) => Validation.ap(va)(vf)
|
|
1697
1792
|
)
|
|
1698
1793
|
);
|
|
@@ -1701,61 +1796,64 @@ var TaskValidation;
|
|
|
1701
1796
|
TaskValidation2.getOrElse = (defaultValue) => (data) => Task.map(Validation.getOrElse(defaultValue))(data);
|
|
1702
1797
|
TaskValidation2.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
|
|
1703
1798
|
TaskValidation2.recover = (fallback) => (data) => Task.chain(
|
|
1704
|
-
(validation) => Validation.
|
|
1799
|
+
(validation) => Validation.is.passed(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
1705
1800
|
)(data);
|
|
1706
|
-
TaskValidation2.product = (first, second) => Task.from(
|
|
1707
|
-
(signal) => Promise.all([Deferred.
|
|
1801
|
+
TaskValidation2.product = (first, second) => Task.from.Promise(
|
|
1802
|
+
(signal) => Promise.all([Deferred.to.Promise(first(signal)), Deferred.to.Promise(second(signal))]).then(
|
|
1708
1803
|
([va, vb]) => Validation.product(va, vb)
|
|
1709
1804
|
)
|
|
1710
1805
|
);
|
|
1711
|
-
TaskValidation2.productAll = (data) => Task.from(
|
|
1712
|
-
(signal) => Promise.all(data.map((t) => Deferred.
|
|
1806
|
+
TaskValidation2.productAll = (data) => Task.from.Promise(
|
|
1807
|
+
(signal) => Promise.all(data.map((t) => Deferred.to.Promise(t(signal)))).then((results) => {
|
|
1713
1808
|
const [first, ...rest] = results;
|
|
1714
1809
|
return Validation.productAll([first, ...rest]);
|
|
1715
1810
|
})
|
|
1716
1811
|
);
|
|
1717
1812
|
TaskValidation2.mapError = (f) => (data) => Task.map(Validation.mapError(f))(data);
|
|
1718
1813
|
TaskValidation2.tapError = (f) => (data) => Task.map(Validation.tapError(f))(data);
|
|
1719
|
-
TaskValidation2.struct = (fields) => Task.from((signal) => {
|
|
1814
|
+
TaskValidation2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1720
1815
|
const keys = Object.keys(fields);
|
|
1721
|
-
const promises = keys.map((key) => Deferred.
|
|
1816
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1722
1817
|
return Promise.all(promises).then((results) => {
|
|
1723
1818
|
const record = {};
|
|
1724
1819
|
const errors = [];
|
|
1725
1820
|
for (let i = 0; i < keys.length; i++) {
|
|
1726
1821
|
const res = results[i];
|
|
1727
|
-
if (Validation.
|
|
1822
|
+
if (Validation.is.passed(res)) {
|
|
1728
1823
|
record[keys[i]] = res.value;
|
|
1729
1824
|
} else {
|
|
1730
1825
|
errors.push(...res.errors);
|
|
1731
1826
|
}
|
|
1732
1827
|
}
|
|
1733
|
-
return isNonEmptyArr(errors) ? Validation.failedAll(errors) : Validation.passed(record);
|
|
1828
|
+
return isNonEmptyArr(errors) ? Validation.make.failedAll(errors) : Validation.make.passed(record);
|
|
1734
1829
|
});
|
|
1735
1830
|
});
|
|
1736
1831
|
})(TaskValidation || (TaskValidation = {}));
|
|
1737
1832
|
|
|
1738
1833
|
// src/Core/Task.ts
|
|
1739
|
-
var toPromise = (task, signal) => Deferred.
|
|
1740
|
-
var getMs2 = (duration) => Duration.
|
|
1834
|
+
var toPromise = (task, signal) => Deferred.to.Promise(task(signal));
|
|
1835
|
+
var getMs2 = (duration) => Duration.to.milliseconds(duration);
|
|
1741
1836
|
var Task;
|
|
1742
1837
|
((Task2) => {
|
|
1743
|
-
Task2.resolve = (value) => () => Deferred.
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
Task2.
|
|
1838
|
+
Task2.resolve = (value) => () => Deferred.from.Promise(globalThis.Promise.resolve(value));
|
|
1839
|
+
let from;
|
|
1840
|
+
((from2) => {
|
|
1841
|
+
from2.Promise = (f) => (signal) => Deferred.from.Promise(f(signal));
|
|
1842
|
+
from2.sync = (f) => () => Deferred.from.Promise(globalThis.Promise.resolve(f()));
|
|
1843
|
+
})(from = Task2.from || (Task2.from = {}));
|
|
1844
|
+
Task2.map = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then(f));
|
|
1845
|
+
Task2.chain = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
|
|
1846
|
+
Task2.ap = (arg) => (data) => from.Promise((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
|
|
1847
|
+
Task2.tap = (f) => (data) => from.Promise(
|
|
1750
1848
|
(signal) => toPromise(data, signal).then((a) => {
|
|
1751
1849
|
f(a);
|
|
1752
1850
|
return a;
|
|
1753
1851
|
})
|
|
1754
1852
|
);
|
|
1755
|
-
Task2.all = (tasks) =>
|
|
1853
|
+
Task2.all = (tasks) => from.Promise(
|
|
1756
1854
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1757
1855
|
);
|
|
1758
|
-
Task2.delay = (duration) => (data) =>
|
|
1856
|
+
Task2.delay = (duration) => (data) => from.Promise(
|
|
1759
1857
|
(signal) => new Promise((res) => {
|
|
1760
1858
|
let timerId;
|
|
1761
1859
|
const onAbort = () => {
|
|
@@ -1774,7 +1872,7 @@ var Task;
|
|
|
1774
1872
|
}, getMs2(duration));
|
|
1775
1873
|
})
|
|
1776
1874
|
);
|
|
1777
|
-
Task2.repeat = (options) => (task) =>
|
|
1875
|
+
Task2.repeat = (options) => (task) => from.Promise((signal) => {
|
|
1778
1876
|
const { times, delay: delayDuration } = options;
|
|
1779
1877
|
if (times <= 0) {
|
|
1780
1878
|
return Promise.resolve([]);
|
|
@@ -1808,7 +1906,7 @@ var Task;
|
|
|
1808
1906
|
};
|
|
1809
1907
|
return run2(times);
|
|
1810
1908
|
});
|
|
1811
|
-
Task2.repeatUntil = (options) => (task) =>
|
|
1909
|
+
Task2.repeatUntil = (options) => (task) => from.Promise((signal) => {
|
|
1812
1910
|
const { when: predicate, delay: delayDuration, maxAttempts } = options;
|
|
1813
1911
|
const wait = () => new Promise((r) => {
|
|
1814
1912
|
let timerId;
|
|
@@ -1845,10 +1943,10 @@ var Task;
|
|
|
1845
1943
|
});
|
|
1846
1944
|
Task2.race = (tasks) => {
|
|
1847
1945
|
if (tasks.length === 0) {
|
|
1848
|
-
return () => Deferred.
|
|
1946
|
+
return () => Deferred.from.Promise(new Promise(() => {
|
|
1849
1947
|
}));
|
|
1850
1948
|
}
|
|
1851
|
-
return
|
|
1949
|
+
return from.Promise((outerSignal) => {
|
|
1852
1950
|
const controllers = tasks.map(() => new AbortController());
|
|
1853
1951
|
const onOuterAbort = () => {
|
|
1854
1952
|
for (const ctrl of controllers) {
|
|
@@ -1877,8 +1975,8 @@ var Task;
|
|
|
1877
1975
|
return Promise.race(promises);
|
|
1878
1976
|
});
|
|
1879
1977
|
};
|
|
1880
|
-
Task2.sequence = (tasks) =>
|
|
1881
|
-
Task2.sequential = (tasks) =>
|
|
1978
|
+
Task2.sequence = (tasks) => from.Promise((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
1979
|
+
Task2.sequential = (tasks) => from.Promise(async (signal) => {
|
|
1882
1980
|
const results = [];
|
|
1883
1981
|
for (const task of tasks) {
|
|
1884
1982
|
if (signal?.aborted) {
|
|
@@ -1888,7 +1986,7 @@ var Task;
|
|
|
1888
1986
|
}
|
|
1889
1987
|
return results;
|
|
1890
1988
|
});
|
|
1891
|
-
Task2.timeout = (duration, onTimeout) => (task) =>
|
|
1989
|
+
Task2.timeout = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
|
|
1892
1990
|
const controller = new AbortController();
|
|
1893
1991
|
let timerId;
|
|
1894
1992
|
let cleanUp = () => {
|
|
@@ -1911,13 +2009,13 @@ var Task;
|
|
|
1911
2009
|
return Promise.race([
|
|
1912
2010
|
toPromise(task, controller.signal).then((a) => {
|
|
1913
2011
|
cleanUp();
|
|
1914
|
-
return Result.ok(a);
|
|
2012
|
+
return Result.make.ok(a);
|
|
1915
2013
|
}),
|
|
1916
2014
|
new Promise((res) => {
|
|
1917
2015
|
timerId = setTimeout(() => {
|
|
1918
2016
|
controller.abort();
|
|
1919
2017
|
cleanUp();
|
|
1920
|
-
res(Result.err(onTimeout()));
|
|
2018
|
+
res(Result.make.err(onTimeout()));
|
|
1921
2019
|
}, getMs2(duration));
|
|
1922
2020
|
})
|
|
1923
2021
|
]);
|
|
@@ -1936,7 +2034,7 @@ var Task;
|
|
|
1936
2034
|
outerSignal.addEventListener("abort", () => controller.abort(outerSignal.reason), { once: true });
|
|
1937
2035
|
}
|
|
1938
2036
|
}
|
|
1939
|
-
return Deferred.
|
|
2037
|
+
return Deferred.from.Promise(factory(controller.signal));
|
|
1940
2038
|
};
|
|
1941
2039
|
return { task, abort };
|
|
1942
2040
|
};
|
|
@@ -1953,67 +2051,73 @@ var Task;
|
|
|
1953
2051
|
// src/Core/These.ts
|
|
1954
2052
|
var These;
|
|
1955
2053
|
((These2) => {
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
These2.
|
|
2054
|
+
let make;
|
|
2055
|
+
((make2) => {
|
|
2056
|
+
make2.first = (value) => ({ kind: "First", first: value });
|
|
2057
|
+
make2.second = (value) => ({ kind: "Second", second: value });
|
|
2058
|
+
make2.both = (f, s) => ({ kind: "Both", first: f, second: s });
|
|
2059
|
+
})(make = These2.make || (These2.make = {}));
|
|
2060
|
+
let is;
|
|
2061
|
+
((is2) => {
|
|
2062
|
+
is2.first = (data) => data.kind === "First";
|
|
2063
|
+
is2.second = (data) => data.kind === "Second";
|
|
2064
|
+
is2.both = (data) => data.kind === "Both";
|
|
2065
|
+
})(is = These2.is || (These2.is = {}));
|
|
1962
2066
|
These2.hasFirst = (data) => data.kind === "First" || data.kind === "Both";
|
|
1963
2067
|
These2.hasSecond = (data) => data.kind === "Second" || data.kind === "Both";
|
|
1964
2068
|
These2.mapFirst = (f) => (data) => {
|
|
1965
|
-
if (
|
|
2069
|
+
if (is.second(data)) {
|
|
1966
2070
|
return data;
|
|
1967
2071
|
}
|
|
1968
|
-
if (
|
|
1969
|
-
return
|
|
2072
|
+
if (is.first(data)) {
|
|
2073
|
+
return make.first(f(data.first));
|
|
1970
2074
|
}
|
|
1971
|
-
return
|
|
2075
|
+
return make.both(f(data.first), data.second);
|
|
1972
2076
|
};
|
|
1973
2077
|
These2.mapSecond = (f) => (data) => {
|
|
1974
|
-
if (
|
|
2078
|
+
if (is.first(data)) {
|
|
1975
2079
|
return data;
|
|
1976
2080
|
}
|
|
1977
|
-
if (
|
|
1978
|
-
return
|
|
2081
|
+
if (is.second(data)) {
|
|
2082
|
+
return make.second(f(data.second));
|
|
1979
2083
|
}
|
|
1980
|
-
return
|
|
2084
|
+
return make.both(data.first, f(data.second));
|
|
1981
2085
|
};
|
|
1982
2086
|
These2.mapBoth = (onFirst, onSecond) => (data) => {
|
|
1983
|
-
if (
|
|
1984
|
-
return
|
|
2087
|
+
if (is.second(data)) {
|
|
2088
|
+
return make.second(onSecond(data.second));
|
|
1985
2089
|
}
|
|
1986
|
-
if (
|
|
1987
|
-
return
|
|
2090
|
+
if (is.first(data)) {
|
|
2091
|
+
return make.first(onFirst(data.first));
|
|
1988
2092
|
}
|
|
1989
|
-
return
|
|
2093
|
+
return make.both(onFirst(data.first), onSecond(data.second));
|
|
1990
2094
|
};
|
|
1991
2095
|
These2.chainFirst = (f) => (data) => {
|
|
1992
|
-
if (
|
|
2096
|
+
if (is.second(data)) {
|
|
1993
2097
|
return data;
|
|
1994
2098
|
}
|
|
1995
2099
|
return f(data.first);
|
|
1996
2100
|
};
|
|
1997
2101
|
These2.chainSecond = (f) => (data) => {
|
|
1998
|
-
if (
|
|
2102
|
+
if (is.first(data)) {
|
|
1999
2103
|
return data;
|
|
2000
2104
|
}
|
|
2001
2105
|
return f(data.second);
|
|
2002
2106
|
};
|
|
2003
2107
|
These2.fold = (onFirst, onSecond, onBoth) => (data) => {
|
|
2004
|
-
if (
|
|
2108
|
+
if (is.second(data)) {
|
|
2005
2109
|
return onSecond(data.second);
|
|
2006
2110
|
}
|
|
2007
|
-
if (
|
|
2111
|
+
if (is.first(data)) {
|
|
2008
2112
|
return onFirst(data.first);
|
|
2009
2113
|
}
|
|
2010
2114
|
return onBoth(data.first, data.second);
|
|
2011
2115
|
};
|
|
2012
2116
|
These2.match = (cases) => (data) => {
|
|
2013
|
-
if (
|
|
2117
|
+
if (is.second(data)) {
|
|
2014
2118
|
return cases.second(data.second);
|
|
2015
2119
|
}
|
|
2016
|
-
if (
|
|
2120
|
+
if (is.first(data)) {
|
|
2017
2121
|
return cases.first(data.first);
|
|
2018
2122
|
}
|
|
2019
2123
|
return cases.both(data.first, data.second);
|
|
@@ -2027,20 +2131,24 @@ var These;
|
|
|
2027
2131
|
return data;
|
|
2028
2132
|
};
|
|
2029
2133
|
These2.swap = (data) => {
|
|
2030
|
-
if (
|
|
2031
|
-
return
|
|
2134
|
+
if (is.second(data)) {
|
|
2135
|
+
return make.first(data.second);
|
|
2032
2136
|
}
|
|
2033
|
-
if (
|
|
2034
|
-
return
|
|
2137
|
+
if (is.first(data)) {
|
|
2138
|
+
return make.second(data.first);
|
|
2035
2139
|
}
|
|
2036
|
-
return
|
|
2140
|
+
return make.both(data.second, data.first);
|
|
2037
2141
|
};
|
|
2038
2142
|
})(These || (These = {}));
|
|
2039
2143
|
|
|
2040
2144
|
// src/Core/Tuple.ts
|
|
2041
2145
|
var Tuple;
|
|
2042
2146
|
((Tuple2) => {
|
|
2043
|
-
|
|
2147
|
+
let from;
|
|
2148
|
+
((from2) => {
|
|
2149
|
+
from2.pair = (first2, second2) => [first2, second2];
|
|
2150
|
+
from2.array = (arr) => arr;
|
|
2151
|
+
})(from = Tuple2.from || (Tuple2.from = {}));
|
|
2044
2152
|
Tuple2.first = (tuple) => tuple[0];
|
|
2045
2153
|
Tuple2.second = (tuple) => tuple[1];
|
|
2046
2154
|
Tuple2.mapFirst = (f) => (tuple) => [f(tuple[0]), tuple[1]];
|
|
@@ -2051,7 +2159,10 @@ var Tuple;
|
|
|
2051
2159
|
];
|
|
2052
2160
|
Tuple2.fold = (f) => (tuple) => f(tuple[0], tuple[1]);
|
|
2053
2161
|
Tuple2.swap = (tuple) => [tuple[1], tuple[0]];
|
|
2054
|
-
|
|
2162
|
+
let to;
|
|
2163
|
+
((to2) => {
|
|
2164
|
+
to2.Array = (tuple) => [...tuple];
|
|
2165
|
+
})(to = Tuple2.to || (Tuple2.to = {}));
|
|
2055
2166
|
Tuple2.tap = (f) => (tuple) => {
|
|
2056
2167
|
f(tuple[0], tuple[1]);
|
|
2057
2168
|
return tuple;
|
|
@@ -2061,59 +2172,71 @@ var Tuple;
|
|
|
2061
2172
|
// src/Core/Validation.ts
|
|
2062
2173
|
var Validation;
|
|
2063
2174
|
((Validation2) => {
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2175
|
+
let make;
|
|
2176
|
+
((make2) => {
|
|
2177
|
+
make2.passed = (value) => ({ kind: "Passed", value });
|
|
2178
|
+
make2.failed = (error) => ({ kind: "Failed", errors: [error] });
|
|
2179
|
+
make2.failedAll = (errors) => ({ kind: "Failed", errors });
|
|
2180
|
+
})(make = Validation2.make || (Validation2.make = {}));
|
|
2181
|
+
let is;
|
|
2182
|
+
((is2) => {
|
|
2183
|
+
is2.passed = (data) => data.kind === "Passed";
|
|
2184
|
+
is2.failed = (data) => data.kind === "Failed";
|
|
2185
|
+
})(is = Validation2.is || (Validation2.is = {}));
|
|
2186
|
+
let from;
|
|
2187
|
+
((from2) => {
|
|
2188
|
+
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
|
|
2189
|
+
from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.failed(onNull()) : make.passed(value);
|
|
2190
|
+
from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.failed(onNone()) : make.passed(maybe.value);
|
|
2191
|
+
from2.Result = (data) => data.kind === "Ok" ? make.passed(data.value) : make.failed(data.error);
|
|
2192
|
+
})(from = Validation2.from || (Validation2.from = {}));
|
|
2193
|
+
Validation2.map = (f) => (data) => is.passed(data) ? make.passed(f(data.value)) : data;
|
|
2194
|
+
Validation2.mapError = (f) => (data) => is.failed(data) ? make.failedAll(data.errors.map(f)) : data;
|
|
2074
2195
|
Validation2.ap = (arg) => (data) => {
|
|
2075
|
-
if (
|
|
2076
|
-
return
|
|
2196
|
+
if (is.passed(data)) {
|
|
2197
|
+
return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
|
|
2077
2198
|
}
|
|
2078
|
-
return
|
|
2199
|
+
return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
|
|
2079
2200
|
};
|
|
2080
|
-
Validation2.fold = (onFailed, onPassed) => (data) =>
|
|
2081
|
-
Validation2.match = (cases) => (data) =>
|
|
2082
|
-
Validation2.getOrElse = (defaultValue) => (data) =>
|
|
2201
|
+
Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
2202
|
+
Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
2203
|
+
Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
|
|
2083
2204
|
Validation2.tap = (f) => (data) => {
|
|
2084
|
-
if (
|
|
2205
|
+
if (is.passed(data)) {
|
|
2085
2206
|
f(data.value);
|
|
2086
2207
|
}
|
|
2087
2208
|
return data;
|
|
2088
2209
|
};
|
|
2089
2210
|
Validation2.tapError = (f) => (data) => {
|
|
2090
|
-
if (
|
|
2211
|
+
if (is.failed(data)) {
|
|
2091
2212
|
f(data.errors);
|
|
2092
2213
|
}
|
|
2093
2214
|
return data;
|
|
2094
2215
|
};
|
|
2095
|
-
Validation2.recover = (fallback) => (data) =>
|
|
2096
|
-
Validation2.recoverUnless = (isBlocked, fallback) => (data) =>
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2216
|
+
Validation2.recover = (fallback) => (data) => is.passed(data) ? data : fallback(data.errors);
|
|
2217
|
+
Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
2218
|
+
let to;
|
|
2219
|
+
((to2) => {
|
|
2220
|
+
to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
|
|
2221
|
+
to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
2222
|
+
})(to = Validation2.to || (Validation2.to = {}));
|
|
2100
2223
|
Validation2.product = (first, second) => {
|
|
2101
|
-
if (
|
|
2102
|
-
return
|
|
2224
|
+
if (is.passed(first)) {
|
|
2225
|
+
return is.passed(second) ? make.passed([first.value, second.value]) : make.failedAll(second.errors);
|
|
2103
2226
|
}
|
|
2104
|
-
return
|
|
2227
|
+
return is.passed(second) ? make.failedAll(first.errors) : make.failedAll([...first.errors, ...second.errors]);
|
|
2105
2228
|
};
|
|
2106
2229
|
Validation2.productAll = (data) => {
|
|
2107
2230
|
const values = [];
|
|
2108
2231
|
const errors = [];
|
|
2109
2232
|
for (const v of data) {
|
|
2110
|
-
if (
|
|
2233
|
+
if (is.passed(v)) {
|
|
2111
2234
|
values.push(v.value);
|
|
2112
2235
|
} else {
|
|
2113
2236
|
errors.push(...v.errors);
|
|
2114
2237
|
}
|
|
2115
2238
|
}
|
|
2116
|
-
return isNonEmptyArr(errors) ?
|
|
2239
|
+
return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(values);
|
|
2117
2240
|
};
|
|
2118
2241
|
Validation2.struct = (fields) => {
|
|
2119
2242
|
const record = {};
|
|
@@ -2121,14 +2244,14 @@ var Validation;
|
|
|
2121
2244
|
for (const key in fields) {
|
|
2122
2245
|
if (Object.hasOwn(fields, key)) {
|
|
2123
2246
|
const val = fields[key];
|
|
2124
|
-
if (
|
|
2247
|
+
if (is.passed(val)) {
|
|
2125
2248
|
record[key] = val.value;
|
|
2126
2249
|
} else {
|
|
2127
2250
|
errors.push(...val.errors);
|
|
2128
2251
|
}
|
|
2129
2252
|
}
|
|
2130
2253
|
}
|
|
2131
|
-
return isNonEmptyArr(errors) ?
|
|
2254
|
+
return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(record);
|
|
2132
2255
|
};
|
|
2133
2256
|
})(Validation || (Validation = {}));
|
|
2134
2257
|
|