@tempots/std 0.10.4 → 0.10.6
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/async-result.cjs +1 -0
- package/async-result.d.ts +37 -0
- package/async-result.js +41 -0
- package/function.cjs +1 -1
- package/function.d.ts +1 -0
- package/function.js +9 -4
- package/json.cjs +1 -0
- package/json.d.ts +6 -0
- package/json.js +1 -0
- package/package.json +41 -13
- package/result.cjs +1 -0
- package/result.d.ts +32 -0
- package/result.js +56 -0
- package/validation.cjs +1 -0
- package/validation.d.ts +24 -0
- package/validation.js +25 -0
package/async-result.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u={idle:{type:"idle"},loading:{type:"loading"},success(e){return{type:"success",value:e}},failure(e){return{type:"failure",error:e}},isSuccess(e){return e.type==="success"},isFailure(e){return e.type==="failure"},isIdle(e){return e.type==="idle"},isLoading(e){return e.type==="loading"},getOrElse(e,s){return u.isSuccess(e)?e.value:s},getOrElseLazy(e,s){return u.isSuccess(e)?e.value:s()},getOrNull(e){return u.isSuccess(e)?e.value:null},getOrUndefined(e){return u.isSuccess(e)?e.value:void 0},cmatch:(e,s,t,i=t)=>r=>u.isSuccess(r)?e(r.value):u.isFailure(r)?s(r.error):u.isIdle(r)?i():t(),match:(e,s,t,i,r=i)=>u.isSuccess(e)?s(e.value):u.isFailure(e)?t(e.error):u.isIdle(e)?r():i(),whenSuccess:e=>s=>(u.isSuccess(s)&&e(s.value),s),whenFailure:e=>s=>(u.isFailure(s)&&e(s.error),s)};exports.AsyncResult=u;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface Idle {
|
|
2
|
+
type: 'idle';
|
|
3
|
+
}
|
|
4
|
+
export interface Loading {
|
|
5
|
+
type: 'loading';
|
|
6
|
+
}
|
|
7
|
+
export interface Success<V> {
|
|
8
|
+
type: 'success';
|
|
9
|
+
value: V;
|
|
10
|
+
}
|
|
11
|
+
export interface Failure<E> {
|
|
12
|
+
type: 'failure';
|
|
13
|
+
error: E;
|
|
14
|
+
}
|
|
15
|
+
export type AsyncResult<V, E> = Idle | Loading | Success<V> | Failure<E>;
|
|
16
|
+
export declare const AsyncResult: {
|
|
17
|
+
idle: {
|
|
18
|
+
type: "idle";
|
|
19
|
+
};
|
|
20
|
+
loading: {
|
|
21
|
+
type: "loading";
|
|
22
|
+
};
|
|
23
|
+
success<V>(value: V): AsyncResult<V, never>;
|
|
24
|
+
failure<E>(error: E): AsyncResult<never, E>;
|
|
25
|
+
isSuccess<V, E>(r: AsyncResult<V, E>): r is Success<V>;
|
|
26
|
+
isFailure<V, E>(r: AsyncResult<V, E>): r is Failure<E>;
|
|
27
|
+
isIdle<V, E>(r: AsyncResult<V, E>): r is Idle;
|
|
28
|
+
isLoading<V, E>(r: AsyncResult<V, E>): r is Loading;
|
|
29
|
+
getOrElse<V, E>(r: AsyncResult<V, E>, alt: V): V;
|
|
30
|
+
getOrElseLazy<V, E>(r: AsyncResult<V, E>, altf: () => V): V;
|
|
31
|
+
getOrNull<V, E>(r: AsyncResult<V, E>): V | null;
|
|
32
|
+
getOrUndefined<V, E>(r: AsyncResult<V, E>): V | undefined;
|
|
33
|
+
cmatch: <V1, V2, E>(success: (value: V1) => V2, failure: (error: E) => V2, loading: () => V2, idle?: () => V2) => (r: AsyncResult<V1, E>) => V2;
|
|
34
|
+
match: <V1, V2, E>(r: AsyncResult<V1, E>, success: (value: V1) => V2, failure: (error: E) => V2, loading: () => V2, idle?: () => V2) => V2;
|
|
35
|
+
whenSuccess: <V, E>(apply: (v: V) => void) => (r: AsyncResult<V, E>) => AsyncResult<V, E>;
|
|
36
|
+
whenFailure: <V, E>(apply: (e: E) => void) => (r: AsyncResult<V, E>) => AsyncResult<V, E>;
|
|
37
|
+
};
|
package/async-result.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const u = {
|
|
2
|
+
idle: { type: "idle" },
|
|
3
|
+
loading: { type: "loading" },
|
|
4
|
+
success(e) {
|
|
5
|
+
return { type: "success", value: e };
|
|
6
|
+
},
|
|
7
|
+
failure(e) {
|
|
8
|
+
return { type: "failure", error: e };
|
|
9
|
+
},
|
|
10
|
+
isSuccess(e) {
|
|
11
|
+
return e.type === "success";
|
|
12
|
+
},
|
|
13
|
+
isFailure(e) {
|
|
14
|
+
return e.type === "failure";
|
|
15
|
+
},
|
|
16
|
+
isIdle(e) {
|
|
17
|
+
return e.type === "idle";
|
|
18
|
+
},
|
|
19
|
+
isLoading(e) {
|
|
20
|
+
return e.type === "loading";
|
|
21
|
+
},
|
|
22
|
+
getOrElse(e, s) {
|
|
23
|
+
return u.isSuccess(e) ? e.value : s;
|
|
24
|
+
},
|
|
25
|
+
getOrElseLazy(e, s) {
|
|
26
|
+
return u.isSuccess(e) ? e.value : s();
|
|
27
|
+
},
|
|
28
|
+
getOrNull(e) {
|
|
29
|
+
return u.isSuccess(e) ? e.value : null;
|
|
30
|
+
},
|
|
31
|
+
getOrUndefined(e) {
|
|
32
|
+
return u.isSuccess(e) ? e.value : void 0;
|
|
33
|
+
},
|
|
34
|
+
cmatch: (e, s, i, t = i) => (r) => u.isSuccess(r) ? e(r.value) : u.isFailure(r) ? s(r.error) : u.isIdle(r) ? t() : i(),
|
|
35
|
+
match: (e, s, i, t, r = t) => u.isSuccess(e) ? s(e.value) : u.isFailure(e) ? i(e.error) : u.isIdle(e) ? r() : t(),
|
|
36
|
+
whenSuccess: (e) => (s) => (u.isSuccess(s) && e(s.value), s),
|
|
37
|
+
whenFailure: (e) => (s) => (u.isFailure(s) && e(s.error), s)
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
u as AsyncResult
|
|
41
|
+
};
|
package/function.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function i(...e){return r=>e.reduce((t,n)=>n(t),r)}function u(e){return e}function o(e){return r=>(...t)=>e(r,...t)}function c(e){return(...r)=>t=>e(...r.concat([t]))}function f(e){return(...r)=>e(...r.reverse())}function d(e){return e}function y(e){let r;return()=>(r===void 0&&(r=e()),r)}exports.compose=i;exports.curryLeft=o;exports.curryRight=c;exports.flip=f;exports.id=d;exports.identity=u;exports.memoize=y;
|
package/function.d.ts
CHANGED
|
@@ -18,3 +18,4 @@ export declare function flip<A, B, C, D, E>(f: (a: A, b: B, c: C, d: D) => E): (
|
|
|
18
18
|
export declare function flip<A, B, C, D, E, F>(f: (a: A, b: B, c: C, d: D, e: E) => F): (e: E, d: D, c: C, b: B, a: A) => F;
|
|
19
19
|
export declare function flip<A, B, C, D, E, F, G>(f: (a: A, b: B, c: C, d: D, e: E, f: F) => G): (f: F, e: E, d: D, c: C, b: B, a: A) => G;
|
|
20
20
|
export declare function id<T>(v: T): T;
|
|
21
|
+
export declare function memoize<T>(f: () => NonNullable<T>): () => NonNullable<T>;
|
package/function.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
function u(...n) {
|
|
2
2
|
return (r) => n.reduce((t, e) => e(t), r);
|
|
3
3
|
}
|
|
4
|
-
function
|
|
4
|
+
function i(n) {
|
|
5
5
|
return n;
|
|
6
6
|
}
|
|
7
|
-
function
|
|
7
|
+
function c(n) {
|
|
8
8
|
return (r) => (...t) => n(r, ...t);
|
|
9
9
|
}
|
|
10
10
|
function o(n) {
|
|
@@ -19,11 +19,16 @@ function f(n) {
|
|
|
19
19
|
function d(n) {
|
|
20
20
|
return n;
|
|
21
21
|
}
|
|
22
|
+
function l(n) {
|
|
23
|
+
let r;
|
|
24
|
+
return () => (r === void 0 && (r = n()), r);
|
|
25
|
+
}
|
|
22
26
|
export {
|
|
23
27
|
u as compose,
|
|
24
|
-
|
|
28
|
+
c as curryLeft,
|
|
25
29
|
o as curryRight,
|
|
26
30
|
f as flip,
|
|
27
31
|
d as id,
|
|
28
|
-
|
|
32
|
+
i as identity,
|
|
33
|
+
l as memoize
|
|
29
34
|
};
|
package/json.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/json.d.ts
ADDED
package/json.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/package.json
CHANGED
|
@@ -1,55 +1,71 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tempots/std",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
|
-
"array": {
|
|
6
|
+
"./array": {
|
|
7
7
|
"import": "./array.js",
|
|
8
8
|
"require": "./array.cjs"
|
|
9
9
|
},
|
|
10
|
-
"
|
|
10
|
+
"./async-result": {
|
|
11
|
+
"import": "./async-result.js",
|
|
12
|
+
"require": "./async-result.cjs"
|
|
13
|
+
},
|
|
14
|
+
"./bigint": {
|
|
11
15
|
"import": "./bigint.js",
|
|
12
16
|
"require": "./bigint.cjs"
|
|
13
17
|
},
|
|
14
|
-
"boolean": {
|
|
18
|
+
"./boolean": {
|
|
15
19
|
"import": "./boolean.js",
|
|
16
20
|
"require": "./boolean.cjs"
|
|
17
21
|
},
|
|
18
|
-
"domain": {
|
|
22
|
+
"./domain": {
|
|
19
23
|
"import": "./domain.js",
|
|
20
24
|
"require": "./domain.cjs"
|
|
21
25
|
},
|
|
22
|
-
"equal": {
|
|
26
|
+
"./equal": {
|
|
23
27
|
"import": "./equal.js",
|
|
24
28
|
"require": "./equal.cjs"
|
|
25
29
|
},
|
|
26
|
-
"function": {
|
|
30
|
+
"./function": {
|
|
27
31
|
"import": "./function.js",
|
|
28
32
|
"require": "./function.cjs"
|
|
29
33
|
},
|
|
30
|
-
"index": {
|
|
34
|
+
"./index": {
|
|
31
35
|
"import": "./index.js",
|
|
32
36
|
"require": "./index.cjs"
|
|
33
37
|
},
|
|
34
|
-
"
|
|
38
|
+
"./json": {
|
|
39
|
+
"import": "./json.js",
|
|
40
|
+
"require": "./json.cjs"
|
|
41
|
+
},
|
|
42
|
+
"./maybe": {
|
|
35
43
|
"import": "./maybe.js",
|
|
36
44
|
"require": "./maybe.cjs"
|
|
37
45
|
},
|
|
38
|
-
"number": {
|
|
46
|
+
"./number": {
|
|
39
47
|
"import": "./number.js",
|
|
40
48
|
"require": "./number.cjs"
|
|
41
49
|
},
|
|
42
|
-
"object": {
|
|
50
|
+
"./object": {
|
|
43
51
|
"import": "./object.js",
|
|
44
52
|
"require": "./object.cjs"
|
|
45
53
|
},
|
|
46
|
-
"regexp": {
|
|
54
|
+
"./regexp": {
|
|
47
55
|
"import": "./regexp.js",
|
|
48
56
|
"require": "./regexp.cjs"
|
|
49
57
|
},
|
|
50
|
-
"
|
|
58
|
+
"./result": {
|
|
59
|
+
"import": "./result.js",
|
|
60
|
+
"require": "./result.cjs"
|
|
61
|
+
},
|
|
62
|
+
"./string": {
|
|
51
63
|
"import": "./string.js",
|
|
52
64
|
"require": "./string.cjs"
|
|
65
|
+
},
|
|
66
|
+
"./validation": {
|
|
67
|
+
"import": "./validation.js",
|
|
68
|
+
"require": "./validation.cjs"
|
|
53
69
|
}
|
|
54
70
|
},
|
|
55
71
|
"license": "Apache-2.0",
|
|
@@ -66,6 +82,9 @@
|
|
|
66
82
|
"array": [
|
|
67
83
|
"./array.d.ts"
|
|
68
84
|
],
|
|
85
|
+
"async-result": [
|
|
86
|
+
"./async-result.d.ts"
|
|
87
|
+
],
|
|
69
88
|
"bigint": [
|
|
70
89
|
"./bigint.d.ts"
|
|
71
90
|
],
|
|
@@ -84,6 +103,9 @@
|
|
|
84
103
|
"index": [
|
|
85
104
|
"./index.d.ts"
|
|
86
105
|
],
|
|
106
|
+
"json": [
|
|
107
|
+
"./json.d.ts"
|
|
108
|
+
],
|
|
87
109
|
"maybe": [
|
|
88
110
|
"./maybe.d.ts"
|
|
89
111
|
],
|
|
@@ -96,8 +118,14 @@
|
|
|
96
118
|
"regexp": [
|
|
97
119
|
"./regexp.d.ts"
|
|
98
120
|
],
|
|
121
|
+
"result": [
|
|
122
|
+
"./result.d.ts"
|
|
123
|
+
],
|
|
99
124
|
"string": [
|
|
100
125
|
"./string.d.ts"
|
|
126
|
+
],
|
|
127
|
+
"validation": [
|
|
128
|
+
"./validation.d.ts"
|
|
101
129
|
]
|
|
102
130
|
}
|
|
103
131
|
}
|
package/result.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u={success(e){return{type:"success",value:e}},failure(e){return{type:"failure",error:e}},cmap:e=>s=>s.type==="success"?u.success(e(s.value)):s,map:(e,s)=>e.type==="success"?u.success(s(e.value)):e,cflatMap:e=>s=>s.type==="success"?e(s.value):s,flatMap:(e,s)=>e.type==="success"?s(e.value):e,toAsync(e){return e},isSuccess(e){return e.type==="success"},isFailure(e){return e.type==="failure"},getOrElse(e,s){return u.isSuccess(e)?e.value:s},getOrElseLazy(e,s){return u.isSuccess(e)?e.value:s()},getOrNull(e){return u.isSuccess(e)?e.value:null},getOrUndefined(e){return u.isSuccess(e)?e.value:void 0},cmatch:(e,s)=>t=>u.isSuccess(t)?e(t.value):s(t.error),match:(e,s,t)=>u.isSuccess(e)?s(e.value):t(e.error),whenSuccess:e=>s=>(u.isSuccess(s)&&e(s.value),s),whenFailure:e=>s=>(u.isFailure(s)&&e(s.error),s),combine:(e,s,t,l)=>u.match(e,r=>u.match(s,c=>u.success(t(r,c)),c=>u.failure(c)),r=>u.match(s,c=>u.failure(r),c=>u.failure(l(r,c))))};exports.Result=u;
|
package/result.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AsyncResult } from './async-result';
|
|
2
|
+
|
|
3
|
+
export interface Success<V> {
|
|
4
|
+
type: 'success';
|
|
5
|
+
value: V;
|
|
6
|
+
}
|
|
7
|
+
export interface Failure<E> {
|
|
8
|
+
type: 'failure';
|
|
9
|
+
error: E;
|
|
10
|
+
}
|
|
11
|
+
export type Result<V, E> = Success<V> | Failure<E>;
|
|
12
|
+
export type PromiseResult<V, E> = PromiseLike<Result<V, E>>;
|
|
13
|
+
export declare const Result: {
|
|
14
|
+
success<V>(value: V): Result<V, any>;
|
|
15
|
+
failure<E>(error: E): Result<any, E>;
|
|
16
|
+
cmap: <V1, V2, E>(f: (value: V1) => V2) => (r: Result<V1, E>) => Result<V2, E>;
|
|
17
|
+
map: <V1, V2, E>(r: Result<V1, E>, f: (value: V1) => V2) => Result<V2, E>;
|
|
18
|
+
cflatMap: <V1, V2, E>(f: (value: V1) => Result<V2, E>) => (r: Result<V1, E>) => Result<V2, E>;
|
|
19
|
+
flatMap: <V1, V2, E>(r: Result<V1, E>, f: (value: V1) => Result<V2, E>) => Result<V2, E>;
|
|
20
|
+
toAsync<V, E>(r: Result<V, E>): AsyncResult<V, E>;
|
|
21
|
+
isSuccess<V, E>(r: Result<V, E>): r is Success<V>;
|
|
22
|
+
isFailure<V, E>(r: Result<V, E>): r is Failure<E>;
|
|
23
|
+
getOrElse<V, E>(r: Result<V, E>, alt: V): V;
|
|
24
|
+
getOrElseLazy<V, E>(r: Result<V, E>, altf: () => V): V;
|
|
25
|
+
getOrNull<V, E>(r: Result<V, E>): V | null;
|
|
26
|
+
getOrUndefined<V, E>(r: Result<V, E>): V | undefined;
|
|
27
|
+
cmatch: <V1, V2, E>(success: (value: V1) => V2, failure: (error: E) => V2) => (r: Result<V1, E>) => V2;
|
|
28
|
+
match: <V1, V2, E>(r: Result<V1, E>, success: (value: V1) => V2, failure: (error: E) => V2) => V2;
|
|
29
|
+
whenSuccess: <V, E>(apply: (v: V) => void) => (r: Result<V, E>) => Result<V, E>;
|
|
30
|
+
whenFailure: <V, E>(apply: (e: E) => void) => (r: Result<V, E>) => Result<V, E>;
|
|
31
|
+
combine: <V, E>(r1: Result<V, E>, r2: Result<V, E>, combineV: (v1: V, v2: V) => V, combineE: (e1: E, e2: E) => E) => Result<V, E>;
|
|
32
|
+
};
|
package/result.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const u = {
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
|
+
success(e) {
|
|
4
|
+
return { type: "success", value: e };
|
|
5
|
+
},
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
failure(e) {
|
|
8
|
+
return { type: "failure", error: e };
|
|
9
|
+
},
|
|
10
|
+
cmap: (e) => (s) => s.type === "success" ? u.success(e(s.value)) : s,
|
|
11
|
+
map: (e, s) => e.type === "success" ? u.success(s(e.value)) : e,
|
|
12
|
+
cflatMap: (e) => (s) => s.type === "success" ? e(s.value) : s,
|
|
13
|
+
flatMap: (e, s) => e.type === "success" ? s(e.value) : e,
|
|
14
|
+
toAsync(e) {
|
|
15
|
+
return e;
|
|
16
|
+
},
|
|
17
|
+
isSuccess(e) {
|
|
18
|
+
return e.type === "success";
|
|
19
|
+
},
|
|
20
|
+
isFailure(e) {
|
|
21
|
+
return e.type === "failure";
|
|
22
|
+
},
|
|
23
|
+
getOrElse(e, s) {
|
|
24
|
+
return u.isSuccess(e) ? e.value : s;
|
|
25
|
+
},
|
|
26
|
+
getOrElseLazy(e, s) {
|
|
27
|
+
return u.isSuccess(e) ? e.value : s();
|
|
28
|
+
},
|
|
29
|
+
getOrNull(e) {
|
|
30
|
+
return u.isSuccess(e) ? e.value : null;
|
|
31
|
+
},
|
|
32
|
+
getOrUndefined(e) {
|
|
33
|
+
return u.isSuccess(e) ? e.value : void 0;
|
|
34
|
+
},
|
|
35
|
+
cmatch: (e, s) => (c) => u.isSuccess(c) ? e(c.value) : s(c.error),
|
|
36
|
+
match: (e, s, c) => u.isSuccess(e) ? s(e.value) : c(e.error),
|
|
37
|
+
whenSuccess: (e) => (s) => (u.isSuccess(s) && e(s.value), s),
|
|
38
|
+
whenFailure: (e) => (s) => (u.isFailure(s) && e(s.error), s),
|
|
39
|
+
combine: (e, s, c, l) => u.match(
|
|
40
|
+
e,
|
|
41
|
+
(t) => u.match(
|
|
42
|
+
s,
|
|
43
|
+
(r) => u.success(c(t, r)),
|
|
44
|
+
(r) => u.failure(r)
|
|
45
|
+
),
|
|
46
|
+
(t) => u.match(
|
|
47
|
+
s,
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
49
|
+
(r) => u.failure(t),
|
|
50
|
+
(r) => u.failure(l(t, r))
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
u as Result
|
|
56
|
+
};
|
package/validation.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./result.cjs"),t={valid:{type:"valid"},invalid(e){return{type:"invalid",error:e}},isValid(e){return e.type==="valid"},isInvalid(e){return e.type==="invalid"},cmatch:(e,i)=>r=>t.isValid(r)?e():i(r.error),match:(e,i,r)=>t.isValid(e)?i():r(e.error),toResult:e=>t.cmatch(()=>l.Result.success(e),i=>l.Result.failure(i)),whenValid:e=>i=>(t.isValid(i)&&e(),i),whenInvalid:e=>i=>(t.isInvalid(i)&&e(i.error),i)};exports.Validation=t;
|
package/validation.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Result } from './result';
|
|
2
|
+
|
|
3
|
+
export interface Valid {
|
|
4
|
+
type: 'valid';
|
|
5
|
+
}
|
|
6
|
+
export interface Invalid<E> {
|
|
7
|
+
type: 'invalid';
|
|
8
|
+
error: E;
|
|
9
|
+
}
|
|
10
|
+
export type Validation<E> = Valid | Invalid<E>;
|
|
11
|
+
export type PromiseValidation<E> = PromiseLike<Validation<E>>;
|
|
12
|
+
export declare const Validation: {
|
|
13
|
+
valid: {
|
|
14
|
+
type: "valid";
|
|
15
|
+
};
|
|
16
|
+
invalid<E>(error: E): Validation<E>;
|
|
17
|
+
isValid<E>(r: Validation<E>): r is Valid;
|
|
18
|
+
isInvalid<E>(r: Validation<E>): r is Invalid<E>;
|
|
19
|
+
cmatch: <V, E>(valid: () => V, invalid: (error: E) => V) => (r: Validation<E>) => V;
|
|
20
|
+
match: <V, E>(r: Validation<E>, valid: () => V, invalid: (error: E) => V) => V;
|
|
21
|
+
toResult: <T, E>(value: T) => ((validation: Validation<E>) => Result<T, E>);
|
|
22
|
+
whenValid: <E>(apply: () => void) => (r: Validation<E>) => Validation<E>;
|
|
23
|
+
whenInvalid: <E>(apply: (e: E) => void) => (r: Validation<E>) => Validation<E>;
|
|
24
|
+
};
|
package/validation.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Result as a } from "./result.js";
|
|
2
|
+
const r = {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
+
valid: { type: "valid" },
|
|
5
|
+
invalid(i) {
|
|
6
|
+
return { type: "invalid", error: i };
|
|
7
|
+
},
|
|
8
|
+
isValid(i) {
|
|
9
|
+
return i.type === "valid";
|
|
10
|
+
},
|
|
11
|
+
isInvalid(i) {
|
|
12
|
+
return i.type === "invalid";
|
|
13
|
+
},
|
|
14
|
+
cmatch: (i, e) => (t) => r.isValid(t) ? i() : e(t.error),
|
|
15
|
+
match: (i, e, t) => r.isValid(i) ? e() : t(i.error),
|
|
16
|
+
toResult: (i) => r.cmatch(
|
|
17
|
+
() => a.success(i),
|
|
18
|
+
(e) => a.failure(e)
|
|
19
|
+
),
|
|
20
|
+
whenValid: (i) => (e) => (r.isValid(e) && i(), e),
|
|
21
|
+
whenInvalid: (i) => (e) => (r.isInvalid(e) && i(e.error), e)
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
r as Validation
|
|
25
|
+
};
|