@nlozgachev/pipelined 0.9.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 +3 -3
- package/esm/src/Core/TaskValidation.js +35 -10
- package/esm/src/Core/Validation.js +3 -3
- package/package.json +1 -1
- package/script/src/Core/Optional.js +2 -2
- package/script/src/Core/RemoteData.js +3 -3
- package/script/src/Core/TaskValidation.js +35 -10
- package/script/src/Core/Validation.js +3 -3
- 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 +3 -3
- 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/Validation.d.ts +3 -3
- 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
|
|
@@ -159,9 +159,9 @@ export var RemoteData;
|
|
|
159
159
|
*
|
|
160
160
|
* @example
|
|
161
161
|
* ```ts
|
|
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
|
|
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
|
|
165
165
|
* ```
|
|
166
166
|
*/
|
|
167
167
|
RemoteData.getOrElse = (defaultValue) => (data) => RemoteData.isSuccess(data) ? data.value : defaultValue();
|
|
@@ -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 = {}));
|
|
@@ -119,9 +119,9 @@ export var Validation;
|
|
|
119
119
|
*
|
|
120
120
|
* @example
|
|
121
121
|
* ```ts
|
|
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
|
|
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
|
|
125
125
|
* ```
|
|
126
126
|
*/
|
|
127
127
|
Validation.getOrElse = (defaultValue) => (data) => Validation.isValid(data) ? data.value : defaultValue();
|
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
|
|
@@ -162,9 +162,9 @@ var RemoteData;
|
|
|
162
162
|
*
|
|
163
163
|
* @example
|
|
164
164
|
* ```ts
|
|
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
|
|
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
|
|
168
168
|
* ```
|
|
169
169
|
*/
|
|
170
170
|
RemoteData.getOrElse = (defaultValue) => (data) => RemoteData.isSuccess(data) ? data.value : defaultValue();
|
|
@@ -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 = {}));
|
|
@@ -122,9 +122,9 @@ var Validation;
|
|
|
122
122
|
*
|
|
123
123
|
* @example
|
|
124
124
|
* ```ts
|
|
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
|
|
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
|
|
128
128
|
* ```
|
|
129
129
|
*/
|
|
130
130
|
Validation.getOrElse = (defaultValue) => (data) => Validation.isValid(data) ? data.value : defaultValue();
|
|
@@ -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":"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,MAAM,CAAC,MAAM,GAAG,CAAC,KAAG,CAG1F,CAAC;IAEF;;;;;;;;OAQG;IACI,MAAM,IAAI,GACd,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAG,CAGnF,CAAC;IAEJ;;;;;;;;;;OAUG;IACI,MAAM,KAAK,GACf,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MACzB,CAAC,EAAE,OAAO;QAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KAAE,MAE7C,GAAG,CAAC,KACH,CAGF,CAAC;IAEJ;;;;;;;;;;;OAWG;IACI,MAAM,OAAO,GACjB,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAUvE,CAAC;IAEN;;;;;;;;;;;OAWG;IACI,MAAM,WAAW,GACrB,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAUnE,CAAC;CACP"}
|
|
@@ -150,9 +150,9 @@ export declare namespace RemoteData {
|
|
|
150
150
|
*
|
|
151
151
|
* @example
|
|
152
152
|
* ```ts
|
|
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
|
|
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
|
|
156
156
|
* ```
|
|
157
157
|
*/
|
|
158
158
|
const getOrElse: <E, A, B>(defaultValue: () => B) => (data: RemoteData<E, A>) => A | B;
|
|
@@ -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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"}
|
|
@@ -134,9 +134,9 @@ export declare namespace Validation {
|
|
|
134
134
|
*
|
|
135
135
|
* @example
|
|
136
136
|
* ```ts
|
|
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
|
|
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
|
|
140
140
|
* ```
|
|
141
141
|
*/
|
|
142
142
|
const getOrElse: <E, A, B>(defaultValue: () => B) => (data: Validation<E, A>) => A | B;
|
|
@@ -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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"}
|