@thisisagile/easy 15.16.3 → 15.17.1
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/resources/Route.js.map +1 -1
- package/dist/resources/Route.mjs.map +1 -1
- package/dist/types/Parser.d.ts +34 -0
- package/dist/types/Parser.js +79 -0
- package/dist/types/Parser.js.map +1 -0
- package/dist/types/Parser.mjs +56 -0
- package/dist/types/Parser.mjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -1
- package/dist/validation/Validate.d.ts +1 -0
- package/dist/validation/Validate.js +3 -0
- package/dist/validation/Validate.js.map +1 -1
- package/dist/validation/Validate.mjs +2 -0
- package/dist/validation/Validate.mjs.map +1 -1
- package/package.json +2 -2
- package/src/resources/Route.ts +1 -1
- package/src/types/Parser.ts +51 -0
- package/src/types/index.ts +1 -0
- package/src/validation/Validate.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resources/Route.ts"],"sourcesContent":["import { List, meta, Optional, tryTo, Uri } from '../types';\nimport { Verb } from '../http';\nimport { Req } from './Req';\nimport { Resource } from './Resource';\nimport { Scope, UseCase } from '../process';\nimport { RequestHandler } from 'express';\n\nexport const route =\n (uri: Uri): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('route', uri);\n };\n\nexport type Endpoint<T = unknown> = (re: Req) => Promise<T | List<T>>;\nexport type RouteRequires = { token: boolean; labCoat: boolean; scope?: Scope; uc?: UseCase };\nexport type Route = { verb: Verb; endpoint: Endpoint; requires: RouteRequires; middleware: RequestHandler[] };\nexport type Routes = { route: Uri; middleware: RequestHandler[]; endpoints: List<Route> };\n\nconst toRoute = (endpoint: Endpoint, requires: RouteRequires, verb?: Verb, middleware?: RequestHandler[]): Optional<Route> =>\n tryTo(verb)\n .is.defined()\n .map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] } as Route)
|
|
1
|
+
{"version":3,"sources":["../../src/resources/Route.ts"],"sourcesContent":["import { List, meta, Optional, tryTo, Uri } from '../types';\nimport { Verb } from '../http';\nimport { Req } from './Req';\nimport { Resource } from './Resource';\nimport { Scope, UseCase } from '../process';\nimport { RequestHandler } from 'express';\n\nexport const route =\n (uri: Uri): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('route', uri);\n };\n\nexport type Endpoint<T = unknown> = (re: Req) => Promise<T | List<T>>;\nexport type RouteRequires = { token: boolean; labCoat: boolean; scope?: Scope; uc?: UseCase };\nexport type Route = { verb: Verb; endpoint: Endpoint; requires: RouteRequires; middleware: RequestHandler[] };\nexport type Routes = { route: Uri; middleware: RequestHandler[]; endpoints: List<Route> };\n\nconst toRoute = (endpoint: Endpoint, requires: RouteRequires, verb?: Verb, middleware?: RequestHandler[]): Optional<Route> =>\n tryTo(verb)\n .is.defined()\n .map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] }) as Route)\n .orElse();\n\nclass Router implements Routes {\n constructor(readonly resource: Resource) {}\n\n get route(): Uri {\n return meta(this.resource).get('route');\n }\n\n get middleware(): RequestHandler[] {\n return meta(this.resource).get<RequestHandler[]>('middleware') ?? [];\n }\n\n get endpoints(): List<Route> {\n return meta(this.resource)\n .properties('verb')\n .mapDefined(v =>\n toRoute(\n this.resource[v.property],\n {\n labCoat: v.get<boolean>('labCoat') ?? false,\n token: v.get<boolean>('token') ?? false,\n scope: v.get<Scope>('scope'),\n uc: v.get<UseCase>('uc'),\n },\n v.get<Verb>('verb'),\n v.get<RequestHandler[]>('middleware')\n )\n );\n }\n}\n\nexport const routes = (resource: Resource): Routes => new Router(resource);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiD;AAO1C,MAAM,QACX,CAAC,QACD,CAAC,YAA2B;AAC1B,yBAAK,OAAO,EAAE,IAAI,SAAS,GAAG;AAChC;AAOF,MAAM,UAAU,CAAC,UAAoB,UAAyB,MAAa,mBACzE,oBAAM,IAAI,EACP,GAAG,QAAQ,EACX,IAAI,CAAAA,WAAS,EAAE,MAAAA,OAAM,UAAU,UAAU,YAAY,cAAc,CAAC,EAAE,EAAW,EACjF,OAAO;AAEZ,MAAM,OAAyB;AAAA,EAC7B,YAAqB,UAAoB;AAApB;AAAA,EAAqB;AAAA,EAE1C,IAAI,QAAa;AACf,eAAO,mBAAK,KAAK,QAAQ,EAAE,IAAI,OAAO;AAAA,EACxC;AAAA,EAEA,IAAI,aAA+B;AACjC,eAAO,mBAAK,KAAK,QAAQ,EAAE,IAAsB,YAAY,KAAK,CAAC;AAAA,EACrE;AAAA,EAEA,IAAI,YAAyB;AAC3B,eAAO,mBAAK,KAAK,QAAQ,EACtB,WAAW,MAAM,EACjB;AAAA,MAAW,OACV;AAAA,QACE,KAAK,SAAS,EAAE,QAAQ;AAAA,QACxB;AAAA,UACE,SAAS,EAAE,IAAa,SAAS,KAAK;AAAA,UACtC,OAAO,EAAE,IAAa,OAAO,KAAK;AAAA,UAClC,OAAO,EAAE,IAAW,OAAO;AAAA,UAC3B,IAAI,EAAE,IAAa,IAAI;AAAA,QACzB;AAAA,QACA,EAAE,IAAU,MAAM;AAAA,QAClB,EAAE,IAAsB,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,EACJ;AACF;AAEO,MAAM,SAAS,CAAC,aAA+B,IAAI,OAAO,QAAQ;","names":["verb"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resources/Route.ts"],"sourcesContent":["import { List, meta, Optional, tryTo, Uri } from '../types';\nimport { Verb } from '../http';\nimport { Req } from './Req';\nimport { Resource } from './Resource';\nimport { Scope, UseCase } from '../process';\nimport { RequestHandler } from 'express';\n\nexport const route =\n (uri: Uri): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('route', uri);\n };\n\nexport type Endpoint<T = unknown> = (re: Req) => Promise<T | List<T>>;\nexport type RouteRequires = { token: boolean; labCoat: boolean; scope?: Scope; uc?: UseCase };\nexport type Route = { verb: Verb; endpoint: Endpoint; requires: RouteRequires; middleware: RequestHandler[] };\nexport type Routes = { route: Uri; middleware: RequestHandler[]; endpoints: List<Route> };\n\nconst toRoute = (endpoint: Endpoint, requires: RouteRequires, verb?: Verb, middleware?: RequestHandler[]): Optional<Route> =>\n tryTo(verb)\n .is.defined()\n .map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] } as Route)
|
|
1
|
+
{"version":3,"sources":["../../src/resources/Route.ts"],"sourcesContent":["import { List, meta, Optional, tryTo, Uri } from '../types';\nimport { Verb } from '../http';\nimport { Req } from './Req';\nimport { Resource } from './Resource';\nimport { Scope, UseCase } from '../process';\nimport { RequestHandler } from 'express';\n\nexport const route =\n (uri: Uri): ClassDecorator =>\n (subject: unknown): void => {\n meta(subject).set('route', uri);\n };\n\nexport type Endpoint<T = unknown> = (re: Req) => Promise<T | List<T>>;\nexport type RouteRequires = { token: boolean; labCoat: boolean; scope?: Scope; uc?: UseCase };\nexport type Route = { verb: Verb; endpoint: Endpoint; requires: RouteRequires; middleware: RequestHandler[] };\nexport type Routes = { route: Uri; middleware: RequestHandler[]; endpoints: List<Route> };\n\nconst toRoute = (endpoint: Endpoint, requires: RouteRequires, verb?: Verb, middleware?: RequestHandler[]): Optional<Route> =>\n tryTo(verb)\n .is.defined()\n .map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] }) as Route)\n .orElse();\n\nclass Router implements Routes {\n constructor(readonly resource: Resource) {}\n\n get route(): Uri {\n return meta(this.resource).get('route');\n }\n\n get middleware(): RequestHandler[] {\n return meta(this.resource).get<RequestHandler[]>('middleware') ?? [];\n }\n\n get endpoints(): List<Route> {\n return meta(this.resource)\n .properties('verb')\n .mapDefined(v =>\n toRoute(\n this.resource[v.property],\n {\n labCoat: v.get<boolean>('labCoat') ?? false,\n token: v.get<boolean>('token') ?? false,\n scope: v.get<Scope>('scope'),\n uc: v.get<UseCase>('uc'),\n },\n v.get<Verb>('verb'),\n v.get<RequestHandler[]>('middleware')\n )\n );\n }\n}\n\nexport const routes = (resource: Resource): Routes => new Router(resource);\n"],"mappings":";AAAA,SAAe,MAAgB,aAAkB;AAO1C,MAAM,QACX,CAAC,QACD,CAAC,YAA2B;AAC1B,OAAK,OAAO,EAAE,IAAI,SAAS,GAAG;AAChC;AAOF,MAAM,UAAU,CAAC,UAAoB,UAAyB,MAAa,eACzE,MAAM,IAAI,EACP,GAAG,QAAQ,EACX,IAAI,CAAAA,WAAS,EAAE,MAAAA,OAAM,UAAU,UAAU,YAAY,cAAc,CAAC,EAAE,EAAW,EACjF,OAAO;AAEZ,MAAM,OAAyB;AAAA,EAC7B,YAAqB,UAAoB;AAApB;AAAA,EAAqB;AAAA,EAE1C,IAAI,QAAa;AACf,WAAO,KAAK,KAAK,QAAQ,EAAE,IAAI,OAAO;AAAA,EACxC;AAAA,EAEA,IAAI,aAA+B;AACjC,WAAO,KAAK,KAAK,QAAQ,EAAE,IAAsB,YAAY,KAAK,CAAC;AAAA,EACrE;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK,KAAK,QAAQ,EACtB,WAAW,MAAM,EACjB;AAAA,MAAW,OACV;AAAA,QACE,KAAK,SAAS,EAAE,QAAQ;AAAA,QACxB;AAAA,UACE,SAAS,EAAE,IAAa,SAAS,KAAK;AAAA,UACtC,OAAO,EAAE,IAAa,OAAO,KAAK;AAAA,UAClC,OAAO,EAAE,IAAW,OAAO;AAAA,UAC3B,IAAI,EAAE,IAAa,IAAI;AAAA,QACzB;AAAA,QACA,EAAE,IAAU,MAAM;AAAA,QAClB,EAAE,IAAsB,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,EACJ;AACF;AAEO,MAAM,SAAS,CAAC,aAA+B,IAAI,OAAO,QAAQ;","names":["verb"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Get } from './Get';
|
|
2
|
+
import { Constructor } from './Constructor';
|
|
3
|
+
export declare class Parser<T, V> {
|
|
4
|
+
protected value: T;
|
|
5
|
+
protected f: Get<V, T>;
|
|
6
|
+
protected alt: Get<V, T>;
|
|
7
|
+
readonly valid: boolean;
|
|
8
|
+
if: {
|
|
9
|
+
empty: <U>(pred?: Get<U, T> | undefined) => this;
|
|
10
|
+
defined: <U_1>(pred?: Get<U_1, T> | undefined) => this;
|
|
11
|
+
valid: <U_2>(pred?: Get<U_2, T> | undefined) => this;
|
|
12
|
+
in: (...items: T[]) => this;
|
|
13
|
+
is: {
|
|
14
|
+
object: <U_3>(pred?: Get<U_3, T> | undefined) => this;
|
|
15
|
+
string: <U_4>(pred?: Get<U_4, T> | undefined) => this;
|
|
16
|
+
instance: <U_5>(c: Constructor<U_5>, pred?: Get<U_5, T> | undefined) => this;
|
|
17
|
+
};
|
|
18
|
+
not: {
|
|
19
|
+
empty: <U_6>(pred?: Get<U_6, T> | undefined) => this;
|
|
20
|
+
defined: <U_7>(pred?: Get<U_7, T> | undefined) => this;
|
|
21
|
+
valid: <U_8>(pred?: Get<U_8, T> | undefined) => this;
|
|
22
|
+
isObject: <U_9>(pred?: Get<U_9, T> | undefined) => this;
|
|
23
|
+
in: (...items: T[]) => this;
|
|
24
|
+
is: {
|
|
25
|
+
object: <U_10>(pred?: Get<U_10, T> | undefined) => this;
|
|
26
|
+
string: <U_11>(pred?: Get<U_11, T> | undefined) => this;
|
|
27
|
+
instance: <U_12>(c: Constructor<U_12>, pred?: Get<U_12, T> | undefined) => this;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
constructor(value: T, f: Get<V, T>, alt: Get<V, T>, valid?: boolean);
|
|
32
|
+
protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this;
|
|
33
|
+
protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this;
|
|
34
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var Parser_exports = {};
|
|
20
|
+
__export(Parser_exports, {
|
|
21
|
+
Parser: () => Parser
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(Parser_exports);
|
|
24
|
+
var import_Get = require("./Get");
|
|
25
|
+
var import_Is = require("./Is");
|
|
26
|
+
var import_validation = require("../validation");
|
|
27
|
+
var import_Array = require("./Array");
|
|
28
|
+
class Parser {
|
|
29
|
+
constructor(value, f, alt, valid = true) {
|
|
30
|
+
this.value = value;
|
|
31
|
+
this.f = f;
|
|
32
|
+
this.alt = alt;
|
|
33
|
+
this.valid = valid;
|
|
34
|
+
}
|
|
35
|
+
if = {
|
|
36
|
+
empty: (pred) => this.evaluate(import_Is.isEmpty, pred),
|
|
37
|
+
defined: (pred) => this.evaluate(import_Is.isDefined, pred),
|
|
38
|
+
valid: (pred) => this.evaluate(import_validation.isValid, pred),
|
|
39
|
+
in: (...items) => this.evaluate(() => (0, import_Is.isIn)(this.value, (0, import_Array.toArray)(...items))),
|
|
40
|
+
is: {
|
|
41
|
+
object: (pred) => this.evaluate(import_Is.isObject, pred),
|
|
42
|
+
string: (pred) => this.evaluate(import_Is.isString, pred),
|
|
43
|
+
instance: (c, pred) => this.evaluate(() => this.value instanceof c, pred)
|
|
44
|
+
},
|
|
45
|
+
not: {
|
|
46
|
+
empty: (pred) => this.evaluateNot(import_Is.isEmpty, pred),
|
|
47
|
+
defined: (pred) => this.evaluateNot(import_Is.isDefined, pred),
|
|
48
|
+
valid: (pred) => this.evaluateNot(import_validation.isValid, pred),
|
|
49
|
+
isObject: (pred) => this.evaluateNot(import_Is.isObject, pred),
|
|
50
|
+
in: (...items) => this.evaluate(() => !(0, import_Is.isIn)(this.value, (0, import_Array.toArray)(...items))),
|
|
51
|
+
is: {
|
|
52
|
+
object: (pred) => this.evaluateNot(import_Is.isObject, pred),
|
|
53
|
+
string: (pred) => this.evaluateNot(import_Is.isString, pred),
|
|
54
|
+
instance: (c, pred) => this.evaluate(() => !(this.value instanceof c), pred)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
evaluate(meta, pred) {
|
|
59
|
+
return new this.constructor(
|
|
60
|
+
this.value,
|
|
61
|
+
this.f,
|
|
62
|
+
this.alt,
|
|
63
|
+
(0, import_Get.ofGet)(meta, pred ? (0, import_Get.ofGet)(pred, this.value) : this.value)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
evaluateNot(meta, pred) {
|
|
67
|
+
return new this.constructor(
|
|
68
|
+
this.value,
|
|
69
|
+
this.f,
|
|
70
|
+
this.alt,
|
|
71
|
+
!(0, import_Get.ofGet)(meta, pred ? (0, import_Get.ofGet)(pred, this.value) : this.value)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
Parser
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=Parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/Parser.ts"],"sourcesContent":["import { Get, ofGet } from './Get';\nimport { isDefined, isEmpty, isIn, isObject, isString } from './Is';\nimport { isValid } from '../validation';\nimport { Constructor } from './Constructor';\nimport { toArray } from './Array';\n\nexport class Parser<T, V> {\n if = {\n empty: <U>(pred?: Get<U, T>): this => this.evaluate(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluate(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluate(isValid, pred),\n in: (...items: T[]): this => this.evaluate(() => isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluate(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluate(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => this.value instanceof c, pred),\n },\n not: {\n empty: <U>(pred?: Get<U, T>): this => this.evaluateNot(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluateNot(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluateNot(isValid, pred),\n isObject: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n in: (...items: T[]): this => this.evaluate(() => !isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluateNot(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => !(this.value instanceof c), pred),\n },\n },\n };\n\n constructor(protected value: T, protected f: Get<V, T>, protected alt: Get<V, T>, readonly valid = true) {}\n\n protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(\n this.value,\n this.f,\n this.alt,\n ofGet(meta, pred ? ofGet(pred, this.value) : this.value)\n );\n }\n\n protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(\n this.value,\n this.f,\n this.alt,\n !ofGet(meta, pred ? ofGet(pred, this.value) : this.value)\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA2B;AAC3B,gBAA6D;AAC7D,wBAAwB;AAExB,mBAAwB;AAEjB,MAAM,OAAa;AAAA,EAyBxB,YAAsB,OAAoB,GAAwB,KAAyB,QAAQ,MAAM;AAAnF;AAAoB;AAAwB;AAAyB;AAAA,EAAe;AAAA,EAxB1G,KAAK;AAAA,IACH,OAAO,CAAI,SAA2B,KAAK,SAAS,mBAAS,IAAI;AAAA,IACjE,SAAS,CAAI,SAA2B,KAAK,SAAS,qBAAW,IAAI;AAAA,IACrE,OAAO,CAAI,SAA2B,KAAK,SAAS,2BAAS,IAAI;AAAA,IACjE,IAAI,IAAI,UAAqB,KAAK,SAAS,UAAM,gBAAK,KAAK,WAAO,sBAAQ,GAAG,KAAK,CAAC,CAAC;AAAA,IACpF,IAAI;AAAA,MACF,QAAQ,CAAI,SAA2B,KAAK,SAAS,oBAAU,IAAI;AAAA,MACnE,QAAQ,CAAI,SAA2B,KAAK,SAAS,oBAAU,IAAI;AAAA,MACnE,UAAU,CAAI,GAAmB,SAA2B,KAAK,SAAS,MAAM,KAAK,iBAAiB,GAAG,IAAI;AAAA,IAC/G;AAAA,IACA,KAAK;AAAA,MACH,OAAO,CAAI,SAA2B,KAAK,YAAY,mBAAS,IAAI;AAAA,MACpE,SAAS,CAAI,SAA2B,KAAK,YAAY,qBAAW,IAAI;AAAA,MACxE,OAAO,CAAI,SAA2B,KAAK,YAAY,2BAAS,IAAI;AAAA,MACpE,UAAU,CAAI,SAA2B,KAAK,YAAY,oBAAU,IAAI;AAAA,MACxE,IAAI,IAAI,UAAqB,KAAK,SAAS,MAAM,KAAC,gBAAK,KAAK,WAAO,sBAAQ,GAAG,KAAK,CAAC,CAAC;AAAA,MACrF,IAAI;AAAA,QACF,QAAQ,CAAI,SAA2B,KAAK,YAAY,oBAAU,IAAI;AAAA,QACtE,QAAQ,CAAI,SAA2B,KAAK,YAAY,oBAAU,IAAI;AAAA,QACtE,UAAU,CAAI,GAAmB,SAA2B,KAAK,SAAS,MAAM,EAAE,KAAK,iBAAiB,IAAI,IAAI;AAAA,MAClH;AAAA,IACF;AAAA,EACF;AAAA,EAIU,SAAY,MAAoB,MAAwB;AAChE,WAAO,IAAK,KAAK;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,UACL,kBAAM,MAAM,WAAO,kBAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEU,YAAe,MAAoB,MAAwB;AACnE,WAAO,IAAK,KAAK;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAC,kBAAM,MAAM,WAAO,kBAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1D;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import "../chunk-4N72FQFX.mjs";
|
|
2
|
+
import { ofGet } from "./Get";
|
|
3
|
+
import { isDefined, isEmpty, isIn, isObject, isString } from "./Is";
|
|
4
|
+
import { isValid } from "../validation";
|
|
5
|
+
import { toArray } from "./Array";
|
|
6
|
+
class Parser {
|
|
7
|
+
constructor(value, f, alt, valid = true) {
|
|
8
|
+
this.value = value;
|
|
9
|
+
this.f = f;
|
|
10
|
+
this.alt = alt;
|
|
11
|
+
this.valid = valid;
|
|
12
|
+
}
|
|
13
|
+
if = {
|
|
14
|
+
empty: (pred) => this.evaluate(isEmpty, pred),
|
|
15
|
+
defined: (pred) => this.evaluate(isDefined, pred),
|
|
16
|
+
valid: (pred) => this.evaluate(isValid, pred),
|
|
17
|
+
in: (...items) => this.evaluate(() => isIn(this.value, toArray(...items))),
|
|
18
|
+
is: {
|
|
19
|
+
object: (pred) => this.evaluate(isObject, pred),
|
|
20
|
+
string: (pred) => this.evaluate(isString, pred),
|
|
21
|
+
instance: (c, pred) => this.evaluate(() => this.value instanceof c, pred)
|
|
22
|
+
},
|
|
23
|
+
not: {
|
|
24
|
+
empty: (pred) => this.evaluateNot(isEmpty, pred),
|
|
25
|
+
defined: (pred) => this.evaluateNot(isDefined, pred),
|
|
26
|
+
valid: (pred) => this.evaluateNot(isValid, pred),
|
|
27
|
+
isObject: (pred) => this.evaluateNot(isObject, pred),
|
|
28
|
+
in: (...items) => this.evaluate(() => !isIn(this.value, toArray(...items))),
|
|
29
|
+
is: {
|
|
30
|
+
object: (pred) => this.evaluateNot(isObject, pred),
|
|
31
|
+
string: (pred) => this.evaluateNot(isString, pred),
|
|
32
|
+
instance: (c, pred) => this.evaluate(() => !(this.value instanceof c), pred)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
evaluate(meta, pred) {
|
|
37
|
+
return new this.constructor(
|
|
38
|
+
this.value,
|
|
39
|
+
this.f,
|
|
40
|
+
this.alt,
|
|
41
|
+
ofGet(meta, pred ? ofGet(pred, this.value) : this.value)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
evaluateNot(meta, pred) {
|
|
45
|
+
return new this.constructor(
|
|
46
|
+
this.value,
|
|
47
|
+
this.f,
|
|
48
|
+
this.alt,
|
|
49
|
+
!ofGet(meta, pred ? ofGet(pred, this.value) : this.value)
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
Parser
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=Parser.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/Parser.ts"],"sourcesContent":["import { Get, ofGet } from './Get';\nimport { isDefined, isEmpty, isIn, isObject, isString } from './Is';\nimport { isValid } from '../validation';\nimport { Constructor } from './Constructor';\nimport { toArray } from './Array';\n\nexport class Parser<T, V> {\n if = {\n empty: <U>(pred?: Get<U, T>): this => this.evaluate(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluate(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluate(isValid, pred),\n in: (...items: T[]): this => this.evaluate(() => isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluate(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluate(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => this.value instanceof c, pred),\n },\n not: {\n empty: <U>(pred?: Get<U, T>): this => this.evaluateNot(isEmpty, pred),\n defined: <U>(pred?: Get<U, T>): this => this.evaluateNot(isDefined, pred),\n valid: <U>(pred?: Get<U, T>): this => this.evaluateNot(isValid, pred),\n isObject: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n in: (...items: T[]): this => this.evaluate(() => !isIn(this.value, toArray(...items))),\n is: {\n object: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),\n string: <U>(pred?: Get<U, T>): this => this.evaluateNot(isString, pred),\n instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => !(this.value instanceof c), pred),\n },\n },\n };\n\n constructor(protected value: T, protected f: Get<V, T>, protected alt: Get<V, T>, readonly valid = true) {}\n\n protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(\n this.value,\n this.f,\n this.alt,\n ofGet(meta, pred ? ofGet(pred, this.value) : this.value)\n );\n }\n\n protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this {\n return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(\n this.value,\n this.f,\n this.alt,\n !ofGet(meta, pred ? ofGet(pred, this.value) : this.value)\n );\n }\n}\n"],"mappings":";AAAA,SAAc,aAAa;AAC3B,SAAS,WAAW,SAAS,MAAM,UAAU,gBAAgB;AAC7D,SAAS,eAAe;AAExB,SAAS,eAAe;AAEjB,MAAM,OAAa;AAAA,EAyBxB,YAAsB,OAAoB,GAAwB,KAAyB,QAAQ,MAAM;AAAnF;AAAoB;AAAwB;AAAyB;AAAA,EAAe;AAAA,EAxB1G,KAAK;AAAA,IACH,OAAO,CAAI,SAA2B,KAAK,SAAS,SAAS,IAAI;AAAA,IACjE,SAAS,CAAI,SAA2B,KAAK,SAAS,WAAW,IAAI;AAAA,IACrE,OAAO,CAAI,SAA2B,KAAK,SAAS,SAAS,IAAI;AAAA,IACjE,IAAI,IAAI,UAAqB,KAAK,SAAS,MAAM,KAAK,KAAK,OAAO,QAAQ,GAAG,KAAK,CAAC,CAAC;AAAA,IACpF,IAAI;AAAA,MACF,QAAQ,CAAI,SAA2B,KAAK,SAAS,UAAU,IAAI;AAAA,MACnE,QAAQ,CAAI,SAA2B,KAAK,SAAS,UAAU,IAAI;AAAA,MACnE,UAAU,CAAI,GAAmB,SAA2B,KAAK,SAAS,MAAM,KAAK,iBAAiB,GAAG,IAAI;AAAA,IAC/G;AAAA,IACA,KAAK;AAAA,MACH,OAAO,CAAI,SAA2B,KAAK,YAAY,SAAS,IAAI;AAAA,MACpE,SAAS,CAAI,SAA2B,KAAK,YAAY,WAAW,IAAI;AAAA,MACxE,OAAO,CAAI,SAA2B,KAAK,YAAY,SAAS,IAAI;AAAA,MACpE,UAAU,CAAI,SAA2B,KAAK,YAAY,UAAU,IAAI;AAAA,MACxE,IAAI,IAAI,UAAqB,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK,OAAO,QAAQ,GAAG,KAAK,CAAC,CAAC;AAAA,MACrF,IAAI;AAAA,QACF,QAAQ,CAAI,SAA2B,KAAK,YAAY,UAAU,IAAI;AAAA,QACtE,QAAQ,CAAI,SAA2B,KAAK,YAAY,UAAU,IAAI;AAAA,QACtE,UAAU,CAAI,GAAmB,SAA2B,KAAK,SAAS,MAAM,EAAE,KAAK,iBAAiB,IAAI,IAAI;AAAA,MAClH;AAAA,IACF;AAAA,EACF;AAAA,EAIU,SAAY,MAAoB,MAAwB;AAChE,WAAO,IAAK,KAAK;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEU,YAAe,MAAoB,MAAwB;AACnE,WAAO,IAAK,KAAK;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,CAAC,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1D;AAAA,EACF;AACF;","names":[]}
|
package/dist/types/index.d.ts
CHANGED
package/dist/types/index.js
CHANGED
|
@@ -42,6 +42,7 @@ __reExport(types_exports, require("./Meta"), module.exports);
|
|
|
42
42
|
__reExport(types_exports, require("./Nullish"), module.exports);
|
|
43
43
|
__reExport(types_exports, require("./Number"), module.exports);
|
|
44
44
|
__reExport(types_exports, require("./PageList"), module.exports);
|
|
45
|
+
__reExport(types_exports, require("./Parser"), module.exports);
|
|
45
46
|
__reExport(types_exports, require("./Primitive"), module.exports);
|
|
46
47
|
__reExport(types_exports, require("./Repository"), module.exports);
|
|
47
48
|
__reExport(types_exports, require("./Result"), module.exports);
|
|
@@ -86,6 +87,7 @@ __reExport(types_exports, require("./Value"), module.exports);
|
|
|
86
87
|
...require("./Nullish"),
|
|
87
88
|
...require("./Number"),
|
|
88
89
|
...require("./PageList"),
|
|
90
|
+
...require("./Parser"),
|
|
89
91
|
...require("./Primitive"),
|
|
90
92
|
...require("./Repository"),
|
|
91
93
|
...require("./Result"),
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export * from './Array';\nexport * from './Builder';\nexport * from './Cache';\nexport * from './CacheAge';\nexport * from './Case';\nexport * from './Constructor';\nexport * from './Context';\nexport * from './Enum';\nexport * from './ErrorOrigin';\nexport * from './Exception';\nexport * from './Falsy';\nexport * from './Func';\nexport * from './Gateway';\nexport * from './Get';\nexport * from './Id';\nexport * from './Identity';\nexport * from './Is';\nexport * from './IsA';\nexport * from './IsDate';\nexport * from './IsEqual';\nexport * from './Json';\nexport * from './List';\nexport * from './Message';\nexport * from './Meta';\nexport * from './Nullish';\nexport * from './Number';\nexport * from './PageList';\nexport * from './Primitive';\nexport * from './Repository';\nexport * from './Result';\nexport * from './Results';\nexport * from './Sort';\nexport * from './Tag';\nexport * from './Template';\nexport * from './Text';\nexport * from './Try';\nexport * from './TypeGuard';\nexport * from './Types';\nexport * from './Uri';\nexport * from './Uuid';\nexport * from './Validatable';\nexport * from './Value';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,oBAAd;AACA,0BAAc,sBADd;AAEA,0BAAc,oBAFd;AAGA,0BAAc,uBAHd;AAIA,0BAAc,mBAJd;AAKA,0BAAc,0BALd;AAMA,0BAAc,sBANd;AAOA,0BAAc,mBAPd;AAQA,0BAAc,0BARd;AASA,0BAAc,wBATd;AAUA,0BAAc,oBAVd;AAWA,0BAAc,mBAXd;AAYA,0BAAc,sBAZd;AAaA,0BAAc,kBAbd;AAcA,0BAAc,iBAdd;AAeA,0BAAc,uBAfd;AAgBA,0BAAc,iBAhBd;AAiBA,0BAAc,kBAjBd;AAkBA,0BAAc,qBAlBd;AAmBA,0BAAc,sBAnBd;AAoBA,0BAAc,mBApBd;AAqBA,0BAAc,mBArBd;AAsBA,0BAAc,sBAtBd;AAuBA,0BAAc,mBAvBd;AAwBA,0BAAc,sBAxBd;AAyBA,0BAAc,qBAzBd;AA0BA,0BAAc,uBA1Bd;AA2BA,0BAAc,
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export * from './Array';\nexport * from './Builder';\nexport * from './Cache';\nexport * from './CacheAge';\nexport * from './Case';\nexport * from './Constructor';\nexport * from './Context';\nexport * from './Enum';\nexport * from './ErrorOrigin';\nexport * from './Exception';\nexport * from './Falsy';\nexport * from './Func';\nexport * from './Gateway';\nexport * from './Get';\nexport * from './Id';\nexport * from './Identity';\nexport * from './Is';\nexport * from './IsA';\nexport * from './IsDate';\nexport * from './IsEqual';\nexport * from './Json';\nexport * from './List';\nexport * from './Message';\nexport * from './Meta';\nexport * from './Nullish';\nexport * from './Number';\nexport * from './PageList';\nexport * from './Parser';\nexport * from './Primitive';\nexport * from './Repository';\nexport * from './Result';\nexport * from './Results';\nexport * from './Sort';\nexport * from './Tag';\nexport * from './Template';\nexport * from './Text';\nexport * from './Try';\nexport * from './TypeGuard';\nexport * from './Types';\nexport * from './Uri';\nexport * from './Uuid';\nexport * from './Validatable';\nexport * from './Value';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,oBAAd;AACA,0BAAc,sBADd;AAEA,0BAAc,oBAFd;AAGA,0BAAc,uBAHd;AAIA,0BAAc,mBAJd;AAKA,0BAAc,0BALd;AAMA,0BAAc,sBANd;AAOA,0BAAc,mBAPd;AAQA,0BAAc,0BARd;AASA,0BAAc,wBATd;AAUA,0BAAc,oBAVd;AAWA,0BAAc,mBAXd;AAYA,0BAAc,sBAZd;AAaA,0BAAc,kBAbd;AAcA,0BAAc,iBAdd;AAeA,0BAAc,uBAfd;AAgBA,0BAAc,iBAhBd;AAiBA,0BAAc,kBAjBd;AAkBA,0BAAc,qBAlBd;AAmBA,0BAAc,sBAnBd;AAoBA,0BAAc,mBApBd;AAqBA,0BAAc,mBArBd;AAsBA,0BAAc,sBAtBd;AAuBA,0BAAc,mBAvBd;AAwBA,0BAAc,sBAxBd;AAyBA,0BAAc,qBAzBd;AA0BA,0BAAc,uBA1Bd;AA2BA,0BAAc,qBA3Bd;AA4BA,0BAAc,wBA5Bd;AA6BA,0BAAc,yBA7Bd;AA8BA,0BAAc,qBA9Bd;AA+BA,0BAAc,sBA/Bd;AAgCA,0BAAc,mBAhCd;AAiCA,0BAAc,kBAjCd;AAkCA,0BAAc,uBAlCd;AAmCA,0BAAc,mBAnCd;AAoCA,0BAAc,kBApCd;AAqCA,0BAAc,wBArCd;AAsCA,0BAAc,oBAtCd;AAuCA,0BAAc,kBAvCd;AAwCA,0BAAc,mBAxCd;AAyCA,0BAAc,0BAzCd;AA0CA,0BAAc,oBA1Cd;","names":[]}
|
package/dist/types/index.mjs
CHANGED
package/dist/types/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export * from './Array';\nexport * from './Builder';\nexport * from './Cache';\nexport * from './CacheAge';\nexport * from './Case';\nexport * from './Constructor';\nexport * from './Context';\nexport * from './Enum';\nexport * from './ErrorOrigin';\nexport * from './Exception';\nexport * from './Falsy';\nexport * from './Func';\nexport * from './Gateway';\nexport * from './Get';\nexport * from './Id';\nexport * from './Identity';\nexport * from './Is';\nexport * from './IsA';\nexport * from './IsDate';\nexport * from './IsEqual';\nexport * from './Json';\nexport * from './List';\nexport * from './Message';\nexport * from './Meta';\nexport * from './Nullish';\nexport * from './Number';\nexport * from './PageList';\nexport * from './Primitive';\nexport * from './Repository';\nexport * from './Result';\nexport * from './Results';\nexport * from './Sort';\nexport * from './Tag';\nexport * from './Template';\nexport * from './Text';\nexport * from './Try';\nexport * from './TypeGuard';\nexport * from './Types';\nexport * from './Uri';\nexport * from './Uuid';\nexport * from './Validatable';\nexport * from './Value';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export * from './Array';\nexport * from './Builder';\nexport * from './Cache';\nexport * from './CacheAge';\nexport * from './Case';\nexport * from './Constructor';\nexport * from './Context';\nexport * from './Enum';\nexport * from './ErrorOrigin';\nexport * from './Exception';\nexport * from './Falsy';\nexport * from './Func';\nexport * from './Gateway';\nexport * from './Get';\nexport * from './Id';\nexport * from './Identity';\nexport * from './Is';\nexport * from './IsA';\nexport * from './IsDate';\nexport * from './IsEqual';\nexport * from './Json';\nexport * from './List';\nexport * from './Message';\nexport * from './Meta';\nexport * from './Nullish';\nexport * from './Number';\nexport * from './PageList';\nexport * from './Parser';\nexport * from './Primitive';\nexport * from './Repository';\nexport * from './Result';\nexport * from './Results';\nexport * from './Sort';\nexport * from './Tag';\nexport * from './Template';\nexport * from './Text';\nexport * from './Try';\nexport * from './TypeGuard';\nexport * from './Types';\nexport * from './Uri';\nexport * from './Uuid';\nexport * from './Validatable';\nexport * from './Value';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -9,3 +9,4 @@ export type Validator = {
|
|
|
9
9
|
export declare const asResults: (subject: unknown, template: Text, options?: TemplateOptions) => Results;
|
|
10
10
|
export declare const validate: (subject?: unknown) => Results;
|
|
11
11
|
export declare const validateReject: <T>(subject: T) => Promise<T>;
|
|
12
|
+
export declare const isValid: <T>(t: T) => boolean;
|
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var Validate_exports = {};
|
|
20
20
|
__export(Validate_exports, {
|
|
21
21
|
asResults: () => asResults,
|
|
22
|
+
isValid: () => isValid,
|
|
22
23
|
validate: () => validate,
|
|
23
24
|
validateReject: () => validateReject
|
|
24
25
|
});
|
|
@@ -34,9 +35,11 @@ const validate = (subject) => (0, import_types.choose)(subject).is.not.defined(
|
|
|
34
35
|
() => (0, import_types.toResults)("Subject is not defined.")
|
|
35
36
|
).type(import_types.isEnum, (e) => e.isValid ? (0, import_types.toResults)() : asResults(e, "This is not a valid {type}.")).type(import_types.isValue, (v) => v.isValid ? (0, import_types.toResults)() : asResults(v, "This is not a valid {type}.")).type(import_types.isArray, (a) => a.map((i) => validate(i)).reduce((rs, r) => rs.add(...r.results), (0, import_types.toResults)())).type(import_types.isValidatable, (v) => constraints(v)).else((0, import_types.toResults)());
|
|
36
37
|
const validateReject = (subject) => (0, import_When.when)(subject).not.isValid.reject();
|
|
38
|
+
const isValid = (t) => validate(t).isValid;
|
|
37
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
40
|
0 && (module.exports = {
|
|
39
41
|
asResults,
|
|
42
|
+
isValid,
|
|
40
43
|
validate,
|
|
41
44
|
validateReject
|
|
42
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validation/Validate.ts"],"sourcesContent":["import {\n asString,\n choose,\n isArray,\n isEnum,\n isFunction,\n isResults,\n isValidatable,\n isValue,\n List,\n meta,\n Results,\n TemplateOptions,\n text,\n Text,\n toList,\n toName,\n toResult,\n toResults,\n tryTo,\n} from '../types';\nimport { Constraint } from './Contraints';\nimport { when } from './When';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results =>\n tryTo(() => (isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property]))\n .map(actual => [actual, v.constraint(actual)])\n .map(([actual, res]) => (isResults(res) ? res : !res ? asResults(subject, v.text, { ...v, actual }) : toResults()))\n .recover(e => asResults(subject, asString(e))).value;\n\nconst constraints = (subject?: unknown): Results =>\n tryTo(() => validators(subject))\n .map(vs => vs.mapDefined(v => runValidator(v, subject)))\n .map(res => res.reduce((rs, r) => rs.add(...r.results), toResults())).value;\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAoBO;AAEP,kBAAqB;AAId,MAAM,YAAY,CAAC,SAAkB,UAAgB,UAA2B,CAAC,UACtF,4BAAU,2BAAS,mBAAK,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAG,qBAAO,OAAO,CAAC,CAAC;AAE7E,MAAM,aAAa,CAAC,gBAClB,mBAAK,OAAO,EACT,KAAsB,YAAY,EAClC,OAAO,CAAC,MAAM,OAAO,KAAK,IAAI,EAAE,OAAG,qBAAkB,CAAC;AAE3D,MAAM,eAAe,CAAC,GAAc,gBAClC,oBAAM,UAAO,yBAAY,QAAgB,EAAE,QAAQ,CAAC,IAAK,QAAgB,EAAE,QAAQ,EAAE,IAAK,QAAgB,EAAE,QAAQ,CAAE,EACnH,IAAI,YAAU,CAAC,QAAQ,EAAE,WAAW,MAAM,CAAC,CAAC,EAC5C,IAAI,CAAC,CAAC,QAAQ,GAAG,UAAO,wBAAU,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,QAAI,wBAAU,CAAE,EACjH,QAAQ,OAAK,UAAU,aAAS,uBAAS,CAAC,CAAC,CAAC,EAAE;AAEnD,MAAM,cAAc,CAAC,gBACnB,oBAAM,MAAM,WAAW,OAAO,CAAC,EAC5B,IAAI,QAAM,GAAG,WAAW,OAAK,aAAa,GAAG,OAAO,CAAC,CAAC,EACtD,IAAI,SAAO,IAAI,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,OAAG,wBAAU,CAAC,CAAC,EAAE;AAEnE,MAAM,WAAW,CAAC,gBACvB,qBAAO,OAAO,EACX,GAAG,IAAI;AAAA,EACN,OAAK;AAAA,EACL,UAAM,wBAAU,yBAAyB;AAC3C,EACC,KAAK,qBAAQ,OAAM,EAAE,cAAU,wBAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EACzF,KAAK,sBAAS,OAAM,EAAE,cAAU,wBAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EAC1F,KAAK,sBAAS,OAAK,EAAE,IAAI,OAAK,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,OAAG,wBAAU,CAAC,CAAC,EAC/F,KAAK,4BAAe,OAAK,YAAY,CAAC,CAAC,EACvC,SAAK,wBAAU,CAAC;AAEd,MAAM,iBAAiB,CAAI,gBAA2B,kBAAK,OAAO,EAAE,IAAI,QAAQ,OAAO;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/validation/Validate.ts"],"sourcesContent":["import {\n asString,\n choose,\n isArray,\n isEnum,\n isFunction,\n isResults,\n isValidatable,\n isValue,\n List,\n meta,\n Results,\n TemplateOptions,\n text,\n Text,\n toList,\n toName,\n toResult,\n toResults,\n tryTo,\n} from '../types';\nimport { Constraint } from './Contraints';\nimport { when } from './When';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results =>\n tryTo(() => (isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property]))\n .map(actual => [actual, v.constraint(actual)])\n .map(([actual, res]) => (isResults(res) ? res : !res ? asResults(subject, v.text, { ...v, actual }) : toResults()))\n .recover(e => asResults(subject, asString(e))).value;\n\nconst constraints = (subject?: unknown): Results =>\n tryTo(() => validators(subject))\n .map(vs => vs.mapDefined(v => runValidator(v, subject)))\n .map(res => res.reduce((rs, r) => rs.add(...r.results), toResults())).value;\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n\nexport const isValid = <T>(t: T): boolean => validate(t).isValid;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAoBO;AAEP,kBAAqB;AAId,MAAM,YAAY,CAAC,SAAkB,UAAgB,UAA2B,CAAC,UACtF,4BAAU,2BAAS,mBAAK,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAG,qBAAO,OAAO,CAAC,CAAC;AAE7E,MAAM,aAAa,CAAC,gBAClB,mBAAK,OAAO,EACT,KAAsB,YAAY,EAClC,OAAO,CAAC,MAAM,OAAO,KAAK,IAAI,EAAE,OAAG,qBAAkB,CAAC;AAE3D,MAAM,eAAe,CAAC,GAAc,gBAClC,oBAAM,UAAO,yBAAY,QAAgB,EAAE,QAAQ,CAAC,IAAK,QAAgB,EAAE,QAAQ,EAAE,IAAK,QAAgB,EAAE,QAAQ,CAAE,EACnH,IAAI,YAAU,CAAC,QAAQ,EAAE,WAAW,MAAM,CAAC,CAAC,EAC5C,IAAI,CAAC,CAAC,QAAQ,GAAG,UAAO,wBAAU,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,QAAI,wBAAU,CAAE,EACjH,QAAQ,OAAK,UAAU,aAAS,uBAAS,CAAC,CAAC,CAAC,EAAE;AAEnD,MAAM,cAAc,CAAC,gBACnB,oBAAM,MAAM,WAAW,OAAO,CAAC,EAC5B,IAAI,QAAM,GAAG,WAAW,OAAK,aAAa,GAAG,OAAO,CAAC,CAAC,EACtD,IAAI,SAAO,IAAI,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,OAAG,wBAAU,CAAC,CAAC,EAAE;AAEnE,MAAM,WAAW,CAAC,gBACvB,qBAAO,OAAO,EACX,GAAG,IAAI;AAAA,EACN,OAAK;AAAA,EACL,UAAM,wBAAU,yBAAyB;AAC3C,EACC,KAAK,qBAAQ,OAAM,EAAE,cAAU,wBAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EACzF,KAAK,sBAAS,OAAM,EAAE,cAAU,wBAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EAC1F,KAAK,sBAAS,OAAK,EAAE,IAAI,OAAK,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,OAAG,wBAAU,CAAC,CAAC,EAC/F,KAAK,4BAAe,OAAK,YAAY,CAAC,CAAC,EACvC,SAAK,wBAAU,CAAC;AAEd,MAAM,iBAAiB,CAAI,gBAA2B,kBAAK,OAAO,EAAE,IAAI,QAAQ,OAAO;AAEvF,MAAM,UAAU,CAAI,MAAkB,SAAS,CAAC,EAAE;","names":[]}
|
|
@@ -26,8 +26,10 @@ const validate = (subject) => choose(subject).is.not.defined(
|
|
|
26
26
|
() => toResults("Subject is not defined.")
|
|
27
27
|
).type(isEnum, (e) => e.isValid ? toResults() : asResults(e, "This is not a valid {type}.")).type(isValue, (v) => v.isValid ? toResults() : asResults(v, "This is not a valid {type}.")).type(isArray, (a) => a.map((i) => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults())).type(isValidatable, (v) => constraints(v)).else(toResults());
|
|
28
28
|
const validateReject = (subject) => when(subject).not.isValid.reject();
|
|
29
|
+
const isValid = (t) => validate(t).isValid;
|
|
29
30
|
export {
|
|
30
31
|
asResults,
|
|
32
|
+
isValid,
|
|
31
33
|
validate,
|
|
32
34
|
validateReject
|
|
33
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validation/Validate.ts"],"sourcesContent":["import {\n asString,\n choose,\n isArray,\n isEnum,\n isFunction,\n isResults,\n isValidatable,\n isValue,\n List,\n meta,\n Results,\n TemplateOptions,\n text,\n Text,\n toList,\n toName,\n toResult,\n toResults,\n tryTo,\n} from '../types';\nimport { Constraint } from './Contraints';\nimport { when } from './When';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results =>\n tryTo(() => (isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property]))\n .map(actual => [actual, v.constraint(actual)])\n .map(([actual, res]) => (isResults(res) ? res : !res ? asResults(subject, v.text, { ...v, actual }) : toResults()))\n .recover(e => asResults(subject, asString(e))).value;\n\nconst constraints = (subject?: unknown): Results =>\n tryTo(() => validators(subject))\n .map(vs => vs.mapDefined(v => runValidator(v, subject)))\n .map(res => res.reduce((rs, r) => rs.add(...r.results), toResults())).value;\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAGA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,YAAY;AAId,MAAM,YAAY,CAAC,SAAkB,UAAgB,UAA2B,CAAC,MACtF,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO,OAAO,CAAC,CAAC;AAE7E,MAAM,aAAa,CAAC,YAClB,KAAK,OAAO,EACT,KAAsB,YAAY,EAClC,OAAO,CAAC,MAAM,OAAO,KAAK,IAAI,EAAE,GAAG,OAAkB,CAAC;AAE3D,MAAM,eAAe,CAAC,GAAc,YAClC,MAAM,MAAO,WAAY,QAAgB,EAAE,QAAQ,CAAC,IAAK,QAAgB,EAAE,QAAQ,EAAE,IAAK,QAAgB,EAAE,QAAQ,CAAE,EACnH,IAAI,YAAU,CAAC,QAAQ,EAAE,WAAW,MAAM,CAAC,CAAC,EAC5C,IAAI,CAAC,CAAC,QAAQ,GAAG,MAAO,UAAU,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,UAAU,CAAE,EACjH,QAAQ,OAAK,UAAU,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE;AAEnD,MAAM,cAAc,CAAC,YACnB,MAAM,MAAM,WAAW,OAAO,CAAC,EAC5B,IAAI,QAAM,GAAG,WAAW,OAAK,aAAa,GAAG,OAAO,CAAC,CAAC,EACtD,IAAI,SAAO,IAAI,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,EAAE;AAEnE,MAAM,WAAW,CAAC,YACvB,OAAO,OAAO,EACX,GAAG,IAAI;AAAA,EACN,OAAK;AAAA,EACL,MAAM,UAAU,yBAAyB;AAC3C,EACC,KAAK,QAAQ,OAAM,EAAE,UAAU,UAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EACzF,KAAK,SAAS,OAAM,EAAE,UAAU,UAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EAC1F,KAAK,SAAS,OAAK,EAAE,IAAI,OAAK,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,EAC/F,KAAK,eAAe,OAAK,YAAY,CAAC,CAAC,EACvC,KAAK,UAAU,CAAC;AAEd,MAAM,iBAAiB,CAAI,YAA2B,KAAK,OAAO,EAAE,IAAI,QAAQ,OAAO;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/validation/Validate.ts"],"sourcesContent":["import {\n asString,\n choose,\n isArray,\n isEnum,\n isFunction,\n isResults,\n isValidatable,\n isValue,\n List,\n meta,\n Results,\n TemplateOptions,\n text,\n Text,\n toList,\n toName,\n toResult,\n toResults,\n tryTo,\n} from '../types';\nimport { Constraint } from './Contraints';\nimport { when } from './When';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results =>\n tryTo(() => (isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property]))\n .map(actual => [actual, v.constraint(actual)])\n .map(([actual, res]) => (isResults(res) ? res : !res ? asResults(subject, v.text, { ...v, actual }) : toResults()))\n .recover(e => asResults(subject, asString(e))).value;\n\nconst constraints = (subject?: unknown): Results =>\n tryTo(() => validators(subject))\n .map(vs => vs.mapDefined(v => runValidator(v, subject)))\n .map(res => res.reduce((rs, r) => rs.add(...r.results), toResults())).value;\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {type}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {type}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n\nexport const isValid = <T>(t: T): boolean => validate(t).isValid;\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAGA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,YAAY;AAId,MAAM,YAAY,CAAC,SAAkB,UAAgB,UAA2B,CAAC,MACtF,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO,OAAO,CAAC,CAAC;AAE7E,MAAM,aAAa,CAAC,YAClB,KAAK,OAAO,EACT,KAAsB,YAAY,EAClC,OAAO,CAAC,MAAM,OAAO,KAAK,IAAI,EAAE,GAAG,OAAkB,CAAC;AAE3D,MAAM,eAAe,CAAC,GAAc,YAClC,MAAM,MAAO,WAAY,QAAgB,EAAE,QAAQ,CAAC,IAAK,QAAgB,EAAE,QAAQ,EAAE,IAAK,QAAgB,EAAE,QAAQ,CAAE,EACnH,IAAI,YAAU,CAAC,QAAQ,EAAE,WAAW,MAAM,CAAC,CAAC,EAC5C,IAAI,CAAC,CAAC,QAAQ,GAAG,MAAO,UAAU,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,UAAU,CAAE,EACjH,QAAQ,OAAK,UAAU,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE;AAEnD,MAAM,cAAc,CAAC,YACnB,MAAM,MAAM,WAAW,OAAO,CAAC,EAC5B,IAAI,QAAM,GAAG,WAAW,OAAK,aAAa,GAAG,OAAO,CAAC,CAAC,EACtD,IAAI,SAAO,IAAI,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,EAAE;AAEnE,MAAM,WAAW,CAAC,YACvB,OAAO,OAAO,EACX,GAAG,IAAI;AAAA,EACN,OAAK;AAAA,EACL,MAAM,UAAU,yBAAyB;AAC3C,EACC,KAAK,QAAQ,OAAM,EAAE,UAAU,UAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EACzF,KAAK,SAAS,OAAM,EAAE,UAAU,UAAU,IAAI,UAAU,GAAG,6BAA6B,CAAE,EAC1F,KAAK,SAAS,OAAK,EAAE,IAAI,OAAK,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,EAC/F,KAAK,eAAe,OAAK,YAAY,CAAC,CAAC,EACvC,KAAK,UAAU,CAAC;AAEd,MAAM,iBAAiB,CAAI,YAA2B,KAAK,OAAO,EAAE,IAAI,QAAQ,OAAO;AAEvF,MAAM,UAAU,CAAI,MAAkB,SAAS,CAAC,EAAE;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.17.1",
|
|
4
4
|
"description": "Straightforward library for building domain-driven microservice architectures",
|
|
5
5
|
"author": "Sander Hoogendoorn",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@thisisagile/easy-test": "15.
|
|
36
|
+
"@thisisagile/easy-test": "15.17.1",
|
|
37
37
|
"@types/form-urlencoded": "^4.4.0",
|
|
38
38
|
"@types/jsonwebtoken": "^9.0.2",
|
|
39
39
|
"@types/luxon": "3.4.2",
|
package/src/resources/Route.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type Routes = { route: Uri; middleware: RequestHandler[]; endpoints: List
|
|
|
19
19
|
const toRoute = (endpoint: Endpoint, requires: RouteRequires, verb?: Verb, middleware?: RequestHandler[]): Optional<Route> =>
|
|
20
20
|
tryTo(verb)
|
|
21
21
|
.is.defined()
|
|
22
|
-
.map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] } as Route)
|
|
22
|
+
.map(verb => ({ verb, endpoint, requires, middleware: middleware ?? [] }) as Route)
|
|
23
23
|
.orElse();
|
|
24
24
|
|
|
25
25
|
class Router implements Routes {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Get, ofGet } from './Get';
|
|
2
|
+
import { isDefined, isEmpty, isIn, isObject, isString } from './Is';
|
|
3
|
+
import { isValid } from '../validation';
|
|
4
|
+
import { Constructor } from './Constructor';
|
|
5
|
+
import { toArray } from './Array';
|
|
6
|
+
|
|
7
|
+
export class Parser<T, V> {
|
|
8
|
+
if = {
|
|
9
|
+
empty: <U>(pred?: Get<U, T>): this => this.evaluate(isEmpty, pred),
|
|
10
|
+
defined: <U>(pred?: Get<U, T>): this => this.evaluate(isDefined, pred),
|
|
11
|
+
valid: <U>(pred?: Get<U, T>): this => this.evaluate(isValid, pred),
|
|
12
|
+
in: (...items: T[]): this => this.evaluate(() => isIn(this.value, toArray(...items))),
|
|
13
|
+
is: {
|
|
14
|
+
object: <U>(pred?: Get<U, T>): this => this.evaluate(isObject, pred),
|
|
15
|
+
string: <U>(pred?: Get<U, T>): this => this.evaluate(isString, pred),
|
|
16
|
+
instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => this.value instanceof c, pred),
|
|
17
|
+
},
|
|
18
|
+
not: {
|
|
19
|
+
empty: <U>(pred?: Get<U, T>): this => this.evaluateNot(isEmpty, pred),
|
|
20
|
+
defined: <U>(pred?: Get<U, T>): this => this.evaluateNot(isDefined, pred),
|
|
21
|
+
valid: <U>(pred?: Get<U, T>): this => this.evaluateNot(isValid, pred),
|
|
22
|
+
isObject: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),
|
|
23
|
+
in: (...items: T[]): this => this.evaluate(() => !isIn(this.value, toArray(...items))),
|
|
24
|
+
is: {
|
|
25
|
+
object: <U>(pred?: Get<U, T>): this => this.evaluateNot(isObject, pred),
|
|
26
|
+
string: <U>(pred?: Get<U, T>): this => this.evaluateNot(isString, pred),
|
|
27
|
+
instance: <U>(c: Constructor<U>, pred?: Get<U, T>): this => this.evaluate(() => !(this.value instanceof c), pred),
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
constructor(protected value: T, protected f: Get<V, T>, protected alt: Get<V, T>, readonly valid = true) {}
|
|
33
|
+
|
|
34
|
+
protected evaluate<U>(meta: Get<boolean>, pred?: Get<U, T>): this {
|
|
35
|
+
return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(
|
|
36
|
+
this.value,
|
|
37
|
+
this.f,
|
|
38
|
+
this.alt,
|
|
39
|
+
ofGet(meta, pred ? ofGet(pred, this.value) : this.value)
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected evaluateNot<U>(meta: Get<boolean>, pred?: Get<U, T>): this {
|
|
44
|
+
return new (this.constructor as new (value: T, f: Get<V, T>, alt: Get<V, T>, allow?: boolean) => this)(
|
|
45
|
+
this.value,
|
|
46
|
+
this.f,
|
|
47
|
+
this.alt,
|
|
48
|
+
!ofGet(meta, pred ? ofGet(pred, this.value) : this.value)
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
package/src/types/index.ts
CHANGED