kwikid-forms 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -43
- package/bundles/kwikid-forms.umd.js +4286 -4213
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/kwikid-forms.js +4 -4
- package/esm2015/lib/builder/builder.component.js +138 -138
- package/esm2015/lib/builder/builder.module.js +21 -21
- package/esm2015/lib/kwikid-forms.module.js +38 -38
- package/esm2015/lib/renderer/form-view/definitions/actions/form-view.actions.enum.definitions.js +20 -20
- package/esm2015/lib/renderer/form-view/definitions/actions/form-view.actions.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/apis/form-view.apis.enum.definitions.js +8 -8
- package/esm2015/lib/renderer/form-view/definitions/apis/form-view.apis.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/common/form-view.common.enum.definitions.js +101 -101
- package/esm2015/lib/renderer/form-view/definitions/common/form-view.common.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/fields/form-view.fields.enum.definitions.js +15 -15
- package/esm2015/lib/renderer/form-view/definitions/fields/form-view.fields.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/sources/form-view.sources.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/triggers/form-view.triggers.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/definitions/validations/form-view.validations.type.definitions.js +2 -2
- package/esm2015/lib/renderer/form-view/form-view.component.js +814 -814
- package/esm2015/lib/renderer/form-view/form-view.module.js +44 -44
- package/esm2015/lib/renderer/form-view/form-view.service.js +29 -29
- package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +137 -137
- package/esm2015/lib/renderer/form-view/helpers/form-view.common.helper.js +136 -136
- package/esm2015/lib/renderer/form-view/helpers/form-view.defaults.helper.js +63 -63
- package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +203 -203
- package/esm2015/lib/renderer/form-view/helpers/form-view.validations.helper.js +161 -161
- package/esm2015/lib/renderer/forms-list/forms-list.component.js +89 -89
- package/esm2015/lib/renderer/forms-list/forms-list.module.js +37 -37
- package/esm2015/lib/renderer/renderer.component.js +282 -267
- package/esm2015/lib/renderer/renderer.config-converter.helper.js +586 -586
- package/esm2015/lib/renderer/renderer.helper.js +50 -50
- package/esm2015/lib/renderer/renderer.module.js +50 -50
- package/esm2015/lib/renderer/renderer.service.js +172 -172
- package/esm2015/public_api.js +17 -17
- package/fesm2015/kwikid-forms.js +3031 -3016
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/kwikid-forms.d.ts +5 -5
- package/lib/builder/builder.component.d.ts +68 -68
- package/lib/builder/builder.module.d.ts +10 -10
- package/lib/kwikid-forms.module.d.ts +10 -10
- package/lib/renderer/form-view/definitions/actions/form-view.actions.enum.definitions.d.ts +18 -18
- package/lib/renderer/form-view/definitions/actions/form-view.actions.type.definitions.d.ts +91 -91
- package/lib/renderer/form-view/definitions/apis/form-view.apis.enum.definitions.d.ts +6 -6
- package/lib/renderer/form-view/definitions/apis/form-view.apis.type.definitions.d.ts +40 -40
- package/lib/renderer/form-view/definitions/common/form-view.common.enum.definitions.d.ts +97 -97
- package/lib/renderer/form-view/definitions/common/form-view.common.type.definitions.d.ts +7 -7
- package/lib/renderer/form-view/definitions/fields/form-view.fields.enum.definitions.d.ts +13 -13
- package/lib/renderer/form-view/definitions/fields/form-view.fields.type.definitions.d.ts +136 -136
- package/lib/renderer/form-view/definitions/sources/form-view.sources.type.definitions.d.ts +16 -16
- package/lib/renderer/form-view/definitions/triggers/form-view.triggers.type.definitions.d.ts +1 -1
- package/lib/renderer/form-view/definitions/validations/form-view.validations.type.definitions.d.ts +16 -16
- package/lib/renderer/form-view/form-view.component.d.ts +80 -80
- package/lib/renderer/form-view/form-view.module.d.ts +12 -12
- package/lib/renderer/form-view/form-view.service.d.ts +5 -5
- package/lib/renderer/form-view/helpers/form-view.apis.helper.d.ts +17 -17
- package/lib/renderer/form-view/helpers/form-view.common.helper.d.ts +19 -19
- package/lib/renderer/form-view/helpers/form-view.defaults.helper.d.ts +10 -10
- package/lib/renderer/form-view/helpers/form-view.fields.helper.d.ts +24 -24
- package/lib/renderer/form-view/helpers/form-view.validations.helper.d.ts +25 -25
- package/lib/renderer/forms-list/forms-list.component.d.ts +22 -22
- package/lib/renderer/forms-list/forms-list.module.d.ts +11 -11
- package/lib/renderer/renderer.component.d.ts +36 -35
- package/lib/renderer/renderer.config-converter.helper.d.ts +7 -7
- package/lib/renderer/renderer.helper.d.ts +6 -6
- package/lib/renderer/renderer.module.d.ts +14 -14
- package/lib/renderer/renderer.service.d.ts +28 -28
- package/package.json +1 -1
- package/public_api.d.ts +9 -9
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { FormArray, FormGroup, Validators } from "@angular/forms";
|
|
3
|
-
import { Actions, Condition, logMethod, Rules, checkObjectKeyExists, isNotEmptyValue } from "kwikid-toolkit";
|
|
4
|
-
import { EPattern, EPatternKey } from "../definitions/common/form-view.common.enum.definitions";
|
|
5
|
-
export class Validations {
|
|
6
|
-
constructor(field, formData, previousFormData, allFormsData, takeAction) {
|
|
7
|
-
this._field = field;
|
|
8
|
-
this._formData = formData;
|
|
9
|
-
this._previousFormData = previousFormData;
|
|
10
|
-
this._allFormsData = allFormsData;
|
|
11
|
-
this._takeAction = takeAction;
|
|
12
|
-
}
|
|
13
|
-
get formData() {
|
|
14
|
-
return this._formData;
|
|
15
|
-
}
|
|
16
|
-
set formData(value) {
|
|
17
|
-
this._formData = value;
|
|
18
|
-
}
|
|
19
|
-
get previousFormData() {
|
|
20
|
-
return this._previousFormData;
|
|
21
|
-
}
|
|
22
|
-
set previousFormData(value) {
|
|
23
|
-
this._previousFormData = value;
|
|
24
|
-
}
|
|
25
|
-
get allFormsData() {
|
|
26
|
-
return this._allFormsData;
|
|
27
|
-
}
|
|
28
|
-
set allFormsData(value) {
|
|
29
|
-
this._allFormsData = value;
|
|
30
|
-
}
|
|
31
|
-
get field() {
|
|
32
|
-
return this._field;
|
|
33
|
-
}
|
|
34
|
-
set field(value) {
|
|
35
|
-
this._field = value;
|
|
36
|
-
}
|
|
37
|
-
getFieldValidators(field) {
|
|
38
|
-
let validators = [];
|
|
39
|
-
if (checkObjectKeyExists(field, "validators") &&
|
|
40
|
-
checkObjectKeyExists(field.validators, "min") &&
|
|
41
|
-
isNotEmptyValue(field.validators.min)) {
|
|
42
|
-
validators.push(Validators.min(field.validators.min));
|
|
43
|
-
}
|
|
44
|
-
if (checkObjectKeyExists(field, "validators") &&
|
|
45
|
-
checkObjectKeyExists(field.validators, "max") &&
|
|
46
|
-
isNotEmptyValue(field.validators.max)) {
|
|
47
|
-
validators.push(Validators.max(field.validators.max));
|
|
48
|
-
}
|
|
49
|
-
if ((checkObjectKeyExists(field, "required") && field.required) ||
|
|
50
|
-
(checkObjectKeyExists(field, "validators") &&
|
|
51
|
-
checkObjectKeyExists(field.validators, "required") &&
|
|
52
|
-
field.validators.required)) {
|
|
53
|
-
validators.push(Validators.required);
|
|
54
|
-
}
|
|
55
|
-
if (checkObjectKeyExists(field, "validators") &&
|
|
56
|
-
checkObjectKeyExists(field.validators, "minLength") &&
|
|
57
|
-
isNotEmptyValue(field.validators.minLength)) {
|
|
58
|
-
validators.push(Validators.minLength(field.validators.minLength));
|
|
59
|
-
}
|
|
60
|
-
if (checkObjectKeyExists(field, "validators") &&
|
|
61
|
-
checkObjectKeyExists(field.validators, "maxLength") &&
|
|
62
|
-
isNotEmptyValue(field.validators.maxLength)) {
|
|
63
|
-
validators.push(Validators.maxLength(field.validators.maxLength));
|
|
64
|
-
}
|
|
65
|
-
if (checkObjectKeyExists(field, "validators") &&
|
|
66
|
-
checkObjectKeyExists(field.validators, "pattern") &&
|
|
67
|
-
isNotEmptyValue(field.validators.pattern)) {
|
|
68
|
-
if (checkObjectKeyExists(field.validators.pattern, "key")) {
|
|
69
|
-
if (field.validators.pattern.key === EPatternKey.CUSTOM) {
|
|
70
|
-
validators.push(Validators.pattern(field.validators.pattern.pattern));
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
validators.push(Validators.pattern(EPattern[field.validators.pattern.key]));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return validators;
|
|
78
|
-
}
|
|
79
|
-
getFormValidationErrors(control) {
|
|
80
|
-
let errors = [];
|
|
81
|
-
for (const key in control.controls) {
|
|
82
|
-
const controlErrors = control.controls[key].errors;
|
|
83
|
-
if (controlErrors !== null && controlErrors !== undefined) {
|
|
84
|
-
Object.keys(controlErrors).forEach((keyError) => {
|
|
85
|
-
errors.push({
|
|
86
|
-
name: keyError,
|
|
87
|
-
value: controlErrors[keyError]
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return errors;
|
|
93
|
-
}
|
|
94
|
-
findInvalidControlsRecursive(formToInvestigate) {
|
|
95
|
-
var controls = [];
|
|
96
|
-
let recursiveFunc = (form) => {
|
|
97
|
-
Object.keys(form.controls).forEach((field) => {
|
|
98
|
-
const control = form.get(field);
|
|
99
|
-
if (control.invalid) {
|
|
100
|
-
controls.push({
|
|
101
|
-
key: field,
|
|
102
|
-
invalid: true
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
controls.push({
|
|
107
|
-
key: field,
|
|
108
|
-
invalid: false
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
if (control instanceof FormGroup) {
|
|
112
|
-
recursiveFunc(control);
|
|
113
|
-
}
|
|
114
|
-
else if (control instanceof FormArray) {
|
|
115
|
-
recursiveFunc(control);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
};
|
|
119
|
-
recursiveFunc(formToInvestigate);
|
|
120
|
-
return controls;
|
|
121
|
-
}
|
|
122
|
-
validateField() {
|
|
123
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
const validations = this._field.validation;
|
|
125
|
-
const triggers = validations.triggers;
|
|
126
|
-
const rules = validations.rules;
|
|
127
|
-
const actions = validations.actions;
|
|
128
|
-
const rulesMapping = new Rules(rules, {
|
|
129
|
-
FIELD_CONFIG: this._field,
|
|
130
|
-
FORM_DATA: this._formData,
|
|
131
|
-
PREVIOUS_FORM_DATA: this._previousFormData,
|
|
132
|
-
ALL_FORMS_DATA: this._allFormsData
|
|
133
|
-
}).mapping();
|
|
134
|
-
for (let action of actions) {
|
|
135
|
-
const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
|
|
136
|
-
if (conditionEvaluation) {
|
|
137
|
-
const actions = new Actions(action, rulesMapping, {
|
|
138
|
-
FIELD_CONFIG: this._field,
|
|
139
|
-
FORM_DATA: this._formData,
|
|
140
|
-
PREVIOUS_FORM_DATA: this._previousFormData,
|
|
141
|
-
ALL_FORMS_DATA: this._allFormsData
|
|
142
|
-
}, this._takeAction);
|
|
143
|
-
yield actions.execute();
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
__decorate([
|
|
150
|
-
logMethod
|
|
151
|
-
], Validations.prototype, "getFieldValidators", null);
|
|
152
|
-
__decorate([
|
|
153
|
-
logMethod
|
|
154
|
-
], Validations.prototype, "getFormValidationErrors", null);
|
|
155
|
-
__decorate([
|
|
156
|
-
logMethod
|
|
157
|
-
], Validations.prototype, "findInvalidControlsRecursive", null);
|
|
158
|
-
__decorate([
|
|
159
|
-
logMethod
|
|
160
|
-
], Validations.prototype, "validateField", null);
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LnZhbGlkYXRpb25zLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9oZWxwZXJzL2Zvcm0tdmlldy52YWxpZGF0aW9ucy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUVULFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWixNQUFNLHlEQUF5RCxDQUFDO0FBR2pFLE1BQU0sT0FBTyxXQUFXO0lBbUN0QixZQUNFLEtBQWEsRUFDYixRQUFhLEVBQ2IsZ0JBQXFCLEVBQ3JCLFlBQWlCLEVBQ2pCLFVBQWU7UUFFZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQTdDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQVU7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUdELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFD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LGlCQUFpQjtnQkFDMUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ25DLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUViLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUN2QyxNQUFNLENBQUMsU0FBUyxFQUNoQixZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFYixJQUFJLG1CQUFtQixFQUFFO29CQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FDekIsTUFBTSxFQUNOLFlBQVksRUFDWjt3QkFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjt3QkFDMUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO3FCQUNuQyxFQUNELElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7b0JBRUYsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pCO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7Q0FDRjtBQXBKQztJQURDLFNBQVM7cURBeURUO0FBR0Q7SUFEQyxTQUFTOzBEQW1CVDtBQUdEO0lBREMsU0FBUzsrREE2QlQ7QUFHRDtJQURDLFNBQVM7Z0RBcUNUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yc1xyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1xyXG4gIEFjdGlvbnMsXHJcbiAgQ29uZGl0aW9uLFxyXG4gIGxvZ01ldGhvZCxcclxuICBSdWxlcyxcclxuICBjaGVja09iamVjdEtleUV4aXN0cyxcclxuICBpc05vdEVtcHR5VmFsdWVcclxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcclxuaW1wb3J0IHtcclxuICBFUGF0dGVybixcclxuICBFUGF0dGVybktleVxyXG59IGZyb20gXCIuLi9kZWZpbml0aW9ucy9jb21tb24vZm9ybS12aWV3LmNvbW1vbi5lbnVtLmRlZmluaXRpb25zXCI7XHJcbmltcG9ydCB7IFRGaWVsZCB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9maWVsZHMvZm9ybS12aWV3LmZpZWxkcy50eXBlLmRlZmluaXRpb25zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbnMge1xyXG4gIHByaXZhdGUgX2Zvcm1EYXRhOiBhbnk7XHJcbiAgZ2V0IGZvcm1EYXRhKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybURhdGE7XHJcbiAgfVxyXG4gIHNldCBmb3JtRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9mb3JtRGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJldmlvdXNGb3JtRGF0YTogYW55O1xyXG4gIGdldCBwcmV2aW91c0Zvcm1EYXRhKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNGb3JtRGF0YTtcclxuICB9XHJcbiAgc2V0IHByZXZpb3VzRm9ybURhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fcHJldmlvdXNGb3JtRGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWxsRm9ybXNEYXRhOiBhbnk7XHJcbiAgZ2V0IGFsbEZvcm1zRGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbEZvcm1zRGF0YTtcclxuICB9XHJcbiAgc2V0IGFsbEZvcm1zRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9hbGxGb3Jtc0RhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpZWxkOiBURmllbGQ7XHJcbiAgZ2V0IGZpZWxkKCk6IFRGaWVsZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XHJcbiAgfVxyXG4gIHNldCBmaWVsZCh2YWx1ZTogVEZpZWxkKSB7XHJcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGFrZUFjdGlvbjogRnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZmllbGQ6IFRGaWVsZCxcclxuICAgIGZvcm1EYXRhOiBhbnksXHJcbiAgICBwcmV2aW91c0Zvcm1EYXRhOiBhbnksXHJcbiAgICBhbGxGb3Jtc0RhdGE6IGFueSxcclxuICAgIHRha2VBY3Rpb246IGFueVxyXG4gICkge1xyXG4gICAgdGhpcy5fZmllbGQgPSBmaWVsZDtcclxuICAgIHRoaXMuX2Zvcm1EYXRhID0gZm9ybURhdGE7XHJcbiAgICB0aGlzLl9wcmV2aW91c0Zvcm1EYXRhID0gcHJldmlvdXNGb3JtRGF0YTtcclxuICAgIHRoaXMuX2FsbEZvcm1zRGF0YSA9IGFsbEZvcm1zRGF0YTtcclxuICAgIHRoaXMuX3Rha2VBY3Rpb24gPSB0YWtlQWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGdldEZpZWxkVmFsaWRhdG9ycyhmaWVsZDogYW55KSB7XHJcbiAgICBsZXQgdmFsaWRhdG9ycyA9IFtdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdG9yc1wiKSAmJlxyXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIm1pblwiKSAmJlxyXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5taW4pXHJcbiAgICApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLnZhbGlkYXRvcnMubWluKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJtYXhcIikgJiZcclxuICAgICAgaXNOb3RFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnMubWF4KVxyXG4gICAgKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heChmaWVsZC52YWxpZGF0b3JzLm1heCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwicmVxdWlyZWRcIikgJiYgZmllbGQucmVxdWlyZWQpIHx8XHJcbiAgICAgIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXHJcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJyZXF1aXJlZFwiKSAmJlxyXG4gICAgICAgIGZpZWxkLnZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXHJcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMsIFwibWluTGVuZ3RoXCIpICYmXHJcbiAgICAgIGlzTm90RW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzLm1pbkxlbmd0aClcclxuICAgICkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdG9yc1wiKSAmJlxyXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIm1heExlbmd0aFwiKSAmJlxyXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGgpXHJcbiAgICApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJwYXR0ZXJuXCIpICYmXHJcbiAgICAgIGlzTm90RW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzLnBhdHRlcm4pXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybiwgXCJrZXlcIikpIHtcclxuICAgICAgICBpZiAoZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLmtleSA9PT0gRVBhdHRlcm5LZXkuQ1VTVE9NKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybi5wYXR0ZXJuKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEVQYXR0ZXJuW2ZpZWxkLnZhbGlkYXRvcnMucGF0dGVybi5rZXldKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycyhcclxuICAgIGNvbnRyb2w6IEZvcm1Hcm91cFxyXG4gICk6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB7XHJcbiAgICBsZXQgZXJyb3JzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sLmNvbnRyb2xzKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBjb250cm9sLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xyXG4gICAgICBpZiAoY29udHJvbEVycm9ycyAhPT0gbnVsbCAmJiBjb250cm9sRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gICAgICAgICAgZXJyb3JzLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBrZXlFcnJvcixcclxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xFcnJvcnNba2V5RXJyb3JdXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmluZEludmFsaWRDb250cm9sc1JlY3Vyc2l2ZShmb3JtVG9JbnZlc3RpZ2F0ZTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KSB7XHJcbiAgICB2YXIgY29udHJvbHM6IGFueVtdID0gW107XHJcblxyXG4gICAgbGV0IHJlY3Vyc2l2ZUZ1bmMgPSAoZm9ybTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KSA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgIGNvbnRyb2xzLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLFxyXG4gICAgICAgICAgICBpbnZhbGlkOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29udHJvbHMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQsXHJcbiAgICAgICAgICAgIGludmFsaWQ6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgIHJlY3Vyc2l2ZUZ1bmMoY29udHJvbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICByZWN1cnNpdmVGdW5jKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlY3Vyc2l2ZUZ1bmMoZm9ybVRvSW52ZXN0aWdhdGUpO1xyXG5cclxuICAgIHJldHVybiBjb250cm9scztcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyB2YWxpZGF0ZUZpZWxkKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHRoaXMuX2ZpZWxkLnZhbGlkYXRpb247XHJcblxyXG4gICAgY29uc3QgdHJpZ2dlcnMgPSB2YWxpZGF0aW9ucy50cmlnZ2VycztcclxuICAgIGNvbnN0IHJ1bGVzID0gdmFsaWRhdGlvbnMucnVsZXM7XHJcbiAgICBjb25zdCBhY3Rpb25zID0gdmFsaWRhdGlvbnMuYWN0aW9ucztcclxuXHJcbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZXMocnVsZXMsIHtcclxuICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZCxcclxuICAgICAgRk9STV9EQVRBOiB0aGlzLl9mb3JtRGF0YSxcclxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLl9wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5fYWxsRm9ybXNEYXRhXHJcbiAgICB9KS5tYXBwaW5nKCk7XHJcblxyXG4gICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbiA9IG5ldyBDb25kaXRpb24oXHJcbiAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcclxuICAgICAgICBydWxlc01hcHBpbmdcclxuICAgICAgKS5ldmFsdWF0ZSgpO1xyXG5cclxuICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcclxuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbnMoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICBydWxlc01hcHBpbmcsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGQsXHJcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5fZm9ybURhdGEsXHJcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5fcHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuX2FsbEZvcm1zRGF0YVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { FormArray, FormGroup, Validators } from "@angular/forms";
|
|
3
|
+
import { Actions, Condition, logMethod, Rules, checkObjectKeyExists, isNotEmptyValue } from "kwikid-toolkit";
|
|
4
|
+
import { EPattern, EPatternKey } from "../definitions/common/form-view.common.enum.definitions";
|
|
5
|
+
export class Validations {
|
|
6
|
+
constructor(field, formData, previousFormData, allFormsData, takeAction) {
|
|
7
|
+
this._field = field;
|
|
8
|
+
this._formData = formData;
|
|
9
|
+
this._previousFormData = previousFormData;
|
|
10
|
+
this._allFormsData = allFormsData;
|
|
11
|
+
this._takeAction = takeAction;
|
|
12
|
+
}
|
|
13
|
+
get formData() {
|
|
14
|
+
return this._formData;
|
|
15
|
+
}
|
|
16
|
+
set formData(value) {
|
|
17
|
+
this._formData = value;
|
|
18
|
+
}
|
|
19
|
+
get previousFormData() {
|
|
20
|
+
return this._previousFormData;
|
|
21
|
+
}
|
|
22
|
+
set previousFormData(value) {
|
|
23
|
+
this._previousFormData = value;
|
|
24
|
+
}
|
|
25
|
+
get allFormsData() {
|
|
26
|
+
return this._allFormsData;
|
|
27
|
+
}
|
|
28
|
+
set allFormsData(value) {
|
|
29
|
+
this._allFormsData = value;
|
|
30
|
+
}
|
|
31
|
+
get field() {
|
|
32
|
+
return this._field;
|
|
33
|
+
}
|
|
34
|
+
set field(value) {
|
|
35
|
+
this._field = value;
|
|
36
|
+
}
|
|
37
|
+
getFieldValidators(field) {
|
|
38
|
+
let validators = [];
|
|
39
|
+
if (checkObjectKeyExists(field, "validators") &&
|
|
40
|
+
checkObjectKeyExists(field.validators, "min") &&
|
|
41
|
+
isNotEmptyValue(field.validators.min)) {
|
|
42
|
+
validators.push(Validators.min(field.validators.min));
|
|
43
|
+
}
|
|
44
|
+
if (checkObjectKeyExists(field, "validators") &&
|
|
45
|
+
checkObjectKeyExists(field.validators, "max") &&
|
|
46
|
+
isNotEmptyValue(field.validators.max)) {
|
|
47
|
+
validators.push(Validators.max(field.validators.max));
|
|
48
|
+
}
|
|
49
|
+
if ((checkObjectKeyExists(field, "required") && field.required) ||
|
|
50
|
+
(checkObjectKeyExists(field, "validators") &&
|
|
51
|
+
checkObjectKeyExists(field.validators, "required") &&
|
|
52
|
+
field.validators.required)) {
|
|
53
|
+
validators.push(Validators.required);
|
|
54
|
+
}
|
|
55
|
+
if (checkObjectKeyExists(field, "validators") &&
|
|
56
|
+
checkObjectKeyExists(field.validators, "minLength") &&
|
|
57
|
+
isNotEmptyValue(field.validators.minLength)) {
|
|
58
|
+
validators.push(Validators.minLength(field.validators.minLength));
|
|
59
|
+
}
|
|
60
|
+
if (checkObjectKeyExists(field, "validators") &&
|
|
61
|
+
checkObjectKeyExists(field.validators, "maxLength") &&
|
|
62
|
+
isNotEmptyValue(field.validators.maxLength)) {
|
|
63
|
+
validators.push(Validators.maxLength(field.validators.maxLength));
|
|
64
|
+
}
|
|
65
|
+
if (checkObjectKeyExists(field, "validators") &&
|
|
66
|
+
checkObjectKeyExists(field.validators, "pattern") &&
|
|
67
|
+
isNotEmptyValue(field.validators.pattern)) {
|
|
68
|
+
if (checkObjectKeyExists(field.validators.pattern, "key")) {
|
|
69
|
+
if (field.validators.pattern.key === EPatternKey.CUSTOM) {
|
|
70
|
+
validators.push(Validators.pattern(field.validators.pattern.pattern));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
validators.push(Validators.pattern(EPattern[field.validators.pattern.key]));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return validators;
|
|
78
|
+
}
|
|
79
|
+
getFormValidationErrors(control) {
|
|
80
|
+
let errors = [];
|
|
81
|
+
for (const key in control.controls) {
|
|
82
|
+
const controlErrors = control.controls[key].errors;
|
|
83
|
+
if (controlErrors !== null && controlErrors !== undefined) {
|
|
84
|
+
Object.keys(controlErrors).forEach((keyError) => {
|
|
85
|
+
errors.push({
|
|
86
|
+
name: keyError,
|
|
87
|
+
value: controlErrors[keyError]
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return errors;
|
|
93
|
+
}
|
|
94
|
+
findInvalidControlsRecursive(formToInvestigate) {
|
|
95
|
+
var controls = [];
|
|
96
|
+
let recursiveFunc = (form) => {
|
|
97
|
+
Object.keys(form.controls).forEach((field) => {
|
|
98
|
+
const control = form.get(field);
|
|
99
|
+
if (control.invalid) {
|
|
100
|
+
controls.push({
|
|
101
|
+
key: field,
|
|
102
|
+
invalid: true
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
controls.push({
|
|
107
|
+
key: field,
|
|
108
|
+
invalid: false
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (control instanceof FormGroup) {
|
|
112
|
+
recursiveFunc(control);
|
|
113
|
+
}
|
|
114
|
+
else if (control instanceof FormArray) {
|
|
115
|
+
recursiveFunc(control);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
recursiveFunc(formToInvestigate);
|
|
120
|
+
return controls;
|
|
121
|
+
}
|
|
122
|
+
validateField() {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const validations = this._field.validation;
|
|
125
|
+
const triggers = validations.triggers;
|
|
126
|
+
const rules = validations.rules;
|
|
127
|
+
const actions = validations.actions;
|
|
128
|
+
const rulesMapping = new Rules(rules, {
|
|
129
|
+
FIELD_CONFIG: this._field,
|
|
130
|
+
FORM_DATA: this._formData,
|
|
131
|
+
PREVIOUS_FORM_DATA: this._previousFormData,
|
|
132
|
+
ALL_FORMS_DATA: this._allFormsData
|
|
133
|
+
}).mapping();
|
|
134
|
+
for (let action of actions) {
|
|
135
|
+
const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
|
|
136
|
+
if (conditionEvaluation) {
|
|
137
|
+
const actions = new Actions(action, rulesMapping, {
|
|
138
|
+
FIELD_CONFIG: this._field,
|
|
139
|
+
FORM_DATA: this._formData,
|
|
140
|
+
PREVIOUS_FORM_DATA: this._previousFormData,
|
|
141
|
+
ALL_FORMS_DATA: this._allFormsData
|
|
142
|
+
}, this._takeAction);
|
|
143
|
+
yield actions.execute();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
__decorate([
|
|
150
|
+
logMethod
|
|
151
|
+
], Validations.prototype, "getFieldValidators", null);
|
|
152
|
+
__decorate([
|
|
153
|
+
logMethod
|
|
154
|
+
], Validations.prototype, "getFormValidationErrors", null);
|
|
155
|
+
__decorate([
|
|
156
|
+
logMethod
|
|
157
|
+
], Validations.prototype, "findInvalidControlsRecursive", null);
|
|
158
|
+
__decorate([
|
|
159
|
+
logMethod
|
|
160
|
+
], Validations.prototype, "validateField", null);
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LnZhbGlkYXRpb25zLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9oZWxwZXJzL2Zvcm0tdmlldy52YWxpZGF0aW9ucy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUVULFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWixNQUFNLHlEQUF5RCxDQUFDO0FBR2pFLE1BQU0sT0FBTyxXQUFXO0lBbUN0QixZQUNFLEtBQWEsRUFDYixRQUFhLEVBQ2IsZ0JBQXFCLEVBQ3JCLFlBQWlCLEVBQ2pCLFVBQWU7UUFFZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQTdDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQVU7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUdELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFD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LGlCQUFpQjtnQkFDMUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ25DLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUViLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUN2QyxNQUFNLENBQUMsU0FBUyxFQUNoQixZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFYixJQUFJLG1CQUFtQixFQUFFO29CQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FDekIsTUFBTSxFQUNOLFlBQVksRUFDWjt3QkFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjt3QkFDMUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO3FCQUNuQyxFQUNELElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7b0JBRUYsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pCO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7Q0FDRjtBQXBKQztJQURDLFNBQVM7cURBeURUO0FBR0Q7SUFEQyxTQUFTOzBEQW1CVDtBQUdEO0lBREMsU0FBUzsrREE2QlQ7QUFHRDtJQURDLFNBQVM7Z0RBcUNUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRm9ybUFycmF5LFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICBBY3Rpb25zLFxuICBDb25kaXRpb24sXG4gIGxvZ01ldGhvZCxcbiAgUnVsZXMsXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBpc05vdEVtcHR5VmFsdWVcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBFUGF0dGVybixcbiAgRVBhdHRlcm5LZXlcbn0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2NvbW1vbi9mb3JtLXZpZXcuY29tbW9uLmVudW0uZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IFRGaWVsZCB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9maWVsZHMvZm9ybS12aWV3LmZpZWxkcy50eXBlLmRlZmluaXRpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9ucyB7XG4gIHByaXZhdGUgX2Zvcm1EYXRhOiBhbnk7XG4gIGdldCBmb3JtRGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGF0YTtcbiAgfVxuICBzZXQgZm9ybURhdGEodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2Zvcm1EYXRhID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9wcmV2aW91c0Zvcm1EYXRhOiBhbnk7XG4gIGdldCBwcmV2aW91c0Zvcm1EYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzRm9ybURhdGE7XG4gIH1cbiAgc2V0IHByZXZpb3VzRm9ybURhdGEodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ByZXZpb3VzRm9ybURhdGEgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FsbEZvcm1zRGF0YTogYW55O1xuICBnZXQgYWxsRm9ybXNEYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbEZvcm1zRGF0YTtcbiAgfVxuICBzZXQgYWxsRm9ybXNEYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9hbGxGb3Jtc0RhdGEgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpZWxkOiBURmllbGQ7XG4gIGdldCBmaWVsZCgpOiBURmllbGQge1xuICAgIHJldHVybiB0aGlzLl9maWVsZDtcbiAgfVxuICBzZXQgZmllbGQodmFsdWU6IFRGaWVsZCkge1xuICAgIHRoaXMuX2ZpZWxkID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWtlQWN0aW9uOiBGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmaWVsZDogVEZpZWxkLFxuICAgIGZvcm1EYXRhOiBhbnksXG4gICAgcHJldmlvdXNGb3JtRGF0YTogYW55LFxuICAgIGFsbEZvcm1zRGF0YTogYW55LFxuICAgIHRha2VBY3Rpb246IGFueVxuICApIHtcbiAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgIHRoaXMuX2Zvcm1EYXRhID0gZm9ybURhdGE7XG4gICAgdGhpcy5fcHJldmlvdXNGb3JtRGF0YSA9IHByZXZpb3VzRm9ybURhdGE7XG4gICAgdGhpcy5fYWxsRm9ybXNEYXRhID0gYWxsRm9ybXNEYXRhO1xuICAgIHRoaXMuX3Rha2VBY3Rpb24gPSB0YWtlQWN0aW9uO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGaWVsZFZhbGlkYXRvcnMoZmllbGQ6IGFueSkge1xuICAgIGxldCB2YWxpZGF0b3JzID0gW107XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIm1pblwiKSAmJlxuICAgICAgaXNOb3RFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnMubWluKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLnZhbGlkYXRvcnMubWluKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMsIFwibWF4XCIpICYmXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5tYXgpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoZmllbGQudmFsaWRhdG9ycy5tYXgpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInJlcXVpcmVkXCIpICYmIGZpZWxkLnJlcXVpcmVkKSB8fFxuICAgICAgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJyZXF1aXJlZFwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIm1pbkxlbmd0aFwiKSAmJlxuICAgICAgaXNOb3RFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMsIFwibWF4TGVuZ3RoXCIpICYmXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGgpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGgpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdG9yc1wiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJwYXR0ZXJuXCIpICYmXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuKVxuICAgICkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybiwgXCJrZXlcIikpIHtcbiAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybi5rZXkgPT09IEVQYXR0ZXJuS2V5LkNVU1RPTSkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLnBhdHRlcm4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oRVBhdHRlcm5bZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLmtleV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycyhcbiAgICBjb250cm9sOiBGb3JtR3JvdXBcbiAgKTogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBsZXQgZXJyb3JzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBjb250cm9sLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xuICAgICAgaWYgKGNvbnRyb2xFcnJvcnMgIT09IG51bGwgJiYgY29udHJvbEVycm9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpLmZvckVhY2goKGtleUVycm9yKSA9PiB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbmFtZToga2V5RXJyb3IsXG4gICAgICAgICAgICB2YWx1ZTogY29udHJvbEVycm9yc1trZXlFcnJvcl1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmluZEludmFsaWRDb250cm9sc1JlY3Vyc2l2ZShmb3JtVG9JbnZlc3RpZ2F0ZTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KSB7XG4gICAgdmFyIGNvbnRyb2xzOiBhbnlbXSA9IFtdO1xuXG4gICAgbGV0IHJlY3Vyc2l2ZUZ1bmMgPSAoZm9ybTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChmaWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICBjb250cm9scy5wdXNoKHtcbiAgICAgICAgICAgIGtleTogZmllbGQsXG4gICAgICAgICAgICBpbnZhbGlkOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbHMucHVzaCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLFxuICAgICAgICAgICAgaW52YWxpZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgIHJlY3Vyc2l2ZUZ1bmMoY29udHJvbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgIHJlY3Vyc2l2ZUZ1bmMoY29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZWN1cnNpdmVGdW5jKGZvcm1Ub0ludmVzdGlnYXRlKTtcblxuICAgIHJldHVybiBjb250cm9scztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdmFsaWRhdGVGaWVsZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25zID0gdGhpcy5fZmllbGQudmFsaWRhdGlvbjtcblxuICAgIGNvbnN0IHRyaWdnZXJzID0gdmFsaWRhdGlvbnMudHJpZ2dlcnM7XG4gICAgY29uc3QgcnVsZXMgPSB2YWxpZGF0aW9ucy5ydWxlcztcbiAgICBjb25zdCBhY3Rpb25zID0gdmFsaWRhdGlvbnMuYWN0aW9ucztcblxuICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlcyhydWxlcywge1xuICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZCxcbiAgICAgIEZPUk1fREFUQTogdGhpcy5fZm9ybURhdGEsXG4gICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMuX3ByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5fYWxsRm9ybXNEYXRhXG4gICAgfSkubWFwcGluZygpO1xuXG4gICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb25zKFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZCxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5fZm9ybURhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMuX3ByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5fYWxsRm9ybXNEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|