@ne1410s/codl 0.1.174 → 0.1.176
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/README.md +3 -3
- package/dist/decorate/interception.d.ts +3 -2
- package/dist/decorate/interception.d.ts.map +1 -0
- package/dist/decorate/interception.js +50 -0
- package/dist/decorate/interception.js.map +1 -0
- package/dist/decorate/metadata.d.ts +2 -1
- package/dist/decorate/metadata.d.ts.map +1 -0
- package/dist/decorate/metadata.js +33 -0
- package/dist/decorate/metadata.js.map +1 -0
- package/dist/decorate/type.d.ts +2 -1
- package/dist/decorate/type.d.ts.map +1 -0
- package/dist/decorate/type.js +22 -0
- package/dist/decorate/type.js.map +1 -0
- package/dist/decorate/validation.d.ts +2 -1
- package/dist/decorate/validation.d.ts.map +1 -0
- package/dist/decorate/validation.js +147 -0
- package/dist/decorate/validation.js.map +1 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mdkeys.d.ts +1 -0
- package/dist/mdkeys.d.ts.map +1 -0
- package/dist/mdkeys.js +23 -0
- package/dist/mdkeys.js.map +1 -0
- package/dist/reflect/metadata.d.ts +2 -1
- package/dist/reflect/metadata.d.ts.map +1 -0
- package/dist/reflect/metadata.js +33 -0
- package/dist/reflect/metadata.js.map +1 -0
- package/dist/reflect/type/models.d.ts +1 -0
- package/dist/reflect/type/models.d.ts.map +1 -0
- package/dist/reflect/type/models.js +2 -0
- package/dist/reflect/type/models.js.map +1 -0
- package/dist/reflect/type/parsers/boolean.d.ts +3 -2
- package/dist/reflect/type/parsers/boolean.d.ts.map +1 -0
- package/dist/reflect/type/parsers/boolean.js +8 -0
- package/dist/reflect/type/parsers/boolean.js.map +1 -0
- package/dist/reflect/type/parsers/date.d.ts +3 -2
- package/dist/reflect/type/parsers/date.d.ts.map +1 -0
- package/dist/reflect/type/parsers/date.js +10 -0
- package/dist/reflect/type/parsers/date.js.map +1 -0
- package/dist/reflect/type/parsers/integer.d.ts +3 -2
- package/dist/reflect/type/parsers/integer.d.ts.map +1 -0
- package/dist/reflect/type/parsers/integer.js +6 -0
- package/dist/reflect/type/parsers/integer.js.map +1 -0
- package/dist/reflect/type/parsers/number.d.ts +3 -2
- package/dist/reflect/type/parsers/number.d.ts.map +1 -0
- package/dist/reflect/type/parsers/number.js +6 -0
- package/dist/reflect/type/parsers/number.js.map +1 -0
- package/dist/reflect/type/type.d.ts +3 -2
- package/dist/reflect/type/type.d.ts.map +1 -0
- package/dist/reflect/type/type.js +43 -0
- package/dist/reflect/type/type.js.map +1 -0
- package/dist/reflect/validation/models.d.ts +2 -1
- package/dist/reflect/validation/models.d.ts.map +1 -0
- package/dist/reflect/validation/models.js +2 -0
- package/dist/reflect/validation/models.js.map +1 -0
- package/dist/reflect/validation/validation.d.ts +3 -2
- package/dist/reflect/validation/validation.d.ts.map +1 -0
- package/dist/reflect/validation/validation.js +179 -0
- package/dist/reflect/validation/validation.js.map +1 -0
- package/dist/reflect/validation/validators/custom.d.ts +2 -1
- package/dist/reflect/validation/validators/custom.d.ts.map +1 -0
- package/dist/reflect/validation/validators/custom.js +19 -0
- package/dist/reflect/validation/validators/custom.js.map +1 -0
- package/dist/reflect/validation/validators/forbidden.d.ts +2 -1
- package/dist/reflect/validation/validators/forbidden.d.ts.map +1 -0
- package/dist/reflect/validation/validators/forbidden.js +18 -0
- package/dist/reflect/validation/validators/forbidden.js.map +1 -0
- package/dist/reflect/validation/validators/length-range.d.ts +2 -1
- package/dist/reflect/validation/validators/length-range.d.ts.map +1 -0
- package/dist/reflect/validation/validators/length-range.js +30 -0
- package/dist/reflect/validation/validators/length-range.js.map +1 -0
- package/dist/reflect/validation/validators/options.d.ts +2 -1
- package/dist/reflect/validation/validators/options.d.ts.map +1 -0
- package/dist/reflect/validation/validators/options.js +21 -0
- package/dist/reflect/validation/validators/options.js.map +1 -0
- package/dist/reflect/validation/validators/range.d.ts +2 -1
- package/dist/reflect/validation/validators/range.d.ts.map +1 -0
- package/dist/reflect/validation/validators/range.js +37 -0
- package/dist/reflect/validation/validators/range.js.map +1 -0
- package/dist/reflect/validation/validators/regex.d.ts +2 -1
- package/dist/reflect/validation/validators/regex.d.ts.map +1 -0
- package/dist/reflect/validation/validators/regex.js +21 -0
- package/dist/reflect/validation/validators/regex.js.map +1 -0
- package/dist/reflect/validation/validators/required.d.ts +2 -1
- package/dist/reflect/validation/validators/required.d.ts.map +1 -0
- package/dist/reflect/validation/validators/required.js +18 -0
- package/dist/reflect/validation/validators/required.js.map +1 -0
- package/dist/reflect/validation/validators/type.d.ts +2 -1
- package/dist/reflect/validation/validators/type.d.ts.map +1 -0
- package/dist/reflect/validation/validators/type.js +22 -0
- package/dist/reflect/validation/validators/type.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -52
- package/dist/ne14_codl.cjs.min.js +0 -807
- package/dist/ne14_codl.esm.min.js +0 -799
- package/dist/ne14_codl.umd.min.js +0 -811
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/reflect/type/type.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C,8BAAsB,WAAW;IAC/B;;;;;;OAMG;IACH,OAAc,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,CAMpE;IAED,wEAAwE;IACxE,OAAc,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAE5D;IAED,4CAA4C;IAC5C,OAAc,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAajD;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { isProvided } from '../../types.js';
|
|
3
|
+
import { ValidationKey } from '../../mdkeys.js';
|
|
4
|
+
import { BooleanParser } from './parsers/boolean.js';
|
|
5
|
+
import { DateParser } from './parsers/date.js';
|
|
6
|
+
import { IntegerParser } from './parsers/integer.js';
|
|
7
|
+
import { NumberParser } from './parsers/number.js';
|
|
8
|
+
export class ReflectType {
|
|
9
|
+
/**
|
|
10
|
+
* Parses provided according to its meta type. If no type found, the original
|
|
11
|
+
* value is returned, otherwise a value is only returned in parseable cases.
|
|
12
|
+
* @param target The object.
|
|
13
|
+
* @param key The property key.
|
|
14
|
+
* @param value Optional value override to parse instead.
|
|
15
|
+
*/
|
|
16
|
+
static parse(target, key, value) {
|
|
17
|
+
value = value == undefined ? target[key] : value;
|
|
18
|
+
if (isProvided(value)) {
|
|
19
|
+
const type = this.getType(target, key);
|
|
20
|
+
return type ? this.getParser(type)(value) : value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Gets the meta type of that identified by the supplied parameters. */
|
|
24
|
+
static getType(target, key) {
|
|
25
|
+
return Reflect.getMetadata(ValidationKey.TYPE, target, key);
|
|
26
|
+
}
|
|
27
|
+
/** Gets parser for supported meta types. */
|
|
28
|
+
static getParser(type) {
|
|
29
|
+
switch (type) {
|
|
30
|
+
case 'boolean':
|
|
31
|
+
return BooleanParser;
|
|
32
|
+
case 'date':
|
|
33
|
+
return DateParser;
|
|
34
|
+
case 'integer':
|
|
35
|
+
return IntegerParser;
|
|
36
|
+
case 'number':
|
|
37
|
+
return NumberParser;
|
|
38
|
+
default:
|
|
39
|
+
throw new RangeError(`No parser implemented for ${type}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/reflect/type/type.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAkB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAgB,WAAW;IAC/B;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,MAAc,EAAE,GAAc,EAAE,KAAW;QAC7D,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,CAAE,MAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpD,CAAC;IACH,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,GAAc;QAClD,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,4CAA4C;IACrC,MAAM,CAAC,SAAS,CAAC,IAAY;QAClC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,aAAa,CAAC;YACvB,KAAK,MAAM;gBACT,OAAO,UAAU,CAAC;YACpB,KAAK,SAAS;gBACZ,OAAO,aAAa,CAAC;YACvB,KAAK,QAAQ;gBACX,OAAO,YAAY,CAAC;YACtB;gBACE,MAAM,IAAI,UAAU,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValidationKey } from '../../mdkeys';
|
|
1
|
+
import { ValidationKey } from '../../mdkeys.js';
|
|
2
2
|
export interface ValidatorDef {
|
|
3
3
|
fn: Validator;
|
|
4
4
|
test: string;
|
|
@@ -37,3 +37,4 @@ export interface ValidationSummary {
|
|
|
37
37
|
valid: boolean;
|
|
38
38
|
errors?: Record<string, string[]>;
|
|
39
39
|
}
|
|
40
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/reflect/validation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,SAAS,EAAE,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,YAAY,CAAC;AAEvF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/reflect/validation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { Ctor } from '../../types';
|
|
3
|
-
import { ValidationSummary } from './models';
|
|
2
|
+
import type { Ctor } from '../../types.js';
|
|
3
|
+
import type { ValidationSummary } from './models.js';
|
|
4
4
|
/** Reflects validation decoration. */
|
|
5
5
|
export declare abstract class ReflectValidation {
|
|
6
6
|
/**
|
|
@@ -25,3 +25,4 @@ export declare abstract class ReflectValidation {
|
|
|
25
25
|
/** Summarises a sequence of results. */
|
|
26
26
|
private static summarise;
|
|
27
27
|
}
|
|
28
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/reflect/validation/validation.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,aAAa,CAAC;AAUrB,sCAAsC;AACtC,8BAAsB,iBAAiB;IACrC;;;;OAIG;IACH,OAAc,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAW1F;IAED;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,mDAAmD;IACnD,OAAO,CAAC,MAAM,CAAC,YAAY;IA8B3B,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA4DlC,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,eAAe;IAoB9B,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,SAAS;CAiBzB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { ValidationKey, MetadataKey } from '../../mdkeys.js';
|
|
3
|
+
import { RequiredValidator } from './validators/required.js';
|
|
4
|
+
import { RegexValidator } from './validators/regex.js';
|
|
5
|
+
import { RangeValidator } from './validators/range.js';
|
|
6
|
+
import { LengthRangeValidator } from './validators/length-range.js';
|
|
7
|
+
import { TypeValidator } from './validators/type.js';
|
|
8
|
+
import { CustValidator } from './validators/custom.js';
|
|
9
|
+
import { ForbiddenValidator } from './validators/forbidden.js';
|
|
10
|
+
import { OptionsValidator } from './validators/options.js';
|
|
11
|
+
/** Reflects validation decoration. */
|
|
12
|
+
export class ReflectValidation {
|
|
13
|
+
/**
|
|
14
|
+
* Performs validation - for objects with decorated members.
|
|
15
|
+
* @param target The object to validate.
|
|
16
|
+
* @param type The strong type (to supply prototype data).
|
|
17
|
+
*/
|
|
18
|
+
static validate(target, type) {
|
|
19
|
+
const proto = type?.prototype || Object.getPrototypeOf(target || {});
|
|
20
|
+
if (!proto)
|
|
21
|
+
throw new TypeError('No type data could be found');
|
|
22
|
+
const checks = this.getValidators();
|
|
23
|
+
const rawTests = this.getTestInstructions(checks, proto, target);
|
|
24
|
+
const testPlan = this.prepareTestPlan(rawTests);
|
|
25
|
+
const results = this.executeTestPlan(testPlan);
|
|
26
|
+
const retVal = this.summarise(results);
|
|
27
|
+
return retVal;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets all available tests and their associated validator. There is expected
|
|
31
|
+
* duplication where one validator is used to perform multiple tests.
|
|
32
|
+
*/
|
|
33
|
+
static getValidators() {
|
|
34
|
+
return Object.keys(ValidationKey).map((test) => {
|
|
35
|
+
const meta = ValidationKey[test];
|
|
36
|
+
const fn = ReflectValidation.getValidator(meta);
|
|
37
|
+
return { fn, test, meta };
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Gets the validator function for a given key. */
|
|
41
|
+
static getValidator(key) {
|
|
42
|
+
switch (key) {
|
|
43
|
+
case ValidationKey.FORBIDDEN:
|
|
44
|
+
return ForbiddenValidator;
|
|
45
|
+
case ValidationKey.MIN_LENGTH:
|
|
46
|
+
case ValidationKey.MAX_LENGTH:
|
|
47
|
+
return LengthRangeValidator;
|
|
48
|
+
case ValidationKey.OPTIONS:
|
|
49
|
+
return OptionsValidator;
|
|
50
|
+
case ValidationKey.MIN:
|
|
51
|
+
case ValidationKey.MAX:
|
|
52
|
+
return RangeValidator;
|
|
53
|
+
case ValidationKey.REQUIRED:
|
|
54
|
+
return RequiredValidator;
|
|
55
|
+
case ValidationKey.REGEX:
|
|
56
|
+
return RegexValidator;
|
|
57
|
+
case ValidationKey.TYPE:
|
|
58
|
+
return TypeValidator;
|
|
59
|
+
case ValidationKey.CUSTOM:
|
|
60
|
+
return CustValidator;
|
|
61
|
+
default:
|
|
62
|
+
throw new RangeError(`No validator implemented for ${key}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Prepares a sequence of validation instructions. */
|
|
66
|
+
static getTestInstructions(allChecks, proto, trg, pfx = '') {
|
|
67
|
+
const fnScorer = (ins) => {
|
|
68
|
+
return ins.fn === RequiredValidator ? 3 : ins.fn === ForbiddenValidator ? 2 : ins.fn === TypeValidator ? 1 : 0;
|
|
69
|
+
};
|
|
70
|
+
return Reflect.getMetadataKeys(proto)
|
|
71
|
+
.map((k) => `${k}`)
|
|
72
|
+
.reduce((acc, cur) => {
|
|
73
|
+
const valDef = allChecks.filter((dg) => cur.indexOf(dg.meta + ':') === 0)[0];
|
|
74
|
+
if (valDef) {
|
|
75
|
+
const key = cur.replace(valDef.meta + ':', '');
|
|
76
|
+
const navkey = pfx ? `${pfx}.${key}` : key;
|
|
77
|
+
const prior = acc.filter((a) => a.navkey === navkey && a.fn === valDef.fn)[0];
|
|
78
|
+
if (prior) {
|
|
79
|
+
prior.tests.push(valDef.test);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
acc.push({
|
|
83
|
+
navkey,
|
|
84
|
+
key,
|
|
85
|
+
trg,
|
|
86
|
+
proto,
|
|
87
|
+
fn: valDef.fn,
|
|
88
|
+
tests: [valDef.test],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if (cur.indexOf(`${MetadataKey.MODEL}:`) === 0) {
|
|
93
|
+
const subkey = cur.replace(`${MetadataKey.MODEL}:`, '');
|
|
94
|
+
const subproto = Reflect.getMetadata(cur, proto).prototype;
|
|
95
|
+
const subobj = (trg || {})[subkey];
|
|
96
|
+
if (Array.isArray(subobj)) {
|
|
97
|
+
subobj.forEach((subitem, i) => {
|
|
98
|
+
const subpfx = pfx ? `${pfx}.${subkey}[${i}]` : `${subkey}[${i}]`;
|
|
99
|
+
acc.push(...ReflectValidation.getTestInstructions(allChecks, subproto, subitem || {}, subpfx));
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else if (subobj) {
|
|
103
|
+
const subpfx = pfx ? `${pfx}.${subkey}` : subkey;
|
|
104
|
+
acc.push(...ReflectValidation.getTestInstructions(allChecks, subproto, subobj, subpfx));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return acc;
|
|
108
|
+
}, [])
|
|
109
|
+
.sort((a, b) => {
|
|
110
|
+
// sort by: depth > objname > keyname > validator
|
|
111
|
+
const aNesting = a.navkey.split('.').length;
|
|
112
|
+
const bNesting = b.navkey.split('.').length;
|
|
113
|
+
if (aNesting > bNesting)
|
|
114
|
+
return 1;
|
|
115
|
+
else if (aNesting < bNesting)
|
|
116
|
+
return -1;
|
|
117
|
+
else {
|
|
118
|
+
if (a.navkey > b.navkey)
|
|
119
|
+
return 1;
|
|
120
|
+
else if (a.navkey < b.navkey)
|
|
121
|
+
return -1;
|
|
122
|
+
return fnScorer(b) - fnScorer(a);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/** Reduces a full set of instructions into a condensed test plan. */
|
|
127
|
+
static prepareTestPlan(instr) {
|
|
128
|
+
return instr.reduce((acc, cur) => {
|
|
129
|
+
const lastDot = cur.navkey.lastIndexOf('.');
|
|
130
|
+
const objKey = lastDot === -1 ? '' : cur.navkey.substring(0, lastDot);
|
|
131
|
+
const priorObj = acc.filter((a) => a.navkey === objKey)[0];
|
|
132
|
+
const workObj = priorObj || {
|
|
133
|
+
navkey: objKey,
|
|
134
|
+
proto: cur.proto,
|
|
135
|
+
trg: cur.trg,
|
|
136
|
+
props: [],
|
|
137
|
+
};
|
|
138
|
+
const priorProp = workObj.props.filter((p) => p.key === cur.key)[0];
|
|
139
|
+
const workProp = priorProp || { key: cur.key, navkey: cur.navkey, fns: [] };
|
|
140
|
+
workProp.fns.push(cur.fn);
|
|
141
|
+
if (!priorProp)
|
|
142
|
+
workObj.props.push(workProp);
|
|
143
|
+
if (!priorObj)
|
|
144
|
+
acc.push(workObj);
|
|
145
|
+
return acc;
|
|
146
|
+
}, []);
|
|
147
|
+
}
|
|
148
|
+
/** Executes test plan, mapping to a result. */
|
|
149
|
+
static executeTestPlan(tests) {
|
|
150
|
+
return tests.reduce((acc, cur) => {
|
|
151
|
+
cur.props.forEach((p) => {
|
|
152
|
+
for (let i = 0; i < p.fns.length; i++) {
|
|
153
|
+
const output = p.fns[i](cur.trg, p.key, cur.proto);
|
|
154
|
+
acc.push({ ...output, navkey: p.navkey });
|
|
155
|
+
if (!output.valid &&
|
|
156
|
+
(p.fns[i] === RequiredValidator || p.fns[i] === ForbiddenValidator || p.fns[i] === TypeValidator)) {
|
|
157
|
+
break; // stop if we've failed a terminating test
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return acc;
|
|
162
|
+
}, []);
|
|
163
|
+
}
|
|
164
|
+
/** Summarises a sequence of results. */
|
|
165
|
+
static summarise(results) {
|
|
166
|
+
const retVal = { valid: results.every((r) => r.valid) };
|
|
167
|
+
if (!retVal.valid) {
|
|
168
|
+
retVal.errors = results
|
|
169
|
+
.filter((r) => !r.valid)
|
|
170
|
+
.reduce((acc, cur) => {
|
|
171
|
+
acc[cur.navkey] = acc[cur.navkey] || [];
|
|
172
|
+
acc[cur.navkey]?.push(cur.message);
|
|
173
|
+
return acc;
|
|
174
|
+
}, {});
|
|
175
|
+
}
|
|
176
|
+
return retVal;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/reflect/validation/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/custom.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,wCAAwC;AACxC,eAAO,MAAM,aAAa,EAAE,SAgB3B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
2
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
3
|
+
/** Validates with a custom function. */
|
|
4
|
+
export const CustValidator = (trg, key, proto) => {
|
|
5
|
+
const value = trg[key];
|
|
6
|
+
const retVal = { key, value, valid: true };
|
|
7
|
+
const fn = Reflect.getMetadata(ValidationKey.CUSTOM, proto, key);
|
|
8
|
+
const result = fn(value, trg, proto);
|
|
9
|
+
const hasCustomErrorMessage = typeof result === 'string' && result.length != 0;
|
|
10
|
+
if (hasCustomErrorMessage)
|
|
11
|
+
retVal.message = result;
|
|
12
|
+
else if (result === false) {
|
|
13
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
14
|
+
retVal.message = `${name} is invalid`;
|
|
15
|
+
}
|
|
16
|
+
retVal.valid = !retVal.message;
|
|
17
|
+
return retVal;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=custom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/custom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC1D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAoB,CAAC;IACpF,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,qBAAqB,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAE/E,IAAI,qBAAqB;QAAE,MAAM,CAAC,OAAO,GAAG,MAAgB,CAAC;SACxD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,GAAG,GAAG,IAAI,aAAa,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forbidden.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/forbidden.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,EAAE,SAchC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
4
|
+
/** Validates forbidden items. Only null, undefined and empty strings are ok. */
|
|
5
|
+
export const ForbiddenValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (isProvided(value)) {
|
|
9
|
+
const forbidden = Reflect.getMetadata(ValidationKey.FORBIDDEN, proto, key) === true;
|
|
10
|
+
if (forbidden) {
|
|
11
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
12
|
+
retVal.message = `${name} is forbidden`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
retVal.valid = !retVal.message;
|
|
16
|
+
return retVal;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=forbidden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forbidden.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/forbidden.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC/D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACpF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,GAAG,IAAI,eAAe,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-range.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/length-range.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,EAAE,SA6BlC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
4
|
+
/** Validates string / array length are within specified range. */
|
|
5
|
+
export const LengthRangeValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (isProvided(value)) {
|
|
9
|
+
const minLength = Reflect.getMetadata(ValidationKey.MIN_LENGTH, proto, key);
|
|
10
|
+
const maxLength = Reflect.getMetadata(ValidationKey.MAX_LENGTH, proto, key);
|
|
11
|
+
const hasMinLen = isProvided(minLength);
|
|
12
|
+
const hasMaxLen = isProvided(maxLength);
|
|
13
|
+
const minOk = !hasMinLen || value.length >= minLength;
|
|
14
|
+
const maxOk = !hasMaxLen || value.length <= maxLength;
|
|
15
|
+
if (!minOk || !maxOk) {
|
|
16
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
17
|
+
const noun = typeof value === 'string' ? 'character' : 'item';
|
|
18
|
+
const pluraliser = value.length === 1 ? '' : 's';
|
|
19
|
+
retVal.message =
|
|
20
|
+
hasMinLen && hasMaxLen
|
|
21
|
+
? `${name} must contain between ${minLength} and ${maxLength} ${noun}s`
|
|
22
|
+
: hasMinLen
|
|
23
|
+
? `${name} cannot contain fewer than ${minLength} ${noun}${pluraliser}`
|
|
24
|
+
: `${name} cannot contain more than ${maxLength} ${noun}${pluraliser}`;
|
|
25
|
+
}
|
|
26
|
+
retVal.valid = !retVal.message;
|
|
27
|
+
}
|
|
28
|
+
return retVal;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=length-range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-range.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/length-range.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IACjE,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;QACtD,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;QAEtD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,MAAM,CAAC,OAAO;gBACZ,SAAS,IAAI,SAAS;oBACpB,CAAC,CAAC,GAAG,IAAI,yBAAyB,SAAS,QAAQ,SAAS,IAAI,IAAI,GAAG;oBACvE,CAAC,CAAC,SAAS;wBACT,CAAC,CAAC,GAAG,IAAI,8BAA8B,SAAS,IAAI,IAAI,GAAG,UAAU,EAAE;wBACvE,CAAC,CAAC,GAAG,IAAI,6BAA6B,SAAS,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;QAC/E,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,SAkB9B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
4
|
+
/** Validates the member value is contained within predefined options. */
|
|
5
|
+
export const OptionsValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (isProvided(value)) {
|
|
9
|
+
const options = Reflect.getMetadata(ValidationKey.OPTIONS, proto, key);
|
|
10
|
+
const isArray = Array.isArray(value);
|
|
11
|
+
const tests = isArray ? value : [value];
|
|
12
|
+
const allOk = tests.every((test) => options.indexOf(test) !== -1);
|
|
13
|
+
if (!allOk) {
|
|
14
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
15
|
+
retVal.message = isArray ? `${name} contains an invalid option` : `${name} is an invalid option`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
retVal.valid = !retVal.message;
|
|
19
|
+
return retVal;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAU,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAU,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC,CAAC,GAAG,IAAI,uBAAuB,CAAC;QACnG,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/range.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,2CAA2C;AAC3C,eAAO,MAAM,cAAc,EAAE,SAmC5B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectType } from '../../type/type.js';
|
|
4
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
5
|
+
/** Validates values are within a range. */
|
|
6
|
+
export const RangeValidator = (trg, key, proto) => {
|
|
7
|
+
const value = trg[key];
|
|
8
|
+
const retVal = { key, value, valid: true };
|
|
9
|
+
if (isProvided(value)) {
|
|
10
|
+
const min = Reflect.getMetadata(ValidationKey.MIN, proto, key);
|
|
11
|
+
const max = Reflect.getMetadata(ValidationKey.MAX, proto, key);
|
|
12
|
+
const hasMin = isProvided(min);
|
|
13
|
+
const hasMax = isProvided(max);
|
|
14
|
+
const isArray = Array.isArray(value);
|
|
15
|
+
const tests = isArray ? value : [value];
|
|
16
|
+
const allOk = tests.every((test) => (!hasMin || test >= min) && (!hasMax || test <= max));
|
|
17
|
+
if (!allOk) {
|
|
18
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
19
|
+
const fmtMin = hasMin ? ReflectMetadata.getFormatted(proto, key, min) : min;
|
|
20
|
+
const fmtMax = hasMax ? ReflectMetadata.getFormatted(proto, key, max) : max;
|
|
21
|
+
const isDate = ReflectType.getType(proto, key) === 'date';
|
|
22
|
+
const compareLT = isDate ? 'before' : 'less than';
|
|
23
|
+
const compareGT = isDate ? 'after' : 'greater than';
|
|
24
|
+
const rangeImperative = isArray ? 'have all values' : 'be';
|
|
25
|
+
const boundImperative = isArray ? 'have a value' : 'be';
|
|
26
|
+
retVal.message =
|
|
27
|
+
hasMin && hasMax
|
|
28
|
+
? `${name} must ${rangeImperative} between ${fmtMin} and ${fmtMax}`
|
|
29
|
+
: hasMin
|
|
30
|
+
? `${name} cannot ${boundImperative} ${compareLT} ${fmtMin}`
|
|
31
|
+
: `${name} cannot ${boundImperative} ${compareGT} ${fmtMax}`;
|
|
32
|
+
}
|
|
33
|
+
retVal.valid = !retVal.message;
|
|
34
|
+
}
|
|
35
|
+
return retVal;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/range.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/regex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,SAkB5B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
4
|
+
/** Validates regex using string representation of the member. */
|
|
5
|
+
export const RegexValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (isProvided(value)) {
|
|
9
|
+
const regex = new RegExp(Reflect.getMetadata(ValidationKey.REGEX, proto, key));
|
|
10
|
+
const isArray = Array.isArray(value);
|
|
11
|
+
const tests = isArray ? value : [value];
|
|
12
|
+
const allOk = tests.every((test) => regex.test(`${test}`));
|
|
13
|
+
if (!allOk) {
|
|
14
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
15
|
+
retVal.message = isArray ? `${name} contains an invalid item` : `${name} is invalid`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
retVal.valid = !retVal.message;
|
|
19
|
+
return retVal;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/regex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,iEAAiE;AACjE,MAAM,CAAC,MAAM,cAAc,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAU,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,CAAC;QACvF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/required.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAE5D,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,EAAE,SAc/B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ValidationKey } from '../../../mdkeys.js';
|
|
3
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
4
|
+
/** Validates required items. 0, 0n and false are allowed */
|
|
5
|
+
export const RequiredValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (!isProvided(value) || Number.isNaN(value)) {
|
|
9
|
+
const required = Reflect.getMetadata(ValidationKey.REQUIRED, proto, key) === true;
|
|
10
|
+
if (required) {
|
|
11
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
12
|
+
retVal.message = `${name} is required`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
retVal.valid = !retVal.message;
|
|
16
|
+
return retVal;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=required.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/required.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC9D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QAClF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,GAAG,IAAI,cAAc,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/type.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAG5D,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,SAoB3B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isProvided } from '../../../types.js';
|
|
2
|
+
import { ReflectMetadata } from '../../metadata.js';
|
|
3
|
+
import { ReflectType } from '../../type/type.js';
|
|
4
|
+
/** Validates type. */
|
|
5
|
+
export const TypeValidator = (trg, key, proto) => {
|
|
6
|
+
const value = trg[key];
|
|
7
|
+
const retVal = { key, value, valid: true };
|
|
8
|
+
if (isProvided(value)) {
|
|
9
|
+
const type = ReflectType.getType(proto, key);
|
|
10
|
+
const parser = ReflectType.getParser(type);
|
|
11
|
+
const isArray = Array.isArray(value);
|
|
12
|
+
const tests = isArray ? value : [value];
|
|
13
|
+
const allOk = tests.every((test) => parser(test) != null);
|
|
14
|
+
if (!allOk) {
|
|
15
|
+
const name = ReflectMetadata.getDisplayName(proto, key);
|
|
16
|
+
retVal.message = isArray ? `${name} contains an invalid ${type}` : `${name} is not a valid ${type}`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
retVal.valid = !retVal.message;
|
|
20
|
+
return retVal;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../src/reflect/validation/validators/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,sBAAsB;AACtB,MAAM,CAAC,MAAM,aAAa,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC1D,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAU,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,mBAAmB,IAAI,EAAE,CAAC;QACtG,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|