@nlozgachev/pipekit 0.2.0 → 0.3.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 +6 -6
- 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 +6 -6
- 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/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 +6 -6
- 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
|
@@ -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 = {}));
|
package/script/src/Core/These.js
CHANGED
|
@@ -5,23 +5,23 @@ const Result_js_1 = require("./Result.js");
|
|
|
5
5
|
var These;
|
|
6
6
|
(function (These) {
|
|
7
7
|
/**
|
|
8
|
-
* Creates a These holding only
|
|
8
|
+
* Creates a These holding only a success value (no error).
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
* These.
|
|
12
|
+
* These.ok(42);
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
These.
|
|
15
|
+
These.ok = (value) => Result_js_1.Result.ok(value);
|
|
16
16
|
/**
|
|
17
|
-
* Creates a These holding only
|
|
17
|
+
* Creates a These holding only an error/warning (no success value).
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* ```ts
|
|
21
|
-
* These.
|
|
21
|
+
* These.err("Something went wrong");
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
These.
|
|
24
|
+
These.err = (error) => Result_js_1.Result.err(error);
|
|
25
25
|
/**
|
|
26
26
|
* Creates a These holding both an error/warning and a success value.
|
|
27
27
|
*
|
|
@@ -9,56 +9,55 @@ var Validation;
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
* Validation.
|
|
12
|
+
* Validation.valid(42); // Valid(42)
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
Validation.
|
|
15
|
+
Validation.valid = (value) => ({
|
|
16
16
|
kind: "Valid",
|
|
17
17
|
value,
|
|
18
18
|
});
|
|
19
19
|
/**
|
|
20
|
-
* Creates
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
20
|
+
* Creates an invalid Validation from a single error.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* Validation.invalid("Invalid input");
|
|
25
|
+
* ```
|
|
25
26
|
*/
|
|
26
|
-
Validation.
|
|
27
|
+
Validation.invalid = (error) => ({
|
|
28
|
+
kind: "Invalid",
|
|
29
|
+
errors: [error],
|
|
30
|
+
});
|
|
27
31
|
/**
|
|
28
|
-
* Creates an invalid Validation
|
|
32
|
+
* Creates an invalid Validation from multiple errors.
|
|
29
33
|
*
|
|
30
34
|
* @example
|
|
31
35
|
* ```ts
|
|
32
|
-
* Validation.
|
|
36
|
+
* Validation.invalidAll(["Invalid input"]);
|
|
33
37
|
* ```
|
|
34
38
|
*/
|
|
35
|
-
Validation.
|
|
39
|
+
Validation.invalidAll = (errors) => ({
|
|
36
40
|
kind: "Invalid",
|
|
37
41
|
errors,
|
|
38
42
|
});
|
|
39
43
|
/**
|
|
40
|
-
* Type guard that checks if a Validation is
|
|
44
|
+
* Type guard that checks if a Validation is valid.
|
|
41
45
|
*/
|
|
42
|
-
Validation.
|
|
46
|
+
Validation.isValid = (data) => data.kind === "Valid";
|
|
43
47
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```ts
|
|
48
|
-
* Validation.fail("Invalid input");
|
|
49
|
-
* ```
|
|
48
|
+
* Type guard that checks if a Validation is invalid.
|
|
50
49
|
*/
|
|
51
|
-
Validation.
|
|
50
|
+
Validation.isInvalid = (data) => data.kind === "Invalid";
|
|
52
51
|
/**
|
|
53
52
|
* Transforms the success value inside a Validation.
|
|
54
53
|
*
|
|
55
54
|
* @example
|
|
56
55
|
* ```ts
|
|
57
|
-
* pipe(Validation.
|
|
58
|
-
* pipe(Validation.
|
|
56
|
+
* pipe(Validation.valid(5), Validation.map(n => n * 2)); // Valid(10)
|
|
57
|
+
* pipe(Validation.invalid("oops"), Validation.map(n => n * 2)); // Invalid(["oops"])
|
|
59
58
|
* ```
|
|
60
59
|
*/
|
|
61
|
-
Validation.map = (f) => (data) => Validation.isValid(data) ? Validation.
|
|
60
|
+
Validation.map = (f) => (data) => Validation.isValid(data) ? Validation.valid(f(data.value)) : data;
|
|
62
61
|
/**
|
|
63
62
|
* Chains Validation computations. If the first is Valid, passes the value to f.
|
|
64
63
|
* If the first is Invalid, propagates the errors.
|
|
@@ -68,10 +67,10 @@ var Validation;
|
|
|
68
67
|
* @example
|
|
69
68
|
* ```ts
|
|
70
69
|
* const validatePositive = (n: number): Validation<string, number> =>
|
|
71
|
-
* n > 0 ? Validation.
|
|
70
|
+
* n > 0 ? Validation.valid(n) : Validation.invalid("Must be positive");
|
|
72
71
|
*
|
|
73
|
-
* pipe(Validation.
|
|
74
|
-
* pipe(Validation.
|
|
72
|
+
* pipe(Validation.valid(5), Validation.chain(validatePositive)); // Valid(5)
|
|
73
|
+
* pipe(Validation.valid(-1), Validation.chain(validatePositive)); // Invalid(["Must be positive"])
|
|
75
74
|
* ```
|
|
76
75
|
*/
|
|
77
76
|
Validation.chain = (f) => (data) => Validation.isValid(data) ? f(data.value) : data;
|
|
@@ -83,26 +82,26 @@ var Validation;
|
|
|
83
82
|
* ```ts
|
|
84
83
|
* const add = (a: number) => (b: number) => a + b;
|
|
85
84
|
* pipe(
|
|
86
|
-
* Validation.
|
|
87
|
-
* Validation.ap(Validation.
|
|
88
|
-
* Validation.ap(Validation.
|
|
85
|
+
* Validation.valid(add),
|
|
86
|
+
* Validation.ap(Validation.valid(5)),
|
|
87
|
+
* Validation.ap(Validation.valid(3))
|
|
89
88
|
* ); // Valid(8)
|
|
90
89
|
*
|
|
91
90
|
* pipe(
|
|
92
|
-
* Validation.
|
|
93
|
-
* Validation.ap(Validation.
|
|
94
|
-
* Validation.ap(Validation.
|
|
91
|
+
* Validation.valid(add),
|
|
92
|
+
* Validation.ap(Validation.invalid<string, number>("bad a")),
|
|
93
|
+
* Validation.ap(Validation.invalid<string, number>("bad b"))
|
|
95
94
|
* ); // Invalid(["bad a", "bad b"])
|
|
96
95
|
* ```
|
|
97
96
|
*/
|
|
98
97
|
Validation.ap = (arg) => (data) => {
|
|
99
98
|
if (Validation.isValid(data) && Validation.isValid(arg))
|
|
100
|
-
return Validation.
|
|
99
|
+
return Validation.valid(data.value(arg.value));
|
|
101
100
|
const errors = [
|
|
102
101
|
...(Validation.isInvalid(data) ? data.errors : []),
|
|
103
102
|
...(Validation.isInvalid(arg) ? arg.errors : []),
|
|
104
103
|
];
|
|
105
|
-
return (0, NonEmptyList_js_1.isNonEmptyList)(errors) ? Validation.
|
|
104
|
+
return (0, NonEmptyList_js_1.isNonEmptyList)(errors) ? Validation.invalidAll(errors) : Validation.valid(data);
|
|
106
105
|
};
|
|
107
106
|
/**
|
|
108
107
|
* Extracts the value from a Validation by providing handlers for both cases.
|
|
@@ -110,7 +109,7 @@ var Validation;
|
|
|
110
109
|
* @example
|
|
111
110
|
* ```ts
|
|
112
111
|
* pipe(
|
|
113
|
-
* Validation.
|
|
112
|
+
* Validation.valid(42),
|
|
114
113
|
* Validation.fold(
|
|
115
114
|
* errors => `Errors: ${errors.join(", ")}`,
|
|
116
115
|
* value => `Value: ${value}`
|
|
@@ -139,8 +138,8 @@ var Validation;
|
|
|
139
138
|
*
|
|
140
139
|
* @example
|
|
141
140
|
* ```ts
|
|
142
|
-
* pipe(Validation.
|
|
143
|
-
* pipe(Validation.
|
|
141
|
+
* pipe(Validation.valid(5), Validation.getOrElse(0)); // 5
|
|
142
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(0)); // 0
|
|
144
143
|
* ```
|
|
145
144
|
*/
|
|
146
145
|
Validation.getOrElse = (defaultValue) => (data) => Validation.isValid(data) ? data.value : defaultValue;
|
|
@@ -150,7 +149,7 @@ var Validation;
|
|
|
150
149
|
* @example
|
|
151
150
|
* ```ts
|
|
152
151
|
* pipe(
|
|
153
|
-
* Validation.
|
|
152
|
+
* Validation.valid(5),
|
|
154
153
|
* Validation.tap(n => console.log("Value:", n)),
|
|
155
154
|
* Validation.map(n => n * 2)
|
|
156
155
|
* );
|
|
@@ -180,13 +179,13 @@ var Validation;
|
|
|
180
179
|
* @example
|
|
181
180
|
* ```ts
|
|
182
181
|
* Validation.combine(
|
|
183
|
-
* Validation.
|
|
184
|
-
* Validation.
|
|
182
|
+
* Validation.invalid("Error 1"),
|
|
183
|
+
* Validation.invalid("Error 2")
|
|
185
184
|
* ); // Invalid(["Error 1", "Error 2"])
|
|
186
185
|
*
|
|
187
186
|
* Validation.combine(
|
|
188
|
-
* Validation.
|
|
189
|
-
* Validation.
|
|
187
|
+
* Validation.valid("a"),
|
|
188
|
+
* Validation.valid("b")
|
|
190
189
|
* ); // Valid("b")
|
|
191
190
|
* ```
|
|
192
191
|
*/
|
|
@@ -198,7 +197,7 @@ var Validation;
|
|
|
198
197
|
...(Validation.isInvalid(first) ? first.errors : []),
|
|
199
198
|
...(Validation.isInvalid(second) ? second.errors : []),
|
|
200
199
|
];
|
|
201
|
-
return (0, NonEmptyList_js_1.isNonEmptyList)(errors) ? Validation.
|
|
200
|
+
return (0, NonEmptyList_js_1.isNonEmptyList)(errors) ? Validation.invalidAll(errors) : second;
|
|
202
201
|
};
|
|
203
202
|
/**
|
|
204
203
|
* Combines multiple Validation instances, accumulating all errors.
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* ```ts
|
|
7
7
|
* // Original data-last (for pipe)
|
|
8
8
|
* pipe(
|
|
9
|
-
* Option.
|
|
9
|
+
* Option.some(5),
|
|
10
10
|
* Option.map(n => n * 2)
|
|
11
11
|
* ); // Some(10)
|
|
12
12
|
*
|
|
13
13
|
* // Flipped to data-first
|
|
14
14
|
* const mapFirst = flip(Option.map);
|
|
15
|
-
* mapFirst(Option.
|
|
15
|
+
* mapFirst(Option.some(5))(n => n * 2); // Some(10)
|
|
16
16
|
* ```
|
|
17
17
|
*
|
|
18
18
|
* @see {@link uncurry} for converting curried functions to multi-argument functions
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
* uncurry(nested)(); // 42
|
|
12
12
|
*
|
|
13
13
|
* // Original curried function
|
|
14
|
-
* Option.map(n => n * 2)(Option.
|
|
14
|
+
* Option.map(n => n * 2)(Option.some(5)); // Some(10)
|
|
15
15
|
*
|
|
16
16
|
* // Uncurried - all arguments at once
|
|
17
17
|
* const mapUncurried = uncurry(Option.map);
|
|
18
|
-
* mapUncurried(n => n * 2, Option.
|
|
18
|
+
* mapUncurried(n => n * 2, Option.some(5)); // Some(10)
|
|
19
19
|
*
|
|
20
20
|
* // Combined with flip for data-first uncurried
|
|
21
21
|
* const mapDataFirst = uncurry(flip(Option.map));
|
|
22
|
-
* mapDataFirst(Option.
|
|
22
|
+
* mapDataFirst(Option.some(5), n => n * 2); // Some(10)
|
|
23
23
|
* ```
|
|
24
24
|
*
|
|
25
25
|
* @see {@link flip} for reversing curried argument order
|
package/types/src/Core/Arr.d.ts
CHANGED
|
@@ -227,7 +227,7 @@ export declare namespace Arr {
|
|
|
227
227
|
* ```ts
|
|
228
228
|
* const parseNum = (s: string): Option<number> => {
|
|
229
229
|
* const n = Number(s);
|
|
230
|
-
* return isNaN(n) ? Option.none() : Option.
|
|
230
|
+
* return isNaN(n) ? Option.none() : Option.some(n);
|
|
231
231
|
* };
|
|
232
232
|
*
|
|
233
233
|
* pipe(["1", "2", "3"], Arr.traverse(parseNum)); // Some([1, 2, 3])
|
|
@@ -255,7 +255,7 @@ export declare namespace Arr {
|
|
|
255
255
|
* ```ts
|
|
256
256
|
* pipe(
|
|
257
257
|
* [1, 2, 3],
|
|
258
|
-
* Arr.traverseTask(n => Task.
|
|
258
|
+
* Arr.traverseTask(n => Task.resolve(n * 2))
|
|
259
259
|
* )(); // Promise<[2, 4, 6]>
|
|
260
260
|
* ```
|
|
261
261
|
*/
|
|
@@ -266,8 +266,8 @@ export declare namespace Arr {
|
|
|
266
266
|
*
|
|
267
267
|
* @example
|
|
268
268
|
* ```ts
|
|
269
|
-
* Arr.sequence([Option.
|
|
270
|
-
* Arr.sequence([Option.
|
|
269
|
+
* Arr.sequence([Option.some(1), Option.some(2)]); // Some([1, 2])
|
|
270
|
+
* Arr.sequence([Option.some(1), Option.none()]); // None
|
|
271
271
|
* ```
|
|
272
272
|
*/
|
|
273
273
|
const sequence: <A>(data: readonly Option<A>[]) => Option<readonly A[]>;
|
|
@@ -7,7 +7,7 @@ import { Result } from "./Result.js";
|
|
|
7
7
|
* @example
|
|
8
8
|
* ```ts
|
|
9
9
|
* const findUser = (id: string): Option<User> =>
|
|
10
|
-
* users.has(id) ? Option.
|
|
10
|
+
* users.has(id) ? Option.some(users.get(id)!) : Option.none();
|
|
11
11
|
*
|
|
12
12
|
* pipe(
|
|
13
13
|
* findUser("123"),
|
|
@@ -20,15 +20,6 @@ export type Option<T> = Some<T> | None;
|
|
|
20
20
|
export type Some<A> = WithKind<"Some"> & WithValue<A>;
|
|
21
21
|
export type None = WithKind<"None">;
|
|
22
22
|
export declare namespace Option {
|
|
23
|
-
/**
|
|
24
|
-
* Wraps a value in a Some.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```ts
|
|
28
|
-
* Option.of(42); // Some(42)
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
const of: <A>(value: A) => Option<A>;
|
|
32
23
|
/**
|
|
33
24
|
* Creates a Some containing the given value.
|
|
34
25
|
*/
|
|
@@ -76,7 +67,7 @@ export declare namespace Option {
|
|
|
76
67
|
* @example
|
|
77
68
|
* ```ts
|
|
78
69
|
* pipe(
|
|
79
|
-
* Option.
|
|
70
|
+
* Option.some(42),
|
|
80
71
|
* Option.toResult(() => "Value was missing")
|
|
81
72
|
* ); // Ok(42)
|
|
82
73
|
*
|
|
@@ -103,7 +94,7 @@ export declare namespace Option {
|
|
|
103
94
|
*
|
|
104
95
|
* @example
|
|
105
96
|
* ```ts
|
|
106
|
-
* pipe(Option.
|
|
97
|
+
* pipe(Option.some(5), Option.map(n => n * 2)); // Some(10)
|
|
107
98
|
* pipe(Option.none(), Option.map(n => n * 2)); // None
|
|
108
99
|
* ```
|
|
109
100
|
*/
|
|
@@ -116,11 +107,11 @@ export declare namespace Option {
|
|
|
116
107
|
* ```ts
|
|
117
108
|
* const parseNumber = (s: string): Option<number> => {
|
|
118
109
|
* const n = parseInt(s, 10);
|
|
119
|
-
* return isNaN(n) ? Option.none() : Option.
|
|
110
|
+
* return isNaN(n) ? Option.none() : Option.some(n);
|
|
120
111
|
* };
|
|
121
112
|
*
|
|
122
|
-
* pipe(Option.
|
|
123
|
-
* pipe(Option.
|
|
113
|
+
* pipe(Option.some("42"), Option.chain(parseNumber)); // Some(42)
|
|
114
|
+
* pipe(Option.some("abc"), Option.chain(parseNumber)); // None
|
|
124
115
|
* ```
|
|
125
116
|
*/
|
|
126
117
|
const chain: <A, B>(f: (a: A) => Option<B>) => (data: Option<A>) => Option<B>;
|
|
@@ -130,7 +121,7 @@ export declare namespace Option {
|
|
|
130
121
|
* @example
|
|
131
122
|
* ```ts
|
|
132
123
|
* pipe(
|
|
133
|
-
* Option.
|
|
124
|
+
* Option.some(5),
|
|
134
125
|
* Option.fold(
|
|
135
126
|
* () => "No value",
|
|
136
127
|
* n => `Value: ${n}`
|
|
@@ -162,7 +153,7 @@ export declare namespace Option {
|
|
|
162
153
|
*
|
|
163
154
|
* @example
|
|
164
155
|
* ```ts
|
|
165
|
-
* pipe(Option.
|
|
156
|
+
* pipe(Option.some(5), Option.getOrElse(0)); // 5
|
|
166
157
|
* pipe(Option.none(), Option.getOrElse(0)); // 0
|
|
167
158
|
* ```
|
|
168
159
|
*/
|
|
@@ -174,7 +165,7 @@ export declare namespace Option {
|
|
|
174
165
|
* @example
|
|
175
166
|
* ```ts
|
|
176
167
|
* pipe(
|
|
177
|
-
* Option.
|
|
168
|
+
* Option.some(5),
|
|
178
169
|
* Option.tap(n => console.log("Value:", n)),
|
|
179
170
|
* Option.map(n => n * 2)
|
|
180
171
|
* );
|
|
@@ -187,8 +178,8 @@ export declare namespace Option {
|
|
|
187
178
|
*
|
|
188
179
|
* @example
|
|
189
180
|
* ```ts
|
|
190
|
-
* pipe(Option.
|
|
191
|
-
* pipe(Option.
|
|
181
|
+
* pipe(Option.some(5), Option.filter(n => n > 3)); // Some(5)
|
|
182
|
+
* pipe(Option.some(2), Option.filter(n => n > 3)); // None
|
|
192
183
|
* ```
|
|
193
184
|
*/
|
|
194
185
|
const filter: <A>(predicate: (a: A) => boolean) => (data: Option<A>) => Option<A>;
|
|
@@ -203,9 +194,9 @@ export declare namespace Option {
|
|
|
203
194
|
* ```ts
|
|
204
195
|
* const add = (a: number) => (b: number) => a + b;
|
|
205
196
|
* pipe(
|
|
206
|
-
* Option.
|
|
207
|
-
* Option.ap(Option.
|
|
208
|
-
* Option.ap(Option.
|
|
197
|
+
* Option.some(add),
|
|
198
|
+
* Option.ap(Option.some(5)),
|
|
199
|
+
* Option.ap(Option.some(3))
|
|
209
200
|
* ); // Some(8)
|
|
210
201
|
* ```
|
|
211
202
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Option.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEvC,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpC,yBAAiB,MAAM,CAAC;IACtB
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Option.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,10 +41,6 @@ export declare namespace RemoteData {
|
|
|
41
41
|
* Creates a Success RemoteData with the given value.
|
|
42
42
|
*/
|
|
43
43
|
const success: <E, A>(value: A) => RemoteData<E, A>;
|
|
44
|
-
/**
|
|
45
|
-
* Wraps a value in a Success RemoteData. Alias for `success`.
|
|
46
|
-
*/
|
|
47
|
-
const of: <E, A>(value: A) => RemoteData<E, A>;
|
|
48
44
|
/**
|
|
49
45
|
* Type guard that checks if a RemoteData is NotAsked.
|
|
50
46
|
*/
|
|
@@ -66,7 +62,7 @@ export declare namespace RemoteData {
|
|
|
66
62
|
*
|
|
67
63
|
* @example
|
|
68
64
|
* ```ts
|
|
69
|
-
* pipe(RemoteData.
|
|
65
|
+
* pipe(RemoteData.success(5), RemoteData.map(n => n * 2)); // Success(10)
|
|
70
66
|
* pipe(RemoteData.loading(), RemoteData.map(n => n * 2)); // Loading
|
|
71
67
|
* ```
|
|
72
68
|
*/
|
|
@@ -87,8 +83,8 @@ export declare namespace RemoteData {
|
|
|
87
83
|
* @example
|
|
88
84
|
* ```ts
|
|
89
85
|
* pipe(
|
|
90
|
-
* RemoteData.
|
|
91
|
-
* RemoteData.chain(n => n > 0 ? RemoteData.
|
|
86
|
+
* RemoteData.success(5),
|
|
87
|
+
* RemoteData.chain(n => n > 0 ? RemoteData.success(n) : RemoteData.failure("negative"))
|
|
92
88
|
* );
|
|
93
89
|
* ```
|
|
94
90
|
*/
|
|
@@ -100,9 +96,9 @@ export declare namespace RemoteData {
|
|
|
100
96
|
* ```ts
|
|
101
97
|
* const add = (a: number) => (b: number) => a + b;
|
|
102
98
|
* pipe(
|
|
103
|
-
* RemoteData.
|
|
104
|
-
* RemoteData.ap(RemoteData.
|
|
105
|
-
* RemoteData.ap(RemoteData.
|
|
99
|
+
* RemoteData.success(add),
|
|
100
|
+
* RemoteData.ap(RemoteData.success(5)),
|
|
101
|
+
* RemoteData.ap(RemoteData.success(3))
|
|
106
102
|
* ); // Success(8)
|
|
107
103
|
* ```
|
|
108
104
|
*/
|
|
@@ -151,7 +147,7 @@ export declare namespace RemoteData {
|
|
|
151
147
|
*
|
|
152
148
|
* @example
|
|
153
149
|
* ```ts
|
|
154
|
-
* pipe(RemoteData.
|
|
150
|
+
* pipe(RemoteData.success(5), RemoteData.getOrElse(0)); // 5
|
|
155
151
|
* pipe(RemoteData.loading(), RemoteData.getOrElse(0)); // 0
|
|
156
152
|
* ```
|
|
157
153
|
*/
|
|
@@ -162,7 +158,7 @@ export declare namespace RemoteData {
|
|
|
162
158
|
* @example
|
|
163
159
|
* ```ts
|
|
164
160
|
* pipe(
|
|
165
|
-
* RemoteData.
|
|
161
|
+
* RemoteData.success(5),
|
|
166
162
|
* RemoteData.tap(n => console.log("Value:", n)),
|
|
167
163
|
* RemoteData.map(n => n * 2)
|
|
168
164
|
* );
|
|
@@ -186,7 +182,7 @@ export declare namespace RemoteData {
|
|
|
186
182
|
* @example
|
|
187
183
|
* ```ts
|
|
188
184
|
* pipe(
|
|
189
|
-
* RemoteData.
|
|
185
|
+
* RemoteData.success(42),
|
|
190
186
|
* RemoteData.toResult(() => "not loaded")
|
|
191
187
|
* ); // Ok(42)
|
|
192
188
|
* ```
|