@decaf-ts/decorator-validation 1.5.2 → 1.5.5
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/LICENSE.md +0 -0
- package/README.md +34 -108
- package/dist/decorator-validation.js +2 -0
- package/dist/decorator-validation.js.LICENSE.txt +14 -0
- package/dist/esm/decorator-validation.js +2 -0
- package/dist/esm/decorator-validation.js.LICENSE.txt +14 -0
- package/lib/esm/index.d.ts +42 -0
- package/lib/esm/index.js +44 -0
- package/lib/esm/model/Model.d.ts +138 -0
- package/lib/esm/model/Model.js +298 -0
- package/lib/esm/model/ModelErrorDefinition.d.ts +22 -0
- package/lib/esm/model/ModelErrorDefinition.js +54 -0
- package/lib/esm/model/Registry.d.ts +59 -0
- package/lib/esm/model/Registry.js +75 -0
- package/lib/esm/model/constants.d.ts +56 -0
- package/lib/esm/model/constants.js +71 -0
- package/lib/esm/model/construction.d.ts +29 -0
- package/lib/esm/model/construction.js +65 -0
- package/lib/esm/model/decorators.d.ts +25 -0
- package/lib/esm/model/decorators.js +64 -0
- package/lib/esm/model/index.d.ts +9 -0
- package/lib/esm/model/index.js +11 -0
- package/lib/esm/model/types.d.ts +79 -0
- package/lib/esm/model/types.js +3 -0
- package/lib/esm/model/utils.d.ts +11 -0
- package/lib/esm/model/utils.js +27 -0
- package/lib/esm/model/validation.d.ts +14 -0
- package/lib/esm/model/validation.js +137 -0
- package/lib/esm/utils/constants.d.ts +26 -0
- package/lib/esm/utils/constants.js +29 -0
- package/lib/esm/utils/dates.d.ts +76 -0
- package/lib/esm/utils/dates.js +245 -0
- package/lib/esm/utils/decorators.d.ts +2 -0
- package/lib/esm/utils/decorators.js +20 -0
- package/lib/esm/utils/hashing.d.ts +52 -0
- package/lib/esm/utils/hashing.js +101 -0
- package/lib/esm/utils/index.d.ts +7 -0
- package/lib/esm/utils/index.js +9 -0
- package/lib/esm/utils/registry.d.ts +68 -0
- package/lib/esm/utils/registry.js +3 -0
- package/lib/esm/utils/serialization.d.ts +79 -0
- package/lib/esm/utils/serialization.js +90 -0
- package/lib/esm/utils/strings.d.ts +25 -0
- package/lib/esm/utils/strings.js +33 -0
- package/lib/esm/validation/Validation.d.ts +51 -0
- package/lib/esm/validation/Validation.js +73 -0
- package/lib/esm/validation/Validators/DateValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/DateValidator.js +56 -0
- package/lib/esm/validation/Validators/EmailValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/EmailValidator.js +52 -0
- package/lib/esm/validation/Validators/ListValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/ListValidator.js +69 -0
- package/lib/esm/validation/Validators/MaxLengthValidator.d.ts +29 -0
- package/lib/esm/validation/Validators/MaxLengthValidator.js +54 -0
- package/lib/esm/validation/Validators/MaxValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/MaxValidator.js +59 -0
- package/lib/esm/validation/Validators/MinLengthValidator.d.ts +29 -0
- package/lib/esm/validation/Validators/MinLengthValidator.js +54 -0
- package/lib/esm/validation/Validators/MinValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/MinValidator.js +59 -0
- package/lib/esm/validation/Validators/PasswordValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/PasswordValidator.js +52 -0
- package/lib/esm/validation/Validators/PatternValidator.d.ts +37 -0
- package/lib/esm/validation/Validators/PatternValidator.js +72 -0
- package/lib/esm/validation/Validators/RequiredValidator.d.ts +28 -0
- package/lib/esm/validation/Validators/RequiredValidator.js +59 -0
- package/lib/esm/validation/Validators/StepValidator.d.ts +29 -0
- package/lib/esm/validation/Validators/StepValidator.js +54 -0
- package/lib/esm/validation/Validators/TypeValidator.d.ts +25 -0
- package/lib/esm/validation/Validators/TypeValidator.js +62 -0
- package/lib/esm/validation/Validators/URLValidator.d.ts +27 -0
- package/lib/esm/validation/Validators/URLValidator.js +51 -0
- package/lib/esm/validation/Validators/Validator.d.ts +41 -0
- package/lib/esm/validation/Validators/Validator.js +49 -0
- package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +47 -0
- package/lib/esm/validation/Validators/ValidatorRegistry.js +82 -0
- package/lib/esm/validation/Validators/constants.d.ts +96 -0
- package/lib/esm/validation/Validators/constants.js +136 -0
- package/lib/esm/validation/Validators/decorators.d.ts +12 -0
- package/lib/esm/validation/Validators/decorators.js +27 -0
- package/lib/esm/validation/Validators/index.d.ts +52 -0
- package/lib/esm/validation/Validators/index.js +54 -0
- package/lib/esm/validation/Validators/types.d.ts +88 -0
- package/lib/esm/validation/Validators/types.js +3 -0
- package/lib/esm/validation/decorators.d.ts +178 -0
- package/lib/esm/validation/decorators.js +290 -0
- package/lib/esm/validation/index.d.ts +4 -0
- package/lib/esm/validation/index.js +6 -0
- package/lib/esm/validation/types.d.ts +46 -0
- package/lib/esm/validation/types.js +3 -0
- package/lib/index.cjs +61 -0
- package/lib/index.d.ts +42 -0
- package/lib/model/Model.cjs +302 -0
- package/lib/model/Model.d.ts +138 -0
- package/lib/model/ModelErrorDefinition.cjs +58 -0
- package/lib/model/ModelErrorDefinition.d.ts +22 -0
- package/lib/model/Registry.cjs +80 -0
- package/lib/model/Registry.d.ts +59 -0
- package/lib/model/constants.cjs +74 -0
- package/lib/model/constants.d.ts +56 -0
- package/lib/model/construction.cjs +70 -0
- package/lib/model/construction.d.ts +29 -0
- package/lib/model/decorators.cjs +69 -0
- package/lib/model/decorators.d.ts +25 -0
- package/lib/model/index.cjs +27 -0
- package/lib/model/index.d.ts +9 -0
- package/lib/model/types.cjs +4 -0
- package/lib/model/types.d.ts +79 -0
- package/lib/model/utils.cjs +31 -0
- package/lib/model/utils.d.ts +11 -0
- package/lib/model/validation.cjs +140 -0
- package/lib/model/validation.d.ts +14 -0
- package/lib/utils/constants.cjs +32 -0
- package/lib/utils/constants.d.ts +26 -0
- package/lib/utils/dates.cjs +253 -0
- package/lib/utils/dates.d.ts +76 -0
- package/lib/utils/decorators.cjs +24 -0
- package/lib/utils/decorators.d.ts +2 -0
- package/lib/utils/hashing.cjs +108 -0
- package/lib/utils/hashing.d.ts +52 -0
- package/lib/utils/index.cjs +25 -0
- package/lib/utils/index.d.ts +7 -0
- package/lib/utils/registry.cjs +4 -0
- package/lib/utils/registry.d.ts +68 -0
- package/lib/utils/serialization.cjs +95 -0
- package/lib/utils/serialization.d.ts +79 -0
- package/lib/utils/strings.cjs +37 -0
- package/lib/utils/strings.d.ts +25 -0
- package/lib/validation/Validation.cjs +77 -0
- package/lib/validation/Validation.d.ts +51 -0
- package/lib/validation/Validators/DateValidator.cjs +59 -0
- package/lib/validation/Validators/DateValidator.d.ts +28 -0
- package/lib/validation/Validators/EmailValidator.cjs +55 -0
- package/lib/validation/Validators/EmailValidator.d.ts +28 -0
- package/lib/validation/Validators/ListValidator.cjs +72 -0
- package/lib/validation/Validators/ListValidator.d.ts +28 -0
- package/lib/validation/Validators/MaxLengthValidator.cjs +57 -0
- package/lib/validation/Validators/MaxLengthValidator.d.ts +29 -0
- package/lib/validation/Validators/MaxValidator.cjs +62 -0
- package/lib/validation/Validators/MaxValidator.d.ts +28 -0
- package/lib/validation/Validators/MinLengthValidator.cjs +57 -0
- package/lib/validation/Validators/MinLengthValidator.d.ts +29 -0
- package/lib/validation/Validators/MinValidator.cjs +62 -0
- package/lib/validation/Validators/MinValidator.d.ts +28 -0
- package/lib/validation/Validators/PasswordValidator.cjs +55 -0
- package/lib/validation/Validators/PasswordValidator.d.ts +28 -0
- package/lib/validation/Validators/PatternValidator.cjs +75 -0
- package/lib/validation/Validators/PatternValidator.d.ts +37 -0
- package/lib/validation/Validators/RequiredValidator.cjs +62 -0
- package/lib/validation/Validators/RequiredValidator.d.ts +28 -0
- package/lib/validation/Validators/StepValidator.cjs +57 -0
- package/lib/validation/Validators/StepValidator.d.ts +29 -0
- package/lib/validation/Validators/TypeValidator.cjs +65 -0
- package/lib/validation/Validators/TypeValidator.d.ts +25 -0
- package/lib/validation/Validators/URLValidator.cjs +54 -0
- package/lib/validation/Validators/URLValidator.d.ts +27 -0
- package/lib/validation/Validators/Validator.cjs +53 -0
- package/lib/validation/Validators/Validator.d.ts +41 -0
- package/lib/validation/Validators/ValidatorRegistry.cjs +87 -0
- package/lib/validation/Validators/ValidatorRegistry.d.ts +47 -0
- package/lib/validation/Validators/constants.cjs +139 -0
- package/lib/validation/Validators/constants.d.ts +96 -0
- package/lib/validation/Validators/decorators.cjs +30 -0
- package/lib/validation/Validators/decorators.d.ts +12 -0
- package/lib/validation/Validators/index.cjs +71 -0
- package/lib/validation/Validators/index.d.ts +52 -0
- package/lib/validation/Validators/types.d.ts +88 -0
- package/lib/validation/decorators.cjs +306 -0
- package/lib/validation/decorators.d.ts +178 -0
- package/lib/validation/index.cjs +22 -0
- package/lib/validation/index.d.ts +4 -0
- package/lib/validation/types.cjs +4 -0
- package/lib/validation/types.d.ts +46 -0
- package/package.json +18 -13
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Validators = void 0;
|
|
18
|
+
const DateValidator_1 = require("./DateValidator.cjs");
|
|
19
|
+
const TypeValidator_1 = require("./TypeValidator.cjs");
|
|
20
|
+
const PasswordValidator_1 = require("./PasswordValidator.cjs");
|
|
21
|
+
const StepValidator_1 = require("./StepValidator.cjs");
|
|
22
|
+
const URLValidator_1 = require("./URLValidator.cjs");
|
|
23
|
+
const PatternValidator_1 = require("./PatternValidator.cjs");
|
|
24
|
+
const MinValidator_1 = require("./MinValidator.cjs");
|
|
25
|
+
const MinLengthValidator_1 = require("./MinLengthValidator.cjs");
|
|
26
|
+
const MaxValidator_1 = require("./MaxValidator.cjs");
|
|
27
|
+
const MaxLengthValidator_1 = require("./MaxLengthValidator.cjs");
|
|
28
|
+
const RequiredValidator_1 = require("./RequiredValidator.cjs");
|
|
29
|
+
const EmailValidator_1 = require("./EmailValidator.cjs");
|
|
30
|
+
const ListValidator_1 = require("./ListValidator.cjs");
|
|
31
|
+
__exportStar(require("./constants.cjs"), exports);
|
|
32
|
+
__exportStar(require("./DateValidator.cjs"), exports);
|
|
33
|
+
__exportStar(require("./decorators.cjs"), exports);
|
|
34
|
+
__exportStar(require("./EmailValidator.cjs"), exports);
|
|
35
|
+
__exportStar(require("./ListValidator.cjs"), exports);
|
|
36
|
+
__exportStar(require("./MaxLengthValidator.cjs"), exports);
|
|
37
|
+
__exportStar(require("./MaxValidator.cjs"), exports);
|
|
38
|
+
__exportStar(require("./MinLengthValidator.cjs"), exports);
|
|
39
|
+
__exportStar(require("./MinValidator.cjs"), exports);
|
|
40
|
+
__exportStar(require("./PasswordValidator.cjs"), exports);
|
|
41
|
+
__exportStar(require("./PatternValidator.cjs"), exports);
|
|
42
|
+
__exportStar(require("./RequiredValidator.cjs"), exports);
|
|
43
|
+
__exportStar(require("./StepValidator.cjs"), exports);
|
|
44
|
+
__exportStar(require("./types.cjs"), exports);
|
|
45
|
+
__exportStar(require("./TypeValidator.cjs"), exports);
|
|
46
|
+
__exportStar(require("./URLValidator.cjs"), exports);
|
|
47
|
+
__exportStar(require("./Validator.cjs"), exports);
|
|
48
|
+
__exportStar(require("./ValidatorRegistry.cjs"), exports);
|
|
49
|
+
/**
|
|
50
|
+
* @summary constant holding all {@link Validator}s
|
|
51
|
+
* @constant Validators
|
|
52
|
+
* @memberOf module:decorator-validation.Validation.Validators
|
|
53
|
+
* @category Validation
|
|
54
|
+
*/
|
|
55
|
+
exports.Validators = {
|
|
56
|
+
DateValidator: DateValidator_1.DateValidator,
|
|
57
|
+
EmailValidator: EmailValidator_1.EmailValidator,
|
|
58
|
+
ListValidator: ListValidator_1.ListValidator,
|
|
59
|
+
MaxLengthValidator: MaxLengthValidator_1.MaxLengthValidator,
|
|
60
|
+
MaxValidator: MaxValidator_1.MaxValidator,
|
|
61
|
+
MinLengthValidator: MinLengthValidator_1.MinLengthValidator,
|
|
62
|
+
MinValidator: MinValidator_1.MinValidator,
|
|
63
|
+
PasswordValidator: PasswordValidator_1.PasswordValidator,
|
|
64
|
+
PatternValidator: PatternValidator_1.PatternValidator,
|
|
65
|
+
RequiredValidator: RequiredValidator_1.RequiredValidator,
|
|
66
|
+
StepValidator: StepValidator_1.StepValidator,
|
|
67
|
+
TypeValidator: TypeValidator_1.TypeValidator,
|
|
68
|
+
URLValidator: URLValidator_1.URLValidator,
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBZ0Q7QUFDaEQsbURBQWdEO0FBQ2hELDJEQUF3RDtBQUN4RCxtREFBZ0Q7QUFDaEQsaURBQThDO0FBQzlDLHlEQUFzRDtBQUN0RCxpREFBOEM7QUFDOUMsNkRBQTBEO0FBQzFELGlEQUE4QztBQUM5Qyw2REFBMEQ7QUFDMUQsMkRBQXdEO0FBQ3hELHFEQUFrRDtBQUNsRCxtREFBZ0Q7QUFFaEQsOENBQTRCO0FBQzVCLGtEQUFnQztBQUNoQywrQ0FBNkI7QUFDN0IsbURBQWlDO0FBQ2pDLGtEQUFnQztBQUNoQyx1REFBcUM7QUFDckMsaURBQStCO0FBQy9CLHVEQUFxQztBQUNyQyxpREFBK0I7QUFDL0Isc0RBQW9DO0FBQ3BDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsa0RBQWdDO0FBQ2hDLDBDQUF3QjtBQUN4QixrREFBZ0M7QUFDaEMsaURBQStCO0FBQy9CLDhDQUE0QjtBQUM1QixzREFBb0M7QUFDcEM7Ozs7O0dBS0c7QUFDVSxRQUFBLFVBQVUsR0FBRztJQUN4QixhQUFhLEVBQWIsNkJBQWE7SUFDYixjQUFjLEVBQWQsK0JBQWM7SUFDZCxhQUFhLEVBQWIsNkJBQWE7SUFDYixrQkFBa0IsRUFBbEIsdUNBQWtCO0lBQ2xCLFlBQVksRUFBWiwyQkFBWTtJQUNaLGtCQUFrQixFQUFsQix1Q0FBa0I7SUFDbEIsWUFBWSxFQUFaLDJCQUFZO0lBQ1osaUJBQWlCLEVBQWpCLHFDQUFpQjtJQUNqQixnQkFBZ0IsRUFBaEIsbUNBQWdCO0lBQ2hCLGlCQUFpQixFQUFqQixxQ0FBaUI7SUFDakIsYUFBYSxFQUFiLDZCQUFhO0lBQ2IsYUFBYSxFQUFiLDZCQUFhO0lBQ2IsWUFBWSxFQUFaLDJCQUFZO0NBQ2IsQ0FBQyIsImZpbGUiOiJ2YWxpZGF0aW9uL1ZhbGlkYXRvcnMvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlVmFsaWRhdG9yIH0gZnJvbSBcIi4vRGF0ZVZhbGlkYXRvclwiO1xuaW1wb3J0IHsgVHlwZVZhbGlkYXRvciB9IGZyb20gXCIuL1R5cGVWYWxpZGF0b3JcIjtcbmltcG9ydCB7IFBhc3N3b3JkVmFsaWRhdG9yIH0gZnJvbSBcIi4vUGFzc3dvcmRWYWxpZGF0b3JcIjtcbmltcG9ydCB7IFN0ZXBWYWxpZGF0b3IgfSBmcm9tIFwiLi9TdGVwVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBVUkxWYWxpZGF0b3IgfSBmcm9tIFwiLi9VUkxWYWxpZGF0b3JcIjtcbmltcG9ydCB7IFBhdHRlcm5WYWxpZGF0b3IgfSBmcm9tIFwiLi9QYXR0ZXJuVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBNaW5WYWxpZGF0b3IgfSBmcm9tIFwiLi9NaW5WYWxpZGF0b3JcIjtcbmltcG9ydCB7IE1pbkxlbmd0aFZhbGlkYXRvciB9IGZyb20gXCIuL01pbkxlbmd0aFZhbGlkYXRvclwiO1xuaW1wb3J0IHsgTWF4VmFsaWRhdG9yIH0gZnJvbSBcIi4vTWF4VmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBNYXhMZW5ndGhWYWxpZGF0b3IgfSBmcm9tIFwiLi9NYXhMZW5ndGhWYWxpZGF0b3JcIjtcbmltcG9ydCB7IFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSBcIi4vUmVxdWlyZWRWYWxpZGF0b3JcIjtcbmltcG9ydCB7IEVtYWlsVmFsaWRhdG9yIH0gZnJvbSBcIi4vRW1haWxWYWxpZGF0b3JcIjtcbmltcG9ydCB7IExpc3RWYWxpZGF0b3IgfSBmcm9tIFwiLi9MaXN0VmFsaWRhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vRGF0ZVZhbGlkYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW1haWxWYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0xpc3RWYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01heExlbmd0aFZhbGlkYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTWF4VmFsaWRhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9NaW5MZW5ndGhWYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01pblZhbGlkYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUGFzc3dvcmRWYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1BhdHRlcm5WYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1JlcXVpcmVkVmFsaWRhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TdGVwVmFsaWRhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vVHlwZVZhbGlkYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vVVJMVmFsaWRhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1ZhbGlkYXRvclJlZ2lzdHJ5XCI7XG4vKipcbiAqIEBzdW1tYXJ5IGNvbnN0YW50IGhvbGRpbmcgYWxsIHtAbGluayBWYWxpZGF0b3J9c1xuICogQGNvbnN0YW50IFZhbGlkYXRvcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvbi5WYWxpZGF0b3JzXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgVmFsaWRhdG9ycyA9IHtcbiAgRGF0ZVZhbGlkYXRvcixcbiAgRW1haWxWYWxpZGF0b3IsXG4gIExpc3RWYWxpZGF0b3IsXG4gIE1heExlbmd0aFZhbGlkYXRvcixcbiAgTWF4VmFsaWRhdG9yLFxuICBNaW5MZW5ndGhWYWxpZGF0b3IsXG4gIE1pblZhbGlkYXRvcixcbiAgUGFzc3dvcmRWYWxpZGF0b3IsXG4gIFBhdHRlcm5WYWxpZGF0b3IsXG4gIFJlcXVpcmVkVmFsaWRhdG9yLFxuICBTdGVwVmFsaWRhdG9yLFxuICBUeXBlVmFsaWRhdG9yLFxuICBVUkxWYWxpZGF0b3IsXG59O1xuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DateValidator } from "./DateValidator";
|
|
2
|
+
import { TypeValidator } from "./TypeValidator";
|
|
3
|
+
import { PasswordValidator } from "./PasswordValidator";
|
|
4
|
+
import { StepValidator } from "./StepValidator";
|
|
5
|
+
import { URLValidator } from "./URLValidator";
|
|
6
|
+
import { PatternValidator } from "./PatternValidator";
|
|
7
|
+
import { MinValidator } from "./MinValidator";
|
|
8
|
+
import { MinLengthValidator } from "./MinLengthValidator";
|
|
9
|
+
import { MaxValidator } from "./MaxValidator";
|
|
10
|
+
import { MaxLengthValidator } from "./MaxLengthValidator";
|
|
11
|
+
import { RequiredValidator } from "./RequiredValidator";
|
|
12
|
+
import { EmailValidator } from "./EmailValidator";
|
|
13
|
+
import { ListValidator } from "./ListValidator";
|
|
14
|
+
export * from "./constants";
|
|
15
|
+
export * from "./DateValidator";
|
|
16
|
+
export * from "./decorators";
|
|
17
|
+
export * from "./EmailValidator";
|
|
18
|
+
export * from "./ListValidator";
|
|
19
|
+
export * from "./MaxLengthValidator";
|
|
20
|
+
export * from "./MaxValidator";
|
|
21
|
+
export * from "./MinLengthValidator";
|
|
22
|
+
export * from "./MinValidator";
|
|
23
|
+
export * from "./PasswordValidator";
|
|
24
|
+
export * from "./PatternValidator";
|
|
25
|
+
export * from "./RequiredValidator";
|
|
26
|
+
export * from "./StepValidator";
|
|
27
|
+
export * from "./types";
|
|
28
|
+
export * from "./TypeValidator";
|
|
29
|
+
export * from "./URLValidator";
|
|
30
|
+
export * from "./Validator";
|
|
31
|
+
export * from "./ValidatorRegistry";
|
|
32
|
+
/**
|
|
33
|
+
* @summary constant holding all {@link Validator}s
|
|
34
|
+
* @constant Validators
|
|
35
|
+
* @memberOf module:decorator-validation.Validation.Validators
|
|
36
|
+
* @category Validation
|
|
37
|
+
*/
|
|
38
|
+
export declare const Validators: {
|
|
39
|
+
DateValidator: typeof DateValidator;
|
|
40
|
+
EmailValidator: typeof EmailValidator;
|
|
41
|
+
ListValidator: typeof ListValidator;
|
|
42
|
+
MaxLengthValidator: typeof MaxLengthValidator;
|
|
43
|
+
MaxValidator: typeof MaxValidator;
|
|
44
|
+
MinLengthValidator: typeof MinLengthValidator;
|
|
45
|
+
MinValidator: typeof MinValidator;
|
|
46
|
+
PasswordValidator: typeof PasswordValidator;
|
|
47
|
+
PatternValidator: typeof PatternValidator;
|
|
48
|
+
RequiredValidator: typeof RequiredValidator;
|
|
49
|
+
StepValidator: typeof StepValidator;
|
|
50
|
+
TypeValidator: typeof TypeValidator;
|
|
51
|
+
URLValidator: typeof URLValidator;
|
|
52
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Validator } from "./Validator";
|
|
2
|
+
import { IRegistry } from "../../utils/registry";
|
|
3
|
+
import { Constructor } from "../../model/types";
|
|
4
|
+
/**
|
|
5
|
+
* @summary Util type for {@link Validator} configuration
|
|
6
|
+
* @memberOf module:decorator-validation.Validation
|
|
7
|
+
* @category Validation
|
|
8
|
+
*/
|
|
9
|
+
export type ValidatorDefinition = {
|
|
10
|
+
validator: Constructor<Validator>;
|
|
11
|
+
validationKey: string;
|
|
12
|
+
save: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @summary Base API for a {@link Validator} registry
|
|
16
|
+
*
|
|
17
|
+
* @interface ValidatorRegistry
|
|
18
|
+
* @extends IRegistry
|
|
19
|
+
*
|
|
20
|
+
* @category Validation
|
|
21
|
+
*/
|
|
22
|
+
export interface IValidatorRegistry<T extends Validator> extends IRegistry<T> {
|
|
23
|
+
/**
|
|
24
|
+
* @summary retrieves the custom keys
|
|
25
|
+
* @method
|
|
26
|
+
*/
|
|
27
|
+
getCustomKeys(): Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Retrieves the Registered validator keys
|
|
30
|
+
* @return {string[]} the registered validators keys
|
|
31
|
+
* @method
|
|
32
|
+
*/
|
|
33
|
+
getKeys(): string[];
|
|
34
|
+
/**
|
|
35
|
+
* @summary Registers the provided validators onto the registry
|
|
36
|
+
*
|
|
37
|
+
* @typedef T extends Validator
|
|
38
|
+
* @param {T[] | ValidatorDefinition[]} validator
|
|
39
|
+
* @method
|
|
40
|
+
*/
|
|
41
|
+
register<T extends Validator>(...validator: (T | ValidatorDefinition)[]): void;
|
|
42
|
+
/**
|
|
43
|
+
* @summary Retrieves the Validator constructor if registered
|
|
44
|
+
*
|
|
45
|
+
* @typedef T extends Validator
|
|
46
|
+
* @param {string} key one of the {@link ValidationKeys}
|
|
47
|
+
* @return {Validator | undefined} the registered Validator or undefined if there is nono matching the provided key
|
|
48
|
+
* @method
|
|
49
|
+
*/
|
|
50
|
+
get<T extends Validator>(key: string): T | undefined;
|
|
51
|
+
}
|
|
52
|
+
export type ValidatorOptions = {
|
|
53
|
+
message?: string;
|
|
54
|
+
};
|
|
55
|
+
export interface URLValidatorOptions extends ValidatorOptions {
|
|
56
|
+
types: string | string[] | {
|
|
57
|
+
name: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface TypeValidatorOptions extends ValidatorOptions {
|
|
61
|
+
types: string | string[] | {
|
|
62
|
+
name: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export interface StepValidatorOptions extends ValidatorOptions {
|
|
66
|
+
step: number | string;
|
|
67
|
+
}
|
|
68
|
+
export interface PatternValidatorOptions extends ValidatorOptions {
|
|
69
|
+
pattern?: RegExp | string;
|
|
70
|
+
}
|
|
71
|
+
export interface MinValidatorOptions extends ValidatorOptions {
|
|
72
|
+
min: number | Date | string;
|
|
73
|
+
}
|
|
74
|
+
export interface MinLengthValidatorOptions extends ValidatorOptions {
|
|
75
|
+
minLength: number;
|
|
76
|
+
}
|
|
77
|
+
export interface MaxValidatorOptions extends ValidatorOptions {
|
|
78
|
+
max: number | Date | string;
|
|
79
|
+
}
|
|
80
|
+
export interface MaxLengthValidatorOptions extends ValidatorOptions {
|
|
81
|
+
maxLength: number;
|
|
82
|
+
}
|
|
83
|
+
export interface ListValidatorOptions extends ValidatorOptions {
|
|
84
|
+
clazz: string[];
|
|
85
|
+
}
|
|
86
|
+
export interface DateValidatorOptions extends ValidatorOptions {
|
|
87
|
+
format?: string;
|
|
88
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.required = required;
|
|
4
|
+
exports.min = min;
|
|
5
|
+
exports.max = max;
|
|
6
|
+
exports.step = step;
|
|
7
|
+
exports.minlength = minlength;
|
|
8
|
+
exports.maxlength = maxlength;
|
|
9
|
+
exports.pattern = pattern;
|
|
10
|
+
exports.email = email;
|
|
11
|
+
exports.url = url;
|
|
12
|
+
exports.type = type;
|
|
13
|
+
exports.date = date;
|
|
14
|
+
exports.password = password;
|
|
15
|
+
exports.list = list;
|
|
16
|
+
exports.set = set;
|
|
17
|
+
require("reflect-metadata");
|
|
18
|
+
const constants_1 = require("./Validators/constants.cjs");
|
|
19
|
+
const strings_1 = require("../utils/strings.cjs");
|
|
20
|
+
const dates_1 = require("../utils/dates.cjs");
|
|
21
|
+
const decorators_1 = require("../utils/decorators.cjs");
|
|
22
|
+
const Validation_1 = require("./Validation.cjs");
|
|
23
|
+
/**
|
|
24
|
+
* @summary Marks the property as required.
|
|
25
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#REQUIRED}
|
|
26
|
+
*
|
|
27
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
|
|
28
|
+
*
|
|
29
|
+
* @function required
|
|
30
|
+
*
|
|
31
|
+
* @category Decorators
|
|
32
|
+
*/
|
|
33
|
+
function required(message = constants_1.DEFAULT_ERROR_MESSAGES.REQUIRED) {
|
|
34
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.REQUIRED), {
|
|
35
|
+
message: message,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @summary Defines a minimum value for the property
|
|
40
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#MIN}
|
|
41
|
+
*
|
|
42
|
+
* @param {number | Date} value
|
|
43
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MIN}
|
|
44
|
+
*
|
|
45
|
+
* @function min
|
|
46
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
47
|
+
* @category Decorators
|
|
48
|
+
*/
|
|
49
|
+
function min(value, message = constants_1.DEFAULT_ERROR_MESSAGES.MIN) {
|
|
50
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.MIN), {
|
|
51
|
+
min: value,
|
|
52
|
+
message: message,
|
|
53
|
+
types: [Number.name, Date.name],
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @summary Defines a maximum value for the property
|
|
58
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#MAX}
|
|
59
|
+
*
|
|
60
|
+
* @param {number | Date} value
|
|
61
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
|
|
62
|
+
*
|
|
63
|
+
* @function max
|
|
64
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
65
|
+
* @category Decorators
|
|
66
|
+
*/
|
|
67
|
+
function max(value, message = constants_1.DEFAULT_ERROR_MESSAGES.MAX) {
|
|
68
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.MAX), {
|
|
69
|
+
max: value,
|
|
70
|
+
message: message,
|
|
71
|
+
types: [Number.name, Date.name],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary Defines a step value for the property
|
|
76
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#STEP}
|
|
77
|
+
*
|
|
78
|
+
* @param {number} value
|
|
79
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#STEP}
|
|
80
|
+
*
|
|
81
|
+
* @function step
|
|
82
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
83
|
+
* @category Decorators
|
|
84
|
+
*/
|
|
85
|
+
function step(value, message = constants_1.DEFAULT_ERROR_MESSAGES.STEP) {
|
|
86
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.STEP), {
|
|
87
|
+
step: value,
|
|
88
|
+
message: message,
|
|
89
|
+
types: [Number.name],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* @summary Defines a minimum length for the property
|
|
94
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#MIN_LENGTH}
|
|
95
|
+
*
|
|
96
|
+
* @param {string} value
|
|
97
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MIN_LENGTH}
|
|
98
|
+
*
|
|
99
|
+
* @function minlength
|
|
100
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
101
|
+
* @category Decorators
|
|
102
|
+
*/
|
|
103
|
+
function minlength(value, message = constants_1.DEFAULT_ERROR_MESSAGES.MIN_LENGTH) {
|
|
104
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.MIN_LENGTH), {
|
|
105
|
+
minLength: value,
|
|
106
|
+
message: message,
|
|
107
|
+
types: [String.name, Array.name, Set.name],
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @summary Defines a maximum length for the property
|
|
112
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#MAX_LENGTH}
|
|
113
|
+
*
|
|
114
|
+
* @param {string} value
|
|
115
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MAX_LENGTH}
|
|
116
|
+
*
|
|
117
|
+
* @function maxlength
|
|
118
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
119
|
+
* @category Decorators
|
|
120
|
+
*/
|
|
121
|
+
function maxlength(value, message = constants_1.DEFAULT_ERROR_MESSAGES.MAX_LENGTH) {
|
|
122
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.MAX_LENGTH), {
|
|
123
|
+
maxLength: value,
|
|
124
|
+
message: message,
|
|
125
|
+
types: [String.name, Array.name, Set.name],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @summary Defines a RegExp pattern the property must respect
|
|
130
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#PATTERN}
|
|
131
|
+
*
|
|
132
|
+
* @param {string} value
|
|
133
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
134
|
+
*
|
|
135
|
+
* @function pattern
|
|
136
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
137
|
+
* @category Decorators
|
|
138
|
+
*/
|
|
139
|
+
function pattern(value, message = constants_1.DEFAULT_ERROR_MESSAGES.PATTERN) {
|
|
140
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.PATTERN), {
|
|
141
|
+
pattern: typeof value === "string" ? value : value.toString(),
|
|
142
|
+
message: message,
|
|
143
|
+
types: [String.name],
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @summary Defines the property as an email
|
|
148
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#EMAIL}
|
|
149
|
+
*
|
|
150
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
|
|
151
|
+
*
|
|
152
|
+
* @function email
|
|
153
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
154
|
+
* @category Decorators
|
|
155
|
+
*/
|
|
156
|
+
function email(message = constants_1.DEFAULT_ERROR_MESSAGES.EMAIL) {
|
|
157
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.EMAIL), {
|
|
158
|
+
pattern: constants_1.DEFAULT_PATTERNS.EMAIL,
|
|
159
|
+
message: message,
|
|
160
|
+
types: [String.name],
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* @summary Defines the property as an URL
|
|
165
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#URL}
|
|
166
|
+
*
|
|
167
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#URL}
|
|
168
|
+
*
|
|
169
|
+
* @function url
|
|
170
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
171
|
+
* @category Decorators
|
|
172
|
+
*/
|
|
173
|
+
function url(message = constants_1.DEFAULT_ERROR_MESSAGES.URL) {
|
|
174
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.URL), {
|
|
175
|
+
pattern: constants_1.DEFAULT_PATTERNS.URL,
|
|
176
|
+
message: message,
|
|
177
|
+
types: [String.name],
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* @summary Enforces type verification
|
|
182
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#TYPE}
|
|
183
|
+
*
|
|
184
|
+
* @param {string[] | string} types accepted types
|
|
185
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#TYPE}
|
|
186
|
+
*
|
|
187
|
+
* @function type
|
|
188
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
189
|
+
* @category Decorators
|
|
190
|
+
*/
|
|
191
|
+
function type(types, message = constants_1.DEFAULT_ERROR_MESSAGES.TYPE) {
|
|
192
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.TYPE), {
|
|
193
|
+
customTypes: types,
|
|
194
|
+
message: message,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* @summary Date Handler Decorator
|
|
199
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#DATE}
|
|
200
|
+
*
|
|
201
|
+
* Will enforce serialization according to the selected format
|
|
202
|
+
*
|
|
203
|
+
* @param {string} format accepted format according to {@link formatDate}
|
|
204
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#DATE}
|
|
205
|
+
* @param {Constructor<Validator>} [validator] the Validator to be used. Defaults to {@link DateValidator}
|
|
206
|
+
*
|
|
207
|
+
* @function date
|
|
208
|
+
*
|
|
209
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
210
|
+
* @category Decorators
|
|
211
|
+
*/
|
|
212
|
+
function date(format = "dd/MM/yyyy", message = constants_1.DEFAULT_ERROR_MESSAGES.DATE) {
|
|
213
|
+
return (target, propertyKey) => {
|
|
214
|
+
(0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.DATE), {
|
|
215
|
+
format: format,
|
|
216
|
+
message: message,
|
|
217
|
+
types: [Date.name],
|
|
218
|
+
})(target, propertyKey);
|
|
219
|
+
const values = new WeakMap();
|
|
220
|
+
Object.defineProperty(target, propertyKey, {
|
|
221
|
+
configurable: false,
|
|
222
|
+
set(newValue) {
|
|
223
|
+
const descriptor = Object.getOwnPropertyDescriptor(this, propertyKey);
|
|
224
|
+
if (!descriptor || descriptor.configurable)
|
|
225
|
+
Object.defineProperty(this, propertyKey, {
|
|
226
|
+
enumerable: true,
|
|
227
|
+
configurable: false,
|
|
228
|
+
get: () => values.get(this),
|
|
229
|
+
set: (newValue) => {
|
|
230
|
+
let val;
|
|
231
|
+
try {
|
|
232
|
+
val = (0, dates_1.parseDate)(format, newValue);
|
|
233
|
+
values.set(this, val);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
console.error((0, strings_1.sf)("Failed to parse date: {0}", e.message || e));
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
this[propertyKey] = newValue;
|
|
241
|
+
},
|
|
242
|
+
get() {
|
|
243
|
+
console.log("here");
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* @summary Password Handler Decorator
|
|
250
|
+
* @description Validators to validate a decorated property must use key {@link ValidationKeys#PASSWORD}
|
|
251
|
+
*
|
|
252
|
+
* @param {RegExp} [pattern] defaults to {@link PasswordPatterns#CHAR8_ONE_OF_EACH}
|
|
253
|
+
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#PASSWORD}
|
|
254
|
+
* @param {Constructor<Validator>} [validator] Defaults to {@link PasswordValidator}
|
|
255
|
+
*
|
|
256
|
+
* @function password
|
|
257
|
+
*
|
|
258
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
259
|
+
* @category Decorators
|
|
260
|
+
*/
|
|
261
|
+
function password(pattern = constants_1.DEFAULT_PATTERNS.PASSWORD.CHAR8_ONE_OF_EACH, message = constants_1.DEFAULT_ERROR_MESSAGES.PASSWORD) {
|
|
262
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.PASSWORD), {
|
|
263
|
+
pattern: pattern,
|
|
264
|
+
message: message,
|
|
265
|
+
types: [String.name],
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* @summary List Decorator
|
|
270
|
+
* @description Also sets the {@link type} to the provided collection
|
|
271
|
+
*
|
|
272
|
+
* @param {ModelConstructor} clazz
|
|
273
|
+
* @param {string} [collection] The collection being used. defaults to Array
|
|
274
|
+
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
|
|
275
|
+
* @param {Constructor<Validator>} [validator] defaults to {@link ListValidator}
|
|
276
|
+
*
|
|
277
|
+
* @function list
|
|
278
|
+
*
|
|
279
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
280
|
+
* @category Decorators
|
|
281
|
+
*/
|
|
282
|
+
function list(clazz, collection = "Array", message = constants_1.DEFAULT_ERROR_MESSAGES.LIST) {
|
|
283
|
+
return (0, decorators_1.propMetadata)(Validation_1.Validation.key(constants_1.ValidationKeys.LIST), {
|
|
284
|
+
clazz: Array.isArray(clazz) ? clazz.map((c) => c.name) : [clazz.name],
|
|
285
|
+
type: collection,
|
|
286
|
+
message: message,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* @summary Set Decorator
|
|
291
|
+
* @description Wrapper for {@link list} with the 'Set' Collection
|
|
292
|
+
*
|
|
293
|
+
* @param {ModelConstructor} clazz
|
|
294
|
+
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
|
|
295
|
+
* @param {Constructor<Validator>} [validator]
|
|
296
|
+
*
|
|
297
|
+
* @function set
|
|
298
|
+
*
|
|
299
|
+
* @memberOf module:decorator-validation.Decorators.Validation
|
|
300
|
+
* @category Decorators
|
|
301
|
+
*/
|
|
302
|
+
function set(clazz, message = constants_1.DEFAULT_ERROR_MESSAGES.LIST) {
|
|
303
|
+
return list(clazz, "Set", message);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsNEJBT0M7QUFhRCxrQkFTQztBQWFELGtCQVNDO0FBYUQsb0JBU0M7QUFhRCw4QkFZQztBQWFELDhCQVlDO0FBYUQsMEJBWUM7QUFZRCxzQkFTQztBQVlELGtCQU1DO0FBYUQsb0JBUUM7QUFpQkQsb0JBdUNDO0FBZUQsNEJBU0M7QUFnQkQsb0JBVUM7QUFlRCxrQkFLQztBQXJXRCw0QkFBMEI7QUFFMUIsc0RBSWdDO0FBQ2hDLDhDQUFzQztBQUV0QywwQ0FBMkM7QUFDM0Msb0RBQW1EO0FBQ25ELDZDQUEwQztBQUUxQzs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixRQUFRLENBQUMsVUFBa0Isa0NBQXNCLENBQUMsUUFBUTtJQUN4RSxPQUFPLElBQUEseUJBQVksRUFDakIsdUJBQVUsQ0FBQyxHQUFHLENBQUMsMEJBQWMsQ0FBQyxRQUFRLENBQUMsRUFDdkM7UUFDRSxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsS0FBNkIsRUFDN0IsVUFBa0Isa0NBQXNCLENBQUMsR0FBRztJQUU1QyxPQUFPLElBQUEseUJBQVksRUFBcUIsdUJBQVUsQ0FBQyxHQUFHLENBQUMsMEJBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxRSxHQUFHLEVBQUUsS0FBSztRQUNWLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNoQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsS0FBNkIsRUFDN0IsVUFBa0Isa0NBQXNCLENBQUMsR0FBRztJQUU1QyxPQUFPLElBQUEseUJBQVksRUFBcUIsdUJBQVUsQ0FBQyxHQUFH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Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBZ0IsSUFBSSxDQUNsQixLQUFzRCxFQUN0RCxhQUE4QixPQUFPLEVBQ3JDLFVBQWtCLGtDQUFzQixDQUFDLElBQUk7SUFFN0MsT0FBTyxJQUFBLHlCQUFZLEVBQUMsdUJBQVUsQ0FBQyxHQUFHLENBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN2RCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDckUsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLE9BQU87S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsS0FBNEIsRUFDNUIsVUFBa0Isa0NBQXNCLENBQUMsSUFBSTtJQUU3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUMiLCJmaWxlIjoidmFsaWRhdGlvbi9kZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1ldGFkYXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIERFRkFVTFRfUEFUVEVSTlMsXG4gIFZhbGlkYXRpb25LZXlzLFxufSBmcm9tIFwiLi9WYWxpZGF0b3JzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgTW9kZWxDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9tb2RlbC90eXBlc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVzXCI7XG5pbXBvcnQgeyBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdXRpbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gXCIuL1ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBNYXJrcyB0aGUgcHJvcGVydHkgYXMgcmVxdWlyZWQuXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1JFUVVJUkVEfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1JFUVVJUkVEfVxuICpcbiAqIEBmdW5jdGlvbiByZXF1aXJlZFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlJFUVVJUkVEKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCksXG4gICAge1xuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIG1pbmltdW0gdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eVxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNNSU59XG4gKlxuICogQHBhcmFtIHtudW1iZXIgfCBEYXRlfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUlOfVxuICpcbiAqIEBmdW5jdGlvbiBtaW5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWluKFxuICB2YWx1ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5NSU5cbikge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuTUlOKSwge1xuICAgIG1pbjogdmFsdWUsXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICB0eXBlczogW051bWJlci5uYW1lLCBEYXRlLm5hbWVdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI01BWH1cbiAqXG4gKiBAcGFyYW0ge251bWJlciB8IERhdGV9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNNQVh9XG4gKlxuICogQGZ1bmN0aW9uIG1heFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgoXG4gIHZhbHVlOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1BWFxuKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5NQVgpLCB7XG4gICAgbWF4OiB2YWx1ZSxcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIHR5cGVzOiBbTnVtYmVyLm5hbWUsIERhdGUubmFtZV0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBzdGVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjU1RFUH1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1NURVB9XG4gKlxuICogQGZ1bmN0aW9uIHN0ZXBcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcChcbiAgdmFsdWU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5TVEVQXG4pIHtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLlNURVApLCB7XG4gICAgc3RlcDogdmFsdWUsXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICB0eXBlczogW051bWJlci5uYW1lXSxcbiAgfSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIG1pbmltdW0gbGVuZ3RoIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjTUlOX0xFTkdUSH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTl9MRU5HVEh9XG4gKlxuICogQGZ1bmN0aW9uIG1pbmxlbmd0aFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW5sZW5ndGgoXG4gIHZhbHVlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTUlOX0xFTkdUSFxuKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIKSxcbiAgICB7XG4gICAgICBtaW5MZW5ndGg6IHZhbHVlLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWUsIEFycmF5Lm5hbWUsIFNldC5uYW1lXSxcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIG1heGltdW0gbGVuZ3RoIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjTUFYX0xFTkdUSH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01BWF9MRU5HVEh9XG4gKlxuICogQGZ1bmN0aW9uIG1heGxlbmd0aFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhsZW5ndGgoXG4gIHZhbHVlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTUFYX0xFTkdUSFxuKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIKSxcbiAgICB7XG4gICAgICBtYXhMZW5ndGg6IHZhbHVlLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWUsIEFycmF5Lm5hbWUsIFNldC5uYW1lXSxcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIFJlZ0V4cCBwYXR0ZXJuIHRoZSBwcm9wZXJ0eSBtdXN0IHJlc3BlY3RcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjUEFUVEVSTn1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1BBVFRFUk59XG4gKlxuICogQGZ1bmN0aW9uIHBhdHRlcm5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0dGVybihcbiAgdmFsdWU6IFJlZ0V4cCB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5QQVRURVJOXG4pIHtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLlBBVFRFUk4pLFxuICAgIHtcbiAgICAgIHBhdHRlcm46IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcHJvcGVydHkgYXMgYW4gZW1haWxcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjRU1BSUx9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjRU1BSUx9XG4gKlxuICogQGZ1bmN0aW9uIGVtYWlsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnMuVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuRU1BSUwpIHtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkVNQUlMKSxcbiAgICB7XG4gICAgICBwYXR0ZXJuOiBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWVdLFxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwcm9wZXJ0eSBhcyBhbiBVUkxcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjVVJMfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1VSTH1cbiAqXG4gKiBAZnVuY3Rpb24gdXJsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnMuVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybChtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlVSTCkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVVJMKSwge1xuICAgIHBhdHRlcm46IERFRkFVTFRfUEFUVEVSTlMuVVJMLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgdHlwZXM6IFtTdHJpbmcubmFtZV0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEVuZm9yY2VzIHR5cGUgdmVyaWZpY2F0aW9uXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1RZUEV9XG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gdHlwZXMgYWNjZXB0ZWQgdHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1RZUEV9XG4gKlxuICogQGZ1bmN0aW9uIHR5cGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZShcbiAgdHlwZXM6IHN0cmluZ1tdIHwgc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRZUEVcbikge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVFlQRSksIHtcbiAgICBjdXN0b21UeXBlczogdHlwZXMsXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgfSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGF0ZSBIYW5kbGVyIERlY29yYXRvclxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNEQVRFfVxuICpcbiAqIFdpbGwgZW5mb3JjZSBzZXJpYWxpemF0aW9uIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgZm9ybWF0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBhY2NlcHRlZCBmb3JtYXQgYWNjb3JkaW5nIHRvIHtAbGluayBmb3JtYXREYXRlfVxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjREFURX1cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VmFsaWRhdG9yPn0gW3ZhbGlkYXRvcl0gdGhlIFZhbGlkYXRvciB0byBiZSB1c2VkLiBEZWZhdWx0cyB0byB7QGxpbmsgRGF0ZVZhbGlkYXRvcn1cbiAqXG4gKiBAZnVuY3Rpb24gZGF0ZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZShcbiAgZm9ybWF0OiBzdHJpbmcgPSBcImRkL01NL3l5eXlcIixcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5EQVRFXG4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByb3BlcnR5S2V5PzogYW55KTogYW55ID0+IHtcbiAgICBwcm9wTWV0YWRhdGEoVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuREFURSksIHtcbiAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHR5cGVzOiBbRGF0ZS5uYW1lXSxcbiAgICB9KSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHNldCh0aGlzOiBhbnksIG5ld1ZhbHVlOiBzdHJpbmcgfCBEYXRlKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKVxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHZhbHVlcy5nZXQodGhpcyksXG4gICAgICAgICAgICBzZXQ6IChuZXdWYWx1ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBsZXQgdmFsOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHBhcnNlRGF0ZShmb3JtYXQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuc2V0KHRoaXMsIHZhbCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Ioc2YoXCJGYWlsZWQgdG8gcGFyc2UgZGF0ZTogezB9XCIsIGUubWVzc2FnZSB8fCBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXNbcHJvcGVydHlLZXldID0gbmV3VmFsdWU7XG4gICAgICB9LFxuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImhlcmVcIik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFBhc3N3b3JkIEhhbmRsZXIgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1BBU1NXT1JEfVxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSBbcGF0dGVybl0gZGVmYXVsdHMgdG8ge0BsaW5rIFBhc3N3b3JkUGF0dGVybnMjQ0hBUjhfT05FX09GX0VBQ0h9XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVNTV09SRH1cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VmFsaWRhdG9yPn0gW3ZhbGlkYXRvcl0gRGVmYXVsdHMgdG8ge0BsaW5rIFBhc3N3b3JkVmFsaWRhdG9yfVxuICpcbiAqIEBmdW5jdGlvbiBwYXNzd29yZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzc3dvcmQoXG4gIHBhdHRlcm46IFJlZ0V4cCA9IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuUEFTU1dPUkRcbikge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhKFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLlBBU1NXT1JEKSwge1xuICAgIHBhdHRlcm46IHBhdHRlcm4sXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgfSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgTGlzdCBEZWNvcmF0b3JcbiAqIEBkZXNjcmlwdGlvbiBBbHNvIHNldHMgdGhlIHtAbGluayB0eXBlfSB0byB0aGUgcHJvdmlkZWQgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSB7TW9kZWxDb25zdHJ1Y3Rvcn0gY2xhenpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29sbGVjdGlvbl0gVGhlIGNvbGxlY3Rpb24gYmVpbmcgdXNlZC4gZGVmYXVsdHMgdG8gQXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTElTVH1cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VmFsaWRhdG9yPn0gW3ZhbGlkYXRvcl0gZGVmYXVsdHMgdG8ge0BsaW5rIExpc3RWYWxpZGF0b3J9XG4gKlxuICogQGZ1bmN0aW9uIGxpc3RcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnMuVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3QoXG4gIGNsYXp6OiBNb2RlbENvbnN0cnVjdG9yPGFueT4gfCBNb2RlbENvbnN0cnVjdG9yPGFueT5bXSxcbiAgY29sbGVjdGlvbjogXCJBcnJheVwiIHwgXCJTZXRcIiA9IFwiQXJyYXlcIixcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MSVNUXG4pIHtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YShWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5MSVNUKSwge1xuICAgIGNsYXp6OiBBcnJheS5pc0FycmF5KGNsYXp6KSA/IGNsYXp6Lm1hcCgoYykgPT4gYy5uYW1lKSA6IFtjbGF6ei5uYW1lXSxcbiAgICB0eXBlOiBjb2xsZWN0aW9uLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFNldCBEZWNvcmF0b3JcbiAqIEBkZXNjcmlwdGlvbiBXcmFwcGVyIGZvciB7QGxpbmsgbGlzdH0gd2l0aCB0aGUgJ1NldCcgQ29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSB7TW9kZWxDb25zdHJ1Y3Rvcn0gY2xhenpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTElTVH1cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VmFsaWRhdG9yPn0gW3ZhbGlkYXRvcl1cbiAqXG4gKiBAZnVuY3Rpb24gc2V0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQoXG4gIGNsYXp6OiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTElTVFxuKSB7XG4gIHJldHVybiBsaXN0KGNsYXp6LCBcIlNldFwiLCBtZXNzYWdlKTtcbn1cbiJdfQ==
|