@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.
Files changed (101) hide show
  1. package/README.md +3 -3
  2. package/dist/decorate/interception.d.ts +3 -2
  3. package/dist/decorate/interception.d.ts.map +1 -0
  4. package/dist/decorate/interception.js +50 -0
  5. package/dist/decorate/interception.js.map +1 -0
  6. package/dist/decorate/metadata.d.ts +2 -1
  7. package/dist/decorate/metadata.d.ts.map +1 -0
  8. package/dist/decorate/metadata.js +33 -0
  9. package/dist/decorate/metadata.js.map +1 -0
  10. package/dist/decorate/type.d.ts +2 -1
  11. package/dist/decorate/type.d.ts.map +1 -0
  12. package/dist/decorate/type.js +22 -0
  13. package/dist/decorate/type.js.map +1 -0
  14. package/dist/decorate/validation.d.ts +2 -1
  15. package/dist/decorate/validation.d.ts.map +1 -0
  16. package/dist/decorate/validation.js +147 -0
  17. package/dist/decorate/validation.js.map +1 -0
  18. package/dist/index.d.ts +8 -7
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +8 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/mdkeys.d.ts +1 -0
  23. package/dist/mdkeys.d.ts.map +1 -0
  24. package/dist/mdkeys.js +23 -0
  25. package/dist/mdkeys.js.map +1 -0
  26. package/dist/reflect/metadata.d.ts +2 -1
  27. package/dist/reflect/metadata.d.ts.map +1 -0
  28. package/dist/reflect/metadata.js +33 -0
  29. package/dist/reflect/metadata.js.map +1 -0
  30. package/dist/reflect/type/models.d.ts +1 -0
  31. package/dist/reflect/type/models.d.ts.map +1 -0
  32. package/dist/reflect/type/models.js +2 -0
  33. package/dist/reflect/type/models.js.map +1 -0
  34. package/dist/reflect/type/parsers/boolean.d.ts +3 -2
  35. package/dist/reflect/type/parsers/boolean.d.ts.map +1 -0
  36. package/dist/reflect/type/parsers/boolean.js +8 -0
  37. package/dist/reflect/type/parsers/boolean.js.map +1 -0
  38. package/dist/reflect/type/parsers/date.d.ts +3 -2
  39. package/dist/reflect/type/parsers/date.d.ts.map +1 -0
  40. package/dist/reflect/type/parsers/date.js +10 -0
  41. package/dist/reflect/type/parsers/date.js.map +1 -0
  42. package/dist/reflect/type/parsers/integer.d.ts +3 -2
  43. package/dist/reflect/type/parsers/integer.d.ts.map +1 -0
  44. package/dist/reflect/type/parsers/integer.js +6 -0
  45. package/dist/reflect/type/parsers/integer.js.map +1 -0
  46. package/dist/reflect/type/parsers/number.d.ts +3 -2
  47. package/dist/reflect/type/parsers/number.d.ts.map +1 -0
  48. package/dist/reflect/type/parsers/number.js +6 -0
  49. package/dist/reflect/type/parsers/number.js.map +1 -0
  50. package/dist/reflect/type/type.d.ts +3 -2
  51. package/dist/reflect/type/type.d.ts.map +1 -0
  52. package/dist/reflect/type/type.js +43 -0
  53. package/dist/reflect/type/type.js.map +1 -0
  54. package/dist/reflect/validation/models.d.ts +2 -1
  55. package/dist/reflect/validation/models.d.ts.map +1 -0
  56. package/dist/reflect/validation/models.js +2 -0
  57. package/dist/reflect/validation/models.js.map +1 -0
  58. package/dist/reflect/validation/validation.d.ts +3 -2
  59. package/dist/reflect/validation/validation.d.ts.map +1 -0
  60. package/dist/reflect/validation/validation.js +179 -0
  61. package/dist/reflect/validation/validation.js.map +1 -0
  62. package/dist/reflect/validation/validators/custom.d.ts +2 -1
  63. package/dist/reflect/validation/validators/custom.d.ts.map +1 -0
  64. package/dist/reflect/validation/validators/custom.js +19 -0
  65. package/dist/reflect/validation/validators/custom.js.map +1 -0
  66. package/dist/reflect/validation/validators/forbidden.d.ts +2 -1
  67. package/dist/reflect/validation/validators/forbidden.d.ts.map +1 -0
  68. package/dist/reflect/validation/validators/forbidden.js +18 -0
  69. package/dist/reflect/validation/validators/forbidden.js.map +1 -0
  70. package/dist/reflect/validation/validators/length-range.d.ts +2 -1
  71. package/dist/reflect/validation/validators/length-range.d.ts.map +1 -0
  72. package/dist/reflect/validation/validators/length-range.js +30 -0
  73. package/dist/reflect/validation/validators/length-range.js.map +1 -0
  74. package/dist/reflect/validation/validators/options.d.ts +2 -1
  75. package/dist/reflect/validation/validators/options.d.ts.map +1 -0
  76. package/dist/reflect/validation/validators/options.js +21 -0
  77. package/dist/reflect/validation/validators/options.js.map +1 -0
  78. package/dist/reflect/validation/validators/range.d.ts +2 -1
  79. package/dist/reflect/validation/validators/range.d.ts.map +1 -0
  80. package/dist/reflect/validation/validators/range.js +37 -0
  81. package/dist/reflect/validation/validators/range.js.map +1 -0
  82. package/dist/reflect/validation/validators/regex.d.ts +2 -1
  83. package/dist/reflect/validation/validators/regex.d.ts.map +1 -0
  84. package/dist/reflect/validation/validators/regex.js +21 -0
  85. package/dist/reflect/validation/validators/regex.js.map +1 -0
  86. package/dist/reflect/validation/validators/required.d.ts +2 -1
  87. package/dist/reflect/validation/validators/required.d.ts.map +1 -0
  88. package/dist/reflect/validation/validators/required.js +18 -0
  89. package/dist/reflect/validation/validators/required.js.map +1 -0
  90. package/dist/reflect/validation/validators/type.d.ts +2 -1
  91. package/dist/reflect/validation/validators/type.d.ts.map +1 -0
  92. package/dist/reflect/validation/validators/type.js +22 -0
  93. package/dist/reflect/validation/validators/type.js.map +1 -0
  94. package/dist/types.d.ts +1 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/package.json +56 -52
  99. package/dist/ne14_codl.cjs.min.js +0 -807
  100. package/dist/ne14_codl.esm.min.js +0 -799
  101. 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,2 @@
1
+ import { ValidationKey } from '../../mdkeys.js';
2
+ //# sourceMappingURL=models.js.map
@@ -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":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAS7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,sCAAsC;AACtC,MAAM,OAAgB,iBAAiB;IACrC;;;;OAIG;IACI,MAAM,CAAC,QAAQ,CAAmB,MAAc,EAAE,IAAc;QACrE,MAAM,KAAK,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,aAAa;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAI,aAAqB,CAAC,IAAI,CAAkB,CAAC;YAC3D,MAAM,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mDAAmD;IAC3C,MAAM,CAAC,YAAY,CAAC,GAAW;QACrC,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,aAAa,CAAC,SAAS;gBAC1B,OAAO,kBAAkB,CAAC;YAE5B,KAAK,aAAa,CAAC,UAAU,CAAC;YAC9B,KAAK,aAAa,CAAC,UAAU;gBAC3B,OAAO,oBAAoB,CAAC;YAE9B,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAO,gBAAgB,CAAC;YAE1B,KAAK,aAAa,CAAC,GAAG,CAAC;YACvB,KAAK,aAAa,CAAC,GAAG;gBACpB,OAAO,cAAc,CAAC;YAExB,KAAK,aAAa,CAAC,QAAQ;gBACzB,OAAO,iBAAiB,CAAC;YAC3B,KAAK,aAAa,CAAC,KAAK;gBACtB,OAAO,cAAc,CAAC;YACxB,KAAK,aAAa,CAAC,IAAI;gBACrB,OAAO,aAAa,CAAC;YACvB,KAAK,aAAa,CAAC,MAAM;gBACvB,OAAO,aAAa,CAAC;YAEvB;gBACE,MAAM,IAAI,UAAU,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,sDAAsD;IAC9C,MAAM,CAAC,mBAAmB,CAChC,SAAyB,EACzB,KAAU,EACV,GAAW,EACX,GAAG,GAAW,EAAE;QAEhB,MAAM,QAAQ,GAAG,CAAC,GAA0B,EAAU,EAAE;YACtD,OAAO,GAAG,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjH,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC;wBACP,MAAM;wBACN,GAAG;wBACH,GAAG;wBACH,KAAK;wBACL,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC;gBAC3D,MAAM,MAAM,GAAG,CAAE,GAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;wBAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;wBAClE,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;oBACjG,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,MAAM,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;oBACjD,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAA6B,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,iDAAiD;YACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC5C,IAAI,QAAQ,GAAG,QAAQ;gBAAE,OAAO,CAAC,CAAC;iBAC7B,IAAI,QAAQ,GAAG,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAC;iBACnC,CAAC;gBACJ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC;qBAC7B,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACxC,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAED,qEAAqE;IAC7D,MAAM,CAAC,eAAe,CAAC,KAA8B;QAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAe,QAAQ,IAAI;gBACtC,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAiB,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC1F,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAkB,CAAC,CAAC;IACzB,CAAC;IAED,+CAA+C;IACvC,MAAM,CAAC,eAAe,CAAC,KAAmB;QAChD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;oBACpD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC1C,IACE,CAAC,MAAM,CAAC,KAAK;wBACb,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,EACjG,CAAC;wBACD,MAAM,CAAC,0CAA0C;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAwB,CAAC,CAAC;IAC/B,CAAC;IAED,wCAAwC;IAChC,MAAM,CAAC,SAAS,CAAC,OAA2B;QAClD,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,GAAG,OAAO;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;iBACvB,MAAM,CACL,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACX,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAQ,CAAC,CAAC;gBACpC,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAA8B,CAC/B,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates with a custom function. */
3
3
  export declare const CustValidator: Validator;
4
+ //# sourceMappingURL=custom.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates forbidden items. Only null, undefined and empty strings are ok. */
3
3
  export declare const ForbiddenValidator: Validator;
4
+ //# sourceMappingURL=forbidden.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates string / array length are within specified range. */
3
3
  export declare const LengthRangeValidator: Validator;
4
+ //# sourceMappingURL=length-range.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates the member value is contained within predefined options. */
3
3
  export declare const OptionsValidator: Validator;
4
+ //# sourceMappingURL=options.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates values are within a range. */
3
3
  export declare const RangeValidator: Validator;
4
+ //# sourceMappingURL=range.d.ts.map
@@ -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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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates regex using string representation of the member. */
3
3
  export declare const RegexValidator: Validator;
4
+ //# sourceMappingURL=regex.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates required items. 0, 0n and false are allowed */
3
3
  export declare const RequiredValidator: Validator;
4
+ //# sourceMappingURL=required.d.ts.map
@@ -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"}
@@ -1,3 +1,4 @@
1
- import { Validator } from '../models';
1
+ import type { Validator } from '../models.js';
2
2
  /** Validates type. */
3
3
  export declare const TypeValidator: Validator;
4
+ //# sourceMappingURL=type.d.ts.map
@@ -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"}