@nlozgachev/pipelined 0.43.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 +17 -16
- package/dist/{InternalTypes-DsCqxWZm.d.mts → InternalTypes-CLE7qlOc.d.mts} +33 -28
- package/dist/{InternalTypes-DuzMFAfJ.d.ts → InternalTypes-Mssktd7z.d.ts} +33 -28
- package/dist/{Validation-BOPLiDqa.d.ts → Validation-BMsvixWH.d.ts} +586 -554
- package/dist/{Validation-Do6uWLLZ.d.mts → Validation-v38R0qH-.d.mts} +586 -554
- package/dist/{chunk-W6RWKBDX.mjs → chunk-2LKJF45J.mjs} +160 -68
- package/dist/{chunk-X6XQX3OZ.mjs → chunk-KOYYDQH4.mjs} +2 -2
- package/dist/{chunk-CHRXZIJU.mjs → chunk-VSU36S2K.mjs} +435 -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 +445 -313
- package/dist/core.mjs +8 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +605 -381
- package/dist/index.mjs +10 -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 +468 -218
- package/dist/utils.d.ts +468 -218
- package/dist/utils.js +406 -238
- package/dist/utils.mjs +3 -3
- package/package.json +5 -5
package/dist/core.js
CHANGED
|
@@ -38,6 +38,9 @@ __export(Core_exports, {
|
|
|
38
38
|
Result: () => Result,
|
|
39
39
|
State: () => State,
|
|
40
40
|
Task: () => Task,
|
|
41
|
+
TaskMaybe: () => TaskMaybe,
|
|
42
|
+
TaskResult: () => TaskResult,
|
|
43
|
+
TaskValidation: () => TaskValidation,
|
|
41
44
|
These: () => These,
|
|
42
45
|
Tuple: () => Tuple,
|
|
43
46
|
Validation: () => Validation
|
|
@@ -54,8 +57,8 @@ var Combinable;
|
|
|
54
57
|
Combinable2.any = { empty: false, combine: (b) => (a) => a || b };
|
|
55
58
|
Combinable2.array = () => ({ empty: [], combine: (b) => (a) => [...a, ...b] });
|
|
56
59
|
Combinable2.maybe = (inner) => ({
|
|
57
|
-
empty: Maybe.none(),
|
|
58
|
-
combine: (b) => (a) => Maybe.
|
|
60
|
+
empty: Maybe.make.none(),
|
|
61
|
+
combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
|
|
59
62
|
});
|
|
60
63
|
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
61
64
|
})(Combinable || (Combinable = {}));
|
|
@@ -63,11 +66,17 @@ var Combinable;
|
|
|
63
66
|
// src/Core/Deferred.ts
|
|
64
67
|
var Deferred;
|
|
65
68
|
((Deferred2) => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
let from;
|
|
70
|
+
((from2) => {
|
|
71
|
+
from2.Promise = (p) => (
|
|
72
|
+
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
73
|
+
{ then: ((f) => p.then(f)) }
|
|
74
|
+
);
|
|
75
|
+
})(from = Deferred2.from || (Deferred2.from = {}));
|
|
76
|
+
let to;
|
|
77
|
+
((to2) => {
|
|
78
|
+
to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
|
|
79
|
+
})(to = Deferred2.to || (Deferred2.to = {}));
|
|
71
80
|
})(Deferred || (Deferred = {}));
|
|
72
81
|
|
|
73
82
|
// src/Core/Equality.ts
|
|
@@ -111,12 +120,15 @@ var Lazy;
|
|
|
111
120
|
// src/Core/Lens.ts
|
|
112
121
|
var Lens;
|
|
113
122
|
((Lens3) => {
|
|
114
|
-
|
|
115
|
-
|
|
123
|
+
let from;
|
|
124
|
+
((from2) => {
|
|
125
|
+
from2.accessors = (get2, set2) => ({ get: get2, set: set2 });
|
|
126
|
+
from2.property = () => (key) => (0, from2.accessors)((s) => s[key], (a) => (s) => ({ ...s, [key]: a }));
|
|
127
|
+
})(from = Lens3.from || (Lens3.from = {}));
|
|
116
128
|
Lens3.get = (lens) => (s) => lens.get(s);
|
|
117
129
|
Lens3.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
118
130
|
Lens3.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
119
|
-
Lens3.andThen = (inner) => (outer) =>
|
|
131
|
+
Lens3.andThen = (inner) => (outer) => from.accessors((s) => inner.get(outer.get(s)), (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s));
|
|
120
132
|
Lens3.andThenOptional = (inner) => (outer) => ({
|
|
121
133
|
get: (s) => inner.get(outer.get(s)),
|
|
122
134
|
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
@@ -130,8 +142,11 @@ var Lens;
|
|
|
130
142
|
// src/Core/Logged.ts
|
|
131
143
|
var Logged;
|
|
132
144
|
((Logged2) => {
|
|
133
|
-
|
|
134
|
-
|
|
145
|
+
let from;
|
|
146
|
+
((from2) => {
|
|
147
|
+
from2.value = (val) => ({ value: val, log: [] });
|
|
148
|
+
from2.entry = (logEntry) => ({ value: void 0, log: [logEntry] });
|
|
149
|
+
})(from = Logged2.from || (Logged2.from = {}));
|
|
135
150
|
Logged2.map = (f) => (data) => ({
|
|
136
151
|
value: f(data.value),
|
|
137
152
|
log: data.log
|
|
@@ -158,47 +173,59 @@ var Logged;
|
|
|
158
173
|
// src/Core/Maybe.ts
|
|
159
174
|
var _none = { kind: "None" };
|
|
160
175
|
var Maybe;
|
|
161
|
-
((
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
((Maybe3) => {
|
|
177
|
+
let make;
|
|
178
|
+
((make2) => {
|
|
179
|
+
make2.some = (value) => ({ kind: "Some", value });
|
|
180
|
+
make2.none = () => _none;
|
|
181
|
+
})(make = Maybe3.make || (Maybe3.make = {}));
|
|
182
|
+
let is;
|
|
183
|
+
((is2) => {
|
|
184
|
+
is2.some = (data) => data.kind === "Some";
|
|
185
|
+
is2.none = (data) => data.kind === "None";
|
|
186
|
+
})(is = Maybe3.is || (Maybe3.is = {}));
|
|
187
|
+
let to;
|
|
188
|
+
((to2) => {
|
|
189
|
+
to2.nullable = (data) => is.some(data) ? data.value : null;
|
|
190
|
+
to2.undefined = (data) => is.some(data) ? data.value : globalThis.undefined;
|
|
191
|
+
to2.Result = (onNone) => (data) => is.some(data) ? Result.make.ok(data.value) : Result.make.err(onNone());
|
|
192
|
+
})(to = Maybe3.to || (Maybe3.to = {}));
|
|
193
|
+
let from;
|
|
194
|
+
((from2) => {
|
|
195
|
+
from2.nullable = (value) => value === null || value === void 0 ? make.none() : make.some(value);
|
|
196
|
+
from2.Predicate = (pred) => (a) => pred(a) ? make.some(a) : make.none();
|
|
197
|
+
from2.Result = (data) => Result.is.ok(data) ? make.some(data.value) : make.none();
|
|
198
|
+
})(from = Maybe3.from || (Maybe3.from = {}));
|
|
199
|
+
Maybe3.map = (f) => (data) => is.some(data) ? make.some(f(data.value)) : data;
|
|
200
|
+
Maybe3.chain = (f) => (data) => is.some(data) ? f(data.value) : data;
|
|
201
|
+
Maybe3.fold = (onNone, onSome) => (data) => is.some(data) ? onSome(data.value) : onNone();
|
|
202
|
+
Maybe3.match = (cases) => (data) => is.some(data) ? cases.some(data.value) : cases.none();
|
|
203
|
+
Maybe3.getOrElse = (defaultValue) => (data) => is.some(data) ? data.value : defaultValue();
|
|
204
|
+
Maybe3.tap = (f) => (data) => {
|
|
205
|
+
if (is.some(data)) {
|
|
179
206
|
f(data.value);
|
|
180
207
|
}
|
|
181
208
|
return data;
|
|
182
209
|
};
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
(a) => (0,
|
|
210
|
+
Maybe3.filter = (predicate) => (data) => is.some(data) ? predicate(data.value) ? data : make.none() : data;
|
|
211
|
+
Maybe3.recover = (fallback) => (data) => is.some(data) ? data : fallback();
|
|
212
|
+
Maybe3.ap = (arg) => (data) => is.some(data) && is.some(arg) ? make.some(data.value(arg.value)) : make.none();
|
|
213
|
+
Maybe3.bindTo = (key) => (data) => (0, Maybe3.map)((a) => ({ [key]: a }))(data);
|
|
214
|
+
Maybe3.bind = (key, f) => (data) => (0, Maybe3.chain)(
|
|
215
|
+
(a) => (0, Maybe3.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
189
216
|
)(data);
|
|
190
|
-
|
|
217
|
+
Maybe3.struct = (fields) => {
|
|
191
218
|
const result = {};
|
|
192
219
|
for (const key in fields) {
|
|
193
220
|
if (Object.hasOwn(fields, key)) {
|
|
194
221
|
const res = fields[key];
|
|
195
|
-
if (
|
|
222
|
+
if (is.none(res)) {
|
|
196
223
|
return res;
|
|
197
224
|
}
|
|
198
225
|
result[key] = res.value;
|
|
199
226
|
}
|
|
200
227
|
}
|
|
201
|
-
return
|
|
228
|
+
return make.some(result);
|
|
202
229
|
};
|
|
203
230
|
})(Maybe || (Maybe = {}));
|
|
204
231
|
|
|
@@ -218,11 +245,14 @@ var Duration;
|
|
|
218
245
|
Duration2.minutes = (m) => wrap(m * 60 * 1e3);
|
|
219
246
|
Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
|
|
220
247
|
Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
248
|
+
let to;
|
|
249
|
+
((to2) => {
|
|
250
|
+
to2.milliseconds = (d) => Brand.unwrap(d);
|
|
251
|
+
to2.seconds = (d) => Brand.unwrap(d) / 1e3;
|
|
252
|
+
to2.minutes = (d) => Brand.unwrap(d) / (60 * 1e3);
|
|
253
|
+
to2.hours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
|
|
254
|
+
to2.days = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
|
|
255
|
+
})(to = Duration2.to || (Duration2.to = {}));
|
|
226
256
|
Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
|
|
227
257
|
Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
|
|
228
258
|
})(Duration || (Duration = {}));
|
|
@@ -236,7 +266,7 @@ var _idle = { kind: "Idle" };
|
|
|
236
266
|
var _pending = { kind: "Pending" };
|
|
237
267
|
var ok = (value) => ({ kind: "OpOk", value });
|
|
238
268
|
var err = (error) => ({ kind: "OpErr", error });
|
|
239
|
-
var getMs = (duration) => Duration.
|
|
269
|
+
var getMs = (duration) => Duration.to.milliseconds(duration);
|
|
240
270
|
var cancellableWait = (duration, signal) => {
|
|
241
271
|
const rawMs = getMs(duration);
|
|
242
272
|
if (rawMs <= 0) {
|
|
@@ -259,7 +289,7 @@ var runWithRetry = (op, input, signal, options, onRetrying) => {
|
|
|
259
289
|
return typeof backoff === "function" ? backoff(n) : backoff;
|
|
260
290
|
};
|
|
261
291
|
const attempt = async (left) => {
|
|
262
|
-
const result = await Deferred.
|
|
292
|
+
const result = await Deferred.to.Promise(op._factory(input, signal));
|
|
263
293
|
if (result === null || signal.aborted) {
|
|
264
294
|
return null;
|
|
265
295
|
}
|
|
@@ -294,12 +324,12 @@ var runWithRetry = (op, input, signal, options, onRetrying) => {
|
|
|
294
324
|
var execute = (op, input, controller, retryOptions, timeoutOptions, onRetrying) => {
|
|
295
325
|
const { signal } = controller;
|
|
296
326
|
const toOutcome = (r) => r === null ? _abortedNil : r.kind === "Ok" ? ok(r.value) : err(r.error);
|
|
297
|
-
const runPromise = retryOptions !== void 0 && onRetrying !== void 0 ? runWithRetry(op, input, signal, retryOptions, onRetrying).then(toOutcome) : Deferred.
|
|
327
|
+
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);
|
|
298
328
|
if (timeoutOptions === void 0) {
|
|
299
|
-
return Deferred.
|
|
329
|
+
return Deferred.from.Promise(runPromise);
|
|
300
330
|
}
|
|
301
331
|
let timerId;
|
|
302
|
-
return Deferred.
|
|
332
|
+
return Deferred.from.Promise(Promise.race([
|
|
303
333
|
runPromise.then((outcome) => {
|
|
304
334
|
clearTimeout(timerId);
|
|
305
335
|
return outcome;
|
|
@@ -323,7 +353,7 @@ var makeRestartable = (op, minInterval, retryOptions, timeoutOptions) => {
|
|
|
323
353
|
currentState = state;
|
|
324
354
|
subscribers.forEach((cb) => cb(state));
|
|
325
355
|
};
|
|
326
|
-
const run = (input) => Deferred.
|
|
356
|
+
const run = (input) => Deferred.from.Promise(
|
|
327
357
|
new Promise((resolve) => {
|
|
328
358
|
waitController?.abort();
|
|
329
359
|
waitController = void 0;
|
|
@@ -415,9 +445,9 @@ var makeExclusive = (op, cooldown, retryOptions, timeoutOptions) => {
|
|
|
415
445
|
};
|
|
416
446
|
const run = (input) => {
|
|
417
447
|
if (currentController !== void 0 || cooldownTimer !== void 0) {
|
|
418
|
-
return Deferred.
|
|
448
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
419
449
|
}
|
|
420
|
-
return Deferred.
|
|
450
|
+
return Deferred.from.Promise(
|
|
421
451
|
new Promise((resolve) => {
|
|
422
452
|
currentResolve = resolve;
|
|
423
453
|
currentController = new AbortController();
|
|
@@ -537,14 +567,14 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
537
567
|
}
|
|
538
568
|
}
|
|
539
569
|
if (inFlight < maxConcurrency) {
|
|
540
|
-
return Deferred.
|
|
570
|
+
return Deferred.from.Promise(
|
|
541
571
|
new Promise((resolve) => {
|
|
542
572
|
startOne(input, resolve, myGeneration);
|
|
543
573
|
})
|
|
544
574
|
);
|
|
545
575
|
}
|
|
546
576
|
if (maxSize === void 0 || queue.length < maxSize) {
|
|
547
|
-
return Deferred.
|
|
577
|
+
return Deferred.from.Promise(
|
|
548
578
|
new Promise((resolve) => {
|
|
549
579
|
queue.push({ input, resolve });
|
|
550
580
|
emit({ kind: "Queued", position: queue.length - 1 });
|
|
@@ -552,7 +582,7 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
552
582
|
);
|
|
553
583
|
}
|
|
554
584
|
if (overflow === "replace-last") {
|
|
555
|
-
return Deferred.
|
|
585
|
+
return Deferred.from.Promise(
|
|
556
586
|
new Promise((resolve) => {
|
|
557
587
|
const tail = queue.pop();
|
|
558
588
|
tail.resolve(_evictedNil);
|
|
@@ -561,7 +591,7 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
561
591
|
})
|
|
562
592
|
);
|
|
563
593
|
}
|
|
564
|
-
return Deferred.
|
|
594
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
565
595
|
};
|
|
566
596
|
const abort = () => {
|
|
567
597
|
generation++;
|
|
@@ -633,7 +663,7 @@ var makeBuffered = (op, size, retryOptions, timeoutOptions) => {
|
|
|
633
663
|
}
|
|
634
664
|
});
|
|
635
665
|
};
|
|
636
|
-
const run = (input) => Deferred.
|
|
666
|
+
const run = (input) => Deferred.from.Promise(
|
|
637
667
|
new Promise((resolve) => {
|
|
638
668
|
if (currentController === void 0) {
|
|
639
669
|
startRun(input, resolve);
|
|
@@ -759,7 +789,7 @@ var makeDebounced = (op, duration, leading, maxWait, retryOptions, timeoutOption
|
|
|
759
789
|
timerId = setTimeout(fireTrailing, delay);
|
|
760
790
|
};
|
|
761
791
|
const inDebounceWindow = () => timerId !== void 0 || leadingController !== void 0 || currentController !== void 0;
|
|
762
|
-
const run = (input) => Deferred.
|
|
792
|
+
const run = (input) => Deferred.from.Promise(
|
|
763
793
|
new Promise((resolve) => {
|
|
764
794
|
if (!inDebounceWindow()) {
|
|
765
795
|
firstCallAt = Date.now();
|
|
@@ -874,9 +904,9 @@ var makeThrottled = (op, duration, trailing, retryOptions, timeoutOptions) => {
|
|
|
874
904
|
const run = (input) => {
|
|
875
905
|
if (cooldownTimer !== void 0) {
|
|
876
906
|
if (!trailing) {
|
|
877
|
-
return Deferred.
|
|
907
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
878
908
|
}
|
|
879
|
-
return Deferred.
|
|
909
|
+
return Deferred.from.Promise(
|
|
880
910
|
new Promise((resolve) => {
|
|
881
911
|
const prev = pendingResolve;
|
|
882
912
|
pendingInput = input;
|
|
@@ -885,7 +915,7 @@ var makeThrottled = (op, duration, trailing, retryOptions, timeoutOptions) => {
|
|
|
885
915
|
})
|
|
886
916
|
);
|
|
887
917
|
}
|
|
888
|
-
return Deferred.
|
|
918
|
+
return Deferred.from.Promise(
|
|
889
919
|
new Promise((resolve) => {
|
|
890
920
|
fireOp(input, resolve);
|
|
891
921
|
startCooldown();
|
|
@@ -976,16 +1006,16 @@ var makeConcurrent = (op, n, overflow, retryOptions, timeoutOptions) => {
|
|
|
976
1006
|
const run = (input) => {
|
|
977
1007
|
const myGeneration = generation;
|
|
978
1008
|
if (inflight < n) {
|
|
979
|
-
return Deferred.
|
|
1009
|
+
return Deferred.from.Promise(
|
|
980
1010
|
new Promise((resolve) => {
|
|
981
1011
|
startOne(input, resolve, myGeneration);
|
|
982
1012
|
})
|
|
983
1013
|
);
|
|
984
1014
|
}
|
|
985
1015
|
if (overflow === "drop") {
|
|
986
|
-
return Deferred.
|
|
1016
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
987
1017
|
}
|
|
988
|
-
return Deferred.
|
|
1018
|
+
return Deferred.from.Promise(
|
|
989
1019
|
new Promise((resolve) => {
|
|
990
1020
|
overflowQueue.push({ input, resolve });
|
|
991
1021
|
emit({ kind: "Queued", position: overflowQueue.length - 1 });
|
|
@@ -1038,7 +1068,7 @@ var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
|
|
|
1038
1068
|
const k = keyFn(input);
|
|
1039
1069
|
if (slots.has(k)) {
|
|
1040
1070
|
if (perKey === "exclusive") {
|
|
1041
|
-
return Deferred.
|
|
1071
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
1042
1072
|
}
|
|
1043
1073
|
const existing = slots.get(k);
|
|
1044
1074
|
existing.controller.abort();
|
|
@@ -1046,7 +1076,7 @@ var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
|
|
|
1046
1076
|
slots.delete(k);
|
|
1047
1077
|
prev(_replacedNil);
|
|
1048
1078
|
}
|
|
1049
|
-
return Deferred.
|
|
1079
|
+
return Deferred.from.Promise(
|
|
1050
1080
|
new Promise((resolve) => {
|
|
1051
1081
|
const controller = new AbortController();
|
|
1052
1082
|
slots.set(k, { controller, resolve });
|
|
@@ -1126,9 +1156,9 @@ var makeOnce = (op, retryOptions, timeoutOptions) => {
|
|
|
1126
1156
|
};
|
|
1127
1157
|
const run = (input) => {
|
|
1128
1158
|
if (currentState.kind !== "Idle") {
|
|
1129
|
-
return Deferred.
|
|
1159
|
+
return Deferred.from.Promise(Promise.resolve(_droppedNil));
|
|
1130
1160
|
}
|
|
1131
|
-
return Deferred.
|
|
1161
|
+
return Deferred.from.Promise(
|
|
1132
1162
|
new Promise((resolve) => {
|
|
1133
1163
|
currentResolve = resolve;
|
|
1134
1164
|
currentController = new AbortController();
|
|
@@ -1189,10 +1219,8 @@ var Op;
|
|
|
1189
1219
|
((Op2) => {
|
|
1190
1220
|
Op2.nil = (reason) => ({ kind: "OpNil", reason });
|
|
1191
1221
|
Op2.create = (factory, onError) => ({
|
|
1192
|
-
_factory: (input, signal) => Deferred.
|
|
1193
|
-
factory(signal)(input).then((value) => Result.ok(value)).catch(
|
|
1194
|
-
(error) => signal.aborted ? null : Result.err(onError(error))
|
|
1195
|
-
)
|
|
1222
|
+
_factory: (input, signal) => Deferred.from.Promise(
|
|
1223
|
+
factory(signal)(input).then((value) => Result.make.ok(value)).catch((error) => signal.aborted ? null : Result.make.err(onError(error)))
|
|
1196
1224
|
)
|
|
1197
1225
|
});
|
|
1198
1226
|
Op2.lift = (f) => (0, Op2.create)((signal) => (input) => f(input, signal), (e) => e);
|
|
@@ -1234,18 +1262,21 @@ var Op;
|
|
|
1234
1262
|
return outcome;
|
|
1235
1263
|
};
|
|
1236
1264
|
Op2.recover = (f) => (outcome) => outcome.kind === "OpErr" ? f(outcome.error) : outcome;
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1265
|
+
let to;
|
|
1266
|
+
((to2) => {
|
|
1267
|
+
to2.Result = (onNil) => (outcome) => {
|
|
1268
|
+
if (outcome.kind === "OpOk") {
|
|
1269
|
+
return Result.make.ok(outcome.value);
|
|
1270
|
+
}
|
|
1271
|
+
if (outcome.kind === "OpErr") {
|
|
1272
|
+
return Result.make.err(outcome.error);
|
|
1273
|
+
}
|
|
1274
|
+
return Result.make.err(onNil());
|
|
1275
|
+
};
|
|
1276
|
+
to2.Maybe = (outcome) => outcome.kind === "OpOk" ? Maybe.make.some(outcome.value) : Maybe.make.none();
|
|
1277
|
+
})(to = Op2.to || (Op2.to = {}));
|
|
1278
|
+
Op2.all = (invocations) => Deferred.from.Promise(Promise.all(invocations.map(Deferred.to.Promise)));
|
|
1279
|
+
Op2.race = (invocations) => Deferred.from.Promise(Promise.race(invocations.map(Deferred.to.Promise)));
|
|
1249
1280
|
Op2.wire = (source, f) => source.subscribe((state) => {
|
|
1250
1281
|
if ((0, Op2.isOk)(state)) {
|
|
1251
1282
|
f(state.value);
|
|
@@ -1310,12 +1341,18 @@ var Op;
|
|
|
1310
1341
|
// src/Core/Optional.ts
|
|
1311
1342
|
var Optional;
|
|
1312
1343
|
((Optional2) => {
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1344
|
+
let from;
|
|
1345
|
+
((from2) => {
|
|
1346
|
+
from2.accessors = (get2, set2) => ({
|
|
1347
|
+
get: get2,
|
|
1348
|
+
set: set2
|
|
1349
|
+
});
|
|
1350
|
+
from2.property = () => (key) => (0, from2.accessors)((s) => {
|
|
1351
|
+
const val = s[key];
|
|
1352
|
+
return val !== null && val !== void 0 ? Maybe.make.some(val) : Maybe.make.none();
|
|
1353
|
+
}, (a) => (s) => ({ ...s, [key]: a }));
|
|
1354
|
+
})(from = Optional2.from || (Optional2.from = {}));
|
|
1355
|
+
Optional2.index = (i) => from.accessors((arr) => i >= 0 && i < arr.length ? Maybe.make.some(arr[i]) : Maybe.make.none(), (a) => (arr) => {
|
|
1319
1356
|
if (i < 0 || i >= arr.length) {
|
|
1320
1357
|
return arr;
|
|
1321
1358
|
}
|
|
@@ -1341,16 +1378,16 @@ var Optional;
|
|
|
1341
1378
|
const val = opt.get(s);
|
|
1342
1379
|
return val.kind === "Some" ? cases.some(val.value) : cases.none();
|
|
1343
1380
|
};
|
|
1344
|
-
Optional2.andThen = (inner) => (outer) =>
|
|
1381
|
+
Optional2.andThen = (inner) => (outer) => from.accessors((s) => {
|
|
1345
1382
|
const mid = outer.get(s);
|
|
1346
|
-
return mid.kind === "None" ? Maybe.none() : inner.get(mid.value);
|
|
1383
|
+
return mid.kind === "None" ? Maybe.make.none() : inner.get(mid.value);
|
|
1347
1384
|
}, (b) => (s) => {
|
|
1348
1385
|
const mid = outer.get(s);
|
|
1349
1386
|
return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
|
|
1350
1387
|
});
|
|
1351
|
-
Optional2.andThenLens = (inner) => (outer) =>
|
|
1388
|
+
Optional2.andThenLens = (inner) => (outer) => from.accessors((s) => {
|
|
1352
1389
|
const mid = outer.get(s);
|
|
1353
|
-
return mid.kind === "None" ? Maybe.none() : Maybe.some(inner.get(mid.value));
|
|
1390
|
+
return mid.kind === "None" ? Maybe.make.none() : Maybe.make.some(inner.get(mid.value));
|
|
1354
1391
|
}, (b) => (s) => {
|
|
1355
1392
|
const mid = outer.get(s);
|
|
1356
1393
|
return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
|
|
@@ -1380,7 +1417,10 @@ var Predicate;
|
|
|
1380
1417
|
Predicate2.using = (f) => (p) => (b) => p(f(b));
|
|
1381
1418
|
Predicate2.all = (predicates) => (a) => predicates.every((p) => p(a));
|
|
1382
1419
|
Predicate2.any = (predicates) => (a) => predicates.some((p) => p(a));
|
|
1383
|
-
|
|
1420
|
+
let from;
|
|
1421
|
+
((from2) => {
|
|
1422
|
+
from2.Refinement = (r) => r;
|
|
1423
|
+
})(from = Predicate2.from || (Predicate2.from = {}));
|
|
1384
1424
|
})(Predicate || (Predicate = {}));
|
|
1385
1425
|
|
|
1386
1426
|
// src/Core/Reader.ts
|
|
@@ -1408,12 +1448,18 @@ var Reader;
|
|
|
1408
1448
|
// src/Core/Refinement.ts
|
|
1409
1449
|
var Refinement;
|
|
1410
1450
|
((Refinement2) => {
|
|
1411
|
-
|
|
1451
|
+
let from;
|
|
1452
|
+
((from2) => {
|
|
1453
|
+
from2.predicate = (f) => f;
|
|
1454
|
+
})(from = Refinement2.from || (Refinement2.from = {}));
|
|
1412
1455
|
Refinement2.compose = (bc) => (ab) => (a) => ab(a) && bc(a);
|
|
1413
1456
|
Refinement2.and = (second) => (first) => (a) => first(a) && second(a);
|
|
1414
1457
|
Refinement2.or = (second) => (first) => (a) => first(a) || second(a);
|
|
1415
|
-
|
|
1416
|
-
|
|
1458
|
+
let to;
|
|
1459
|
+
((to2) => {
|
|
1460
|
+
to2.Maybe = (r) => (a) => r(a) ? Maybe.make.some(a) : Maybe.make.none();
|
|
1461
|
+
to2.Result = (r, onFail) => (a) => r(a) ? Result.make.ok(a) : Result.make.err(onFail(a));
|
|
1462
|
+
})(to = Refinement2.to || (Refinement2.to = {}));
|
|
1417
1463
|
})(Refinement || (Refinement = {}));
|
|
1418
1464
|
|
|
1419
1465
|
// src/Core/RemoteData.ts
|
|
@@ -1421,31 +1467,37 @@ var _notAsked = { kind: "NotAsked" };
|
|
|
1421
1467
|
var _loading = { kind: "Loading" };
|
|
1422
1468
|
var RemoteData;
|
|
1423
1469
|
((RemoteData2) => {
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
RemoteData2.
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1470
|
+
let make;
|
|
1471
|
+
((make2) => {
|
|
1472
|
+
make2.notAsked = () => _notAsked;
|
|
1473
|
+
make2.loading = () => _loading;
|
|
1474
|
+
make2.failure = (error) => ({ kind: "Failure", error });
|
|
1475
|
+
make2.success = (value) => ({ kind: "Success", value });
|
|
1476
|
+
})(make = RemoteData2.make || (RemoteData2.make = {}));
|
|
1477
|
+
let is;
|
|
1478
|
+
((is2) => {
|
|
1479
|
+
is2.notAsked = (data) => data.kind === "NotAsked";
|
|
1480
|
+
is2.loading = (data) => data.kind === "Loading";
|
|
1481
|
+
is2.failure = (data) => data.kind === "Failure";
|
|
1482
|
+
is2.success = (data) => data.kind === "Success";
|
|
1483
|
+
})(is = RemoteData2.is || (RemoteData2.is = {}));
|
|
1484
|
+
RemoteData2.map = (f) => (data) => is.success(data) ? make.success(f(data.value)) : data;
|
|
1485
|
+
RemoteData2.mapError = (f) => (data) => is.failure(data) ? make.failure(f(data.error)) : data;
|
|
1486
|
+
RemoteData2.chain = (f) => (data) => is.success(data) ? f(data.value) : data;
|
|
1435
1487
|
RemoteData2.ap = (arg) => (data) => {
|
|
1436
|
-
if (
|
|
1437
|
-
return
|
|
1488
|
+
if (is.success(data) && is.success(arg)) {
|
|
1489
|
+
return make.success(data.value(arg.value));
|
|
1438
1490
|
}
|
|
1439
|
-
if (
|
|
1491
|
+
if (is.failure(data)) {
|
|
1440
1492
|
return data;
|
|
1441
1493
|
}
|
|
1442
|
-
if (
|
|
1494
|
+
if (is.failure(arg)) {
|
|
1443
1495
|
return arg;
|
|
1444
1496
|
}
|
|
1445
|
-
if (
|
|
1446
|
-
return
|
|
1497
|
+
if (is.loading(data) || is.loading(arg)) {
|
|
1498
|
+
return make.loading();
|
|
1447
1499
|
}
|
|
1448
|
-
return
|
|
1500
|
+
return make.notAsked();
|
|
1449
1501
|
};
|
|
1450
1502
|
RemoteData2.fold = (onFailure, onNotAsked, onLoading, onSuccess) => (data) => {
|
|
1451
1503
|
switch (data.kind) {
|
|
@@ -1479,69 +1531,78 @@ var RemoteData;
|
|
|
1479
1531
|
}
|
|
1480
1532
|
}
|
|
1481
1533
|
};
|
|
1482
|
-
RemoteData2.getOrElse = (defaultValue) => (data) =>
|
|
1534
|
+
RemoteData2.getOrElse = (defaultValue) => (data) => is.success(data) ? data.value : defaultValue();
|
|
1483
1535
|
RemoteData2.tap = (f) => (data) => {
|
|
1484
|
-
if (
|
|
1536
|
+
if (is.success(data)) {
|
|
1485
1537
|
f(data.value);
|
|
1486
1538
|
}
|
|
1487
1539
|
return data;
|
|
1488
1540
|
};
|
|
1489
1541
|
RemoteData2.tapError = (f) => (data) => {
|
|
1490
|
-
if (
|
|
1542
|
+
if (is.failure(data)) {
|
|
1491
1543
|
f(data.error);
|
|
1492
1544
|
}
|
|
1493
1545
|
return data;
|
|
1494
1546
|
};
|
|
1495
|
-
RemoteData2.recover = (fallback) => (data) =>
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1547
|
+
RemoteData2.recover = (fallback) => (data) => is.failure(data) ? fallback(data.error) : data;
|
|
1548
|
+
let to;
|
|
1549
|
+
((to2) => {
|
|
1550
|
+
to2.Maybe = (data) => is.success(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
1551
|
+
to2.Result = (onNotReady) => (data) => is.success(data) ? Result.make.ok(data.value) : Result.make.err(is.failure(data) ? data.error : onNotReady());
|
|
1552
|
+
})(to = RemoteData2.to || (RemoteData2.to = {}));
|
|
1553
|
+
let from;
|
|
1554
|
+
((from2) => {
|
|
1555
|
+
from2.Result = (data) => Result.is.ok(data) ? make.success(data.value) : make.failure(data.error);
|
|
1556
|
+
from2.Maybe = (onNone) => (data) => Maybe.is.some(data) ? make.success(data.value) : make.failure(onNone());
|
|
1557
|
+
})(from = RemoteData2.from || (RemoteData2.from = {}));
|
|
1558
|
+
RemoteData2.filter = (pred, onFalse) => (data) => is.success(data) ? pred(data.value) ? data : make.failure(onFalse(data.value)) : data;
|
|
1501
1559
|
})(RemoteData || (RemoteData = {}));
|
|
1502
1560
|
|
|
1503
1561
|
// src/Core/Resource.ts
|
|
1504
1562
|
var Resource;
|
|
1505
1563
|
((Resource2) => {
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
release
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
release
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1564
|
+
let from;
|
|
1565
|
+
((from2) => {
|
|
1566
|
+
from2.handlers = (acquire, release) => ({
|
|
1567
|
+
acquire,
|
|
1568
|
+
release
|
|
1569
|
+
});
|
|
1570
|
+
from2.Task = (acquire, release) => ({
|
|
1571
|
+
acquire: Task.map((a) => Result.make.ok(a))(acquire),
|
|
1572
|
+
release
|
|
1573
|
+
});
|
|
1574
|
+
})(from = Resource2.from || (Resource2.from = {}));
|
|
1575
|
+
Resource2.use = (f) => (resource) => Task.from.Promise(
|
|
1576
|
+
(signal) => Deferred.to.Promise(resource.acquire(signal)).then(async (acquired) => {
|
|
1577
|
+
if (Result.is.err(acquired)) {
|
|
1517
1578
|
return acquired;
|
|
1518
1579
|
}
|
|
1519
1580
|
const a = acquired.value;
|
|
1520
1581
|
try {
|
|
1521
|
-
const usageResult = await Deferred.
|
|
1582
|
+
const usageResult = await Deferred.to.Promise(f(a)(signal));
|
|
1522
1583
|
return usageResult;
|
|
1523
1584
|
} finally {
|
|
1524
|
-
await Deferred.
|
|
1585
|
+
await Deferred.to.Promise(resource.release(a)(signal));
|
|
1525
1586
|
}
|
|
1526
1587
|
})
|
|
1527
1588
|
);
|
|
1528
1589
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1529
|
-
acquire: Task.from(
|
|
1530
|
-
(signal) => Deferred.
|
|
1531
|
-
if (Result.
|
|
1590
|
+
acquire: Task.from.Promise(
|
|
1591
|
+
(signal) => Deferred.to.Promise(resourceA.acquire(signal)).then(async (acquiredA) => {
|
|
1592
|
+
if (Result.is.err(acquiredA)) {
|
|
1532
1593
|
return acquiredA;
|
|
1533
1594
|
}
|
|
1534
1595
|
const a = acquiredA.value;
|
|
1535
|
-
const acquiredB = await Deferred.
|
|
1536
|
-
if (Result.
|
|
1537
|
-
await Deferred.
|
|
1596
|
+
const acquiredB = await Deferred.to.Promise(resourceB.acquire(signal));
|
|
1597
|
+
if (Result.is.err(acquiredB)) {
|
|
1598
|
+
await Deferred.to.Promise(resourceA.release(a)(signal));
|
|
1538
1599
|
return acquiredB;
|
|
1539
1600
|
}
|
|
1540
|
-
return Result.ok([a, acquiredB.value]);
|
|
1601
|
+
return Result.make.ok([a, acquiredB.value]);
|
|
1541
1602
|
})
|
|
1542
1603
|
),
|
|
1543
|
-
release: ([a, b]) => Task.from(
|
|
1544
|
-
(signal) => Deferred.
|
|
1604
|
+
release: ([a, b]) => Task.from.Promise(
|
|
1605
|
+
(signal) => Deferred.to.Promise(resourceB.release(b)(signal)).then(() => Deferred.to.Promise(resourceA.release(a)(signal)))
|
|
1545
1606
|
)
|
|
1546
1607
|
});
|
|
1547
1608
|
})(Resource || (Resource = {}));
|
|
@@ -1549,49 +1610,61 @@ var Resource;
|
|
|
1549
1610
|
// src/Core/Result.ts
|
|
1550
1611
|
var Result;
|
|
1551
1612
|
((Result4) => {
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1613
|
+
let make;
|
|
1614
|
+
((make2) => {
|
|
1615
|
+
make2.ok = (value) => ({ kind: "Ok", value });
|
|
1616
|
+
make2.err = (e) => ({ kind: "Err", error: e });
|
|
1617
|
+
})(make = Result4.make || (Result4.make = {}));
|
|
1618
|
+
let is;
|
|
1619
|
+
((is2) => {
|
|
1620
|
+
is2.ok = (data) => data.kind === "Ok";
|
|
1621
|
+
is2.err = (data) => data.kind === "Err";
|
|
1622
|
+
})(is = Result4.is || (Result4.is = {}));
|
|
1556
1623
|
Result4.tryCatch = (f, onError) => {
|
|
1557
1624
|
try {
|
|
1558
|
-
return
|
|
1625
|
+
return make.ok(f());
|
|
1559
1626
|
} catch (error) {
|
|
1560
|
-
return
|
|
1627
|
+
return make.err(onError(error));
|
|
1561
1628
|
}
|
|
1562
1629
|
};
|
|
1563
|
-
Result4.map = (f) => (data) =>
|
|
1564
|
-
Result4.mapError = (f) => (data) =>
|
|
1565
|
-
Result4.chain = (f) => (data) =>
|
|
1566
|
-
Result4.fold = (onErr, onOk) => (data) =>
|
|
1567
|
-
Result4.match = (cases) => (data) =>
|
|
1568
|
-
Result4.getOrElse = (defaultValue) => (data) =>
|
|
1630
|
+
Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
|
|
1631
|
+
Result4.mapError = (f) => (data) => is.err(data) ? make.err(f(data.error)) : data;
|
|
1632
|
+
Result4.chain = (f) => (data) => is.ok(data) ? f(data.value) : data;
|
|
1633
|
+
Result4.fold = (onErr, onOk) => (data) => is.ok(data) ? onOk(data.value) : onErr(data.error);
|
|
1634
|
+
Result4.match = (cases) => (data) => is.ok(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
1635
|
+
Result4.getOrElse = (defaultValue) => (data) => is.ok(data) ? data.value : defaultValue();
|
|
1569
1636
|
Result4.tap = (f) => (data) => {
|
|
1570
|
-
if (
|
|
1637
|
+
if (is.ok(data)) {
|
|
1571
1638
|
f(data.value);
|
|
1572
1639
|
}
|
|
1573
1640
|
return data;
|
|
1574
1641
|
};
|
|
1575
1642
|
Result4.tapError = (f) => (data) => {
|
|
1576
|
-
if (
|
|
1643
|
+
if (is.err(data)) {
|
|
1577
1644
|
f(data.error);
|
|
1578
1645
|
}
|
|
1579
1646
|
return data;
|
|
1580
1647
|
};
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
Result4.
|
|
1648
|
+
let from;
|
|
1649
|
+
((from2) => {
|
|
1650
|
+
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
|
|
1651
|
+
from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
|
|
1652
|
+
from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
|
|
1653
|
+
from2.throwable = (f, onError) => (...args) => {
|
|
1654
|
+
try {
|
|
1655
|
+
return make.ok(f(...args));
|
|
1656
|
+
} catch (error) {
|
|
1657
|
+
return make.err(onError(error));
|
|
1658
|
+
}
|
|
1659
|
+
};
|
|
1660
|
+
})(from = Result4.from || (Result4.from = {}));
|
|
1661
|
+
Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
|
|
1662
|
+
Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
|
|
1663
|
+
let to;
|
|
1664
|
+
((to2) => {
|
|
1665
|
+
to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
1666
|
+
})(to = Result4.to || (Result4.to = {}));
|
|
1667
|
+
Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
|
|
1595
1668
|
Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
|
|
1596
1669
|
Result4.bind = (key, f) => (data) => (0, Result4.chain)(
|
|
1597
1670
|
(a) => (0, Result4.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
@@ -1601,13 +1674,13 @@ var Result;
|
|
|
1601
1674
|
for (const key in fields) {
|
|
1602
1675
|
if (Object.hasOwn(fields, key)) {
|
|
1603
1676
|
const res = fields[key];
|
|
1604
|
-
if (
|
|
1677
|
+
if (is.err(res)) {
|
|
1605
1678
|
return res;
|
|
1606
1679
|
}
|
|
1607
1680
|
result[key] = res.value;
|
|
1608
1681
|
}
|
|
1609
1682
|
}
|
|
1610
|
-
return
|
|
1683
|
+
return make.ok(result);
|
|
1611
1684
|
};
|
|
1612
1685
|
})(Result || (Result = {}));
|
|
1613
1686
|
|
|
@@ -1649,17 +1722,24 @@ var State;
|
|
|
1649
1722
|
// src/Core/TaskMaybe.ts
|
|
1650
1723
|
var TaskMaybe;
|
|
1651
1724
|
((TaskMaybe2) => {
|
|
1652
|
-
TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
|
|
1653
|
-
TaskMaybe2.none = () => Task.resolve(Maybe.none());
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1725
|
+
TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
|
|
1726
|
+
TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
|
|
1727
|
+
let from;
|
|
1728
|
+
((from2) => {
|
|
1729
|
+
from2.Maybe = (option) => Task.resolve(option);
|
|
1730
|
+
from2.nullable = (value) => Task.resolve(Maybe.from.nullable(value));
|
|
1731
|
+
from2.Result = (result) => Task.resolve(Result.to.Maybe(result));
|
|
1732
|
+
from2.Task = (task) => Task.map(Maybe.make.some)(task);
|
|
1733
|
+
})(from = TaskMaybe2.from || (TaskMaybe2.from = {}));
|
|
1734
|
+
TaskMaybe2.tryCatch = (f) => Task.from.Promise(
|
|
1735
|
+
(signal) => Promise.resolve(f(signal)).then(Maybe.make.some).catch(() => Maybe.make.none())
|
|
1736
|
+
);
|
|
1659
1737
|
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
1660
|
-
TaskMaybe2.chain = (f) => (data) => Task.chain(
|
|
1661
|
-
|
|
1662
|
-
|
|
1738
|
+
TaskMaybe2.chain = (f) => (data) => Task.chain(
|
|
1739
|
+
(option) => Maybe.is.some(option) ? f(option.value) : Task.resolve(Maybe.make.none())
|
|
1740
|
+
)(data);
|
|
1741
|
+
TaskMaybe2.ap = (arg) => (data) => Task.from.Promise(
|
|
1742
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1663
1743
|
([of_, oa]) => Maybe.ap(oa)(of_)
|
|
1664
1744
|
)
|
|
1665
1745
|
);
|
|
@@ -1668,25 +1748,30 @@ var TaskMaybe;
|
|
|
1668
1748
|
TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
|
|
1669
1749
|
TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
|
|
1670
1750
|
TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
|
|
1671
|
-
|
|
1751
|
+
let to;
|
|
1752
|
+
((to2) => {
|
|
1753
|
+
to2.Result = (onNone) => (data) => Task.map(Maybe.to.Result(onNone))(data);
|
|
1754
|
+
})(to = TaskMaybe2.to || (TaskMaybe2.to = {}));
|
|
1672
1755
|
TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
|
|
1673
1756
|
TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
|
|
1674
1757
|
(a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1675
1758
|
)(data);
|
|
1676
|
-
TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.
|
|
1677
|
-
|
|
1759
|
+
TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.is.none(maybe) ? fallback() : Task.resolve(maybe))(
|
|
1760
|
+
data
|
|
1761
|
+
);
|
|
1762
|
+
TaskMaybe2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1678
1763
|
const keys = Object.keys(fields);
|
|
1679
|
-
const promises = keys.map((key) => Deferred.
|
|
1764
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1680
1765
|
return Promise.all(promises).then((results) => {
|
|
1681
1766
|
const record = {};
|
|
1682
1767
|
for (let i = 0; i < keys.length; i++) {
|
|
1683
1768
|
const res = results[i];
|
|
1684
|
-
if (Maybe.
|
|
1769
|
+
if (Maybe.is.none(res)) {
|
|
1685
1770
|
return res;
|
|
1686
1771
|
}
|
|
1687
1772
|
record[keys[i]] = res.value;
|
|
1688
1773
|
}
|
|
1689
|
-
return Maybe.some(record);
|
|
1774
|
+
return Maybe.make.some(record);
|
|
1690
1775
|
});
|
|
1691
1776
|
});
|
|
1692
1777
|
})(TaskMaybe || (TaskMaybe = {}));
|
|
@@ -1694,28 +1779,35 @@ var TaskMaybe;
|
|
|
1694
1779
|
// src/Core/TaskResult.ts
|
|
1695
1780
|
var TaskResult;
|
|
1696
1781
|
((TaskResult2) => {
|
|
1697
|
-
TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
|
|
1698
|
-
TaskResult2.err = (error) => Task.resolve(Result.err(error));
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1782
|
+
TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
|
|
1783
|
+
TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
|
|
1784
|
+
let from;
|
|
1785
|
+
((from2) => {
|
|
1786
|
+
from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
|
|
1787
|
+
from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
|
|
1788
|
+
from2.Result = (result) => Task.resolve(result);
|
|
1789
|
+
from2.throwable = (f, onError) => (...args) => Task.from.Promise(
|
|
1790
|
+
() => f(...args).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
|
|
1791
|
+
);
|
|
1792
|
+
})(from = TaskResult2.from || (TaskResult2.from = {}));
|
|
1793
|
+
TaskResult2.tryCatch = (f, onError) => Task.from.Promise(
|
|
1794
|
+
(signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
|
|
1795
|
+
);
|
|
1704
1796
|
TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
1705
1797
|
TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
1706
|
-
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1707
|
-
|
|
1708
|
-
);
|
|
1798
|
+
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1799
|
+
(result) => Result.is.ok(result) ? f(result.value) : Task.resolve(Result.make.err(result.error))
|
|
1800
|
+
)(data);
|
|
1709
1801
|
TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
|
|
1710
1802
|
TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
|
|
1711
1803
|
TaskResult2.recover = (fallback) => (data) => Task.chain(
|
|
1712
|
-
(result) => Result.
|
|
1804
|
+
(result) => Result.is.err(result) ? fallback(result.error) : Task.resolve(result)
|
|
1713
1805
|
)(data);
|
|
1714
1806
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1715
1807
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1716
1808
|
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1717
|
-
TaskResult2.ap = (arg) => (data) => Task.from(
|
|
1718
|
-
(signal) => Promise.all([Deferred.
|
|
1809
|
+
TaskResult2.ap = (arg) => (data) => Task.from.Promise(
|
|
1810
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1719
1811
|
([of_, oa]) => Result.ap(oa)(of_)
|
|
1720
1812
|
)
|
|
1721
1813
|
);
|
|
@@ -1724,19 +1816,19 @@ var TaskResult;
|
|
|
1724
1816
|
TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
|
|
1725
1817
|
(a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1726
1818
|
)(data);
|
|
1727
|
-
TaskResult2.struct = (fields) => Task.from((signal) => {
|
|
1819
|
+
TaskResult2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1728
1820
|
const keys = Object.keys(fields);
|
|
1729
|
-
const promises = keys.map((key) => Deferred.
|
|
1821
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1730
1822
|
return Promise.all(promises).then((results) => {
|
|
1731
1823
|
const record = {};
|
|
1732
1824
|
for (let i = 0; i < keys.length; i++) {
|
|
1733
1825
|
const res = results[i];
|
|
1734
|
-
if (Result.
|
|
1826
|
+
if (Result.is.err(res)) {
|
|
1735
1827
|
return res;
|
|
1736
1828
|
}
|
|
1737
1829
|
record[keys[i]] = res.value;
|
|
1738
1830
|
}
|
|
1739
|
-
return Result.ok(record);
|
|
1831
|
+
return Result.make.ok(record);
|
|
1740
1832
|
});
|
|
1741
1833
|
});
|
|
1742
1834
|
})(TaskResult || (TaskResult = {}));
|
|
@@ -1747,19 +1839,28 @@ var isNonEmptyArr = (list) => list.length > 0;
|
|
|
1747
1839
|
// src/Core/TaskValidation.ts
|
|
1748
1840
|
var TaskValidation;
|
|
1749
1841
|
((TaskValidation2) => {
|
|
1750
|
-
TaskValidation2.passed = (value) => Task.resolve(Validation.passed(value));
|
|
1751
|
-
TaskValidation2.failed = (error) => Task.resolve(Validation.failed(error));
|
|
1752
|
-
TaskValidation2.failedAll = (errors) => Task.resolve(Validation.failedAll(errors));
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1842
|
+
TaskValidation2.passed = (value) => Task.resolve(Validation.make.passed(value));
|
|
1843
|
+
TaskValidation2.failed = (error) => Task.resolve(Validation.make.failed(error));
|
|
1844
|
+
TaskValidation2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
|
|
1845
|
+
let from;
|
|
1846
|
+
((from2) => {
|
|
1847
|
+
from2.Validation = (validation) => Task.resolve(validation);
|
|
1848
|
+
from2.nullable = (onNull) => (value) => Task.resolve(
|
|
1849
|
+
value === null || value === void 0 ? Validation.make.failed(onNull()) : Validation.make.passed(value)
|
|
1850
|
+
);
|
|
1851
|
+
from2.Maybe = (onNone) => (maybe) => Task.resolve(
|
|
1852
|
+
Maybe.is.none(maybe) ? Validation.make.failed(onNone()) : Validation.make.passed(maybe.value)
|
|
1853
|
+
);
|
|
1854
|
+
from2.Result = (result) => Task.resolve(Validation.from.Result(result));
|
|
1855
|
+
})(from = TaskValidation2.from || (TaskValidation2.from = {}));
|
|
1856
|
+
TaskValidation2.tryCatch = (f, onError) => Task.from.Promise(
|
|
1857
|
+
(signal) => Promise.resolve(f(signal)).then(Validation.make.passed).catch(
|
|
1858
|
+
(error) => Validation.make.failed(onError(error))
|
|
1859
|
+
)
|
|
1759
1860
|
);
|
|
1760
1861
|
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
1761
|
-
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
1762
|
-
(signal) => Promise.all([Deferred.
|
|
1862
|
+
TaskValidation2.ap = (arg) => (data) => Task.from.Promise(
|
|
1863
|
+
(signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
|
|
1763
1864
|
([vf, va]) => Validation.ap(va)(vf)
|
|
1764
1865
|
)
|
|
1765
1866
|
);
|
|
@@ -1768,61 +1869,64 @@ var TaskValidation;
|
|
|
1768
1869
|
TaskValidation2.getOrElse = (defaultValue) => (data) => Task.map(Validation.getOrElse(defaultValue))(data);
|
|
1769
1870
|
TaskValidation2.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
|
|
1770
1871
|
TaskValidation2.recover = (fallback) => (data) => Task.chain(
|
|
1771
|
-
(validation) => Validation.
|
|
1872
|
+
(validation) => Validation.is.passed(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
1772
1873
|
)(data);
|
|
1773
|
-
TaskValidation2.product = (first, second) => Task.from(
|
|
1774
|
-
(signal) => Promise.all([Deferred.
|
|
1874
|
+
TaskValidation2.product = (first, second) => Task.from.Promise(
|
|
1875
|
+
(signal) => Promise.all([Deferred.to.Promise(first(signal)), Deferred.to.Promise(second(signal))]).then(
|
|
1775
1876
|
([va, vb]) => Validation.product(va, vb)
|
|
1776
1877
|
)
|
|
1777
1878
|
);
|
|
1778
|
-
TaskValidation2.productAll = (data) => Task.from(
|
|
1779
|
-
(signal) => Promise.all(data.map((t) => Deferred.
|
|
1879
|
+
TaskValidation2.productAll = (data) => Task.from.Promise(
|
|
1880
|
+
(signal) => Promise.all(data.map((t) => Deferred.to.Promise(t(signal)))).then((results) => {
|
|
1780
1881
|
const [first, ...rest] = results;
|
|
1781
1882
|
return Validation.productAll([first, ...rest]);
|
|
1782
1883
|
})
|
|
1783
1884
|
);
|
|
1784
1885
|
TaskValidation2.mapError = (f) => (data) => Task.map(Validation.mapError(f))(data);
|
|
1785
1886
|
TaskValidation2.tapError = (f) => (data) => Task.map(Validation.tapError(f))(data);
|
|
1786
|
-
TaskValidation2.struct = (fields) => Task.from((signal) => {
|
|
1887
|
+
TaskValidation2.struct = (fields) => Task.from.Promise((signal) => {
|
|
1787
1888
|
const keys = Object.keys(fields);
|
|
1788
|
-
const promises = keys.map((key) => Deferred.
|
|
1889
|
+
const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
|
|
1789
1890
|
return Promise.all(promises).then((results) => {
|
|
1790
1891
|
const record = {};
|
|
1791
1892
|
const errors = [];
|
|
1792
1893
|
for (let i = 0; i < keys.length; i++) {
|
|
1793
1894
|
const res = results[i];
|
|
1794
|
-
if (Validation.
|
|
1895
|
+
if (Validation.is.passed(res)) {
|
|
1795
1896
|
record[keys[i]] = res.value;
|
|
1796
1897
|
} else {
|
|
1797
1898
|
errors.push(...res.errors);
|
|
1798
1899
|
}
|
|
1799
1900
|
}
|
|
1800
|
-
return isNonEmptyArr(errors) ? Validation.failedAll(errors) : Validation.passed(record);
|
|
1901
|
+
return isNonEmptyArr(errors) ? Validation.make.failedAll(errors) : Validation.make.passed(record);
|
|
1801
1902
|
});
|
|
1802
1903
|
});
|
|
1803
1904
|
})(TaskValidation || (TaskValidation = {}));
|
|
1804
1905
|
|
|
1805
1906
|
// src/Core/Task.ts
|
|
1806
|
-
var toPromise = (task, signal) => Deferred.
|
|
1807
|
-
var getMs2 = (duration) => Duration.
|
|
1907
|
+
var toPromise = (task, signal) => Deferred.to.Promise(task(signal));
|
|
1908
|
+
var getMs2 = (duration) => Duration.to.milliseconds(duration);
|
|
1808
1909
|
var Task;
|
|
1809
1910
|
((Task2) => {
|
|
1810
|
-
Task2.resolve = (value) => () => Deferred.
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
Task2.
|
|
1911
|
+
Task2.resolve = (value) => () => Deferred.from.Promise(globalThis.Promise.resolve(value));
|
|
1912
|
+
let from;
|
|
1913
|
+
((from2) => {
|
|
1914
|
+
from2.Promise = (f) => (signal) => Deferred.from.Promise(f(signal));
|
|
1915
|
+
from2.sync = (f) => () => Deferred.from.Promise(globalThis.Promise.resolve(f()));
|
|
1916
|
+
})(from = Task2.from || (Task2.from = {}));
|
|
1917
|
+
Task2.map = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then(f));
|
|
1918
|
+
Task2.chain = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
|
|
1919
|
+
Task2.ap = (arg) => (data) => from.Promise((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
|
|
1920
|
+
Task2.tap = (f) => (data) => from.Promise(
|
|
1817
1921
|
(signal) => toPromise(data, signal).then((a) => {
|
|
1818
1922
|
f(a);
|
|
1819
1923
|
return a;
|
|
1820
1924
|
})
|
|
1821
1925
|
);
|
|
1822
|
-
Task2.all = (tasks) =>
|
|
1926
|
+
Task2.all = (tasks) => from.Promise(
|
|
1823
1927
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1824
1928
|
);
|
|
1825
|
-
Task2.delay = (duration) => (data) =>
|
|
1929
|
+
Task2.delay = (duration) => (data) => from.Promise(
|
|
1826
1930
|
(signal) => new Promise((res) => {
|
|
1827
1931
|
let timerId;
|
|
1828
1932
|
const onAbort = () => {
|
|
@@ -1841,7 +1945,7 @@ var Task;
|
|
|
1841
1945
|
}, getMs2(duration));
|
|
1842
1946
|
})
|
|
1843
1947
|
);
|
|
1844
|
-
Task2.repeat = (options) => (task) =>
|
|
1948
|
+
Task2.repeat = (options) => (task) => from.Promise((signal) => {
|
|
1845
1949
|
const { times, delay: delayDuration } = options;
|
|
1846
1950
|
if (times <= 0) {
|
|
1847
1951
|
return Promise.resolve([]);
|
|
@@ -1875,7 +1979,7 @@ var Task;
|
|
|
1875
1979
|
};
|
|
1876
1980
|
return run2(times);
|
|
1877
1981
|
});
|
|
1878
|
-
Task2.repeatUntil = (options) => (task) =>
|
|
1982
|
+
Task2.repeatUntil = (options) => (task) => from.Promise((signal) => {
|
|
1879
1983
|
const { when: predicate, delay: delayDuration, maxAttempts } = options;
|
|
1880
1984
|
const wait = () => new Promise((r) => {
|
|
1881
1985
|
let timerId;
|
|
@@ -1912,10 +2016,10 @@ var Task;
|
|
|
1912
2016
|
});
|
|
1913
2017
|
Task2.race = (tasks) => {
|
|
1914
2018
|
if (tasks.length === 0) {
|
|
1915
|
-
return () => Deferred.
|
|
2019
|
+
return () => Deferred.from.Promise(new Promise(() => {
|
|
1916
2020
|
}));
|
|
1917
2021
|
}
|
|
1918
|
-
return
|
|
2022
|
+
return from.Promise((outerSignal) => {
|
|
1919
2023
|
const controllers = tasks.map(() => new AbortController());
|
|
1920
2024
|
const onOuterAbort = () => {
|
|
1921
2025
|
for (const ctrl of controllers) {
|
|
@@ -1944,8 +2048,8 @@ var Task;
|
|
|
1944
2048
|
return Promise.race(promises);
|
|
1945
2049
|
});
|
|
1946
2050
|
};
|
|
1947
|
-
Task2.sequence = (tasks) =>
|
|
1948
|
-
Task2.sequential = (tasks) =>
|
|
2051
|
+
Task2.sequence = (tasks) => from.Promise((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
2052
|
+
Task2.sequential = (tasks) => from.Promise(async (signal) => {
|
|
1949
2053
|
const results = [];
|
|
1950
2054
|
for (const task of tasks) {
|
|
1951
2055
|
if (signal?.aborted) {
|
|
@@ -1955,7 +2059,7 @@ var Task;
|
|
|
1955
2059
|
}
|
|
1956
2060
|
return results;
|
|
1957
2061
|
});
|
|
1958
|
-
Task2.timeout = (duration, onTimeout) => (task) =>
|
|
2062
|
+
Task2.timeout = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
|
|
1959
2063
|
const controller = new AbortController();
|
|
1960
2064
|
let timerId;
|
|
1961
2065
|
let cleanUp = () => {
|
|
@@ -1978,13 +2082,13 @@ var Task;
|
|
|
1978
2082
|
return Promise.race([
|
|
1979
2083
|
toPromise(task, controller.signal).then((a) => {
|
|
1980
2084
|
cleanUp();
|
|
1981
|
-
return Result.ok(a);
|
|
2085
|
+
return Result.make.ok(a);
|
|
1982
2086
|
}),
|
|
1983
2087
|
new Promise((res) => {
|
|
1984
2088
|
timerId = setTimeout(() => {
|
|
1985
2089
|
controller.abort();
|
|
1986
2090
|
cleanUp();
|
|
1987
|
-
res(Result.err(onTimeout()));
|
|
2091
|
+
res(Result.make.err(onTimeout()));
|
|
1988
2092
|
}, getMs2(duration));
|
|
1989
2093
|
})
|
|
1990
2094
|
]);
|
|
@@ -2003,7 +2107,7 @@ var Task;
|
|
|
2003
2107
|
outerSignal.addEventListener("abort", () => controller.abort(outerSignal.reason), { once: true });
|
|
2004
2108
|
}
|
|
2005
2109
|
}
|
|
2006
|
-
return Deferred.
|
|
2110
|
+
return Deferred.from.Promise(factory(controller.signal));
|
|
2007
2111
|
};
|
|
2008
2112
|
return { task, abort };
|
|
2009
2113
|
};
|
|
@@ -2020,67 +2124,73 @@ var Task;
|
|
|
2020
2124
|
// src/Core/These.ts
|
|
2021
2125
|
var These;
|
|
2022
2126
|
((These2) => {
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
These2.
|
|
2127
|
+
let make;
|
|
2128
|
+
((make2) => {
|
|
2129
|
+
make2.first = (value) => ({ kind: "First", first: value });
|
|
2130
|
+
make2.second = (value) => ({ kind: "Second", second: value });
|
|
2131
|
+
make2.both = (f, s) => ({ kind: "Both", first: f, second: s });
|
|
2132
|
+
})(make = These2.make || (These2.make = {}));
|
|
2133
|
+
let is;
|
|
2134
|
+
((is2) => {
|
|
2135
|
+
is2.first = (data) => data.kind === "First";
|
|
2136
|
+
is2.second = (data) => data.kind === "Second";
|
|
2137
|
+
is2.both = (data) => data.kind === "Both";
|
|
2138
|
+
})(is = These2.is || (These2.is = {}));
|
|
2029
2139
|
These2.hasFirst = (data) => data.kind === "First" || data.kind === "Both";
|
|
2030
2140
|
These2.hasSecond = (data) => data.kind === "Second" || data.kind === "Both";
|
|
2031
2141
|
These2.mapFirst = (f) => (data) => {
|
|
2032
|
-
if (
|
|
2142
|
+
if (is.second(data)) {
|
|
2033
2143
|
return data;
|
|
2034
2144
|
}
|
|
2035
|
-
if (
|
|
2036
|
-
return
|
|
2145
|
+
if (is.first(data)) {
|
|
2146
|
+
return make.first(f(data.first));
|
|
2037
2147
|
}
|
|
2038
|
-
return
|
|
2148
|
+
return make.both(f(data.first), data.second);
|
|
2039
2149
|
};
|
|
2040
2150
|
These2.mapSecond = (f) => (data) => {
|
|
2041
|
-
if (
|
|
2151
|
+
if (is.first(data)) {
|
|
2042
2152
|
return data;
|
|
2043
2153
|
}
|
|
2044
|
-
if (
|
|
2045
|
-
return
|
|
2154
|
+
if (is.second(data)) {
|
|
2155
|
+
return make.second(f(data.second));
|
|
2046
2156
|
}
|
|
2047
|
-
return
|
|
2157
|
+
return make.both(data.first, f(data.second));
|
|
2048
2158
|
};
|
|
2049
2159
|
These2.mapBoth = (onFirst, onSecond) => (data) => {
|
|
2050
|
-
if (
|
|
2051
|
-
return
|
|
2160
|
+
if (is.second(data)) {
|
|
2161
|
+
return make.second(onSecond(data.second));
|
|
2052
2162
|
}
|
|
2053
|
-
if (
|
|
2054
|
-
return
|
|
2163
|
+
if (is.first(data)) {
|
|
2164
|
+
return make.first(onFirst(data.first));
|
|
2055
2165
|
}
|
|
2056
|
-
return
|
|
2166
|
+
return make.both(onFirst(data.first), onSecond(data.second));
|
|
2057
2167
|
};
|
|
2058
2168
|
These2.chainFirst = (f) => (data) => {
|
|
2059
|
-
if (
|
|
2169
|
+
if (is.second(data)) {
|
|
2060
2170
|
return data;
|
|
2061
2171
|
}
|
|
2062
2172
|
return f(data.first);
|
|
2063
2173
|
};
|
|
2064
2174
|
These2.chainSecond = (f) => (data) => {
|
|
2065
|
-
if (
|
|
2175
|
+
if (is.first(data)) {
|
|
2066
2176
|
return data;
|
|
2067
2177
|
}
|
|
2068
2178
|
return f(data.second);
|
|
2069
2179
|
};
|
|
2070
2180
|
These2.fold = (onFirst, onSecond, onBoth) => (data) => {
|
|
2071
|
-
if (
|
|
2181
|
+
if (is.second(data)) {
|
|
2072
2182
|
return onSecond(data.second);
|
|
2073
2183
|
}
|
|
2074
|
-
if (
|
|
2184
|
+
if (is.first(data)) {
|
|
2075
2185
|
return onFirst(data.first);
|
|
2076
2186
|
}
|
|
2077
2187
|
return onBoth(data.first, data.second);
|
|
2078
2188
|
};
|
|
2079
2189
|
These2.match = (cases) => (data) => {
|
|
2080
|
-
if (
|
|
2190
|
+
if (is.second(data)) {
|
|
2081
2191
|
return cases.second(data.second);
|
|
2082
2192
|
}
|
|
2083
|
-
if (
|
|
2193
|
+
if (is.first(data)) {
|
|
2084
2194
|
return cases.first(data.first);
|
|
2085
2195
|
}
|
|
2086
2196
|
return cases.both(data.first, data.second);
|
|
@@ -2094,20 +2204,24 @@ var These;
|
|
|
2094
2204
|
return data;
|
|
2095
2205
|
};
|
|
2096
2206
|
These2.swap = (data) => {
|
|
2097
|
-
if (
|
|
2098
|
-
return
|
|
2207
|
+
if (is.second(data)) {
|
|
2208
|
+
return make.first(data.second);
|
|
2099
2209
|
}
|
|
2100
|
-
if (
|
|
2101
|
-
return
|
|
2210
|
+
if (is.first(data)) {
|
|
2211
|
+
return make.second(data.first);
|
|
2102
2212
|
}
|
|
2103
|
-
return
|
|
2213
|
+
return make.both(data.second, data.first);
|
|
2104
2214
|
};
|
|
2105
2215
|
})(These || (These = {}));
|
|
2106
2216
|
|
|
2107
2217
|
// src/Core/Tuple.ts
|
|
2108
2218
|
var Tuple;
|
|
2109
2219
|
((Tuple2) => {
|
|
2110
|
-
|
|
2220
|
+
let from;
|
|
2221
|
+
((from2) => {
|
|
2222
|
+
from2.pair = (first2, second2) => [first2, second2];
|
|
2223
|
+
from2.array = (arr) => arr;
|
|
2224
|
+
})(from = Tuple2.from || (Tuple2.from = {}));
|
|
2111
2225
|
Tuple2.first = (tuple) => tuple[0];
|
|
2112
2226
|
Tuple2.second = (tuple) => tuple[1];
|
|
2113
2227
|
Tuple2.mapFirst = (f) => (tuple) => [f(tuple[0]), tuple[1]];
|
|
@@ -2118,7 +2232,10 @@ var Tuple;
|
|
|
2118
2232
|
];
|
|
2119
2233
|
Tuple2.fold = (f) => (tuple) => f(tuple[0], tuple[1]);
|
|
2120
2234
|
Tuple2.swap = (tuple) => [tuple[1], tuple[0]];
|
|
2121
|
-
|
|
2235
|
+
let to;
|
|
2236
|
+
((to2) => {
|
|
2237
|
+
to2.Array = (tuple) => [...tuple];
|
|
2238
|
+
})(to = Tuple2.to || (Tuple2.to = {}));
|
|
2122
2239
|
Tuple2.tap = (f) => (tuple) => {
|
|
2123
2240
|
f(tuple[0], tuple[1]);
|
|
2124
2241
|
return tuple;
|
|
@@ -2128,59 +2245,71 @@ var Tuple;
|
|
|
2128
2245
|
// src/Core/Validation.ts
|
|
2129
2246
|
var Validation;
|
|
2130
2247
|
((Validation2) => {
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2248
|
+
let make;
|
|
2249
|
+
((make2) => {
|
|
2250
|
+
make2.passed = (value) => ({ kind: "Passed", value });
|
|
2251
|
+
make2.failed = (error) => ({ kind: "Failed", errors: [error] });
|
|
2252
|
+
make2.failedAll = (errors) => ({ kind: "Failed", errors });
|
|
2253
|
+
})(make = Validation2.make || (Validation2.make = {}));
|
|
2254
|
+
let is;
|
|
2255
|
+
((is2) => {
|
|
2256
|
+
is2.passed = (data) => data.kind === "Passed";
|
|
2257
|
+
is2.failed = (data) => data.kind === "Failed";
|
|
2258
|
+
})(is = Validation2.is || (Validation2.is = {}));
|
|
2259
|
+
let from;
|
|
2260
|
+
((from2) => {
|
|
2261
|
+
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
|
|
2262
|
+
from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.failed(onNull()) : make.passed(value);
|
|
2263
|
+
from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.failed(onNone()) : make.passed(maybe.value);
|
|
2264
|
+
from2.Result = (data) => data.kind === "Ok" ? make.passed(data.value) : make.failed(data.error);
|
|
2265
|
+
})(from = Validation2.from || (Validation2.from = {}));
|
|
2266
|
+
Validation2.map = (f) => (data) => is.passed(data) ? make.passed(f(data.value)) : data;
|
|
2267
|
+
Validation2.mapError = (f) => (data) => is.failed(data) ? make.failedAll(data.errors.map(f)) : data;
|
|
2141
2268
|
Validation2.ap = (arg) => (data) => {
|
|
2142
|
-
if (
|
|
2143
|
-
return
|
|
2269
|
+
if (is.passed(data)) {
|
|
2270
|
+
return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
|
|
2144
2271
|
}
|
|
2145
|
-
return
|
|
2272
|
+
return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
|
|
2146
2273
|
};
|
|
2147
|
-
Validation2.fold = (onFailed, onPassed) => (data) =>
|
|
2148
|
-
Validation2.match = (cases) => (data) =>
|
|
2149
|
-
Validation2.getOrElse = (defaultValue) => (data) =>
|
|
2274
|
+
Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
2275
|
+
Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
2276
|
+
Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
|
|
2150
2277
|
Validation2.tap = (f) => (data) => {
|
|
2151
|
-
if (
|
|
2278
|
+
if (is.passed(data)) {
|
|
2152
2279
|
f(data.value);
|
|
2153
2280
|
}
|
|
2154
2281
|
return data;
|
|
2155
2282
|
};
|
|
2156
2283
|
Validation2.tapError = (f) => (data) => {
|
|
2157
|
-
if (
|
|
2284
|
+
if (is.failed(data)) {
|
|
2158
2285
|
f(data.errors);
|
|
2159
2286
|
}
|
|
2160
2287
|
return data;
|
|
2161
2288
|
};
|
|
2162
|
-
Validation2.recover = (fallback) => (data) =>
|
|
2163
|
-
Validation2.recoverUnless = (isBlocked, fallback) => (data) =>
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2289
|
+
Validation2.recover = (fallback) => (data) => is.passed(data) ? data : fallback(data.errors);
|
|
2290
|
+
Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
2291
|
+
let to;
|
|
2292
|
+
((to2) => {
|
|
2293
|
+
to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
|
|
2294
|
+
to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
2295
|
+
})(to = Validation2.to || (Validation2.to = {}));
|
|
2167
2296
|
Validation2.product = (first, second) => {
|
|
2168
|
-
if (
|
|
2169
|
-
return
|
|
2297
|
+
if (is.passed(first)) {
|
|
2298
|
+
return is.passed(second) ? make.passed([first.value, second.value]) : make.failedAll(second.errors);
|
|
2170
2299
|
}
|
|
2171
|
-
return
|
|
2300
|
+
return is.passed(second) ? make.failedAll(first.errors) : make.failedAll([...first.errors, ...second.errors]);
|
|
2172
2301
|
};
|
|
2173
2302
|
Validation2.productAll = (data) => {
|
|
2174
2303
|
const values = [];
|
|
2175
2304
|
const errors = [];
|
|
2176
2305
|
for (const v of data) {
|
|
2177
|
-
if (
|
|
2306
|
+
if (is.passed(v)) {
|
|
2178
2307
|
values.push(v.value);
|
|
2179
2308
|
} else {
|
|
2180
2309
|
errors.push(...v.errors);
|
|
2181
2310
|
}
|
|
2182
2311
|
}
|
|
2183
|
-
return isNonEmptyArr(errors) ?
|
|
2312
|
+
return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(values);
|
|
2184
2313
|
};
|
|
2185
2314
|
Validation2.struct = (fields) => {
|
|
2186
2315
|
const record = {};
|
|
@@ -2188,14 +2317,14 @@ var Validation;
|
|
|
2188
2317
|
for (const key in fields) {
|
|
2189
2318
|
if (Object.hasOwn(fields, key)) {
|
|
2190
2319
|
const val = fields[key];
|
|
2191
|
-
if (
|
|
2320
|
+
if (is.passed(val)) {
|
|
2192
2321
|
record[key] = val.value;
|
|
2193
2322
|
} else {
|
|
2194
2323
|
errors.push(...val.errors);
|
|
2195
2324
|
}
|
|
2196
2325
|
}
|
|
2197
2326
|
}
|
|
2198
|
-
return isNonEmptyArr(errors) ?
|
|
2327
|
+
return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(record);
|
|
2199
2328
|
};
|
|
2200
2329
|
})(Validation || (Validation = {}));
|
|
2201
2330
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -2218,6 +2347,9 @@ var Validation;
|
|
|
2218
2347
|
Result,
|
|
2219
2348
|
State,
|
|
2220
2349
|
Task,
|
|
2350
|
+
TaskMaybe,
|
|
2351
|
+
TaskResult,
|
|
2352
|
+
TaskValidation,
|
|
2221
2353
|
These,
|
|
2222
2354
|
Tuple,
|
|
2223
2355
|
Validation
|