@nlozgachev/pipelined 0.8.0 → 0.10.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/esm/src/Core/Optional.js +2 -2
- package/esm/src/Core/RemoteData.js +8 -6
- package/esm/src/Core/TaskValidation.js +35 -10
- package/esm/src/Core/These.js +10 -10
- package/esm/src/Core/Validation.js +38 -44
- package/package.json +1 -1
- package/script/src/Core/Optional.js +2 -2
- package/script/src/Core/RemoteData.js +8 -6
- package/script/src/Core/TaskValidation.js +35 -10
- package/script/src/Core/These.js +10 -10
- package/script/src/Core/Validation.js +38 -44
- package/types/src/Core/Option.d.ts +1 -1
- package/types/src/Core/Optional.d.ts +2 -2
- package/types/src/Core/Optional.d.ts.map +1 -1
- package/types/src/Core/RemoteData.d.ts +7 -5
- package/types/src/Core/RemoteData.d.ts.map +1 -1
- package/types/src/Core/Result.d.ts +1 -1
- package/types/src/Core/TaskOption.d.ts +1 -1
- package/types/src/Core/TaskValidation.d.ts +31 -8
- package/types/src/Core/TaskValidation.d.ts.map +1 -1
- package/types/src/Core/These.d.ts +10 -10
- package/types/src/Core/These.d.ts.map +1 -1
- package/types/src/Core/Validation.d.ts +24 -38
- package/types/src/Core/Validation.d.ts.map +1 -1
package/esm/src/Core/Optional.js
CHANGED
|
@@ -84,12 +84,12 @@ export var Optional;
|
|
|
84
84
|
*
|
|
85
85
|
* @example
|
|
86
86
|
* ```ts
|
|
87
|
-
* pipe(profile, Optional.getOrElse(bioOpt)("no bio"));
|
|
87
|
+
* pipe(profile, Optional.getOrElse(bioOpt)(() => "no bio"));
|
|
88
88
|
* ```
|
|
89
89
|
*/
|
|
90
90
|
Optional.getOrElse = (opt) => (defaultValue) => (s) => {
|
|
91
91
|
const val = opt.get(s);
|
|
92
|
-
return val.kind === "Some" ? val.value : defaultValue;
|
|
92
|
+
return val.kind === "Some" ? val.value : defaultValue();
|
|
93
93
|
};
|
|
94
94
|
/**
|
|
95
95
|
* Extracts a value from an Optional focus using handlers for the present
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Option } from "./Option.js";
|
|
2
|
+
import { Result } from "./Result.js";
|
|
1
3
|
export var RemoteData;
|
|
2
4
|
(function (RemoteData) {
|
|
3
5
|
/**
|
|
@@ -157,9 +159,9 @@ export var RemoteData;
|
|
|
157
159
|
*
|
|
158
160
|
* @example
|
|
159
161
|
* ```ts
|
|
160
|
-
* pipe(RemoteData.success(5), RemoteData.getOrElse(0)); // 5
|
|
161
|
-
* pipe(RemoteData.loading(), RemoteData.getOrElse(0)); // 0
|
|
162
|
-
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(null)); // null — typed as number | null
|
|
162
|
+
* pipe(RemoteData.success(5), RemoteData.getOrElse(() => 0)); // 5
|
|
163
|
+
* pipe(RemoteData.loading(), RemoteData.getOrElse(() => 0)); // 0
|
|
164
|
+
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(() => null)); // null — typed as number | null
|
|
163
165
|
* ```
|
|
164
166
|
*/
|
|
165
167
|
RemoteData.getOrElse = (defaultValue) => (data) => RemoteData.isSuccess(data) ? data.value : defaultValue();
|
|
@@ -189,7 +191,7 @@ export var RemoteData;
|
|
|
189
191
|
* Converts a RemoteData to an Option.
|
|
190
192
|
* Success becomes Some, all other states become None.
|
|
191
193
|
*/
|
|
192
|
-
RemoteData.toOption = (data) => RemoteData.isSuccess(data) ?
|
|
194
|
+
RemoteData.toOption = (data) => RemoteData.isSuccess(data) ? Option.some(data.value) : Option.none();
|
|
193
195
|
/**
|
|
194
196
|
* Converts a RemoteData to a Result.
|
|
195
197
|
* Success becomes Ok, Failure becomes Err.
|
|
@@ -204,6 +206,6 @@ export var RemoteData;
|
|
|
204
206
|
* ```
|
|
205
207
|
*/
|
|
206
208
|
RemoteData.toResult = (onNotReady) => (data) => RemoteData.isSuccess(data)
|
|
207
|
-
?
|
|
208
|
-
:
|
|
209
|
+
? Result.ok(data.value)
|
|
210
|
+
: Result.err(RemoteData.isFailure(data) ? data.error : onNotReady());
|
|
209
211
|
})(RemoteData || (RemoteData = {}));
|
|
@@ -39,15 +39,6 @@ export var TaskValidation;
|
|
|
39
39
|
* Transforms the success value inside a TaskValidation.
|
|
40
40
|
*/
|
|
41
41
|
TaskValidation.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
42
|
-
/**
|
|
43
|
-
* Chains TaskValidation computations. If the first is Valid, passes the value
|
|
44
|
-
* to f. If the first is Invalid, propagates the errors.
|
|
45
|
-
*
|
|
46
|
-
* Note: chain short-circuits on first error. Use ap to accumulate errors.
|
|
47
|
-
*/
|
|
48
|
-
TaskValidation.chain = (f) => (data) => Task.chain((validation) => Validation.isValid(validation)
|
|
49
|
-
? f(validation.value)
|
|
50
|
-
: Task.resolve(Validation.invalidAll(validation.errors)))(data);
|
|
51
42
|
/**
|
|
52
43
|
* Applies a function wrapped in a TaskValidation to a value wrapped in a
|
|
53
44
|
* TaskValidation. Both Tasks run in parallel and errors from both sides
|
|
@@ -97,9 +88,43 @@ export var TaskValidation;
|
|
|
97
88
|
TaskValidation.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
|
|
98
89
|
/**
|
|
99
90
|
* Recovers from an Invalid state by providing a fallback TaskValidation.
|
|
91
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
100
92
|
* The fallback can produce a different success type, widening the result to `TaskValidation<E, A | B>`.
|
|
101
93
|
*/
|
|
102
94
|
TaskValidation.recover = (fallback) => (data) => Task.chain((validation) => Validation.isValid(validation)
|
|
103
95
|
? Task.resolve(validation)
|
|
104
|
-
: fallback())(data);
|
|
96
|
+
: fallback(validation.errors))(data);
|
|
97
|
+
/**
|
|
98
|
+
* Runs two TaskValidations concurrently and combines their results into a tuple.
|
|
99
|
+
* If both are Valid, returns Valid with both values. If either fails, accumulates
|
|
100
|
+
* errors from both sides.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* await TaskValidation.product(
|
|
105
|
+
* validateName(form.name),
|
|
106
|
+
* validateAge(form.age),
|
|
107
|
+
* )(); // Valid(["Alice", 30]) or Invalid([...errors])
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
TaskValidation.product = (first, second) => Task.from(() => Promise.all([
|
|
111
|
+
Deferred.toPromise(first()),
|
|
112
|
+
Deferred.toPromise(second()),
|
|
113
|
+
]).then(([va, vb]) => Validation.product(va, vb)));
|
|
114
|
+
/**
|
|
115
|
+
* Runs all TaskValidations concurrently and collects results.
|
|
116
|
+
* If all are Valid, returns Valid with all values as an array.
|
|
117
|
+
* If any fail, returns Invalid with all accumulated errors.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* await TaskValidation.productAll([
|
|
122
|
+
* validateName(form.name),
|
|
123
|
+
* validateEmail(form.email),
|
|
124
|
+
* validateAge(form.age),
|
|
125
|
+
* ])(); // Valid([name, email, age]) or Invalid([...all errors])
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
TaskValidation.productAll = (data) => Task.from(() => Promise.all(data.map((t) => Deferred.toPromise(t())))
|
|
129
|
+
.then((results) => Validation.productAll(results)));
|
|
105
130
|
})(TaskValidation || (TaskValidation = {}));
|
package/esm/src/Core/These.js
CHANGED
|
@@ -188,26 +188,26 @@ export var These;
|
|
|
188
188
|
*
|
|
189
189
|
* @example
|
|
190
190
|
* ```ts
|
|
191
|
-
* pipe(These.first(5), These.getFirstOrElse(0)); // 5
|
|
192
|
-
* pipe(These.both(5, "warn"), These.getFirstOrElse(0)); // 5
|
|
193
|
-
* pipe(These.second("warn"), These.getFirstOrElse(0)); // 0
|
|
194
|
-
* pipe(These.second("warn"), These.getFirstOrElse(null)); // null — typed as number | null
|
|
191
|
+
* pipe(These.first(5), These.getFirstOrElse(() => 0)); // 5
|
|
192
|
+
* pipe(These.both(5, "warn"), These.getFirstOrElse(() => 0)); // 5
|
|
193
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => 0)); // 0
|
|
194
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => null)); // null — typed as number | null
|
|
195
195
|
* ```
|
|
196
196
|
*/
|
|
197
|
-
These.getFirstOrElse = (defaultValue) => (data) => These.hasFirst(data) ? data.first : defaultValue;
|
|
197
|
+
These.getFirstOrElse = (defaultValue) => (data) => These.hasFirst(data) ? data.first : defaultValue();
|
|
198
198
|
/**
|
|
199
199
|
* Returns the second value, or a default if the These has no second value.
|
|
200
200
|
* The default can be a different type, widening the result to `B | D`.
|
|
201
201
|
*
|
|
202
202
|
* @example
|
|
203
203
|
* ```ts
|
|
204
|
-
* pipe(These.second("warn"), These.getSecondOrElse("none")); // "warn"
|
|
205
|
-
* pipe(These.both(5, "warn"), These.getSecondOrElse("none")); // "warn"
|
|
206
|
-
* pipe(These.first(5), These.getSecondOrElse("none")); // "none"
|
|
207
|
-
* pipe(These.first(5), These.getSecondOrElse(null)); // null — typed as string | null
|
|
204
|
+
* pipe(These.second("warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
205
|
+
* pipe(These.both(5, "warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
206
|
+
* pipe(These.first(5), These.getSecondOrElse(() => "none")); // "none"
|
|
207
|
+
* pipe(These.first(5), These.getSecondOrElse(() => null)); // null — typed as string | null
|
|
208
208
|
* ```
|
|
209
209
|
*/
|
|
210
|
-
These.getSecondOrElse = (defaultValue) => (data) => These.hasSecond(data) ? data.second : defaultValue;
|
|
210
|
+
These.getSecondOrElse = (defaultValue) => (data) => These.hasSecond(data) ? data.second : defaultValue();
|
|
211
211
|
/**
|
|
212
212
|
* Executes a side effect on the first value without changing the These.
|
|
213
213
|
* Useful for logging or debugging.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isNonEmptyList } from "../Types/NonEmptyList.js";
|
|
2
1
|
export var Validation;
|
|
3
2
|
(function (Validation) {
|
|
4
3
|
/**
|
|
@@ -55,22 +54,6 @@ export var Validation;
|
|
|
55
54
|
* ```
|
|
56
55
|
*/
|
|
57
56
|
Validation.map = (f) => (data) => Validation.isValid(data) ? Validation.valid(f(data.value)) : data;
|
|
58
|
-
/**
|
|
59
|
-
* Chains Validation computations. If the first is Valid, passes the value to f.
|
|
60
|
-
* If the first is Invalid, propagates the errors.
|
|
61
|
-
*
|
|
62
|
-
* Note: chain short-circuits on first error. Use `ap` to accumulate errors.
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```ts
|
|
66
|
-
* const validatePositive = (n: number): Validation<string, number> =>
|
|
67
|
-
* n > 0 ? Validation.valid(n) : Validation.invalid("Must be positive");
|
|
68
|
-
*
|
|
69
|
-
* pipe(Validation.valid(5), Validation.chain(validatePositive)); // Valid(5)
|
|
70
|
-
* pipe(Validation.valid(-1), Validation.chain(validatePositive)); // Invalid(["Must be positive"])
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
Validation.chain = (f) => (data) => Validation.isValid(data) ? f(data.value) : data;
|
|
74
57
|
/**
|
|
75
58
|
* Applies a function wrapped in a Validation to a value wrapped in a Validation.
|
|
76
59
|
* Accumulates errors from both sides.
|
|
@@ -98,7 +81,7 @@ export var Validation;
|
|
|
98
81
|
...(Validation.isInvalid(data) ? data.errors : []),
|
|
99
82
|
...(Validation.isInvalid(arg) ? arg.errors : []),
|
|
100
83
|
];
|
|
101
|
-
return
|
|
84
|
+
return Validation.invalidAll(errors);
|
|
102
85
|
};
|
|
103
86
|
/**
|
|
104
87
|
* Extracts the value from a Validation by providing handlers for both cases.
|
|
@@ -136,9 +119,9 @@ export var Validation;
|
|
|
136
119
|
*
|
|
137
120
|
* @example
|
|
138
121
|
* ```ts
|
|
139
|
-
* pipe(Validation.valid(5), Validation.getOrElse(0)); // 5
|
|
140
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(0)); // 0
|
|
141
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(null)); // null — typed as number | null
|
|
122
|
+
* pipe(Validation.valid(5), Validation.getOrElse(() => 0)); // 5
|
|
123
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => 0)); // 0
|
|
124
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => null)); // null — typed as number | null
|
|
142
125
|
* ```
|
|
143
126
|
*/
|
|
144
127
|
Validation.getOrElse = (defaultValue) => (data) => Validation.isValid(data) ? data.value : defaultValue();
|
|
@@ -161,9 +144,10 @@ export var Validation;
|
|
|
161
144
|
};
|
|
162
145
|
/**
|
|
163
146
|
* Recovers from an Invalid state by providing a fallback Validation.
|
|
147
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
164
148
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
165
149
|
*/
|
|
166
|
-
Validation.recover = (fallback) => (data) => Validation.isValid(data) ? data : fallback();
|
|
150
|
+
Validation.recover = (fallback) => (data) => Validation.isValid(data) ? data : fallback(data.errors);
|
|
167
151
|
/**
|
|
168
152
|
* Recovers from an Invalid state unless the errors contain any of the blocked errors.
|
|
169
153
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
@@ -173,46 +157,56 @@ export var Validation;
|
|
|
173
157
|
? fallback()
|
|
174
158
|
: data;
|
|
175
159
|
/**
|
|
176
|
-
* Combines two Validation instances
|
|
177
|
-
* If both are Valid, returns
|
|
178
|
-
* If either is Invalid,
|
|
160
|
+
* Combines two independent Validation instances into a tuple.
|
|
161
|
+
* If both are Valid, returns Valid with both values as a tuple.
|
|
162
|
+
* If either is Invalid, accumulates errors from both sides.
|
|
179
163
|
*
|
|
180
164
|
* @example
|
|
181
165
|
* ```ts
|
|
182
|
-
* Validation.
|
|
183
|
-
* Validation.
|
|
184
|
-
* Validation.
|
|
185
|
-
* ); //
|
|
186
|
-
*
|
|
187
|
-
* Validation.
|
|
188
|
-
* Validation.
|
|
189
|
-
* Validation.
|
|
190
|
-
* ); //
|
|
166
|
+
* Validation.product(
|
|
167
|
+
* Validation.valid("alice"),
|
|
168
|
+
* Validation.valid(30)
|
|
169
|
+
* ); // Valid(["alice", 30])
|
|
170
|
+
*
|
|
171
|
+
* Validation.product(
|
|
172
|
+
* Validation.invalid("Name required"),
|
|
173
|
+
* Validation.invalid("Age must be >= 0")
|
|
174
|
+
* ); // Invalid(["Name required", "Age must be >= 0"])
|
|
191
175
|
* ```
|
|
192
176
|
*/
|
|
193
|
-
Validation.
|
|
194
|
-
if (Validation.isValid(first) && Validation.isValid(second))
|
|
195
|
-
return second;
|
|
196
|
-
}
|
|
177
|
+
Validation.product = (first, second) => {
|
|
178
|
+
if (Validation.isValid(first) && Validation.isValid(second))
|
|
179
|
+
return Validation.valid([first.value, second.value]);
|
|
197
180
|
const errors = [
|
|
198
181
|
...(Validation.isInvalid(first) ? first.errors : []),
|
|
199
182
|
...(Validation.isInvalid(second) ? second.errors : []),
|
|
200
183
|
];
|
|
201
|
-
return
|
|
184
|
+
return Validation.invalidAll(errors);
|
|
202
185
|
};
|
|
203
186
|
/**
|
|
204
|
-
* Combines
|
|
205
|
-
* If all are Valid, returns
|
|
206
|
-
*
|
|
187
|
+
* Combines a non-empty list of Validation instances, accumulating all errors.
|
|
188
|
+
* If all are Valid, returns Valid with all values collected into an array.
|
|
189
|
+
* If any are Invalid, returns Invalid with all accumulated errors.
|
|
207
190
|
*
|
|
208
191
|
* @example
|
|
209
192
|
* ```ts
|
|
210
|
-
* Validation.
|
|
193
|
+
* Validation.productAll([
|
|
211
194
|
* validateName(name),
|
|
212
195
|
* validateEmail(email),
|
|
213
196
|
* validateAge(age)
|
|
214
197
|
* ]);
|
|
198
|
+
* // Valid([name, email, age]) or Invalid([...all errors])
|
|
215
199
|
* ```
|
|
216
200
|
*/
|
|
217
|
-
Validation.
|
|
201
|
+
Validation.productAll = (data) => {
|
|
202
|
+
const values = [];
|
|
203
|
+
const errors = [];
|
|
204
|
+
for (const v of data) {
|
|
205
|
+
if (Validation.isValid(v))
|
|
206
|
+
values.push(v.value);
|
|
207
|
+
else
|
|
208
|
+
errors.push(...v.errors);
|
|
209
|
+
}
|
|
210
|
+
return errors.length > 0 ? Validation.invalidAll(errors) : Validation.valid(values);
|
|
211
|
+
};
|
|
218
212
|
})(Validation || (Validation = {}));
|
package/package.json
CHANGED
|
@@ -87,12 +87,12 @@ var Optional;
|
|
|
87
87
|
*
|
|
88
88
|
* @example
|
|
89
89
|
* ```ts
|
|
90
|
-
* pipe(profile, Optional.getOrElse(bioOpt)("no bio"));
|
|
90
|
+
* pipe(profile, Optional.getOrElse(bioOpt)(() => "no bio"));
|
|
91
91
|
* ```
|
|
92
92
|
*/
|
|
93
93
|
Optional.getOrElse = (opt) => (defaultValue) => (s) => {
|
|
94
94
|
const val = opt.get(s);
|
|
95
|
-
return val.kind === "Some" ? val.value : defaultValue;
|
|
95
|
+
return val.kind === "Some" ? val.value : defaultValue();
|
|
96
96
|
};
|
|
97
97
|
/**
|
|
98
98
|
* Extracts a value from an Optional focus using handlers for the present
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RemoteData = void 0;
|
|
4
|
+
const Option_js_1 = require("./Option.js");
|
|
5
|
+
const Result_js_1 = require("./Result.js");
|
|
4
6
|
var RemoteData;
|
|
5
7
|
(function (RemoteData) {
|
|
6
8
|
/**
|
|
@@ -160,9 +162,9 @@ var RemoteData;
|
|
|
160
162
|
*
|
|
161
163
|
* @example
|
|
162
164
|
* ```ts
|
|
163
|
-
* pipe(RemoteData.success(5), RemoteData.getOrElse(0)); // 5
|
|
164
|
-
* pipe(RemoteData.loading(), RemoteData.getOrElse(0)); // 0
|
|
165
|
-
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(null)); // null — typed as number | null
|
|
165
|
+
* pipe(RemoteData.success(5), RemoteData.getOrElse(() => 0)); // 5
|
|
166
|
+
* pipe(RemoteData.loading(), RemoteData.getOrElse(() => 0)); // 0
|
|
167
|
+
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(() => null)); // null — typed as number | null
|
|
166
168
|
* ```
|
|
167
169
|
*/
|
|
168
170
|
RemoteData.getOrElse = (defaultValue) => (data) => RemoteData.isSuccess(data) ? data.value : defaultValue();
|
|
@@ -192,7 +194,7 @@ var RemoteData;
|
|
|
192
194
|
* Converts a RemoteData to an Option.
|
|
193
195
|
* Success becomes Some, all other states become None.
|
|
194
196
|
*/
|
|
195
|
-
RemoteData.toOption = (data) => RemoteData.isSuccess(data) ?
|
|
197
|
+
RemoteData.toOption = (data) => RemoteData.isSuccess(data) ? Option_js_1.Option.some(data.value) : Option_js_1.Option.none();
|
|
196
198
|
/**
|
|
197
199
|
* Converts a RemoteData to a Result.
|
|
198
200
|
* Success becomes Ok, Failure becomes Err.
|
|
@@ -207,6 +209,6 @@ var RemoteData;
|
|
|
207
209
|
* ```
|
|
208
210
|
*/
|
|
209
211
|
RemoteData.toResult = (onNotReady) => (data) => RemoteData.isSuccess(data)
|
|
210
|
-
?
|
|
211
|
-
:
|
|
212
|
+
? Result_js_1.Result.ok(data.value)
|
|
213
|
+
: Result_js_1.Result.err(RemoteData.isFailure(data) ? data.error : onNotReady());
|
|
212
214
|
})(RemoteData || (exports.RemoteData = RemoteData = {}));
|
|
@@ -42,15 +42,6 @@ var TaskValidation;
|
|
|
42
42
|
* Transforms the success value inside a TaskValidation.
|
|
43
43
|
*/
|
|
44
44
|
TaskValidation.map = (f) => (data) => Task_js_1.Task.map(Validation_js_1.Validation.map(f))(data);
|
|
45
|
-
/**
|
|
46
|
-
* Chains TaskValidation computations. If the first is Valid, passes the value
|
|
47
|
-
* to f. If the first is Invalid, propagates the errors.
|
|
48
|
-
*
|
|
49
|
-
* Note: chain short-circuits on first error. Use ap to accumulate errors.
|
|
50
|
-
*/
|
|
51
|
-
TaskValidation.chain = (f) => (data) => Task_js_1.Task.chain((validation) => Validation_js_1.Validation.isValid(validation)
|
|
52
|
-
? f(validation.value)
|
|
53
|
-
: Task_js_1.Task.resolve(Validation_js_1.Validation.invalidAll(validation.errors)))(data);
|
|
54
45
|
/**
|
|
55
46
|
* Applies a function wrapped in a TaskValidation to a value wrapped in a
|
|
56
47
|
* TaskValidation. Both Tasks run in parallel and errors from both sides
|
|
@@ -100,9 +91,43 @@ var TaskValidation;
|
|
|
100
91
|
TaskValidation.tap = (f) => (data) => Task_js_1.Task.map(Validation_js_1.Validation.tap(f))(data);
|
|
101
92
|
/**
|
|
102
93
|
* Recovers from an Invalid state by providing a fallback TaskValidation.
|
|
94
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
103
95
|
* The fallback can produce a different success type, widening the result to `TaskValidation<E, A | B>`.
|
|
104
96
|
*/
|
|
105
97
|
TaskValidation.recover = (fallback) => (data) => Task_js_1.Task.chain((validation) => Validation_js_1.Validation.isValid(validation)
|
|
106
98
|
? Task_js_1.Task.resolve(validation)
|
|
107
|
-
: fallback())(data);
|
|
99
|
+
: fallback(validation.errors))(data);
|
|
100
|
+
/**
|
|
101
|
+
* Runs two TaskValidations concurrently and combines their results into a tuple.
|
|
102
|
+
* If both are Valid, returns Valid with both values. If either fails, accumulates
|
|
103
|
+
* errors from both sides.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* await TaskValidation.product(
|
|
108
|
+
* validateName(form.name),
|
|
109
|
+
* validateAge(form.age),
|
|
110
|
+
* )(); // Valid(["Alice", 30]) or Invalid([...errors])
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
TaskValidation.product = (first, second) => Task_js_1.Task.from(() => Promise.all([
|
|
114
|
+
Deferred_js_1.Deferred.toPromise(first()),
|
|
115
|
+
Deferred_js_1.Deferred.toPromise(second()),
|
|
116
|
+
]).then(([va, vb]) => Validation_js_1.Validation.product(va, vb)));
|
|
117
|
+
/**
|
|
118
|
+
* Runs all TaskValidations concurrently and collects results.
|
|
119
|
+
* If all are Valid, returns Valid with all values as an array.
|
|
120
|
+
* If any fail, returns Invalid with all accumulated errors.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* await TaskValidation.productAll([
|
|
125
|
+
* validateName(form.name),
|
|
126
|
+
* validateEmail(form.email),
|
|
127
|
+
* validateAge(form.age),
|
|
128
|
+
* ])(); // Valid([name, email, age]) or Invalid([...all errors])
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
TaskValidation.productAll = (data) => Task_js_1.Task.from(() => Promise.all(data.map((t) => Deferred_js_1.Deferred.toPromise(t())))
|
|
132
|
+
.then((results) => Validation_js_1.Validation.productAll(results)));
|
|
108
133
|
})(TaskValidation || (exports.TaskValidation = TaskValidation = {}));
|
package/script/src/Core/These.js
CHANGED
|
@@ -191,26 +191,26 @@ var These;
|
|
|
191
191
|
*
|
|
192
192
|
* @example
|
|
193
193
|
* ```ts
|
|
194
|
-
* pipe(These.first(5), These.getFirstOrElse(0)); // 5
|
|
195
|
-
* pipe(These.both(5, "warn"), These.getFirstOrElse(0)); // 5
|
|
196
|
-
* pipe(These.second("warn"), These.getFirstOrElse(0)); // 0
|
|
197
|
-
* pipe(These.second("warn"), These.getFirstOrElse(null)); // null — typed as number | null
|
|
194
|
+
* pipe(These.first(5), These.getFirstOrElse(() => 0)); // 5
|
|
195
|
+
* pipe(These.both(5, "warn"), These.getFirstOrElse(() => 0)); // 5
|
|
196
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => 0)); // 0
|
|
197
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => null)); // null — typed as number | null
|
|
198
198
|
* ```
|
|
199
199
|
*/
|
|
200
|
-
These.getFirstOrElse = (defaultValue) => (data) => These.hasFirst(data) ? data.first : defaultValue;
|
|
200
|
+
These.getFirstOrElse = (defaultValue) => (data) => These.hasFirst(data) ? data.first : defaultValue();
|
|
201
201
|
/**
|
|
202
202
|
* Returns the second value, or a default if the These has no second value.
|
|
203
203
|
* The default can be a different type, widening the result to `B | D`.
|
|
204
204
|
*
|
|
205
205
|
* @example
|
|
206
206
|
* ```ts
|
|
207
|
-
* pipe(These.second("warn"), These.getSecondOrElse("none")); // "warn"
|
|
208
|
-
* pipe(These.both(5, "warn"), These.getSecondOrElse("none")); // "warn"
|
|
209
|
-
* pipe(These.first(5), These.getSecondOrElse("none")); // "none"
|
|
210
|
-
* pipe(These.first(5), These.getSecondOrElse(null)); // null — typed as string | null
|
|
207
|
+
* pipe(These.second("warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
208
|
+
* pipe(These.both(5, "warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
209
|
+
* pipe(These.first(5), These.getSecondOrElse(() => "none")); // "none"
|
|
210
|
+
* pipe(These.first(5), These.getSecondOrElse(() => null)); // null — typed as string | null
|
|
211
211
|
* ```
|
|
212
212
|
*/
|
|
213
|
-
These.getSecondOrElse = (defaultValue) => (data) => These.hasSecond(data) ? data.second : defaultValue;
|
|
213
|
+
These.getSecondOrElse = (defaultValue) => (data) => These.hasSecond(data) ? data.second : defaultValue();
|
|
214
214
|
/**
|
|
215
215
|
* Executes a side effect on the first value without changing the These.
|
|
216
216
|
* Useful for logging or debugging.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Validation = void 0;
|
|
4
|
-
const NonEmptyList_js_1 = require("../Types/NonEmptyList.js");
|
|
5
4
|
var Validation;
|
|
6
5
|
(function (Validation) {
|
|
7
6
|
/**
|
|
@@ -58,22 +57,6 @@ var Validation;
|
|
|
58
57
|
* ```
|
|
59
58
|
*/
|
|
60
59
|
Validation.map = (f) => (data) => Validation.isValid(data) ? Validation.valid(f(data.value)) : data;
|
|
61
|
-
/**
|
|
62
|
-
* Chains Validation computations. If the first is Valid, passes the value to f.
|
|
63
|
-
* If the first is Invalid, propagates the errors.
|
|
64
|
-
*
|
|
65
|
-
* Note: chain short-circuits on first error. Use `ap` to accumulate errors.
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* ```ts
|
|
69
|
-
* const validatePositive = (n: number): Validation<string, number> =>
|
|
70
|
-
* n > 0 ? Validation.valid(n) : Validation.invalid("Must be positive");
|
|
71
|
-
*
|
|
72
|
-
* pipe(Validation.valid(5), Validation.chain(validatePositive)); // Valid(5)
|
|
73
|
-
* pipe(Validation.valid(-1), Validation.chain(validatePositive)); // Invalid(["Must be positive"])
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
Validation.chain = (f) => (data) => Validation.isValid(data) ? f(data.value) : data;
|
|
77
60
|
/**
|
|
78
61
|
* Applies a function wrapped in a Validation to a value wrapped in a Validation.
|
|
79
62
|
* Accumulates errors from both sides.
|
|
@@ -101,7 +84,7 @@ var Validation;
|
|
|
101
84
|
...(Validation.isInvalid(data) ? data.errors : []),
|
|
102
85
|
...(Validation.isInvalid(arg) ? arg.errors : []),
|
|
103
86
|
];
|
|
104
|
-
return
|
|
87
|
+
return Validation.invalidAll(errors);
|
|
105
88
|
};
|
|
106
89
|
/**
|
|
107
90
|
* Extracts the value from a Validation by providing handlers for both cases.
|
|
@@ -139,9 +122,9 @@ var Validation;
|
|
|
139
122
|
*
|
|
140
123
|
* @example
|
|
141
124
|
* ```ts
|
|
142
|
-
* pipe(Validation.valid(5), Validation.getOrElse(0)); // 5
|
|
143
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(0)); // 0
|
|
144
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(null)); // null — typed as number | null
|
|
125
|
+
* pipe(Validation.valid(5), Validation.getOrElse(() => 0)); // 5
|
|
126
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => 0)); // 0
|
|
127
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => null)); // null — typed as number | null
|
|
145
128
|
* ```
|
|
146
129
|
*/
|
|
147
130
|
Validation.getOrElse = (defaultValue) => (data) => Validation.isValid(data) ? data.value : defaultValue();
|
|
@@ -164,9 +147,10 @@ var Validation;
|
|
|
164
147
|
};
|
|
165
148
|
/**
|
|
166
149
|
* Recovers from an Invalid state by providing a fallback Validation.
|
|
150
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
167
151
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
168
152
|
*/
|
|
169
|
-
Validation.recover = (fallback) => (data) => Validation.isValid(data) ? data : fallback();
|
|
153
|
+
Validation.recover = (fallback) => (data) => Validation.isValid(data) ? data : fallback(data.errors);
|
|
170
154
|
/**
|
|
171
155
|
* Recovers from an Invalid state unless the errors contain any of the blocked errors.
|
|
172
156
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
@@ -176,46 +160,56 @@ var Validation;
|
|
|
176
160
|
? fallback()
|
|
177
161
|
: data;
|
|
178
162
|
/**
|
|
179
|
-
* Combines two Validation instances
|
|
180
|
-
* If both are Valid, returns
|
|
181
|
-
* If either is Invalid,
|
|
163
|
+
* Combines two independent Validation instances into a tuple.
|
|
164
|
+
* If both are Valid, returns Valid with both values as a tuple.
|
|
165
|
+
* If either is Invalid, accumulates errors from both sides.
|
|
182
166
|
*
|
|
183
167
|
* @example
|
|
184
168
|
* ```ts
|
|
185
|
-
* Validation.
|
|
186
|
-
* Validation.
|
|
187
|
-
* Validation.
|
|
188
|
-
* ); //
|
|
189
|
-
*
|
|
190
|
-
* Validation.
|
|
191
|
-
* Validation.
|
|
192
|
-
* Validation.
|
|
193
|
-
* ); //
|
|
169
|
+
* Validation.product(
|
|
170
|
+
* Validation.valid("alice"),
|
|
171
|
+
* Validation.valid(30)
|
|
172
|
+
* ); // Valid(["alice", 30])
|
|
173
|
+
*
|
|
174
|
+
* Validation.product(
|
|
175
|
+
* Validation.invalid("Name required"),
|
|
176
|
+
* Validation.invalid("Age must be >= 0")
|
|
177
|
+
* ); // Invalid(["Name required", "Age must be >= 0"])
|
|
194
178
|
* ```
|
|
195
179
|
*/
|
|
196
|
-
Validation.
|
|
197
|
-
if (Validation.isValid(first) && Validation.isValid(second))
|
|
198
|
-
return second;
|
|
199
|
-
}
|
|
180
|
+
Validation.product = (first, second) => {
|
|
181
|
+
if (Validation.isValid(first) && Validation.isValid(second))
|
|
182
|
+
return Validation.valid([first.value, second.value]);
|
|
200
183
|
const errors = [
|
|
201
184
|
...(Validation.isInvalid(first) ? first.errors : []),
|
|
202
185
|
...(Validation.isInvalid(second) ? second.errors : []),
|
|
203
186
|
];
|
|
204
|
-
return
|
|
187
|
+
return Validation.invalidAll(errors);
|
|
205
188
|
};
|
|
206
189
|
/**
|
|
207
|
-
* Combines
|
|
208
|
-
* If all are Valid, returns
|
|
209
|
-
*
|
|
190
|
+
* Combines a non-empty list of Validation instances, accumulating all errors.
|
|
191
|
+
* If all are Valid, returns Valid with all values collected into an array.
|
|
192
|
+
* If any are Invalid, returns Invalid with all accumulated errors.
|
|
210
193
|
*
|
|
211
194
|
* @example
|
|
212
195
|
* ```ts
|
|
213
|
-
* Validation.
|
|
196
|
+
* Validation.productAll([
|
|
214
197
|
* validateName(name),
|
|
215
198
|
* validateEmail(email),
|
|
216
199
|
* validateAge(age)
|
|
217
200
|
* ]);
|
|
201
|
+
* // Valid([name, email, age]) or Invalid([...all errors])
|
|
218
202
|
* ```
|
|
219
203
|
*/
|
|
220
|
-
Validation.
|
|
204
|
+
Validation.productAll = (data) => {
|
|
205
|
+
const values = [];
|
|
206
|
+
const errors = [];
|
|
207
|
+
for (const v of data) {
|
|
208
|
+
if (Validation.isValid(v))
|
|
209
|
+
values.push(v.value);
|
|
210
|
+
else
|
|
211
|
+
errors.push(...v.errors);
|
|
212
|
+
}
|
|
213
|
+
return errors.length > 0 ? Validation.invalidAll(errors) : Validation.valid(values);
|
|
214
|
+
};
|
|
221
215
|
})(Validation || (exports.Validation = Validation = {}));
|
|
@@ -98,10 +98,10 @@ export declare namespace Optional {
|
|
|
98
98
|
*
|
|
99
99
|
* @example
|
|
100
100
|
* ```ts
|
|
101
|
-
* pipe(profile, Optional.getOrElse(bioOpt)("no bio"));
|
|
101
|
+
* pipe(profile, Optional.getOrElse(bioOpt)(() => "no bio"));
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
|
-
const getOrElse: <S, A>(opt: Optional<S, A>) => (defaultValue: A) => (s: S) => A;
|
|
104
|
+
const getOrElse: <S, A>(opt: Optional<S, A>) => (defaultValue: () => A) => (s: S) => A;
|
|
105
105
|
/**
|
|
106
106
|
* Extracts a value from an Optional focus using handlers for the present
|
|
107
107
|
* and absent cases.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Optional.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Optional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,0EAA0E;AAC1E,KAAK,YAAY,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACrD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CACrC,CAAC;AAEF,yBAAiB,QAAQ,CAAC;IACxB;;;;;;;;;;OAUG;IACI,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EACvB,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EACxB,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KACzB,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAmB,CAAC;IAEpC;;;;;;;;;;OAUG;IACI,MAAM,IAAI,GACd,CAAC,QAAQ,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAG,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAOxE,CAAC;IAEN;;;;;;;;;;;OAWG;IACI,MAAM,KAAK,GAAI,CAAC,EAAE,GAAG,MAAM,KAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CASjD,CAAC;IAEJ;;;;;;;OAOG;IACI,MAAM,GAAG,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,KAAG,MAAM,CAAC,CAAC,CAAe,CAAC;IAElF;;;;;;;;OAQG;IACI,MAAM,GAAG,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,KAAG,CAAkB,CAAC;IAEvF;;;;;;;;OAQG;IACI,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAG,CAGhF,CAAC;IAEF;;;;;;;OAOG;IACI,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,GAAG,CAAC,KAAG,
|
|
1
|
+
{"version":3,"file":"Optional.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Optional.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { WithError, WithKind, WithValue } from "./InternalTypes.js";
|
|
2
|
+
import { Option } from "./Option.js";
|
|
3
|
+
import { Result } from "./Result.js";
|
|
2
4
|
/**
|
|
3
5
|
* RemoteData represents the state of an async data fetch.
|
|
4
6
|
* It has four states: NotAsked, Loading, Failure, and Success.
|
|
@@ -148,9 +150,9 @@ export declare namespace RemoteData {
|
|
|
148
150
|
*
|
|
149
151
|
* @example
|
|
150
152
|
* ```ts
|
|
151
|
-
* pipe(RemoteData.success(5), RemoteData.getOrElse(0)); // 5
|
|
152
|
-
* pipe(RemoteData.loading(), RemoteData.getOrElse(0)); // 0
|
|
153
|
-
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(null)); // null — typed as number | null
|
|
153
|
+
* pipe(RemoteData.success(5), RemoteData.getOrElse(() => 0)); // 5
|
|
154
|
+
* pipe(RemoteData.loading(), RemoteData.getOrElse(() => 0)); // 0
|
|
155
|
+
* pipe(RemoteData.loading<string, number>(), RemoteData.getOrElse(() => null)); // null — typed as number | null
|
|
154
156
|
* ```
|
|
155
157
|
*/
|
|
156
158
|
const getOrElse: <E, A, B>(defaultValue: () => B) => (data: RemoteData<E, A>) => A | B;
|
|
@@ -176,7 +178,7 @@ export declare namespace RemoteData {
|
|
|
176
178
|
* Converts a RemoteData to an Option.
|
|
177
179
|
* Success becomes Some, all other states become None.
|
|
178
180
|
*/
|
|
179
|
-
const toOption: <E, A>(data: RemoteData<E, A>) =>
|
|
181
|
+
const toOption: <E, A>(data: RemoteData<E, A>) => Option<A>;
|
|
180
182
|
/**
|
|
181
183
|
* Converts a RemoteData to a Result.
|
|
182
184
|
* Success becomes Ok, Failure becomes Err.
|
|
@@ -190,6 +192,6 @@ export declare namespace RemoteData {
|
|
|
190
192
|
* ); // Ok(42)
|
|
191
193
|
* ```
|
|
192
194
|
*/
|
|
193
|
-
const toResult: <E>(onNotReady: () => E) => <A>(data: RemoteData<E, A>) =>
|
|
195
|
+
const toResult: <E>(onNotReady: () => E) => <A>(data: RemoteData<E, A>) => Result<E, A>;
|
|
194
196
|
}
|
|
195
197
|
//# sourceMappingURL=RemoteData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteData.d.ts","sourceRoot":"","sources":["../../../src/src/Core/RemoteData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoteData.d.ts","sourceRoot":"","sources":["../../../src/src/Core/RemoteData.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,13 +58,6 @@ export declare namespace TaskValidation {
|
|
|
58
58
|
* Transforms the success value inside a TaskValidation.
|
|
59
59
|
*/
|
|
60
60
|
const map: <E, A, B>(f: (a: A) => B) => (data: TaskValidation<E, A>) => TaskValidation<E, B>;
|
|
61
|
-
/**
|
|
62
|
-
* Chains TaskValidation computations. If the first is Valid, passes the value
|
|
63
|
-
* to f. If the first is Invalid, propagates the errors.
|
|
64
|
-
*
|
|
65
|
-
* Note: chain short-circuits on first error. Use ap to accumulate errors.
|
|
66
|
-
*/
|
|
67
|
-
const chain: <E, A, B>(f: (a: A) => TaskValidation<E, B>) => (data: TaskValidation<E, A>) => TaskValidation<E, B>;
|
|
68
61
|
/**
|
|
69
62
|
* Applies a function wrapped in a TaskValidation to a value wrapped in a
|
|
70
63
|
* TaskValidation. Both Tasks run in parallel and errors from both sides
|
|
@@ -114,8 +107,38 @@ export declare namespace TaskValidation {
|
|
|
114
107
|
const tap: <E, A>(f: (a: A) => void) => (data: TaskValidation<E, A>) => TaskValidation<E, A>;
|
|
115
108
|
/**
|
|
116
109
|
* Recovers from an Invalid state by providing a fallback TaskValidation.
|
|
110
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
117
111
|
* The fallback can produce a different success type, widening the result to `TaskValidation<E, A | B>`.
|
|
118
112
|
*/
|
|
119
|
-
const recover: <E, A, B>(fallback: () => TaskValidation<E, B>) => (data: TaskValidation<E, A>) => TaskValidation<E, A | B>;
|
|
113
|
+
const recover: <E, A, B>(fallback: (errors: NonEmptyList<E>) => TaskValidation<E, B>) => (data: TaskValidation<E, A>) => TaskValidation<E, A | B>;
|
|
114
|
+
/**
|
|
115
|
+
* Runs two TaskValidations concurrently and combines their results into a tuple.
|
|
116
|
+
* If both are Valid, returns Valid with both values. If either fails, accumulates
|
|
117
|
+
* errors from both sides.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* await TaskValidation.product(
|
|
122
|
+
* validateName(form.name),
|
|
123
|
+
* validateAge(form.age),
|
|
124
|
+
* )(); // Valid(["Alice", 30]) or Invalid([...errors])
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
const product: <E, A, B>(first: TaskValidation<E, A>, second: TaskValidation<E, B>) => TaskValidation<E, readonly [A, B]>;
|
|
128
|
+
/**
|
|
129
|
+
* Runs all TaskValidations concurrently and collects results.
|
|
130
|
+
* If all are Valid, returns Valid with all values as an array.
|
|
131
|
+
* If any fail, returns Invalid with all accumulated errors.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* await TaskValidation.productAll([
|
|
136
|
+
* validateName(form.name),
|
|
137
|
+
* validateEmail(form.email),
|
|
138
|
+
* validateAge(form.age),
|
|
139
|
+
* ])(); // Valid([name, email, age]) or Invalid([...all errors])
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
const productAll: <E, A>(data: NonEmptyList<TaskValidation<E, A>>) => TaskValidation<E, readonly A[]>;
|
|
120
143
|
}
|
|
121
144
|
//# sourceMappingURL=TaskValidation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskValidation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/TaskValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE1D,yBAAiB,cAAc,CAAC;IAC9B;;OAEG;IACI,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CACnB,CAAC;IAExC;;OAEG;IACI,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CACnB,CAAC;IAE1C;;OAEG;IACI,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,EAC7B,QAAQ,YAAY,CAAC,CAAC,CAAC,KACtB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAgD,CAAC;IAEvE;;OAEG;IACI,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EACjC,YAAY,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAC3B,cAAc,CAAC,CAAC,EAAE,CAAC,CAA6B,CAAC;IAEpD;;;;;;;;;;;;OAYG;IACI,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,EAC3B,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,KACzB,cAAc,CAAC,CAAC,EAAE,CAAC,CAKnB,CAAC;IAEJ;;OAEG;IACI,MAAM,GAAG,GACb,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CACrC,CAAC;IAE5C
|
|
1
|
+
{"version":3,"file":"TaskValidation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/TaskValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -177,26 +177,26 @@ export declare namespace These {
|
|
|
177
177
|
*
|
|
178
178
|
* @example
|
|
179
179
|
* ```ts
|
|
180
|
-
* pipe(These.first(5), These.getFirstOrElse(0)); // 5
|
|
181
|
-
* pipe(These.both(5, "warn"), These.getFirstOrElse(0)); // 5
|
|
182
|
-
* pipe(These.second("warn"), These.getFirstOrElse(0)); // 0
|
|
183
|
-
* pipe(These.second("warn"), These.getFirstOrElse(null)); // null — typed as number | null
|
|
180
|
+
* pipe(These.first(5), These.getFirstOrElse(() => 0)); // 5
|
|
181
|
+
* pipe(These.both(5, "warn"), These.getFirstOrElse(() => 0)); // 5
|
|
182
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => 0)); // 0
|
|
183
|
+
* pipe(These.second("warn"), These.getFirstOrElse(() => null)); // null — typed as number | null
|
|
184
184
|
* ```
|
|
185
185
|
*/
|
|
186
|
-
const getFirstOrElse: <A, C>(defaultValue: C) => <B>(data: These<A, B>) => A | C;
|
|
186
|
+
const getFirstOrElse: <A, C>(defaultValue: () => C) => <B>(data: These<A, B>) => A | C;
|
|
187
187
|
/**
|
|
188
188
|
* Returns the second value, or a default if the These has no second value.
|
|
189
189
|
* The default can be a different type, widening the result to `B | D`.
|
|
190
190
|
*
|
|
191
191
|
* @example
|
|
192
192
|
* ```ts
|
|
193
|
-
* pipe(These.second("warn"), These.getSecondOrElse("none")); // "warn"
|
|
194
|
-
* pipe(These.both(5, "warn"), These.getSecondOrElse("none")); // "warn"
|
|
195
|
-
* pipe(These.first(5), These.getSecondOrElse("none")); // "none"
|
|
196
|
-
* pipe(These.first(5), These.getSecondOrElse(null)); // null — typed as string | null
|
|
193
|
+
* pipe(These.second("warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
194
|
+
* pipe(These.both(5, "warn"), These.getSecondOrElse(() => "none")); // "warn"
|
|
195
|
+
* pipe(These.first(5), These.getSecondOrElse(() => "none")); // "none"
|
|
196
|
+
* pipe(These.first(5), These.getSecondOrElse(() => null)); // null — typed as string | null
|
|
197
197
|
* ```
|
|
198
198
|
*/
|
|
199
|
-
const getSecondOrElse: <B, D>(defaultValue: D) => <A>(data: These<A, B>) => B | D;
|
|
199
|
+
const getSecondOrElse: <B, D>(defaultValue: () => D) => <A>(data: These<A, B>) => B | D;
|
|
200
200
|
/**
|
|
201
201
|
* Executes a side effect on the first value without changing the These.
|
|
202
202
|
* Useful for logging or debugging.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"These.d.ts","sourceRoot":"","sources":["../../../src/src/Core/These.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"These.d.ts","sourceRoot":"","sources":["../../../src/src/Core/These.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,22 +74,6 @@ export declare namespace Validation {
|
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
76
76
|
const map: <A, B>(f: (a: A) => B) => <E>(data: Validation<E, A>) => Validation<E, B>;
|
|
77
|
-
/**
|
|
78
|
-
* Chains Validation computations. If the first is Valid, passes the value to f.
|
|
79
|
-
* If the first is Invalid, propagates the errors.
|
|
80
|
-
*
|
|
81
|
-
* Note: chain short-circuits on first error. Use `ap` to accumulate errors.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* ```ts
|
|
85
|
-
* const validatePositive = (n: number): Validation<string, number> =>
|
|
86
|
-
* n > 0 ? Validation.valid(n) : Validation.invalid("Must be positive");
|
|
87
|
-
*
|
|
88
|
-
* pipe(Validation.valid(5), Validation.chain(validatePositive)); // Valid(5)
|
|
89
|
-
* pipe(Validation.valid(-1), Validation.chain(validatePositive)); // Invalid(["Must be positive"])
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
const chain: <E, A, B>(f: (a: A) => Validation<E, B>) => (data: Validation<E, A>) => Validation<E, B>;
|
|
93
77
|
/**
|
|
94
78
|
* Applies a function wrapped in a Validation to a value wrapped in a Validation.
|
|
95
79
|
* Accumulates errors from both sides.
|
|
@@ -150,9 +134,9 @@ export declare namespace Validation {
|
|
|
150
134
|
*
|
|
151
135
|
* @example
|
|
152
136
|
* ```ts
|
|
153
|
-
* pipe(Validation.valid(5), Validation.getOrElse(0)); // 5
|
|
154
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(0)); // 0
|
|
155
|
-
* pipe(Validation.invalid("oops"), Validation.getOrElse(null)); // null — typed as number | null
|
|
137
|
+
* pipe(Validation.valid(5), Validation.getOrElse(() => 0)); // 5
|
|
138
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => 0)); // 0
|
|
139
|
+
* pipe(Validation.invalid("oops"), Validation.getOrElse(() => null)); // null — typed as number | null
|
|
156
140
|
* ```
|
|
157
141
|
*/
|
|
158
142
|
const getOrElse: <E, A, B>(defaultValue: () => B) => (data: Validation<E, A>) => A | B;
|
|
@@ -171,47 +155,49 @@ export declare namespace Validation {
|
|
|
171
155
|
const tap: <E, A>(f: (a: A) => void) => (data: Validation<E, A>) => Validation<E, A>;
|
|
172
156
|
/**
|
|
173
157
|
* Recovers from an Invalid state by providing a fallback Validation.
|
|
158
|
+
* The fallback receives the accumulated error list so callers can inspect which errors occurred.
|
|
174
159
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
175
160
|
*/
|
|
176
|
-
const recover: <E, A, B>(fallback: () => Validation<E, B>) => (data: Validation<E, A>) => Validation<E, A | B>;
|
|
161
|
+
const recover: <E, A, B>(fallback: (errors: NonEmptyList<E>) => Validation<E, B>) => (data: Validation<E, A>) => Validation<E, A | B>;
|
|
177
162
|
/**
|
|
178
163
|
* Recovers from an Invalid state unless the errors contain any of the blocked errors.
|
|
179
164
|
* The fallback can produce a different success type, widening the result to `Validation<E, A | B>`.
|
|
180
165
|
*/
|
|
181
166
|
const recoverUnless: <E, A, B>(blockedErrors: readonly E[], fallback: () => Validation<E, B>) => (data: Validation<E, A>) => Validation<E, A | B>;
|
|
182
167
|
/**
|
|
183
|
-
* Combines two Validation instances
|
|
184
|
-
* If both are Valid, returns
|
|
185
|
-
* If either is Invalid,
|
|
168
|
+
* Combines two independent Validation instances into a tuple.
|
|
169
|
+
* If both are Valid, returns Valid with both values as a tuple.
|
|
170
|
+
* If either is Invalid, accumulates errors from both sides.
|
|
186
171
|
*
|
|
187
172
|
* @example
|
|
188
173
|
* ```ts
|
|
189
|
-
* Validation.
|
|
190
|
-
* Validation.
|
|
191
|
-
* Validation.
|
|
192
|
-
* ); //
|
|
193
|
-
*
|
|
194
|
-
* Validation.
|
|
195
|
-
* Validation.
|
|
196
|
-
* Validation.
|
|
197
|
-
* ); //
|
|
174
|
+
* Validation.product(
|
|
175
|
+
* Validation.valid("alice"),
|
|
176
|
+
* Validation.valid(30)
|
|
177
|
+
* ); // Valid(["alice", 30])
|
|
178
|
+
*
|
|
179
|
+
* Validation.product(
|
|
180
|
+
* Validation.invalid("Name required"),
|
|
181
|
+
* Validation.invalid("Age must be >= 0")
|
|
182
|
+
* ); // Invalid(["Name required", "Age must be >= 0"])
|
|
198
183
|
* ```
|
|
199
184
|
*/
|
|
200
|
-
const
|
|
185
|
+
const product: <E, A, B>(first: Validation<E, A>, second: Validation<E, B>) => Validation<E, readonly [A, B]>;
|
|
201
186
|
/**
|
|
202
|
-
* Combines
|
|
203
|
-
* If all are Valid, returns
|
|
204
|
-
*
|
|
187
|
+
* Combines a non-empty list of Validation instances, accumulating all errors.
|
|
188
|
+
* If all are Valid, returns Valid with all values collected into an array.
|
|
189
|
+
* If any are Invalid, returns Invalid with all accumulated errors.
|
|
205
190
|
*
|
|
206
191
|
* @example
|
|
207
192
|
* ```ts
|
|
208
|
-
* Validation.
|
|
193
|
+
* Validation.productAll([
|
|
209
194
|
* validateName(name),
|
|
210
195
|
* validateEmail(email),
|
|
211
196
|
* validateAge(age)
|
|
212
197
|
* ]);
|
|
198
|
+
* // Valid([name, email, age]) or Invalid([...all errors])
|
|
213
199
|
* ```
|
|
214
200
|
*/
|
|
215
|
-
const
|
|
201
|
+
const productAll: <E, A>(data: NonEmptyList<Validation<E, A>>) => Validation<E, readonly A[]>;
|
|
216
202
|
}
|
|
217
203
|
//# sourceMappingURL=Validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Validation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Validation.ts"],"names":[],"mappings":"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"}
|