@nlozgachev/pipekit 0.2.0 → 0.4.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 +18 -13
- package/esm/src/Composition/flip.js +2 -2
- package/esm/src/Composition/fn.js +1 -1
- package/esm/src/Composition/tap.js +1 -1
- package/esm/src/Core/Arr.js +4 -4
- package/esm/src/Core/Option.js +13 -22
- package/esm/src/Core/RemoteData.js +9 -13
- package/esm/src/Core/Result.js +12 -21
- package/esm/src/Core/Task.js +26 -23
- package/esm/src/Core/TaskOption.js +8 -6
- package/esm/src/Core/TaskResult.js +10 -6
- package/esm/src/Core/TaskValidation.js +12 -8
- package/esm/src/Core/These.js +122 -123
- package/esm/src/Core/Validation.js +42 -43
- package/package.json +1 -1
- package/script/src/Composition/flip.js +2 -2
- package/script/src/Composition/fn.js +1 -1
- package/script/src/Composition/tap.js +1 -1
- package/script/src/Core/Arr.js +4 -4
- package/script/src/Core/Option.js +13 -22
- package/script/src/Core/RemoteData.js +9 -13
- package/script/src/Core/Result.js +12 -21
- package/script/src/Core/Task.js +26 -23
- package/script/src/Core/TaskOption.js +8 -6
- package/script/src/Core/TaskResult.js +10 -6
- package/script/src/Core/TaskValidation.js +12 -8
- package/script/src/Core/These.js +122 -123
- package/script/src/Core/Validation.js +42 -43
- package/types/src/Composition/flip.d.ts +2 -2
- package/types/src/Composition/fn.d.ts +1 -1
- package/types/src/Composition/pipe.d.ts +1 -1
- package/types/src/Composition/tap.d.ts +1 -1
- package/types/src/Composition/uncurry.d.ts +3 -3
- package/types/src/Core/Arr.d.ts +4 -4
- package/types/src/Core/InternalTypes.d.ts +6 -0
- package/types/src/Core/InternalTypes.d.ts.map +1 -1
- package/types/src/Core/Option.d.ts +14 -23
- package/types/src/Core/Option.d.ts.map +1 -1
- package/types/src/Core/RemoteData.d.ts +9 -13
- package/types/src/Core/RemoteData.d.ts.map +1 -1
- package/types/src/Core/Result.d.ts +12 -21
- package/types/src/Core/Result.d.ts.map +1 -1
- package/types/src/Core/Task.d.ts +35 -32
- package/types/src/Core/Task.d.ts.map +1 -1
- package/types/src/Core/TaskOption.d.ts +1 -1
- package/types/src/Core/TaskOption.d.ts.map +1 -1
- package/types/src/Core/TaskResult.d.ts +1 -1
- package/types/src/Core/TaskResult.d.ts.map +1 -1
- package/types/src/Core/TaskValidation.d.ts +10 -6
- package/types/src/Core/TaskValidation.d.ts.map +1 -1
- package/types/src/Core/These.d.ts +108 -100
- package/types/src/Core/These.d.ts.map +1 -1
- package/types/src/Core/Validation.d.ts +38 -42
- package/types/src/Core/Validation.d.ts.map +1 -1
|
@@ -4,15 +4,6 @@ exports.Option = void 0;
|
|
|
4
4
|
const Result_js_1 = require("./Result.js");
|
|
5
5
|
var Option;
|
|
6
6
|
(function (Option) {
|
|
7
|
-
/**
|
|
8
|
-
* Wraps a value in a Some.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* Option.of(42); // Some(42)
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
Option.of = (value) => Option.some(value);
|
|
16
7
|
/**
|
|
17
8
|
* Creates a Some containing the given value.
|
|
18
9
|
*/
|
|
@@ -60,7 +51,7 @@ var Option;
|
|
|
60
51
|
* @example
|
|
61
52
|
* ```ts
|
|
62
53
|
* pipe(
|
|
63
|
-
* Option.
|
|
54
|
+
* Option.some(42),
|
|
64
55
|
* Option.toResult(() => "Value was missing")
|
|
65
56
|
* ); // Ok(42)
|
|
66
57
|
*
|
|
@@ -87,7 +78,7 @@ var Option;
|
|
|
87
78
|
*
|
|
88
79
|
* @example
|
|
89
80
|
* ```ts
|
|
90
|
-
* pipe(Option.
|
|
81
|
+
* pipe(Option.some(5), Option.map(n => n * 2)); // Some(10)
|
|
91
82
|
* pipe(Option.none(), Option.map(n => n * 2)); // None
|
|
92
83
|
* ```
|
|
93
84
|
*/
|
|
@@ -100,11 +91,11 @@ var Option;
|
|
|
100
91
|
* ```ts
|
|
101
92
|
* const parseNumber = (s: string): Option<number> => {
|
|
102
93
|
* const n = parseInt(s, 10);
|
|
103
|
-
* return isNaN(n) ? Option.none() : Option.
|
|
94
|
+
* return isNaN(n) ? Option.none() : Option.some(n);
|
|
104
95
|
* };
|
|
105
96
|
*
|
|
106
|
-
* pipe(Option.
|
|
107
|
-
* pipe(Option.
|
|
97
|
+
* pipe(Option.some("42"), Option.chain(parseNumber)); // Some(42)
|
|
98
|
+
* pipe(Option.some("abc"), Option.chain(parseNumber)); // None
|
|
108
99
|
* ```
|
|
109
100
|
*/
|
|
110
101
|
Option.chain = (f) => (data) => Option.isSome(data) ? f(data.value) : data;
|
|
@@ -114,7 +105,7 @@ var Option;
|
|
|
114
105
|
* @example
|
|
115
106
|
* ```ts
|
|
116
107
|
* pipe(
|
|
117
|
-
* Option.
|
|
108
|
+
* Option.some(5),
|
|
118
109
|
* Option.fold(
|
|
119
110
|
* () => "No value",
|
|
120
111
|
* n => `Value: ${n}`
|
|
@@ -143,7 +134,7 @@ var Option;
|
|
|
143
134
|
*
|
|
144
135
|
* @example
|
|
145
136
|
* ```ts
|
|
146
|
-
* pipe(Option.
|
|
137
|
+
* pipe(Option.some(5), Option.getOrElse(0)); // 5
|
|
147
138
|
* pipe(Option.none(), Option.getOrElse(0)); // 0
|
|
148
139
|
* ```
|
|
149
140
|
*/
|
|
@@ -155,7 +146,7 @@ var Option;
|
|
|
155
146
|
* @example
|
|
156
147
|
* ```ts
|
|
157
148
|
* pipe(
|
|
158
|
-
* Option.
|
|
149
|
+
* Option.some(5),
|
|
159
150
|
* Option.tap(n => console.log("Value:", n)),
|
|
160
151
|
* Option.map(n => n * 2)
|
|
161
152
|
* );
|
|
@@ -172,8 +163,8 @@ var Option;
|
|
|
172
163
|
*
|
|
173
164
|
* @example
|
|
174
165
|
* ```ts
|
|
175
|
-
* pipe(Option.
|
|
176
|
-
* pipe(Option.
|
|
166
|
+
* pipe(Option.some(5), Option.filter(n => n > 3)); // Some(5)
|
|
167
|
+
* pipe(Option.some(2), Option.filter(n => n > 3)); // None
|
|
177
168
|
* ```
|
|
178
169
|
*/
|
|
179
170
|
Option.filter = (predicate) => (data) => Option.isSome(data) && predicate(data.value) ? data : Option.none();
|
|
@@ -188,9 +179,9 @@ var Option;
|
|
|
188
179
|
* ```ts
|
|
189
180
|
* const add = (a: number) => (b: number) => a + b;
|
|
190
181
|
* pipe(
|
|
191
|
-
* Option.
|
|
192
|
-
* Option.ap(Option.
|
|
193
|
-
* Option.ap(Option.
|
|
182
|
+
* Option.some(add),
|
|
183
|
+
* Option.ap(Option.some(5)),
|
|
184
|
+
* Option.ap(Option.some(3))
|
|
194
185
|
* ); // Some(8)
|
|
195
186
|
* ```
|
|
196
187
|
*/
|
|
@@ -25,10 +25,6 @@ var RemoteData;
|
|
|
25
25
|
kind: "Success",
|
|
26
26
|
value,
|
|
27
27
|
});
|
|
28
|
-
/**
|
|
29
|
-
* Wraps a value in a Success RemoteData. Alias for `success`.
|
|
30
|
-
*/
|
|
31
|
-
RemoteData.of = RemoteData.success;
|
|
32
28
|
/**
|
|
33
29
|
* Type guard that checks if a RemoteData is NotAsked.
|
|
34
30
|
*/
|
|
@@ -50,7 +46,7 @@ var RemoteData;
|
|
|
50
46
|
*
|
|
51
47
|
* @example
|
|
52
48
|
* ```ts
|
|
53
|
-
* pipe(RemoteData.
|
|
49
|
+
* pipe(RemoteData.success(5), RemoteData.map(n => n * 2)); // Success(10)
|
|
54
50
|
* pipe(RemoteData.loading(), RemoteData.map(n => n * 2)); // Loading
|
|
55
51
|
* ```
|
|
56
52
|
*/
|
|
@@ -71,8 +67,8 @@ var RemoteData;
|
|
|
71
67
|
* @example
|
|
72
68
|
* ```ts
|
|
73
69
|
* pipe(
|
|
74
|
-
* RemoteData.
|
|
75
|
-
* RemoteData.chain(n => n > 0 ? RemoteData.
|
|
70
|
+
* RemoteData.success(5),
|
|
71
|
+
* RemoteData.chain(n => n > 0 ? RemoteData.success(n) : RemoteData.failure("negative"))
|
|
76
72
|
* );
|
|
77
73
|
* ```
|
|
78
74
|
*/
|
|
@@ -84,9 +80,9 @@ var RemoteData;
|
|
|
84
80
|
* ```ts
|
|
85
81
|
* const add = (a: number) => (b: number) => a + b;
|
|
86
82
|
* pipe(
|
|
87
|
-
* RemoteData.
|
|
88
|
-
* RemoteData.ap(RemoteData.
|
|
89
|
-
* RemoteData.ap(RemoteData.
|
|
83
|
+
* RemoteData.success(add),
|
|
84
|
+
* RemoteData.ap(RemoteData.success(5)),
|
|
85
|
+
* RemoteData.ap(RemoteData.success(3))
|
|
90
86
|
* ); // Success(8)
|
|
91
87
|
* ```
|
|
92
88
|
*/
|
|
@@ -163,7 +159,7 @@ var RemoteData;
|
|
|
163
159
|
*
|
|
164
160
|
* @example
|
|
165
161
|
* ```ts
|
|
166
|
-
* pipe(RemoteData.
|
|
162
|
+
* pipe(RemoteData.success(5), RemoteData.getOrElse(0)); // 5
|
|
167
163
|
* pipe(RemoteData.loading(), RemoteData.getOrElse(0)); // 0
|
|
168
164
|
* ```
|
|
169
165
|
*/
|
|
@@ -174,7 +170,7 @@ var RemoteData;
|
|
|
174
170
|
* @example
|
|
175
171
|
* ```ts
|
|
176
172
|
* pipe(
|
|
177
|
-
* RemoteData.
|
|
173
|
+
* RemoteData.success(5),
|
|
178
174
|
* RemoteData.tap(n => console.log("Value:", n)),
|
|
179
175
|
* RemoteData.map(n => n * 2)
|
|
180
176
|
* );
|
|
@@ -202,7 +198,7 @@ var RemoteData;
|
|
|
202
198
|
* @example
|
|
203
199
|
* ```ts
|
|
204
200
|
* pipe(
|
|
205
|
-
* RemoteData.
|
|
201
|
+
* RemoteData.success(42),
|
|
206
202
|
* RemoteData.toResult(() => "not loaded")
|
|
207
203
|
* ); // Ok(42)
|
|
208
204
|
* ```
|
|
@@ -4,22 +4,13 @@ exports.Result = void 0;
|
|
|
4
4
|
var Result;
|
|
5
5
|
(function (Result) {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* Result.of(42); // Ok(42)
|
|
12
|
-
* ```
|
|
7
|
+
* Creates a successful Result with the given value.
|
|
13
8
|
*/
|
|
14
|
-
Result.
|
|
9
|
+
Result.ok = (value) => ({ kind: "Ok", value });
|
|
15
10
|
/**
|
|
16
11
|
* Creates a failed Result with the given error.
|
|
17
12
|
*/
|
|
18
13
|
Result.err = (error) => ({ kind: "Error", error });
|
|
19
|
-
/**
|
|
20
|
-
* Creates a successful Result with the given value.
|
|
21
|
-
*/
|
|
22
|
-
Result.ok = (value) => ({ kind: "Ok", value });
|
|
23
14
|
/**
|
|
24
15
|
* Type guard that checks if an Result is Ok.
|
|
25
16
|
*/
|
|
@@ -54,7 +45,7 @@ var Result;
|
|
|
54
45
|
*
|
|
55
46
|
* @example
|
|
56
47
|
* ```ts
|
|
57
|
-
* pipe(Result.
|
|
48
|
+
* pipe(Result.ok(5), Result.map(n => n * 2)); // Ok(10)
|
|
58
49
|
* pipe(Result.err("error"), Result.map(n => n * 2)); // Err("error")
|
|
59
50
|
* ```
|
|
60
51
|
*/
|
|
@@ -75,10 +66,10 @@ var Result;
|
|
|
75
66
|
* @example
|
|
76
67
|
* ```ts
|
|
77
68
|
* const validatePositive = (n: number): Result<string, number> =>
|
|
78
|
-
* n > 0 ? Result.
|
|
69
|
+
* n > 0 ? Result.ok(n) : Result.err("Must be positive");
|
|
79
70
|
*
|
|
80
|
-
* pipe(Result.
|
|
81
|
-
* pipe(Result.
|
|
71
|
+
* pipe(Result.ok(5), Result.chain(validatePositive)); // Ok(5)
|
|
72
|
+
* pipe(Result.ok(-1), Result.chain(validatePositive)); // Err("Must be positive")
|
|
82
73
|
* ```
|
|
83
74
|
*/
|
|
84
75
|
Result.chain = (f) => (data) => Result.isOk(data) ? f(data.value) : data;
|
|
@@ -88,7 +79,7 @@ var Result;
|
|
|
88
79
|
* @example
|
|
89
80
|
* ```ts
|
|
90
81
|
* pipe(
|
|
91
|
-
* Result.
|
|
82
|
+
* Result.ok(5),
|
|
92
83
|
* Result.fold(
|
|
93
84
|
* e => `Error: ${e}`,
|
|
94
85
|
* n => `Value: ${n}`
|
|
@@ -117,7 +108,7 @@ var Result;
|
|
|
117
108
|
*
|
|
118
109
|
* @example
|
|
119
110
|
* ```ts
|
|
120
|
-
* pipe(Result.
|
|
111
|
+
* pipe(Result.ok(5), Result.getOrElse(0)); // 5
|
|
121
112
|
* pipe(Result.err("error"), Result.getOrElse(0)); // 0
|
|
122
113
|
* ```
|
|
123
114
|
*/
|
|
@@ -129,7 +120,7 @@ var Result;
|
|
|
129
120
|
* @example
|
|
130
121
|
* ```ts
|
|
131
122
|
* pipe(
|
|
132
|
-
* Result.
|
|
123
|
+
* Result.ok(5),
|
|
133
124
|
* Result.tap(n => console.log("Value:", n)),
|
|
134
125
|
* Result.map(n => n * 2)
|
|
135
126
|
* );
|
|
@@ -166,9 +157,9 @@ var Result;
|
|
|
166
157
|
* ```ts
|
|
167
158
|
* const add = (a: number) => (b: number) => a + b;
|
|
168
159
|
* pipe(
|
|
169
|
-
* Result.
|
|
170
|
-
* Result.ap(Result.
|
|
171
|
-
* Result.ap(Result.
|
|
160
|
+
* Result.ok(add),
|
|
161
|
+
* Result.ap(Result.ok(5)),
|
|
162
|
+
* Result.ap(Result.ok(3))
|
|
172
163
|
* ); // Ok(8)
|
|
173
164
|
* ```
|
|
174
165
|
*/
|
package/script/src/Core/Task.js
CHANGED
|
@@ -5,22 +5,22 @@ const Result_js_1 = require("./Result.js");
|
|
|
5
5
|
var Task;
|
|
6
6
|
(function (Task) {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Creates a Task that immediately resolves to the given value.
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
* const task = Task.
|
|
12
|
+
* const task = Task.resolve(42);
|
|
13
13
|
* task().then(console.log); // 42
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
Task.
|
|
16
|
+
Task.resolve = (value) => () => Promise.resolve(value);
|
|
17
17
|
/**
|
|
18
18
|
* Creates a Task from a function that returns a Promise.
|
|
19
19
|
* Alias for directly creating a Task.
|
|
20
20
|
*
|
|
21
21
|
* @example
|
|
22
22
|
* ```ts
|
|
23
|
-
* const
|
|
23
|
+
* const getTimestamp = Task.from(() => Promise.resolve(Date.now()));
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
Task.from = (f) => f;
|
|
@@ -30,7 +30,7 @@ var Task;
|
|
|
30
30
|
* @example
|
|
31
31
|
* ```ts
|
|
32
32
|
* pipe(
|
|
33
|
-
* Task.
|
|
33
|
+
* Task.resolve(5),
|
|
34
34
|
* Task.map(n => n * 2)
|
|
35
35
|
* )(); // Promise<10>
|
|
36
36
|
* ```
|
|
@@ -41,13 +41,13 @@ var Task;
|
|
|
41
41
|
*
|
|
42
42
|
* @example
|
|
43
43
|
* ```ts
|
|
44
|
-
* const
|
|
45
|
-
* const
|
|
44
|
+
* const readUserId: Task<string> = () => Promise.resolve(session.userId);
|
|
45
|
+
* const loadPrefs = (id: string): Task<Preferences> => () => Promise.resolve(prefsCache.get(id));
|
|
46
46
|
*
|
|
47
47
|
* pipe(
|
|
48
|
-
*
|
|
49
|
-
* Task.chain(
|
|
50
|
-
* )(); // Promise<
|
|
48
|
+
* readUserId,
|
|
49
|
+
* Task.chain(loadPrefs)
|
|
50
|
+
* )(); // Promise<Preferences>
|
|
51
51
|
* ```
|
|
52
52
|
*/
|
|
53
53
|
Task.chain = (f) => (data) => () => data().then((a) => f(a)());
|
|
@@ -59,9 +59,9 @@ var Task;
|
|
|
59
59
|
* ```ts
|
|
60
60
|
* const add = (a: number) => (b: number) => a + b;
|
|
61
61
|
* pipe(
|
|
62
|
-
* Task.
|
|
63
|
-
* Task.ap(Task.
|
|
64
|
-
* Task.ap(Task.
|
|
62
|
+
* Task.resolve(add),
|
|
63
|
+
* Task.ap(Task.resolve(5)),
|
|
64
|
+
* Task.ap(Task.resolve(3))
|
|
65
65
|
* )(); // Promise<8>
|
|
66
66
|
* ```
|
|
67
67
|
*/
|
|
@@ -73,9 +73,9 @@ var Task;
|
|
|
73
73
|
* @example
|
|
74
74
|
* ```ts
|
|
75
75
|
* pipe(
|
|
76
|
-
*
|
|
77
|
-
* Task.tap(
|
|
78
|
-
* Task.map(
|
|
76
|
+
* loadConfig,
|
|
77
|
+
* Task.tap(cfg => console.log("Config:", cfg)),
|
|
78
|
+
* Task.map(buildReport)
|
|
79
79
|
* );
|
|
80
80
|
* ```
|
|
81
81
|
*/
|
|
@@ -88,8 +88,8 @@ var Task;
|
|
|
88
88
|
*
|
|
89
89
|
* @example
|
|
90
90
|
* ```ts
|
|
91
|
-
* Task.all([
|
|
92
|
-
* // Promise<[
|
|
91
|
+
* Task.all([loadConfig, detectLocale, loadTheme])();
|
|
92
|
+
* // Promise<[Config, string, Theme]>
|
|
93
93
|
* ```
|
|
94
94
|
*/
|
|
95
95
|
Task.all = (tasks) => () => Promise.all(tasks.map((t) => t()));
|
|
@@ -100,7 +100,7 @@ var Task;
|
|
|
100
100
|
* @example
|
|
101
101
|
* ```ts
|
|
102
102
|
* pipe(
|
|
103
|
-
* Task.
|
|
103
|
+
* Task.resolve(42),
|
|
104
104
|
* Task.delay(1000)
|
|
105
105
|
* )(); // Resolves after 1 second
|
|
106
106
|
* ```
|
|
@@ -161,16 +161,19 @@ var Task;
|
|
|
161
161
|
* @example
|
|
162
162
|
* ```ts
|
|
163
163
|
* pipe(
|
|
164
|
-
*
|
|
165
|
-
* Task.timeout(5000, () =>
|
|
166
|
-
* TaskResult.chain(
|
|
164
|
+
* heavyComputation,
|
|
165
|
+
* Task.timeout(5000, () => "timed out"),
|
|
166
|
+
* TaskResult.chain(processResult)
|
|
167
167
|
* );
|
|
168
168
|
* ```
|
|
169
169
|
*/
|
|
170
170
|
Task.timeout = (ms, onTimeout) => (task) => () => {
|
|
171
171
|
let timerId;
|
|
172
172
|
return Promise.race([
|
|
173
|
-
task().then((a) => {
|
|
173
|
+
task().then((a) => {
|
|
174
|
+
clearTimeout(timerId);
|
|
175
|
+
return Result_js_1.Result.ok(a);
|
|
176
|
+
}),
|
|
174
177
|
new Promise((resolve) => {
|
|
175
178
|
timerId = setTimeout(() => resolve(Result_js_1.Result.err(onTimeout())), ms);
|
|
176
179
|
}),
|
|
@@ -8,19 +8,19 @@ var TaskOption;
|
|
|
8
8
|
/**
|
|
9
9
|
* Wraps a value in a Some inside a Task.
|
|
10
10
|
*/
|
|
11
|
-
TaskOption.
|
|
11
|
+
TaskOption.some = (value) => Task_js_1.Task.resolve(Option_js_1.Option.some(value));
|
|
12
12
|
/**
|
|
13
13
|
* Creates a TaskOption that resolves to None.
|
|
14
14
|
*/
|
|
15
|
-
TaskOption.none = () => Task_js_1.Task.
|
|
15
|
+
TaskOption.none = () => Task_js_1.Task.resolve(Option_js_1.Option.none());
|
|
16
16
|
/**
|
|
17
17
|
* Lifts an Option into a TaskOption.
|
|
18
18
|
*/
|
|
19
|
-
TaskOption.fromOption = (option) => Task_js_1.Task.
|
|
19
|
+
TaskOption.fromOption = (option) => Task_js_1.Task.resolve(option);
|
|
20
20
|
/**
|
|
21
21
|
* Lifts a Task into a TaskOption by wrapping its result in Some.
|
|
22
22
|
*/
|
|
23
|
-
TaskOption.fromTask = (task) => Task_js_1.Task.map(Option_js_1.Option.
|
|
23
|
+
TaskOption.fromTask = (task) => Task_js_1.Task.map(Option_js_1.Option.some)(task);
|
|
24
24
|
/**
|
|
25
25
|
* Creates a TaskOption from a Promise-returning function.
|
|
26
26
|
* Returns Some if the promise resolves, None if it rejects.
|
|
@@ -32,7 +32,9 @@ var TaskOption;
|
|
|
32
32
|
* );
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
TaskOption.tryCatch = (f) => () => f()
|
|
35
|
+
TaskOption.tryCatch = (f) => () => f()
|
|
36
|
+
.then(Option_js_1.Option.some)
|
|
37
|
+
.catch(() => Option_js_1.Option.none());
|
|
36
38
|
/**
|
|
37
39
|
* Transforms the value inside a TaskOption.
|
|
38
40
|
*/
|
|
@@ -49,7 +51,7 @@ var TaskOption;
|
|
|
49
51
|
* )();
|
|
50
52
|
* ```
|
|
51
53
|
*/
|
|
52
|
-
TaskOption.chain = (f) => (data) => Task_js_1.Task.chain((option) => Option_js_1.Option.isSome(option) ? f(option.value) : Task_js_1.Task.
|
|
54
|
+
TaskOption.chain = (f) => (data) => Task_js_1.Task.chain((option) => Option_js_1.Option.isSome(option) ? f(option.value) : Task_js_1.Task.resolve(Option_js_1.Option.none()))(data);
|
|
53
55
|
/**
|
|
54
56
|
* Applies a function wrapped in a TaskOption to a value wrapped in a TaskOption.
|
|
55
57
|
* Both Tasks run in parallel.
|
|
@@ -8,11 +8,11 @@ var TaskResult;
|
|
|
8
8
|
/**
|
|
9
9
|
* Wraps a value in a successful TaskResult.
|
|
10
10
|
*/
|
|
11
|
-
TaskResult.
|
|
11
|
+
TaskResult.ok = (value) => Task_js_1.Task.resolve(Result_js_1.Result.ok(value));
|
|
12
12
|
/**
|
|
13
13
|
* Creates a failed TaskResult with the given error.
|
|
14
14
|
*/
|
|
15
|
-
TaskResult.err = (error) => Task_js_1.Task.
|
|
15
|
+
TaskResult.err = (error) => Task_js_1.Task.resolve(Result_js_1.Result.err(error));
|
|
16
16
|
/**
|
|
17
17
|
* Creates a TaskResult from a function that may throw.
|
|
18
18
|
* Catches any errors and transforms them using the onError function.
|
|
@@ -41,7 +41,7 @@ var TaskResult;
|
|
|
41
41
|
* Chains TaskResult computations. If the first succeeds, passes the value to f.
|
|
42
42
|
* If the first fails, propagates the error.
|
|
43
43
|
*/
|
|
44
|
-
TaskResult.chain = (f) => (data) => Task_js_1.Task.chain((result) => Result_js_1.Result.isOk(result) ? f(result.value) : Task_js_1.Task.
|
|
44
|
+
TaskResult.chain = (f) => (data) => Task_js_1.Task.chain((result) => Result_js_1.Result.isOk(result) ? f(result.value) : Task_js_1.Task.resolve(Result_js_1.Result.err(result.error)))(data);
|
|
45
45
|
/**
|
|
46
46
|
* Extracts the value from a TaskResult by providing handlers for both cases.
|
|
47
47
|
*/
|
|
@@ -53,7 +53,7 @@ var TaskResult;
|
|
|
53
53
|
/**
|
|
54
54
|
* Recovers from an error by providing a fallback TaskResult.
|
|
55
55
|
*/
|
|
56
|
-
TaskResult.recover = (fallback) => (data) => Task_js_1.Task.chain((result) => Result_js_1.Result.isErr(result) ? fallback(result.error) : Task_js_1.Task.
|
|
56
|
+
TaskResult.recover = (fallback) => (data) => Task_js_1.Task.chain((result) => Result_js_1.Result.isErr(result) ? fallback(result.error) : Task_js_1.Task.resolve(result))(data);
|
|
57
57
|
/**
|
|
58
58
|
* Returns the success value or a default value if the TaskResult is an error.
|
|
59
59
|
*/
|
|
@@ -93,8 +93,9 @@ var TaskResult;
|
|
|
93
93
|
return result;
|
|
94
94
|
if (left <= 1)
|
|
95
95
|
return result;
|
|
96
|
-
if (shouldRetry !== undefined && !shouldRetry(result.error))
|
|
96
|
+
if (shouldRetry !== undefined && !shouldRetry(result.error)) {
|
|
97
97
|
return result;
|
|
98
|
+
}
|
|
98
99
|
const ms = getDelay(attempts - left + 1);
|
|
99
100
|
return (ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve()).then(() => run(left - 1));
|
|
100
101
|
});
|
|
@@ -114,7 +115,10 @@ var TaskResult;
|
|
|
114
115
|
TaskResult.timeout = (ms, onTimeout) => (data) => () => {
|
|
115
116
|
let timerId;
|
|
116
117
|
return Promise.race([
|
|
117
|
-
data().then((result) => {
|
|
118
|
+
data().then((result) => {
|
|
119
|
+
clearTimeout(timerId);
|
|
120
|
+
return result;
|
|
121
|
+
}),
|
|
118
122
|
new Promise((resolve) => {
|
|
119
123
|
timerId = setTimeout(() => resolve(Result_js_1.Result.err(onTimeout())), ms);
|
|
120
124
|
}),
|
|
@@ -8,15 +8,19 @@ var TaskValidation;
|
|
|
8
8
|
/**
|
|
9
9
|
* Wraps a value in a valid TaskValidation.
|
|
10
10
|
*/
|
|
11
|
-
TaskValidation.
|
|
11
|
+
TaskValidation.valid = (value) => Task_js_1.Task.resolve(Validation_js_1.Validation.valid(value));
|
|
12
12
|
/**
|
|
13
13
|
* Creates a failed TaskValidation with a single error.
|
|
14
14
|
*/
|
|
15
|
-
TaskValidation.
|
|
15
|
+
TaskValidation.invalid = (error) => Task_js_1.Task.resolve(Validation_js_1.Validation.invalid(error));
|
|
16
|
+
/**
|
|
17
|
+
* Creates an invalid TaskValidation from multiple errors.
|
|
18
|
+
*/
|
|
19
|
+
TaskValidation.invalidAll = (errors) => Task_js_1.Task.resolve(Validation_js_1.Validation.invalidAll(errors));
|
|
16
20
|
/**
|
|
17
21
|
* Lifts a Validation into a TaskValidation.
|
|
18
22
|
*/
|
|
19
|
-
TaskValidation.fromValidation = (validation) => Task_js_1.Task.
|
|
23
|
+
TaskValidation.fromValidation = (validation) => Task_js_1.Task.resolve(validation);
|
|
20
24
|
/**
|
|
21
25
|
* Creates a TaskValidation from a Promise-returning function.
|
|
22
26
|
* Catches any errors and transforms them using the onError function.
|
|
@@ -31,8 +35,8 @@ var TaskValidation;
|
|
|
31
35
|
* ```
|
|
32
36
|
*/
|
|
33
37
|
TaskValidation.tryCatch = (f, onError) => () => f()
|
|
34
|
-
.then((Validation_js_1.Validation.
|
|
35
|
-
.catch((e) => Validation_js_1.Validation.
|
|
38
|
+
.then((Validation_js_1.Validation.valid))
|
|
39
|
+
.catch((e) => Validation_js_1.Validation.invalid(onError(e)));
|
|
36
40
|
/**
|
|
37
41
|
* Transforms the success value inside a TaskValidation.
|
|
38
42
|
*/
|
|
@@ -45,7 +49,7 @@ var TaskValidation;
|
|
|
45
49
|
*/
|
|
46
50
|
TaskValidation.chain = (f) => (data) => Task_js_1.Task.chain((validation) => Validation_js_1.Validation.isValid(validation)
|
|
47
51
|
? f(validation.value)
|
|
48
|
-
: Task_js_1.Task.
|
|
52
|
+
: Task_js_1.Task.resolve(Validation_js_1.Validation.invalidAll(validation.errors)))(data);
|
|
49
53
|
/**
|
|
50
54
|
* Applies a function wrapped in a TaskValidation to a value wrapped in a
|
|
51
55
|
* TaskValidation. Both Tasks run in parallel and errors from both sides
|
|
@@ -54,7 +58,7 @@ var TaskValidation;
|
|
|
54
58
|
* @example
|
|
55
59
|
* ```ts
|
|
56
60
|
* pipe(
|
|
57
|
-
* TaskValidation.
|
|
61
|
+
* TaskValidation.valid((name: string) => (age: number) => ({ name, age })),
|
|
58
62
|
* TaskValidation.ap(validateName(name)),
|
|
59
63
|
* TaskValidation.ap(validateAge(age))
|
|
60
64
|
* )();
|
|
@@ -92,5 +96,5 @@ var TaskValidation;
|
|
|
92
96
|
/**
|
|
93
97
|
* Recovers from an Invalid state by providing a fallback TaskValidation.
|
|
94
98
|
*/
|
|
95
|
-
TaskValidation.recover = (fallback) => (data) => Task_js_1.Task.chain((validation) => Validation_js_1.Validation.isValid(validation) ? Task_js_1.Task.
|
|
99
|
+
TaskValidation.recover = (fallback) => (data) => Task_js_1.Task.chain((validation) => Validation_js_1.Validation.isValid(validation) ? Task_js_1.Task.resolve(validation) : fallback())(data);
|
|
96
100
|
})(TaskValidation || (exports.TaskValidation = TaskValidation = {}));
|