@thisisagile/easy 7.34.13 → 7.34.20
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/dist/types/Context.js +1 -1
- package/dist/types/Context.js.map +1 -1
- package/dist/types/Try.d.ts +18 -16
- package/dist/types/Try.js +17 -11
- package/dist/types/Try.js.map +1 -1
- package/dist/utils/Case.js +4 -7
- package/dist/utils/Case.js.map +1 -1
- package/dist/validation/Validate.js +6 -8
- package/dist/validation/Validate.js.map +1 -1
- package/package.json +2 -2
- package/src/types/Context.ts +1 -1
- package/src/types/Try.ts +40 -29
- package/src/utils/Case.ts +5 -7
- package/src/validation/Validate.ts +8 -9
package/dist/types/Context.js
CHANGED
|
@@ -10,7 +10,7 @@ class DotEnvContext {
|
|
|
10
10
|
this.host = process.env.HOST ?? '';
|
|
11
11
|
this.port = Number.parseInt(process.env.PORT ?? '8080');
|
|
12
12
|
this.get = (key, alt) => (0, Try_1.tryTo)(() => (0, Text_1.text)(key).map(k => k.replace(/([a-z])([A-Z])/g, '$1 $2')).snake.toString())
|
|
13
|
-
.map(
|
|
13
|
+
.map(k => process.env[k] ?? alt).value;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.DotEnvContext = DotEnvContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.js","sourceRoot":"","sources":["../../src/types/Context.ts"],"names":[],"mappings":";;;AACA,iCAA8B;AAE9B,+BAA8B;AAW9B,MAAa,aAAa;IAA1B;QACW,WAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC;QACtC,SAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAC1C,SAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,SAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;QAEnD,QAAG,GAAG,CAAC,GAAW,EAAE,GAAY,EAAsB,EAAE,CAC/D,IAAA,WAAK,EAAC,GAAG,EAAE,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;aACpF,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"Context.js","sourceRoot":"","sources":["../../src/types/Context.ts"],"names":[],"mappings":"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"}
|
package/dist/types/Try.d.ts
CHANGED
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
import { Construct, Constructor } from './Constructor';
|
|
2
2
|
import { Validatable } from './Validatable';
|
|
3
|
-
import { Get
|
|
3
|
+
import { Get } from './Get';
|
|
4
|
+
import { Func } from './Func';
|
|
4
5
|
declare abstract class Try<T = unknown> implements Validatable {
|
|
5
6
|
is: {
|
|
6
|
-
defined: () => Try<T>;
|
|
7
|
-
empty: () => Try<T>;
|
|
8
|
-
valid: () => Try<T>;
|
|
9
|
-
true: () => Try<T>;
|
|
10
|
-
false: () => Try<T>;
|
|
7
|
+
defined: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
8
|
+
empty: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
9
|
+
valid: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
10
|
+
true: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
11
|
+
false: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
11
12
|
not: {
|
|
12
|
-
defined: () => Try<T>;
|
|
13
|
-
empty: () => Try<T>;
|
|
14
|
-
valid: () => Try<T>;
|
|
13
|
+
defined: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
14
|
+
empty: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
15
|
+
valid: (prop?: Func<unknown, T> | undefined) => Try<T>;
|
|
15
16
|
};
|
|
16
17
|
};
|
|
17
18
|
abstract get value(): T;
|
|
18
19
|
abstract get error(): Error;
|
|
19
20
|
abstract get isValid(): boolean;
|
|
20
|
-
static of: <T_1>(c:
|
|
21
|
-
abstract map<U>(f:
|
|
22
|
-
abstract recover(f:
|
|
23
|
-
abstract recoverFrom(type: Constructor<Error>, f:
|
|
24
|
-
abstract accept(f:
|
|
25
|
-
abstract filter(predicate:
|
|
21
|
+
static of: <T_1>(c: Get<T_1 | Try<T_1>, any>, ...args: unknown[]) => Try<T_1>;
|
|
22
|
+
abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;
|
|
23
|
+
abstract recover(f: Func<T | Try<T>, Error>): Try<T>;
|
|
24
|
+
abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;
|
|
25
|
+
abstract accept(f: Func<void, T>): Try<T>;
|
|
26
|
+
abstract filter(predicate: Func<boolean, T>): Try<T>;
|
|
27
|
+
abstract or(value: T): T;
|
|
26
28
|
abstract orElse(value?: T): T | undefined;
|
|
27
29
|
abstract orThrow(error: Construct<Error>): T;
|
|
28
30
|
}
|
|
29
|
-
export declare const tryTo: <T>(c:
|
|
31
|
+
export declare const tryTo: <T>(c: Get<T | Try<T>, any>, ...args: unknown[]) => Try<T>;
|
|
30
32
|
export {};
|
package/dist/types/Try.js
CHANGED
|
@@ -8,22 +8,22 @@ const Get_1 = require("./Get");
|
|
|
8
8
|
class Try {
|
|
9
9
|
constructor() {
|
|
10
10
|
this.is = {
|
|
11
|
-
defined: () => this.filter(v => (0, Is_1.isDefined)(v)),
|
|
12
|
-
empty: () => this.filter(v => (0, Is_1.isEmpty)(v)),
|
|
13
|
-
valid: () => this.filter(v => (0, validation_1.validate)(v).isValid),
|
|
14
|
-
true: () => this.filter(v => (0, Is_1.isTrue)(v)),
|
|
15
|
-
false: () => this.filter(v => !(0, Is_1.isTrue)(v)),
|
|
11
|
+
defined: (prop) => this.filter(v => (0, Is_1.isDefined)(prop ? prop(v) : v)),
|
|
12
|
+
empty: (prop) => this.filter(v => (0, Is_1.isEmpty)(prop ? prop(v) : v)),
|
|
13
|
+
valid: (prop) => this.filter(v => (0, validation_1.validate)(prop ? prop(v) : v).isValid),
|
|
14
|
+
true: (prop) => this.filter(v => (0, Is_1.isTrue)(prop ? prop(v) : v)),
|
|
15
|
+
false: (prop) => this.filter(v => !(0, Is_1.isTrue)(prop ? prop(v) : v)),
|
|
16
16
|
not: {
|
|
17
|
-
defined: () => this.filter(v => !(0, Is_1.isDefined)(v)),
|
|
18
|
-
empty: () => this.filter(v => !(0, Is_1.isEmpty)(v)),
|
|
19
|
-
valid: () => this.filter(v => !(0, validation_1.validate)(v).isValid),
|
|
17
|
+
defined: (prop) => this.filter(v => !(0, Is_1.isDefined)(prop ? prop(v) : v)),
|
|
18
|
+
empty: (prop) => this.filter(v => !(0, Is_1.isEmpty)(prop ? prop(v) : v)),
|
|
19
|
+
valid: (prop) => this.filter(v => !(0, validation_1.validate)(prop ? prop(v) : v).isValid),
|
|
20
20
|
},
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
Try.of = (c, ...args) => {
|
|
25
25
|
try {
|
|
26
|
-
const out = (0,
|
|
26
|
+
const out = (0, Get_1.ofGet)(c, ...args);
|
|
27
27
|
return new Success(out instanceof Try ? out.value : out);
|
|
28
28
|
}
|
|
29
29
|
catch (e) {
|
|
@@ -54,17 +54,20 @@ class Success extends Try {
|
|
|
54
54
|
}
|
|
55
55
|
accept(f) {
|
|
56
56
|
return (0, exports.tryTo)(() => {
|
|
57
|
-
(
|
|
57
|
+
f(this.value);
|
|
58
58
|
return this;
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
filter(predicate) {
|
|
62
62
|
return (0, exports.tryTo)(() => {
|
|
63
|
-
if ((
|
|
63
|
+
if (predicate(this.value))
|
|
64
64
|
return this;
|
|
65
65
|
throw new Error(`Applying filter(${predicate.toString()}) failed.`);
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
+
or(value) {
|
|
69
|
+
return this.value;
|
|
70
|
+
}
|
|
68
71
|
orElse(value) {
|
|
69
72
|
return this.value;
|
|
70
73
|
}
|
|
@@ -100,6 +103,9 @@ class Failure extends Try {
|
|
|
100
103
|
filter(predicate) {
|
|
101
104
|
return this;
|
|
102
105
|
}
|
|
106
|
+
or(value) {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
103
109
|
orElse(value) {
|
|
104
110
|
return value;
|
|
105
111
|
}
|
package/dist/types/Try.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Try.js","sourceRoot":"","sources":["../../src/types/Try.ts"],"names":[],"mappings":";;;AAAA,6BAAkD;AAClD,8CAAyC;AACzC,+CAAoE;AAEpE,+
|
|
1
|
+
{"version":3,"file":"Try.js","sourceRoot":"","sources":["../../src/types/Try.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/Case.js
CHANGED
|
@@ -8,13 +8,10 @@ class Case {
|
|
|
8
8
|
this.outcome = outcome;
|
|
9
9
|
}
|
|
10
10
|
case(pred, out) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
catch {
|
|
16
|
-
return this;
|
|
17
|
-
}
|
|
11
|
+
return (0, types_1.tryTo)(pred, this.value).is.true()
|
|
12
|
+
.map(() => (0, types_1.ofGet)(out, this.value))
|
|
13
|
+
.map(res => new Found(this.value, res))
|
|
14
|
+
.or(this);
|
|
18
15
|
}
|
|
19
16
|
else(alt) {
|
|
20
17
|
return (0, types_1.ofGet)(alt, this.value);
|
package/dist/utils/Case.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Case.js","sourceRoot":"","sources":["../../src/utils/Case.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"Case.js","sourceRoot":"","sources":["../../src/utils/Case.ts"],"names":[],"mappings":";;;AAAA,oCAAwD;AAExD,MAAM,IAAI;IACR,YAAsB,KAAQ,EAAY,OAAW;QAA/B,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAI;IAAG,CAAC;IAEzD,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAA,aAAK,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;aACrC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAA,aAAK,EAAO,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAe,CAAC;aACpD,EAAE,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAa,KAAY,SAAQ,IAAU;IACzC,YAAsB,KAAQ,EAAY,OAAU;QAClD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QADF,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAG;IAEpD,CAAC;IAED,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAZD,sBAYC;AAEM,MAAM,MAAM,GAAG,CAAiB,KAAQ,EAAc,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAAnE,QAAA,MAAM,UAA6D"}
|
|
@@ -9,14 +9,12 @@ exports.asResults = asResults;
|
|
|
9
9
|
const validators = (subject) => (0, types_1.meta)(subject)
|
|
10
10
|
.keys('constraint')
|
|
11
11
|
.reduce((list, vs) => list.add(vs), (0, types_1.toList)());
|
|
12
|
-
const runValidator = (v, subject) =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.mapDefined(v => runValidator(v, subject))
|
|
19
|
-
.reduce((rs, r) => rs.add(...r.results), (0, types_1.toResults)());
|
|
12
|
+
const runValidator = (v, subject) => (0, types_1.tryTo)(() => subject[v.property])
|
|
13
|
+
.map(actual => v.constraint(actual))
|
|
14
|
+
.map(res => (0, types_1.isResults)(res) ? res : !res ? (0, exports.asResults)(subject, v.text, v) : (0, types_1.toResults)()).value;
|
|
15
|
+
const constraints = (subject) => (0, types_1.tryTo)(() => validators(subject))
|
|
16
|
+
.map(vs => vs.mapDefined(v => runValidator(v, subject)))
|
|
17
|
+
.map(res => res.reduce((rs, r) => rs.add(...r.results), (0, types_1.toResults)())).value;
|
|
20
18
|
const validate = (subject) => (0, utils_1.choose)(subject)
|
|
21
19
|
.case(s => !(0, types_1.isDefined)(s), s => (0, exports.asResults)(s, 'Subject is not defined.'))
|
|
22
20
|
.case(s => (0, types_1.isEnum)(s), (e) => (e.isValid ? (0, types_1.toResults)() : (0, exports.asResults)(e, 'This is not a valid {type}.')))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validate.js","sourceRoot":"","sources":["../../src/validation/Validate.ts"],"names":[],"mappings":";;;AAAA,oCAmBkB;AAElB,iCAA8B;AAC9B,oCAAkC;AAI3B,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,QAAc,EAAE,UAA2B,EAAE,EAAW,EAAE,CACpG,IAAA,iBAAS,EAAC,IAAA,gBAAQ,EAAC,IAAA,YAAI,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AADlE,QAAA,SAAS,aACyD;AAE/E,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAmB,EAAE,CACvD,IAAA,YAAI,EAAC,OAAO,CAAC;KACV,IAAI,CAAkB,YAAY,CAAC;KACnC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAA,cAAM,GAAa,CAAC,CAAC;AAE7D,MAAM,YAAY,GAAG,CAAC,CAAY,EAAE,OAAiB,EAAW,EAAE
|
|
1
|
+
{"version":3,"file":"Validate.js","sourceRoot":"","sources":["../../src/validation/Validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy",
|
|
3
|
-
"version": "7.34.
|
|
3
|
+
"version": "7.34.20",
|
|
4
4
|
"description": "Straightforward library for building domain-driven microservice architectures",
|
|
5
5
|
"author": "Sander Hoogendoorn",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"access": "public"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@thisisagile/easy-test": "7.34.
|
|
34
|
+
"@thisisagile/easy-test": "7.34.20",
|
|
35
35
|
"@types/form-urlencoded": "^4.4.0",
|
|
36
36
|
"@types/jsonwebtoken": "^8.5.5",
|
|
37
37
|
"@types/validator": "^13.6.3"
|
package/src/types/Context.ts
CHANGED
|
@@ -20,7 +20,7 @@ export class DotEnvContext implements EnvContext {
|
|
|
20
20
|
|
|
21
21
|
readonly get = (key: string, alt?: string): string | undefined =>
|
|
22
22
|
tryTo(() => text(key).map(k => k.replace(/([a-z])([A-Z])/g, '$1 $2')).snake.toString())
|
|
23
|
-
.map(
|
|
23
|
+
.map(k => process.env[k] ?? alt).value;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export type RequestContext = {
|
package/src/types/Try.ts
CHANGED
|
@@ -2,20 +2,21 @@ import { isDefined, isEmpty, isTrue } from './Is';
|
|
|
2
2
|
import { validate } from '../validation';
|
|
3
3
|
import { Construct, Constructor, ofConstruct } from './Constructor';
|
|
4
4
|
import { Validatable } from './Validatable';
|
|
5
|
-
import { Get, ofGet
|
|
5
|
+
import { Get, ofGet } from './Get';
|
|
6
|
+
import { Func } from './Func';
|
|
6
7
|
|
|
7
8
|
abstract class Try<T = unknown> implements Validatable {
|
|
8
9
|
|
|
9
10
|
is = {
|
|
10
|
-
defined: (): Try<T> => this.filter(v => isDefined(v)),
|
|
11
|
-
empty: (): Try<T> => this.filter(v => isEmpty(v)),
|
|
12
|
-
valid: (): Try<T> => this.filter(v => validate(v).isValid),
|
|
13
|
-
true: (): Try<T> => this.filter(v => isTrue(v)),
|
|
14
|
-
false: (): Try<T> => this.filter(v => !isTrue(v)),
|
|
11
|
+
defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isDefined(prop ? prop(v) : v)),
|
|
12
|
+
empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isEmpty(prop ? prop(v) : v)),
|
|
13
|
+
valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => validate(prop ? prop(v) : v).isValid),
|
|
14
|
+
true: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isTrue(prop ? prop(v) : v)),
|
|
15
|
+
false: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isTrue(prop ? prop(v) : v)),
|
|
15
16
|
not: {
|
|
16
|
-
defined: (): Try<T> => this.filter(v => !isDefined(v)),
|
|
17
|
-
empty: (): Try<T> => this.filter(v => !isEmpty(v)),
|
|
18
|
-
valid: (): Try<T> => this.filter(v => !validate(v).isValid),
|
|
17
|
+
defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isDefined(prop ? prop(v) : v)),
|
|
18
|
+
empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isEmpty(prop ? prop(v) : v)),
|
|
19
|
+
valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !validate(prop ? prop(v) : v).isValid),
|
|
19
20
|
},
|
|
20
21
|
};
|
|
21
22
|
|
|
@@ -25,24 +26,26 @@ abstract class Try<T = unknown> implements Validatable {
|
|
|
25
26
|
|
|
26
27
|
abstract get isValid(): boolean;
|
|
27
28
|
|
|
28
|
-
static of = <T>(c:
|
|
29
|
+
static of = <T>(c: Get<T | Try<T>>, ...args: unknown[]): Try<T> => {
|
|
29
30
|
try {
|
|
30
|
-
const out =
|
|
31
|
+
const out = ofGet(c, ...args);
|
|
31
32
|
return new Success(out instanceof Try ? out.value : out);
|
|
32
33
|
} catch (e) {
|
|
33
34
|
return new Failure(e as Error);
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
37
|
|
|
37
|
-
abstract map<U>(f:
|
|
38
|
+
abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;
|
|
38
39
|
|
|
39
|
-
abstract recover(f:
|
|
40
|
+
abstract recover(f: Func<T | Try<T>, Error>): Try<T>;
|
|
40
41
|
|
|
41
|
-
abstract recoverFrom(type: Constructor<Error>, f:
|
|
42
|
+
abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;
|
|
42
43
|
|
|
43
|
-
abstract accept(f:
|
|
44
|
+
abstract accept(f: Func<void, T>): Try<T>;
|
|
44
45
|
|
|
45
|
-
abstract filter(predicate:
|
|
46
|
+
abstract filter(predicate: Func<boolean, T>): Try<T>;
|
|
47
|
+
|
|
48
|
+
abstract or(value: T): T;
|
|
46
49
|
|
|
47
50
|
abstract orElse(value?: T): T | undefined;
|
|
48
51
|
|
|
@@ -63,32 +66,36 @@ class Success<T> extends Try<T> {
|
|
|
63
66
|
return true;
|
|
64
67
|
};
|
|
65
68
|
|
|
66
|
-
map<U>(f:
|
|
69
|
+
map<U>(f: Func<U | Try<U>, T>): Try<U> {
|
|
67
70
|
return tryTo<U>(f, this.value);
|
|
68
71
|
};
|
|
69
72
|
|
|
70
|
-
recover(f:
|
|
73
|
+
recover(f: Func<T | Try<T>, Error>): Try<T> {
|
|
71
74
|
return this;
|
|
72
75
|
}
|
|
73
76
|
|
|
74
|
-
recoverFrom(type: Constructor<Error>, f:
|
|
77
|
+
recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {
|
|
75
78
|
return this;
|
|
76
79
|
}
|
|
77
80
|
|
|
78
|
-
accept(f:
|
|
81
|
+
accept(f: Func<void, T>): Try<T> {
|
|
79
82
|
return tryTo(() => {
|
|
80
|
-
|
|
83
|
+
f(this.value);
|
|
81
84
|
return this;
|
|
82
85
|
});
|
|
83
86
|
}
|
|
84
87
|
|
|
85
|
-
filter(predicate:
|
|
88
|
+
filter(predicate: Func<boolean, T>): Try<T> {
|
|
86
89
|
return tryTo(() => {
|
|
87
|
-
if (
|
|
90
|
+
if (predicate(this.value)) return this;
|
|
88
91
|
throw new Error(`Applying filter(${predicate.toString()}) failed.`);
|
|
89
92
|
});
|
|
90
93
|
}
|
|
91
94
|
|
|
95
|
+
or(value: T): T {
|
|
96
|
+
return this.value;
|
|
97
|
+
}
|
|
98
|
+
|
|
92
99
|
orElse(value?: T): T | undefined {
|
|
93
100
|
return this.value;
|
|
94
101
|
}
|
|
@@ -111,26 +118,30 @@ class Failure<T> extends Try<T> {
|
|
|
111
118
|
return false;
|
|
112
119
|
};
|
|
113
120
|
|
|
114
|
-
map<U>(f:
|
|
121
|
+
map<U>(f: Func<U | Try<U>, T>): Try<U> {
|
|
115
122
|
return new Failure<U>(this.error);
|
|
116
123
|
};
|
|
117
124
|
|
|
118
|
-
recover<U>(f:
|
|
125
|
+
recover<U>(f: Func<U | Try<U>, Error>): Try<U> {
|
|
119
126
|
return tryTo<U>(f, this.error);
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
recoverFrom<U>(type: Constructor<Error>, f:
|
|
129
|
+
recoverFrom<U>(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {
|
|
123
130
|
return tryTo(() => this.error instanceof type ? this.recover(f) : this);
|
|
124
131
|
}
|
|
125
132
|
|
|
126
|
-
accept(f:
|
|
133
|
+
accept(f: Func<void, T>): Try<T> {
|
|
127
134
|
return this;
|
|
128
135
|
}
|
|
129
136
|
|
|
130
|
-
filter(predicate:
|
|
137
|
+
filter(predicate: Func<boolean, T>): Try<T> {
|
|
131
138
|
return this;
|
|
132
139
|
}
|
|
133
140
|
|
|
141
|
+
or(value: T): T {
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
|
|
134
145
|
orElse(value?: T): T | undefined {
|
|
135
146
|
return value;
|
|
136
147
|
}
|
|
@@ -140,4 +151,4 @@ class Failure<T> extends Try<T> {
|
|
|
140
151
|
}
|
|
141
152
|
}
|
|
142
153
|
|
|
143
|
-
export const tryTo = <T>(c:
|
|
154
|
+
export const tryTo = <T>(c: Get<T | Try<T>>, ...args: unknown[]) => Try.of<T>(c, ...args);
|
package/src/utils/Case.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { Get, ofGet, Predicate } from '../types';
|
|
1
|
+
import { Get, ofGet, Predicate, tryTo } from '../types';
|
|
2
2
|
|
|
3
3
|
class Case<T, V = unknown> {
|
|
4
4
|
constructor(protected value: V, protected outcome?: T) {}
|
|
5
5
|
|
|
6
6
|
case(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return this;
|
|
12
|
-
}
|
|
7
|
+
return tryTo(pred, this.value).is.true()
|
|
8
|
+
.map(() => ofGet<T, V>(out, this.value))
|
|
9
|
+
.map(res => new Found(this.value, res) as Case<T, V>)
|
|
10
|
+
.or(this);
|
|
13
11
|
}
|
|
14
12
|
|
|
15
13
|
else(alt: Get<T, V>): T {
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
toList,
|
|
16
16
|
toName,
|
|
17
17
|
toResult,
|
|
18
|
-
toResults,
|
|
18
|
+
toResults, tryTo,
|
|
19
19
|
Value,
|
|
20
20
|
} from '../types';
|
|
21
21
|
import { Constraint } from './Contraints';
|
|
@@ -32,16 +32,15 @@ const validators = (subject: unknown): List<Validator> =>
|
|
|
32
32
|
.keys<List<Validator>>('constraint')
|
|
33
33
|
.reduce((list, vs) => list.add(vs), toList<Validator>());
|
|
34
34
|
|
|
35
|
-
const runValidator = (v: Validator, subject?: unknown): Results =>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
35
|
+
const runValidator = (v: Validator, subject?: unknown): Results =>
|
|
36
|
+
tryTo(() => (subject as any)[v.property])
|
|
37
|
+
.map(actual => v.constraint(actual))
|
|
38
|
+
.map(res => isResults(res) ? res : !res ? asResults(subject, v.text, v) : toResults()).value;
|
|
40
39
|
|
|
41
40
|
const constraints = (subject?: unknown): Results =>
|
|
42
|
-
validators(subject)
|
|
43
|
-
.mapDefined(v => runValidator(v, subject))
|
|
44
|
-
.reduce((rs, r) => rs.add(...r.results), toResults());
|
|
41
|
+
tryTo(() => validators(subject))
|
|
42
|
+
.map(vs => vs.mapDefined(v => runValidator(v, subject)))
|
|
43
|
+
.map(res => res.reduce((rs, r) => rs.add(...r.results), toResults())).value;
|
|
45
44
|
|
|
46
45
|
export const validate = (subject?: unknown): Results =>
|
|
47
46
|
choose<Results, any>(subject)
|