@nlozgachev/pipelined 0.32.0 → 0.34.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 +67 -37
- package/dist/{Task-CjYKLeTY.d.ts → Task-DXsuurnc.d.mts} +107 -58
- package/dist/{Task-CJZfcOkO.d.mts → Task-zAY4kSVB.d.ts} +107 -58
- package/dist/{chunk-L3NC44SN.mjs → chunk-5AWUAG7G.mjs} +449 -299
- package/dist/{chunk-NRF2FVPZ.mjs → chunk-AHEZFTMT.mjs} +64 -32
- package/dist/{chunk-TK5ZCGP2.mjs → chunk-DLBHVYII.mjs} +110 -47
- package/dist/{chunk-EHQFUWZW.mjs → chunk-IJFFWBKW.mjs} +223 -62
- package/dist/chunk-IPP4XFYH.mjs +0 -0
- package/dist/chunk-VWVPHDZO.mjs +29 -0
- package/dist/composition.d.mts +8 -7
- package/dist/composition.d.ts +8 -7
- package/dist/composition.js +64 -32
- package/dist/composition.mjs +1 -1
- package/dist/core.d.mts +227 -149
- package/dist/core.d.ts +227 -149
- package/dist/core.js +576 -345
- package/dist/core.mjs +3 -2
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +865 -446
- package/dist/index.mjs +10 -7
- package/dist/types.d.mts +104 -2
- package/dist/types.d.ts +104 -2
- package/dist/types.js +20 -0
- package/dist/types.mjs +6 -3
- package/dist/utils.d.mts +48 -5
- package/dist/utils.d.ts +48 -5
- package/dist/utils.js +353 -108
- package/dist/utils.mjs +3 -2
- package/package.json +9 -9
- package/dist/NonEmptyList-BlGFjor5.d.mts +0 -30
- package/dist/NonEmptyList-BlGFjor5.d.ts +0 -30
- package/dist/chunk-BYWKZLHM.mjs +0 -10
|
@@ -2,44 +2,54 @@
|
|
|
2
2
|
function compose(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) {
|
|
3
3
|
const len = arguments.length;
|
|
4
4
|
switch (len) {
|
|
5
|
-
case 1:
|
|
5
|
+
case 1: {
|
|
6
6
|
return f0;
|
|
7
|
-
|
|
7
|
+
}
|
|
8
|
+
case 2: {
|
|
8
9
|
return function() {
|
|
9
10
|
return f0(f1.apply(this, arguments));
|
|
10
11
|
};
|
|
11
|
-
|
|
12
|
+
}
|
|
13
|
+
case 3: {
|
|
12
14
|
return function() {
|
|
13
15
|
return f0(f1(f2.apply(this, arguments)));
|
|
14
16
|
};
|
|
15
|
-
|
|
17
|
+
}
|
|
18
|
+
case 4: {
|
|
16
19
|
return function() {
|
|
17
20
|
return f0(f1(f2(f3.apply(this, arguments))));
|
|
18
21
|
};
|
|
19
|
-
|
|
22
|
+
}
|
|
23
|
+
case 5: {
|
|
20
24
|
return function() {
|
|
21
25
|
return f0(f1(f2(f3(f4.apply(this, arguments)))));
|
|
22
26
|
};
|
|
23
|
-
|
|
27
|
+
}
|
|
28
|
+
case 6: {
|
|
24
29
|
return function() {
|
|
25
30
|
return f0(f1(f2(f3(f4(f5.apply(this, arguments))))));
|
|
26
31
|
};
|
|
27
|
-
|
|
32
|
+
}
|
|
33
|
+
case 7: {
|
|
28
34
|
return function() {
|
|
29
35
|
return f0(f1(f2(f3(f4(f5(f6.apply(this, arguments)))))));
|
|
30
36
|
};
|
|
31
|
-
|
|
37
|
+
}
|
|
38
|
+
case 8: {
|
|
32
39
|
return function() {
|
|
33
40
|
return f0(f1(f2(f3(f4(f5(f6(f7.apply(this, arguments))))))));
|
|
34
41
|
};
|
|
35
|
-
|
|
42
|
+
}
|
|
43
|
+
case 9: {
|
|
36
44
|
return function() {
|
|
37
45
|
return f0(f1(f2(f3(f4(f5(f6(f7(f8.apply(this, arguments)))))))));
|
|
38
46
|
};
|
|
39
|
-
|
|
47
|
+
}
|
|
48
|
+
case 10: {
|
|
40
49
|
return function() {
|
|
41
50
|
return f0(f1(f2(f3(f4(f5(f6(f7(f8(f9.apply(this, arguments))))))))));
|
|
42
51
|
};
|
|
52
|
+
}
|
|
43
53
|
}
|
|
44
54
|
}
|
|
45
55
|
|
|
@@ -60,48 +70,59 @@ var flip = (f) => (b) => (a) => f(a)(b);
|
|
|
60
70
|
function flow(ab, bc, cd, de, ef, fg, gh, hi, ij, jk) {
|
|
61
71
|
const len = arguments.length;
|
|
62
72
|
switch (len) {
|
|
63
|
-
case 0:
|
|
73
|
+
case 0: {
|
|
64
74
|
return function(...args) {
|
|
65
75
|
return args[0];
|
|
66
76
|
};
|
|
67
|
-
|
|
77
|
+
}
|
|
78
|
+
case 1: {
|
|
68
79
|
return ab;
|
|
69
|
-
|
|
80
|
+
}
|
|
81
|
+
case 2: {
|
|
70
82
|
return function() {
|
|
71
83
|
return bc(ab.apply(this, arguments));
|
|
72
84
|
};
|
|
73
|
-
|
|
85
|
+
}
|
|
86
|
+
case 3: {
|
|
74
87
|
return function() {
|
|
75
88
|
return cd(bc(ab.apply(this, arguments)));
|
|
76
89
|
};
|
|
77
|
-
|
|
90
|
+
}
|
|
91
|
+
case 4: {
|
|
78
92
|
return function() {
|
|
79
93
|
return de(cd(bc(ab.apply(this, arguments))));
|
|
80
94
|
};
|
|
81
|
-
|
|
95
|
+
}
|
|
96
|
+
case 5: {
|
|
82
97
|
return function() {
|
|
83
98
|
return ef(de(cd(bc(ab.apply(this, arguments)))));
|
|
84
99
|
};
|
|
85
|
-
|
|
100
|
+
}
|
|
101
|
+
case 6: {
|
|
86
102
|
return function() {
|
|
87
103
|
return fg(ef(de(cd(bc(ab.apply(this, arguments))))));
|
|
88
104
|
};
|
|
89
|
-
|
|
105
|
+
}
|
|
106
|
+
case 7: {
|
|
90
107
|
return function() {
|
|
91
108
|
return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))));
|
|
92
109
|
};
|
|
93
|
-
|
|
110
|
+
}
|
|
111
|
+
case 8: {
|
|
94
112
|
return function() {
|
|
95
113
|
return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))));
|
|
96
114
|
};
|
|
97
|
-
|
|
115
|
+
}
|
|
116
|
+
case 9: {
|
|
98
117
|
return function() {
|
|
99
118
|
return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))));
|
|
100
119
|
};
|
|
101
|
-
|
|
120
|
+
}
|
|
121
|
+
case 10: {
|
|
102
122
|
return function() {
|
|
103
123
|
return jk(ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))))));
|
|
104
124
|
};
|
|
125
|
+
}
|
|
105
126
|
}
|
|
106
127
|
}
|
|
107
128
|
|
|
@@ -167,28 +188,39 @@ var on = (f, g) => (a, b) => f(g(a), g(b));
|
|
|
167
188
|
// src/Composition/pipe.ts
|
|
168
189
|
function pipe(a, ab, bc, cd, de, ef, fg, gh, hi, ij, jk) {
|
|
169
190
|
switch (arguments.length) {
|
|
170
|
-
case 1:
|
|
191
|
+
case 1: {
|
|
171
192
|
return a;
|
|
172
|
-
|
|
193
|
+
}
|
|
194
|
+
case 2: {
|
|
173
195
|
return ab(a);
|
|
174
|
-
|
|
196
|
+
}
|
|
197
|
+
case 3: {
|
|
175
198
|
return bc(ab(a));
|
|
176
|
-
|
|
199
|
+
}
|
|
200
|
+
case 4: {
|
|
177
201
|
return cd(bc(ab(a)));
|
|
178
|
-
|
|
202
|
+
}
|
|
203
|
+
case 5: {
|
|
179
204
|
return de(cd(bc(ab(a))));
|
|
180
|
-
|
|
205
|
+
}
|
|
206
|
+
case 6: {
|
|
181
207
|
return ef(de(cd(bc(ab(a)))));
|
|
182
|
-
|
|
208
|
+
}
|
|
209
|
+
case 7: {
|
|
183
210
|
return fg(ef(de(cd(bc(ab(a))))));
|
|
184
|
-
|
|
211
|
+
}
|
|
212
|
+
case 8: {
|
|
185
213
|
return gh(fg(ef(de(cd(bc(ab(a)))))));
|
|
186
|
-
|
|
214
|
+
}
|
|
215
|
+
case 9: {
|
|
187
216
|
return hi(gh(fg(ef(de(cd(bc(ab(a))))))));
|
|
188
|
-
|
|
217
|
+
}
|
|
218
|
+
case 10: {
|
|
189
219
|
return ij(hi(gh(fg(ef(de(cd(bc(ab(a)))))))));
|
|
190
|
-
|
|
220
|
+
}
|
|
221
|
+
case 11: {
|
|
191
222
|
return jk(ij(hi(gh(fg(ef(de(cd(bc(ab(a))))))))));
|
|
223
|
+
}
|
|
192
224
|
}
|
|
193
225
|
}
|
|
194
226
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Duration
|
|
3
|
+
} from "./chunk-VWVPHDZO.mjs";
|
|
4
|
+
|
|
1
5
|
// src/Core/Maybe.ts
|
|
2
6
|
var _none = { kind: "None" };
|
|
3
7
|
var Maybe;
|
|
@@ -10,7 +14,7 @@ var Maybe;
|
|
|
10
14
|
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
11
15
|
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
12
16
|
Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
|
|
13
|
-
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.
|
|
17
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
|
|
14
18
|
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
15
19
|
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
16
20
|
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
@@ -18,7 +22,9 @@ var Maybe;
|
|
|
18
22
|
Maybe2.match = (cases) => (data) => (0, Maybe2.isSome)(data) ? cases.some(data.value) : cases.none();
|
|
19
23
|
Maybe2.getOrElse = (defaultValue) => (data) => (0, Maybe2.isSome)(data) ? data.value : defaultValue();
|
|
20
24
|
Maybe2.tap = (f) => (data) => {
|
|
21
|
-
if ((0, Maybe2.isSome)(data))
|
|
25
|
+
if ((0, Maybe2.isSome)(data)) {
|
|
26
|
+
f(data.value);
|
|
27
|
+
}
|
|
22
28
|
return data;
|
|
23
29
|
};
|
|
24
30
|
Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
|
|
@@ -30,35 +36,48 @@ var Maybe;
|
|
|
30
36
|
var Result;
|
|
31
37
|
((Result2) => {
|
|
32
38
|
Result2.ok = (value) => ({ kind: "Ok", value });
|
|
33
|
-
Result2.
|
|
39
|
+
Result2.err = (e) => ({ kind: "Err", error: e });
|
|
34
40
|
Result2.isOk = (data) => data.kind === "Ok";
|
|
35
|
-
Result2.
|
|
41
|
+
Result2.isErr = (data) => data.kind === "Err";
|
|
36
42
|
Result2.tryCatch = (f, onError) => {
|
|
37
43
|
try {
|
|
38
44
|
return (0, Result2.ok)(f());
|
|
39
|
-
} catch (
|
|
40
|
-
return (0, Result2.
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return (0, Result2.err)(onError(error));
|
|
41
47
|
}
|
|
42
48
|
};
|
|
43
49
|
Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
|
|
44
|
-
Result2.mapError = (f) => (data) => (0, Result2.
|
|
50
|
+
Result2.mapError = (f) => (data) => (0, Result2.isErr)(data) ? (0, Result2.err)(f(data.error)) : data;
|
|
45
51
|
Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
|
|
46
52
|
Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
|
|
47
53
|
Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
48
54
|
Result2.getOrElse = (defaultValue) => (data) => (0, Result2.isOk)(data) ? data.value : defaultValue();
|
|
49
55
|
Result2.tap = (f) => (data) => {
|
|
50
|
-
if ((0, Result2.isOk)(data))
|
|
56
|
+
if ((0, Result2.isOk)(data)) {
|
|
57
|
+
f(data.value);
|
|
58
|
+
}
|
|
51
59
|
return data;
|
|
52
60
|
};
|
|
53
61
|
Result2.tapError = (f) => (data) => {
|
|
54
|
-
if ((0, Result2.
|
|
62
|
+
if ((0, Result2.isErr)(data)) {
|
|
63
|
+
f(data.error);
|
|
64
|
+
}
|
|
55
65
|
return data;
|
|
56
66
|
};
|
|
57
|
-
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.
|
|
67
|
+
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.err)(onFalse(a));
|
|
68
|
+
Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.err)(onNull()) : (0, Result2.ok)(value);
|
|
69
|
+
Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.err)(onNone()) : (0, Result2.ok)(maybe.value);
|
|
70
|
+
Result2.fromThrowable = (f, onError) => (...args) => {
|
|
71
|
+
try {
|
|
72
|
+
return (0, Result2.ok)(f(...args));
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return (0, Result2.err)(onError(error));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
58
77
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
59
|
-
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.
|
|
78
|
+
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
60
79
|
Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
61
|
-
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.
|
|
80
|
+
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isErr)(data) ? data : arg;
|
|
62
81
|
})(Result || (Result = {}));
|
|
63
82
|
|
|
64
83
|
// src/Core/Deferred.ts
|
|
@@ -73,6 +92,7 @@ var Deferred;
|
|
|
73
92
|
|
|
74
93
|
// src/Core/Task.ts
|
|
75
94
|
var toPromise = (task, signal) => Deferred.toPromise(task(signal));
|
|
95
|
+
var getMs = (duration) => Duration.toMilliseconds(duration);
|
|
76
96
|
var Task;
|
|
77
97
|
((Task2) => {
|
|
78
98
|
Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
|
|
@@ -80,12 +100,7 @@ var Task;
|
|
|
80
100
|
Task2.fromSync = (f) => () => Deferred.fromPromise(Promise.resolve(f()));
|
|
81
101
|
Task2.map = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then(f));
|
|
82
102
|
Task2.chain = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
|
|
83
|
-
Task2.ap = (arg) => (data) => (0, Task2.from)(
|
|
84
|
-
(signal) => Promise.all([
|
|
85
|
-
toPromise(data, signal),
|
|
86
|
-
toPromise(arg, signal)
|
|
87
|
-
]).then(([f, a]) => f(a))
|
|
88
|
-
);
|
|
103
|
+
Task2.ap = (arg) => (data) => (0, Task2.from)((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
|
|
89
104
|
Task2.tap = (f) => (data) => (0, Task2.from)(
|
|
90
105
|
(signal) => toPromise(data, signal).then((a) => {
|
|
91
106
|
f(a);
|
|
@@ -95,35 +110,39 @@ var Task;
|
|
|
95
110
|
Task2.all = (tasks) => (0, Task2.from)(
|
|
96
111
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
97
112
|
);
|
|
98
|
-
Task2.delay = (
|
|
99
|
-
(signal) => new Promise((
|
|
100
|
-
let timerId
|
|
113
|
+
Task2.delay = (duration) => (data) => (0, Task2.from)(
|
|
114
|
+
(signal) => new Promise((res) => {
|
|
115
|
+
let timerId;
|
|
101
116
|
const onAbort = () => {
|
|
102
117
|
if (timerId !== void 0) {
|
|
103
118
|
clearTimeout(timerId);
|
|
104
119
|
}
|
|
105
|
-
|
|
120
|
+
res(toPromise(data, signal));
|
|
106
121
|
};
|
|
107
122
|
if (signal) {
|
|
108
123
|
if (signal.aborted) {
|
|
109
|
-
return
|
|
124
|
+
return res(toPromise(data, signal));
|
|
110
125
|
}
|
|
111
126
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
112
127
|
}
|
|
113
128
|
timerId = setTimeout(() => {
|
|
114
129
|
signal?.removeEventListener("abort", onAbort);
|
|
115
|
-
|
|
116
|
-
},
|
|
130
|
+
res(toPromise(data, signal));
|
|
131
|
+
}, getMs(duration));
|
|
117
132
|
})
|
|
118
133
|
);
|
|
119
134
|
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
120
|
-
const { times, delay:
|
|
121
|
-
if (times <= 0)
|
|
135
|
+
const { times, delay: delayDuration } = options;
|
|
136
|
+
if (times <= 0) {
|
|
137
|
+
return Promise.resolve([]);
|
|
138
|
+
}
|
|
122
139
|
const results = [];
|
|
123
140
|
const wait = () => {
|
|
124
|
-
if (signal?.aborted)
|
|
141
|
+
if (signal?.aborted) {
|
|
142
|
+
return Promise.resolve();
|
|
143
|
+
}
|
|
125
144
|
return new Promise((r) => {
|
|
126
|
-
let timerId
|
|
145
|
+
let timerId;
|
|
127
146
|
const onAbort = () => {
|
|
128
147
|
if (timerId !== void 0) {
|
|
129
148
|
clearTimeout(timerId);
|
|
@@ -136,7 +155,7 @@ var Task;
|
|
|
136
155
|
timerId = setTimeout(() => {
|
|
137
156
|
signal?.removeEventListener("abort", onAbort);
|
|
138
157
|
r();
|
|
139
|
-
},
|
|
158
|
+
}, delayDuration ? getMs(delayDuration) : 0);
|
|
140
159
|
});
|
|
141
160
|
};
|
|
142
161
|
const run2 = (left) => {
|
|
@@ -145,18 +164,22 @@ var Task;
|
|
|
145
164
|
}
|
|
146
165
|
return toPromise(task, signal).then((a) => {
|
|
147
166
|
results.push(a);
|
|
148
|
-
if (left <= 1 || signal?.aborted)
|
|
167
|
+
if (left <= 1 || signal?.aborted) {
|
|
168
|
+
return results;
|
|
169
|
+
}
|
|
149
170
|
return wait().then(() => run2(left - 1));
|
|
150
171
|
});
|
|
151
172
|
};
|
|
152
173
|
return run2(times);
|
|
153
174
|
});
|
|
154
175
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
155
|
-
const { when: predicate, delay:
|
|
176
|
+
const { when: predicate, delay: delayDuration, maxAttempts } = options;
|
|
156
177
|
const wait = () => {
|
|
157
|
-
if (signal?.aborted)
|
|
178
|
+
if (signal?.aborted) {
|
|
179
|
+
return Promise.resolve();
|
|
180
|
+
}
|
|
158
181
|
return new Promise((r) => {
|
|
159
|
-
let timerId
|
|
182
|
+
let timerId;
|
|
160
183
|
const onAbort = () => {
|
|
161
184
|
if (timerId !== void 0) {
|
|
162
185
|
clearTimeout(timerId);
|
|
@@ -169,7 +192,7 @@ var Task;
|
|
|
169
192
|
timerId = setTimeout(() => {
|
|
170
193
|
signal?.removeEventListener("abort", onAbort);
|
|
171
194
|
r();
|
|
172
|
-
},
|
|
195
|
+
}, delayDuration ? getMs(delayDuration) : 0);
|
|
173
196
|
});
|
|
174
197
|
};
|
|
175
198
|
const run2 = (attempt, lastValue) => {
|
|
@@ -177,15 +200,55 @@ var Task;
|
|
|
177
200
|
return Promise.resolve(lastValue);
|
|
178
201
|
}
|
|
179
202
|
return toPromise(task, signal).then((a) => {
|
|
180
|
-
if (predicate(a))
|
|
181
|
-
|
|
182
|
-
|
|
203
|
+
if (predicate(a)) {
|
|
204
|
+
return a;
|
|
205
|
+
}
|
|
206
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) {
|
|
207
|
+
return a;
|
|
208
|
+
}
|
|
209
|
+
if (signal?.aborted) {
|
|
210
|
+
return a;
|
|
211
|
+
}
|
|
183
212
|
return wait().then(() => run2(attempt + 1, a));
|
|
184
213
|
});
|
|
185
214
|
};
|
|
186
215
|
return run2(1);
|
|
187
216
|
});
|
|
188
|
-
Task2.race = (tasks) =>
|
|
217
|
+
Task2.race = (tasks) => {
|
|
218
|
+
if (tasks.length === 0) {
|
|
219
|
+
return () => Deferred.fromPromise(new Promise(() => {
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
return (0, Task2.from)((outerSignal) => {
|
|
223
|
+
const controllers = tasks.map(() => new AbortController());
|
|
224
|
+
const onOuterAbort = () => {
|
|
225
|
+
for (const ctrl of controllers) {
|
|
226
|
+
ctrl.abort();
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
if (outerSignal) {
|
|
230
|
+
if (outerSignal.aborted) {
|
|
231
|
+
onOuterAbort();
|
|
232
|
+
} else {
|
|
233
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const promises = tasks.map((task, idx) => {
|
|
237
|
+
const ctrl = controllers[idx];
|
|
238
|
+
return toPromise(task, ctrl.signal).then((result) => {
|
|
239
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
240
|
+
if (i !== idx) {
|
|
241
|
+
controllers[i].abort();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
245
|
+
return result;
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
return Promise.race(promises);
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
189
252
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
190
253
|
const results = [];
|
|
191
254
|
for (const task of tasks) {
|
|
@@ -196,19 +259,19 @@ var Task;
|
|
|
196
259
|
}
|
|
197
260
|
return results;
|
|
198
261
|
});
|
|
199
|
-
Task2.timeout = (
|
|
262
|
+
Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
200
263
|
const controller = new AbortController();
|
|
201
264
|
let timerId;
|
|
202
|
-
|
|
265
|
+
function cleanUp() {
|
|
203
266
|
if (timerId !== void 0) {
|
|
204
267
|
clearTimeout(timerId);
|
|
205
268
|
}
|
|
206
269
|
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
207
|
-
}
|
|
208
|
-
|
|
270
|
+
}
|
|
271
|
+
function onOuterAbort() {
|
|
209
272
|
cleanUp();
|
|
210
273
|
controller.abort();
|
|
211
|
-
}
|
|
274
|
+
}
|
|
212
275
|
if (outerSignal) {
|
|
213
276
|
if (outerSignal.aborted) {
|
|
214
277
|
controller.abort();
|
|
@@ -221,12 +284,12 @@ var Task;
|
|
|
221
284
|
cleanUp();
|
|
222
285
|
return Result.ok(a);
|
|
223
286
|
}),
|
|
224
|
-
new Promise((
|
|
287
|
+
new Promise((res) => {
|
|
225
288
|
timerId = setTimeout(() => {
|
|
226
289
|
controller.abort();
|
|
227
290
|
cleanUp();
|
|
228
|
-
|
|
229
|
-
},
|
|
291
|
+
res(Result.err(onTimeout()));
|
|
292
|
+
}, getMs(duration));
|
|
230
293
|
})
|
|
231
294
|
]);
|
|
232
295
|
});
|