@ngx-formly/core 6.3.12 → 7.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/esm2022/json-schema/formly-json-schema.service.mjs +628 -0
- package/esm2022/lib/components/formly.field.mjs +292 -0
- package/esm2022/lib/components/formly.form.mjs +164 -0
- package/{esm2020 → esm2022}/lib/components/formly.template.mjs +8 -8
- package/esm2022/lib/core.config.mjs +36 -0
- package/esm2022/lib/core.mjs +20 -0
- package/esm2022/lib/core.module.mjs +74 -0
- package/esm2022/lib/extensions/core/core.mjs +148 -0
- package/esm2022/lib/extensions/field-expression/field-expression.mjs +250 -0
- package/esm2022/lib/extensions/field-expression/utils.mjs +17 -0
- package/esm2022/lib/extensions/field-form/field-form.mjs +141 -0
- package/esm2022/lib/extensions/field-form/utils.mjs +100 -0
- package/esm2022/lib/extensions/field-validation/field-validation.mjs +135 -0
- package/esm2022/lib/extensions/index.mjs +2 -0
- package/esm2022/lib/models/fieldconfig.cache.mjs +2 -0
- package/esm2022/lib/models/fieldconfig.mjs +2 -0
- package/esm2022/lib/services/formly.builder.mjs +100 -0
- package/esm2022/lib/services/formly.config.mjs +229 -0
- package/esm2022/lib/templates/field-array.type.mjs +84 -0
- package/esm2022/lib/templates/field-template.type.mjs +34 -0
- package/esm2022/lib/templates/field.type.mjs +57 -0
- package/{esm2020 → esm2022}/lib/templates/field.wrapper.mjs +4 -4
- package/esm2022/lib/templates/formly.attributes.mjs +187 -0
- package/{esm2020 → esm2022}/lib/templates/formly.group.mjs +8 -8
- package/esm2022/lib/templates/formly.validation-message.mjs +69 -0
- package/esm2022/lib/utils.mjs +312 -0
- package/esm2022/preset/preset-substitution.extension.mjs +30 -0
- package/esm2022/preset/preset.config.mjs +11 -0
- package/esm2022/preset/preset.module.mjs +18 -0
- package/esm2022/select/select-options.pipe.mjs +100 -0
- package/{esm2020 → esm2022}/select/select.module.mjs +5 -5
- package/esm2022/testing/component-factory.mjs +86 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core-json-schema.mjs +16 -16
- package/fesm2022/ngx-formly-core-json-schema.mjs.map +1 -0
- package/fesm2022/ngx-formly-core-preset.mjs +62 -0
- package/fesm2022/ngx-formly-core-preset.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs +7 -7
- package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ngx-formly-core-testing.mjs +5 -4
- package/fesm2022/ngx-formly-core-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core.mjs +1747 -1702
- package/fesm2022/ngx-formly-core.mjs.map +1 -0
- package/lib/components/formly.field.d.ts +5 -1
- package/lib/components/formly.form.d.ts +8 -4
- package/lib/components/formly.template.d.ts +1 -1
- package/lib/core.config.d.ts +10 -0
- package/lib/core.d.ts +4 -3
- package/lib/core.module.d.ts +2 -5
- package/lib/extensions/field-expression/utils.d.ts +1 -1
- package/lib/extensions/index.d.ts +1 -0
- package/lib/models/config.d.ts +1 -1
- package/lib/models/fieldconfig.cache.d.ts +3 -3
- package/lib/models/fieldconfig.d.ts +8 -7
- package/lib/services/formly.builder.d.ts +5 -5
- package/lib/services/formly.config.d.ts +3 -9
- package/lib/templates/field-array.type.d.ts +3 -3
- package/lib/templates/field-template.type.d.ts +1 -1
- package/lib/templates/field.type.d.ts +5 -5
- package/lib/templates/field.wrapper.d.ts +1 -1
- package/lib/templates/formly.attributes.d.ts +1 -1
- package/lib/templates/formly.group.d.ts +1 -1
- package/lib/templates/formly.validation-message.d.ts +1 -1
- package/lib/utils.d.ts +5 -5
- package/package.json +23 -37
- package/preset/preset.config.d.ts +2 -0
- package/select/select-options.pipe.d.ts +1 -1
- package/testing/component-factory.d.ts +2 -2
- package/esm2020/json-schema/formly-json-schema.service.mjs +0 -628
- package/esm2020/lib/components/formly.field.mjs +0 -284
- package/esm2020/lib/components/formly.form.mjs +0 -147
- package/esm2020/lib/core.mjs +0 -19
- package/esm2020/lib/core.module.mjs +0 -91
- package/esm2020/lib/extensions/core/core.mjs +0 -148
- package/esm2020/lib/extensions/field-expression/field-expression.mjs +0 -250
- package/esm2020/lib/extensions/field-expression/utils.mjs +0 -17
- package/esm2020/lib/extensions/field-form/field-form.mjs +0 -141
- package/esm2020/lib/extensions/field-form/utils.mjs +0 -100
- package/esm2020/lib/extensions/field-validation/field-validation.mjs +0 -135
- package/esm2020/lib/models/fieldconfig.cache.mjs +0 -2
- package/esm2020/lib/models/fieldconfig.mjs +0 -2
- package/esm2020/lib/services/formly.builder.mjs +0 -93
- package/esm2020/lib/services/formly.config.mjs +0 -229
- package/esm2020/lib/templates/field-array.type.mjs +0 -84
- package/esm2020/lib/templates/field-template.type.mjs +0 -34
- package/esm2020/lib/templates/field.type.mjs +0 -57
- package/esm2020/lib/templates/formly.attributes.mjs +0 -187
- package/esm2020/lib/templates/formly.validation-message.mjs +0 -69
- package/esm2020/lib/utils.mjs +0 -312
- package/esm2020/preset/preset-substitution.extension.mjs +0 -30
- package/esm2020/preset/preset.module.mjs +0 -32
- package/esm2020/select/select-options.pipe.mjs +0 -100
- package/esm2020/testing/component-factory.mjs +0 -85
- package/fesm2015/ngx-formly-core-json-schema.mjs +0 -615
- package/fesm2015/ngx-formly-core-json-schema.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-preset.mjs +0 -69
- package/fesm2015/ngx-formly-core-preset.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-select.mjs +0 -120
- package/fesm2015/ngx-formly-core-select.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-testing.mjs +0 -87
- package/fesm2015/ngx-formly-core-testing.mjs.map +0 -1
- package/fesm2015/ngx-formly-core.mjs +0 -2417
- package/fesm2015/ngx-formly-core.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-json-schema.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-preset.mjs +0 -67
- package/fesm2020/ngx-formly-core-preset.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-testing.mjs.map +0 -1
- package/fesm2020/ngx-formly-core.mjs.map +0 -1
- package/json-schema/package.json +0 -10
- package/preset/package.json +0 -10
- package/select/package.json +0 -10
- package/testing/package.json +0 -10
- /package/{esm2020 → esm2022}/json-schema/ngx-formly-core-json-schema.mjs +0 -0
- /package/{esm2020 → esm2022}/json-schema/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-formly-core.mjs +0 -0
- /package/{esm2020 → esm2022}/preset/ngx-formly-core-preset.mjs +0 -0
- /package/{esm2020 → esm2022}/preset/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/select/ngx-formly-core-select.mjs +0 -0
- /package/{esm2020 → esm2022}/select/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/ngx-formly-core-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
- /package/{ngx-formly-core.d.ts → index.d.ts} +0 -0
- /package/json-schema/{ngx-formly-core-json-schema.d.ts → index.d.ts} +0 -0
- /package/preset/{ngx-formly-core-preset.d.ts → index.d.ts} +0 -0
- /package/select/{ngx-formly-core-select.d.ts → index.d.ts} +0 -0
- /package/testing/{ngx-formly-core-testing.d.ts → index.d.ts} +0 -0
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { FormGroup, FormControl, Validators, } from '@angular/forms';
|
|
2
|
-
import { getFieldValue, defineHiddenProp, hasKey, getKeyPath } from '../../utils';
|
|
3
|
-
import { registerControl, findControl, updateValidity } from './utils';
|
|
4
|
-
import { of } from 'rxjs';
|
|
5
|
-
export class FieldFormExtension {
|
|
6
|
-
prePopulate(field) {
|
|
7
|
-
if (!this.root) {
|
|
8
|
-
this.root = field;
|
|
9
|
-
}
|
|
10
|
-
if (field.parent) {
|
|
11
|
-
Object.defineProperty(field, 'form', {
|
|
12
|
-
get: () => field.parent.formControl,
|
|
13
|
-
configurable: true,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
onPopulate(field) {
|
|
18
|
-
if (field.hasOwnProperty('fieldGroup') && !hasKey(field)) {
|
|
19
|
-
defineHiddenProp(field, 'formControl', field.form);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
this.addFormControl(field);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
postPopulate(field) {
|
|
26
|
-
if (this.root !== field) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
this.root = null;
|
|
30
|
-
const markForCheck = this.setValidators(field);
|
|
31
|
-
if (markForCheck && field.parent) {
|
|
32
|
-
let parent = field.parent;
|
|
33
|
-
while (parent) {
|
|
34
|
-
if (hasKey(parent) || !parent.parent) {
|
|
35
|
-
updateValidity(parent.formControl, true);
|
|
36
|
-
}
|
|
37
|
-
parent = parent.parent;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
addFormControl(field) {
|
|
42
|
-
let control = findControl(field);
|
|
43
|
-
if (field.fieldArray) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (!control) {
|
|
47
|
-
const controlOptions = { updateOn: field.modelOptions.updateOn };
|
|
48
|
-
if (field.fieldGroup) {
|
|
49
|
-
control = new FormGroup({}, controlOptions);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;
|
|
53
|
-
control = new FormControl({ value, disabled: !!field.props.disabled }, { ...controlOptions, initialValueIsDefault: true });
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
if (control instanceof FormControl) {
|
|
58
|
-
const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;
|
|
59
|
-
control.defaultValue = value;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
registerControl(field, control);
|
|
63
|
-
}
|
|
64
|
-
setValidators(field, disabled = false) {
|
|
65
|
-
if (disabled === false && hasKey(field) && field.props?.disabled) {
|
|
66
|
-
disabled = true;
|
|
67
|
-
}
|
|
68
|
-
let markForCheck = false;
|
|
69
|
-
field.fieldGroup?.forEach((f) => f && this.setValidators(f, disabled) && (markForCheck = true));
|
|
70
|
-
if (hasKey(field) || !field.parent || (!hasKey(field) && !field.fieldGroup)) {
|
|
71
|
-
const { formControl: c } = field;
|
|
72
|
-
if (c) {
|
|
73
|
-
if (hasKey(field) && c instanceof FormControl) {
|
|
74
|
-
if (disabled && c.enabled) {
|
|
75
|
-
c.disable({ emitEvent: false, onlySelf: true });
|
|
76
|
-
markForCheck = true;
|
|
77
|
-
}
|
|
78
|
-
if (!disabled && c.disabled) {
|
|
79
|
-
c.enable({ emitEvent: false, onlySelf: true });
|
|
80
|
-
markForCheck = true;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (null === c.validator && this.hasValidators(field, '_validators')) {
|
|
84
|
-
c.setValidators(() => {
|
|
85
|
-
const v = Validators.compose(this.mergeValidators(field, '_validators'));
|
|
86
|
-
return v ? v(c) : null;
|
|
87
|
-
});
|
|
88
|
-
markForCheck = true;
|
|
89
|
-
}
|
|
90
|
-
if (null === c.asyncValidator && this.hasValidators(field, '_asyncValidators')) {
|
|
91
|
-
c.setAsyncValidators(() => {
|
|
92
|
-
const v = Validators.composeAsync(this.mergeValidators(field, '_asyncValidators'));
|
|
93
|
-
return v ? v(c) : of(null);
|
|
94
|
-
});
|
|
95
|
-
markForCheck = true;
|
|
96
|
-
}
|
|
97
|
-
if (markForCheck) {
|
|
98
|
-
updateValidity(c, true);
|
|
99
|
-
// update validity of `FormGroup` instance created by field with nested key.
|
|
100
|
-
let parent = c.parent;
|
|
101
|
-
for (let i = 1; i < getKeyPath(field).length; i++) {
|
|
102
|
-
if (parent) {
|
|
103
|
-
updateValidity(parent, true);
|
|
104
|
-
parent = parent.parent;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return markForCheck;
|
|
111
|
-
}
|
|
112
|
-
hasValidators(field, type) {
|
|
113
|
-
const c = field.formControl;
|
|
114
|
-
if (c?._fields?.length > 1 && c._fields.some((f) => f[type].length > 0)) {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
else if (field[type].length > 0) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
return field.fieldGroup?.some((f) => f?.fieldGroup && !hasKey(f) && this.hasValidators(f, type));
|
|
121
|
-
}
|
|
122
|
-
mergeValidators(field, type) {
|
|
123
|
-
const validators = [];
|
|
124
|
-
const c = field.formControl;
|
|
125
|
-
if (c?._fields?.length > 1) {
|
|
126
|
-
c._fields
|
|
127
|
-
.filter((f) => !f._hide)
|
|
128
|
-
.forEach((f) => validators.push(...f[type]));
|
|
129
|
-
}
|
|
130
|
-
else if (field[type]) {
|
|
131
|
-
validators.push(...field[type]);
|
|
132
|
-
}
|
|
133
|
-
if (field.fieldGroup) {
|
|
134
|
-
field.fieldGroup
|
|
135
|
-
.filter((f) => f?.fieldGroup && !hasKey(f))
|
|
136
|
-
.forEach((f) => validators.push(...this.mergeValidators(f, type)));
|
|
137
|
-
}
|
|
138
|
-
return validators;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC1mb3JtL2ZpZWxkLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBRVgsVUFBVSxHQUdYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsV0FBVyxDQUFDLEtBQTZCO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDbkI7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU8sQ0FBQyxXQUFXO2dCQUNwQyxZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hELGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUE2QjtRQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxFQUFFO2dCQUNiLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDcEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzFDO2dCQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ3hCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQTZCO1FBQ2xELElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sY0FBYyxHQUEyQixFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXpGLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDeEUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUN2QixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQzNDLEVBQUUsR0FBRyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLENBQ25ELENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUN2RSxPQUFlLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzthQUN2QztTQUNGO1FBRUQsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQTZCLEVBQUUsUUFBUSxHQUFHLEtBQUs7UUFDbkUsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNoRSxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsRUFBRTtnQkFDTCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFO29CQUM3QyxJQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO3dCQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDaEQsWUFBWSxHQUFHLElBQUksQ0FBQztxQkFDckI7b0JBRUQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO3dCQUMzQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDL0MsWUFBWSxHQUFHLElBQUksQ0FBQztxQkFDckI7aUJBQ0Y7Z0JBRUQsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsRUFBRTtvQkFDcEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBYyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFFdEYsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN6QixDQUFDLENBQUMsQ0FBQztvQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUNyQjtnQkFFRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUU7b0JBQzlFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7d0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBbUIsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQzt3QkFDckcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3QixDQUFDLENBQUMsQ0FBQztvQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUNyQjtnQkFFRCxJQUFJLFlBQVksRUFBRTtvQkFDaEIsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFeEIsNEVBQTRFO29CQUM1RSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDakQsSUFBSSxNQUFNLEVBQUU7NEJBQ1YsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7eUJBQ3hCO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBNkIsRUFBRSxJQUF3QztRQUMzRixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVPLGVBQWUsQ0FBSSxLQUE2QixFQUFFLElBQXdDO1FBQ2hHLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLENBQUMsQ0FBQyxPQUFPO2lCQUNOLE1BQU0sQ0FBQyxDQUFDLENBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDL0MsT0FBTyxDQUFDLENBQUMsQ0FBeUIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEU7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDcEIsS0FBSyxDQUFDLFVBQVU7aUJBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEU7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24sIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgRm9ybUdyb3VwLFxuICBGb3JtQ29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sT3B0aW9ucyxcbiAgVmFsaWRhdG9ycyxcbiAgVmFsaWRhdG9yRm4sXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldEZpZWxkVmFsdWUsIGRlZmluZUhpZGRlblByb3AsIGhhc0tleSwgZ2V0S2V5UGF0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHJlZ2lzdGVyQ29udHJvbCwgZmluZENvbnRyb2wsIHVwZGF0ZVZhbGlkaXR5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgRmllbGRGb3JtRXh0ZW5zaW9uIGltcGxlbWVudHMgRm9ybWx5RXh0ZW5zaW9uIHtcbiAgcHJpdmF0ZSByb290OiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlO1xuICBwcmVQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICB0aGlzLnJvb3QgPSBmaWVsZDtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQucGFyZW50KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdmb3JtJywge1xuICAgICAgICBnZXQ6ICgpID0+IGZpZWxkLnBhcmVudCEuZm9ybUNvbnRyb2wsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBpZiAoZmllbGQuaGFzT3duUHJvcGVydHkoJ2ZpZWxkR3JvdXAnKSAmJiAhaGFzS2V5KGZpZWxkKSkge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChmaWVsZCwgJ2Zvcm1Db250cm9sJywgZmllbGQuZm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHBvc3RQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmICh0aGlzLnJvb3QgIT09IGZpZWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICBjb25zdCBtYXJrRm9yQ2hlY2sgPSB0aGlzLnNldFZhbGlkYXRvcnMoZmllbGQpO1xuICAgIGlmIChtYXJrRm9yQ2hlY2sgJiYgZmllbGQucGFyZW50KSB7XG4gICAgICBsZXQgcGFyZW50ID0gZmllbGQucGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAoaGFzS2V5KHBhcmVudCkgfHwgIXBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICB1cGRhdGVWYWxpZGl0eShwYXJlbnQuZm9ybUNvbnRyb2wsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGxldCBjb250cm9sID0gZmluZENvbnRyb2woZmllbGQpO1xuICAgIGlmIChmaWVsZC5maWVsZEFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICBjb25zdCBjb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHsgdXBkYXRlT246IGZpZWxkLm1vZGVsT3B0aW9ucy51cGRhdGVPbiB9O1xuXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Hcm91cCh7fSwgY29udHJvbE9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoYXNLZXkoZmllbGQpID8gZ2V0RmllbGRWYWx1ZShmaWVsZCkgOiBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgeyB2YWx1ZSwgZGlzYWJsZWQ6ICEhZmllbGQucHJvcHMuZGlzYWJsZWQgfSxcbiAgICAgICAgICB7IC4uLmNvbnRyb2xPcHRpb25zLCBpbml0aWFsVmFsdWVJc0RlZmF1bHQ6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGhhc0tleShmaWVsZCkgPyBnZXRGaWVsZFZhbHVlKGZpZWxkKSA6IGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgKGNvbnRyb2wgYXMgYW55KS5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckNvbnRyb2woZmllbGQsIGNvbnRyb2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYWxpZGF0b3JzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBkaXNhYmxlZCA9IGZhbHNlKSB7XG4gICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSAmJiBoYXNLZXkoZmllbGQpICYmIGZpZWxkLnByb3BzPy5kaXNhYmxlZCkge1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBtYXJrRm9yQ2hlY2sgPSBmYWxzZTtcbiAgICBmaWVsZC5maWVsZEdyb3VwPy5mb3JFYWNoKChmKSA9PiBmICYmIHRoaXMuc2V0VmFsaWRhdG9ycyhmLCBkaXNhYmxlZCkgJiYgKG1hcmtGb3JDaGVjayA9IHRydWUpKTtcbiAgICBpZiAoaGFzS2V5KGZpZWxkKSB8fCAhZmllbGQucGFyZW50IHx8ICghaGFzS2V5KGZpZWxkKSAmJiAhZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgIGNvbnN0IHsgZm9ybUNvbnRyb2w6IGMgfSA9IGZpZWxkO1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKGhhc0tleShmaWVsZCkgJiYgYyBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgaWYgKGRpc2FibGVkICYmIGMuZW5hYmxlZCkge1xuICAgICAgICAgICAgYy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICBtYXJrRm9yQ2hlY2sgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGlzYWJsZWQgJiYgYy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgYy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIG1hcmtGb3JDaGVjayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bGwgPT09IGMudmFsaWRhdG9yICYmIHRoaXMuaGFzVmFsaWRhdG9ycyhmaWVsZCwgJ192YWxpZGF0b3JzJykpIHtcbiAgICAgICAgICBjLnNldFZhbGlkYXRvcnMoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFZhbGlkYXRvcnMuY29tcG9zZSh0aGlzLm1lcmdlVmFsaWRhdG9yczxWYWxpZGF0b3JGbj4oZmllbGQsICdfdmFsaWRhdG9ycycpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHYgPyB2KGMpIDogbnVsbDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtYXJrRm9yQ2hlY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bGwgPT09IGMuYXN5bmNWYWxpZGF0b3IgJiYgdGhpcy5oYXNWYWxpZGF0b3JzKGZpZWxkLCAnX2FzeW5jVmFsaWRhdG9ycycpKSB7XG4gICAgICAgICAgYy5zZXRBc3luY1ZhbGlkYXRvcnMoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFZhbGlkYXRvcnMuY29tcG9zZUFzeW5jKHRoaXMubWVyZ2VWYWxpZGF0b3JzPEFzeW5jVmFsaWRhdG9yRm4+KGZpZWxkLCAnX2FzeW5jVmFsaWRhdG9ycycpKTtcbiAgICAgICAgICAgIHJldHVybiB2ID8gdihjKSA6IG9mKG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hcmtGb3JDaGVjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFya0ZvckNoZWNrKSB7XG4gICAgICAgICAgdXBkYXRlVmFsaWRpdHkoYywgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyB1cGRhdGUgdmFsaWRpdHkgb2YgYEZvcm1Hcm91cGAgaW5zdGFuY2UgY3JlYXRlZCBieSBmaWVsZCB3aXRoIG5lc3RlZCBrZXkuXG4gICAgICAgICAgbGV0IHBhcmVudCA9IGMucGFyZW50O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZ2V0S2V5UGF0aChmaWVsZCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgdXBkYXRlVmFsaWRpdHkocGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFya0ZvckNoZWNrO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNWYWxpZGF0b3JzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCB0eXBlOiAnX3ZhbGlkYXRvcnMnIHwgJ19hc3luY1ZhbGlkYXRvcnMnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYyA9IGZpZWxkLmZvcm1Db250cm9sO1xuICAgIGlmIChjPy5fZmllbGRzPy5sZW5ndGggPiAxICYmIGMuX2ZpZWxkcy5zb21lKChmKSA9PiBmW3R5cGVdLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkW3R5cGVdLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZC5maWVsZEdyb3VwPy5zb21lKChmKSA9PiBmPy5maWVsZEdyb3VwICYmICFoYXNLZXkoZikgJiYgdGhpcy5oYXNWYWxpZGF0b3JzKGYsIHR5cGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VWYWxpZGF0b3JzPFQ+KGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCB0eXBlOiAnX3ZhbGlkYXRvcnMnIHwgJ19hc3luY1ZhbGlkYXRvcnMnKTogVFtdIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBhbnkgPSBbXTtcbiAgICBjb25zdCBjID0gZmllbGQuZm9ybUNvbnRyb2w7XG4gICAgaWYgKGM/Ll9maWVsZHM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGMuX2ZpZWxkc1xuICAgICAgICAuZmlsdGVyKChmOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSA9PiAhZi5faGlkZSlcbiAgICAgICAgLmZvckVhY2goKGY6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpID0+IHZhbGlkYXRvcnMucHVzaCguLi5mW3R5cGVdKSk7XG4gICAgfSBlbHNlIGlmIChmaWVsZFt0eXBlXSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmZpZWxkW3R5cGVdKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAuZmlsdGVyKChmKSA9PiBmPy5maWVsZEdyb3VwICYmICFoYXNLZXkoZikpXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiB2YWxpZGF0b3JzLnB1c2goLi4udGhpcy5tZXJnZVZhbGlkYXRvcnMoZiwgdHlwZSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxufVxuIl19
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { FormArray, FormGroup, FormControl } from '@angular/forms';
|
|
2
|
-
import { getKeyPath, getFieldValue, isNil, defineHiddenProp, observe, hasKey } from '../../utils';
|
|
3
|
-
export function unregisterControl(field, emitEvent = false) {
|
|
4
|
-
const control = field.formControl;
|
|
5
|
-
const fieldIndex = control._fields ? control._fields.indexOf(field) : -1;
|
|
6
|
-
if (fieldIndex !== -1) {
|
|
7
|
-
control._fields.splice(fieldIndex, 1);
|
|
8
|
-
}
|
|
9
|
-
const form = control.parent;
|
|
10
|
-
if (!form) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const opts = { emitEvent };
|
|
14
|
-
if (form instanceof FormArray) {
|
|
15
|
-
const key = form.controls.findIndex((c) => c === control);
|
|
16
|
-
if (key !== -1) {
|
|
17
|
-
form.removeAt(key, opts);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
else if (form instanceof FormGroup) {
|
|
21
|
-
const paths = getKeyPath(field);
|
|
22
|
-
const key = paths[paths.length - 1];
|
|
23
|
-
if (form.get([key]) === control) {
|
|
24
|
-
form.removeControl(key, opts);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
control.setParent(null);
|
|
28
|
-
}
|
|
29
|
-
export function findControl(field) {
|
|
30
|
-
if (field.formControl) {
|
|
31
|
-
return field.formControl;
|
|
32
|
-
}
|
|
33
|
-
if (field.shareFormControl === false) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return field.form?.get(getKeyPath(field));
|
|
37
|
-
}
|
|
38
|
-
export function registerControl(field, control, emitEvent = false) {
|
|
39
|
-
control = control || field.formControl;
|
|
40
|
-
if (!control._fields) {
|
|
41
|
-
defineHiddenProp(control, '_fields', []);
|
|
42
|
-
}
|
|
43
|
-
if (control._fields.indexOf(field) === -1) {
|
|
44
|
-
control._fields.push(field);
|
|
45
|
-
}
|
|
46
|
-
if (!field.formControl && control) {
|
|
47
|
-
defineHiddenProp(field, 'formControl', control);
|
|
48
|
-
control.setValidators(null);
|
|
49
|
-
control.setAsyncValidators(null);
|
|
50
|
-
field.props.disabled = !!field.props.disabled;
|
|
51
|
-
const disabledObserver = observe(field, ['props', 'disabled'], ({ firstChange, currentValue }) => {
|
|
52
|
-
if (!firstChange) {
|
|
53
|
-
currentValue ? field.formControl.disable() : field.formControl.enable();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
if (control instanceof FormControl) {
|
|
57
|
-
control.registerOnDisabledChange(disabledObserver.setValue);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (!field.form || !hasKey(field)) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
let form = field.form;
|
|
64
|
-
const paths = getKeyPath(field);
|
|
65
|
-
const value = getFieldValue(field);
|
|
66
|
-
if (!(isNil(control.value) && isNil(value)) && control.value !== value && control instanceof FormControl) {
|
|
67
|
-
control.patchValue(value);
|
|
68
|
-
}
|
|
69
|
-
for (let i = 0; i < paths.length - 1; i++) {
|
|
70
|
-
const path = paths[i];
|
|
71
|
-
if (!form.get([path])) {
|
|
72
|
-
form.setControl(path, new FormGroup({}), { emitEvent });
|
|
73
|
-
}
|
|
74
|
-
form = form.get([path]);
|
|
75
|
-
}
|
|
76
|
-
const key = paths[paths.length - 1];
|
|
77
|
-
if (!field._hide && form.get([key]) !== control) {
|
|
78
|
-
form.setControl(key, control, { emitEvent });
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
export function updateValidity(c, onlySelf = false) {
|
|
82
|
-
const status = c.status;
|
|
83
|
-
const value = c.value;
|
|
84
|
-
c.updateValueAndValidity({ emitEvent: false, onlySelf });
|
|
85
|
-
if (status !== c.status) {
|
|
86
|
-
c.statusChanges.emit(c.status);
|
|
87
|
-
}
|
|
88
|
-
if (value !== c.value) {
|
|
89
|
-
c.valueChanges.emit(c.value);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
export function clearControl(form) {
|
|
93
|
-
delete form?._fields;
|
|
94
|
-
form.setValidators(null);
|
|
95
|
-
form.setAsyncValidators(null);
|
|
96
|
-
if (form instanceof FormGroup || form instanceof FormArray) {
|
|
97
|
-
Object.values(form.controls).forEach((c) => clearControl(c));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2V4dGVuc2lvbnMvZmllbGQtZm9ybS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbEcsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQTZCLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDaEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQStCLENBQUM7SUFDckQsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU87S0FDUjtJQUVELE1BQU0sSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDM0IsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxHQUFHLEtB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SUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN0QixDQUFDLENBQUMsYUFBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFEO0lBRUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUNwQixDQUFDLENBQUMsWUFBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3JEO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBMkM7SUFDdEUsT0FBTyxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxZQUFZLFNBQVMsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO1FBQzFELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldEtleVBhdGgsIGdldEZpZWxkVmFsdWUsIGlzTmlsLCBkZWZpbmVIaWRkZW5Qcm9wLCBvYnNlcnZlLCBoYXNLZXkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJDb250cm9sKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBlbWl0RXZlbnQgPSBmYWxzZSkge1xuICBjb25zdCBjb250cm9sID0gZmllbGQuZm9ybUNvbnRyb2w7XG4gIGNvbnN0IGZpZWxkSW5kZXggPSBjb250cm9sLl9maWVsZHMgPyBjb250cm9sLl9maWVsZHMuaW5kZXhPZihmaWVsZCkgOiAtMTtcbiAgaWYgKGZpZWxkSW5kZXggIT09IC0xKSB7XG4gICAgY29udHJvbC5fZmllbGRzLnNwbGljZShmaWVsZEluZGV4LCAxKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm0gPSBjb250cm9sLnBhcmVudCBhcyBGb3JtQXJyYXkgfCBGb3JtR3JvdXA7XG4gIGlmICghZm9ybSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSB7IGVtaXRFdmVudCB9O1xuICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgIGNvbnN0IGtleSA9IGZvcm0uY29udHJvbHMuZmluZEluZGV4KChjKSA9PiBjID09PSBjb250cm9sKTtcbiAgICBpZiAoa2V5ICE9PSAtMSkge1xuICAgICAgZm9ybS5yZW1vdmVBdChrZXksIG9wdHMpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgcGF0aHMgPSBnZXRLZXlQYXRoKGZpZWxkKTtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1twYXRocy5sZW5ndGggLSAxXTtcbiAgICBpZiAoZm9ybS5nZXQoW2tleV0pID09PSBjb250cm9sKSB7XG4gICAgICBmb3JtLnJlbW92ZUNvbnRyb2woa2V5LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sLnNldFBhcmVudChudWxsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb250cm9sKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKTogQWJzdHJhY3RDb250cm9sIHtcbiAgaWYgKGZpZWxkLmZvcm1Db250cm9sKSB7XG4gICAgcmV0dXJuIGZpZWxkLmZvcm1Db250cm9sO1xuICB9XG5cbiAgaWYgKGZpZWxkLnNoYXJlRm9ybUNvbnRyb2wgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmllbGQuZm9ybT8uZ2V0KGdldEtleVBhdGgoZmllbGQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udHJvbChcbiAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsXG4gIGNvbnRyb2w/OiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlWydmb3JtQ29udHJvbCddLFxuICBlbWl0RXZlbnQgPSBmYWxzZSxcbikge1xuICBjb250cm9sID0gY29udHJvbCB8fCBmaWVsZC5mb3JtQ29udHJvbDtcblxuICBpZiAoIWNvbnRyb2wuX2ZpZWxkcykge1xuICAgIGRlZmluZUhpZGRlblByb3AoY29udHJvbCwgJ19maWVsZHMnLCBbXSk7XG4gIH1cbiAgaWYgKGNvbnRyb2wuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSA9PT0gLTEpIHtcbiAgICBjb250cm9sLl9maWVsZHMucHVzaChmaWVsZCk7XG4gIH1cblxuICBpZiAoIWZpZWxkLmZvcm1Db250cm9sICYmIGNvbnRyb2wpIHtcbiAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnZm9ybUNvbnRyb2wnLCBjb250cm9sKTtcbiAgICBjb250cm9sLnNldFZhbGlkYXRvcnMobnVsbCk7XG4gICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMobnVsbCk7XG5cbiAgICBmaWVsZC5wcm9wcy5kaXNhYmxlZCA9ICEhZmllbGQucHJvcHMuZGlzYWJsZWQ7XG4gICAgY29uc3QgZGlzYWJsZWRPYnNlcnZlciA9IG9ic2VydmUoZmllbGQsIFsncHJvcHMnLCAnZGlzYWJsZWQnXSwgKHsgZmlyc3RDaGFuZ2UsIGN1cnJlbnRWYWx1ZSB9KSA9PiB7XG4gICAgICBpZiAoIWZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA/IGZpZWxkLmZvcm1Db250cm9sLmRpc2FibGUoKSA6IGZpZWxkLmZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgIGNvbnRyb2wucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGRpc2FibGVkT2JzZXJ2ZXIuc2V0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZmllbGQuZm9ybSB8fCAhaGFzS2V5KGZpZWxkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmb3JtID0gZmllbGQuZm9ybTtcbiAgY29uc3QgcGF0aHMgPSBnZXRLZXlQYXRoKGZpZWxkKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRGaWVsZFZhbHVlKGZpZWxkKTtcbiAgaWYgKCEoaXNOaWwoY29udHJvbC52YWx1ZSkgJiYgaXNOaWwodmFsdWUpKSAmJiBjb250cm9sLnZhbHVlICE9PSB2YWx1ZSAmJiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBwYXRoID0gcGF0aHNbaV07XG4gICAgaWYgKCFmb3JtLmdldChbcGF0aF0pKSB7XG4gICAgICAoZm9ybSBhcyBGb3JtR3JvdXApLnNldENvbnRyb2wocGF0aCwgbmV3IEZvcm1Hcm91cCh7fSksIHsgZW1pdEV2ZW50IH0pO1xuICAgIH1cblxuICAgIGZvcm0gPSA8Rm9ybUdyb3VwPmZvcm0uZ2V0KFtwYXRoXSk7XG4gIH1cblxuICBjb25zdCBrZXkgPSBwYXRoc1twYXRocy5sZW5ndGggLSAxXTtcbiAgaWYgKCFmaWVsZC5faGlkZSAmJiBmb3JtLmdldChba2V5XSkgIT09IGNvbnRyb2wpIHtcbiAgICAoZm9ybSBhcyBGb3JtR3JvdXApLnNldENvbnRyb2woa2V5LCBjb250cm9sLCB7IGVtaXRFdmVudCB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmFsaWRpdHkoYzogQWJzdHJhY3RDb250cm9sLCBvbmx5U2VsZiA9IGZhbHNlKSB7XG4gIGNvbnN0IHN0YXR1cyA9IGMuc3RhdHVzO1xuICBjb25zdCB2YWx1ZSA9IGMudmFsdWU7XG4gIGMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmIH0pO1xuICBpZiAoc3RhdHVzICE9PSBjLnN0YXR1cykge1xuICAgIChjLnN0YXR1c0NoYW5nZXMgYXMgRXZlbnRFbWl0dGVyPHN0cmluZz4pLmVtaXQoYy5zdGF0dXMpO1xuICB9XG5cbiAgaWYgKHZhbHVlICE9PSBjLnZhbHVlKSB7XG4gICAgKGMudmFsdWVDaGFuZ2VzIGFzIEV2ZW50RW1pdHRlcjxhbnk+KS5lbWl0KGMudmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbnRyb2woZm9ybTogRm9ybWx5RmllbGRDb25maWdDYWNoZVsnZm9ybUNvbnRyb2wnXSkge1xuICBkZWxldGUgZm9ybT8uX2ZpZWxkcztcbiAgZm9ybS5zZXRWYWxpZGF0b3JzKG51bGwpO1xuICBmb3JtLnNldEFzeW5jVmFsaWRhdG9ycyhudWxsKTtcbiAgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgZm9ybSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgIE9iamVjdC52YWx1ZXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoYykgPT4gY2xlYXJDb250cm9sKGMpKTtcbiAgfVxufVxuIl19
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { Validators } from '@angular/forms';
|
|
2
|
-
import { FORMLY_VALIDATORS, defineHiddenProp, isPromise, observe, clone, isObject, hasKey } from '../../utils';
|
|
3
|
-
import { updateValidity } from '../field-form/utils';
|
|
4
|
-
import { isObservable } from 'rxjs';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
6
|
-
export class FieldValidationExtension {
|
|
7
|
-
constructor(config) {
|
|
8
|
-
this.config = config;
|
|
9
|
-
}
|
|
10
|
-
onPopulate(field) {
|
|
11
|
-
this.initFieldValidation(field, 'validators');
|
|
12
|
-
this.initFieldValidation(field, 'asyncValidators');
|
|
13
|
-
}
|
|
14
|
-
initFieldValidation(field, type) {
|
|
15
|
-
const validators = [];
|
|
16
|
-
if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !hasKey(field))) {
|
|
17
|
-
validators.push(this.getPredefinedFieldValidation(field));
|
|
18
|
-
}
|
|
19
|
-
if (field[type]) {
|
|
20
|
-
for (const validatorName of Object.keys(field[type])) {
|
|
21
|
-
validatorName === 'validation'
|
|
22
|
-
? validators.push(...field[type].validation.map((v) => this.wrapNgValidatorFn(field, v)))
|
|
23
|
-
: validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
defineHiddenProp(field, '_' + type, validators);
|
|
27
|
-
}
|
|
28
|
-
getPredefinedFieldValidation(field) {
|
|
29
|
-
let VALIDATORS = [];
|
|
30
|
-
FORMLY_VALIDATORS.forEach((opt) => observe(field, ['props', opt], ({ currentValue, firstChange }) => {
|
|
31
|
-
VALIDATORS = VALIDATORS.filter((o) => o !== opt);
|
|
32
|
-
if (opt === 'required' && currentValue != null && typeof currentValue !== 'boolean') {
|
|
33
|
-
console.warn(`Formly: Invalid prop 'required' of type '${typeof currentValue}', expected 'boolean' (Field:${field.key}).`);
|
|
34
|
-
}
|
|
35
|
-
if (currentValue != null && currentValue !== false) {
|
|
36
|
-
VALIDATORS.push(opt);
|
|
37
|
-
}
|
|
38
|
-
if (!firstChange && field.formControl) {
|
|
39
|
-
updateValidity(field.formControl);
|
|
40
|
-
}
|
|
41
|
-
}));
|
|
42
|
-
return (control) => {
|
|
43
|
-
if (VALIDATORS.length === 0) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return Validators.compose(VALIDATORS.map((opt) => () => {
|
|
47
|
-
const value = field.props[opt];
|
|
48
|
-
switch (opt) {
|
|
49
|
-
case 'required':
|
|
50
|
-
return Validators.required(control);
|
|
51
|
-
case 'pattern':
|
|
52
|
-
return Validators.pattern(value)(control);
|
|
53
|
-
case 'minLength':
|
|
54
|
-
const minLengthResult = Validators.minLength(value)(control);
|
|
55
|
-
const minLengthKey = this.config.getValidatorMessage('minlength') || field.validation?.messages?.minlength
|
|
56
|
-
? 'minlength'
|
|
57
|
-
: 'minLength';
|
|
58
|
-
return minLengthResult ? { [minLengthKey]: minLengthResult.minlength } : null;
|
|
59
|
-
case 'maxLength':
|
|
60
|
-
const maxLengthResult = Validators.maxLength(value)(control);
|
|
61
|
-
const maxLengthKey = this.config.getValidatorMessage('maxlength') || field.validation?.messages?.maxlength
|
|
62
|
-
? 'maxlength'
|
|
63
|
-
: 'maxLength';
|
|
64
|
-
return maxLengthResult ? { [maxLengthKey]: maxLengthResult.maxlength } : null;
|
|
65
|
-
case 'min':
|
|
66
|
-
return Validators.min(value)(control);
|
|
67
|
-
case 'max':
|
|
68
|
-
return Validators.max(value)(control);
|
|
69
|
-
default:
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
}))(control);
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
wrapNgValidatorFn(field, validator, validatorName) {
|
|
76
|
-
let validatorOption;
|
|
77
|
-
if (typeof validator === 'string') {
|
|
78
|
-
validatorOption = clone(this.config.getValidator(validator));
|
|
79
|
-
}
|
|
80
|
-
if (typeof validator === 'object' && validator.name) {
|
|
81
|
-
validatorOption = clone(this.config.getValidator(validator.name));
|
|
82
|
-
if (validator.options) {
|
|
83
|
-
validatorOption.options = validator.options;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (typeof validator === 'object' && validator.expression) {
|
|
87
|
-
const { expression, ...options } = validator;
|
|
88
|
-
validatorOption = {
|
|
89
|
-
name: validatorName,
|
|
90
|
-
validation: expression,
|
|
91
|
-
options: Object.keys(options).length > 0 ? options : null,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
if (typeof validator === 'function') {
|
|
95
|
-
validatorOption = {
|
|
96
|
-
name: validatorName,
|
|
97
|
-
validation: validator,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return (control) => {
|
|
101
|
-
const errors = validatorOption.validation(control, field, validatorOption.options);
|
|
102
|
-
if (isPromise(errors)) {
|
|
103
|
-
return errors.then((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption));
|
|
104
|
-
}
|
|
105
|
-
if (isObservable(errors)) {
|
|
106
|
-
return errors.pipe(map((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption)));
|
|
107
|
-
}
|
|
108
|
-
return this.handleResult(field, validatorName ? !!errors : errors, validatorOption);
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
handleResult(field, errors, { name, options }) {
|
|
112
|
-
if (typeof errors === 'boolean') {
|
|
113
|
-
errors = errors ? null : { [name]: options ? options : true };
|
|
114
|
-
}
|
|
115
|
-
const ctrl = field.formControl;
|
|
116
|
-
ctrl?._childrenErrors?.[name]?.();
|
|
117
|
-
if (isObject(errors)) {
|
|
118
|
-
Object.keys(errors).forEach((name) => {
|
|
119
|
-
const errorPath = errors[name].errorPath ? errors[name].errorPath : options?.errorPath;
|
|
120
|
-
const childCtrl = errorPath ? field.formControl.get(errorPath) : null;
|
|
121
|
-
if (childCtrl) {
|
|
122
|
-
const { errorPath: _errorPath, ...opts } = errors[name];
|
|
123
|
-
childCtrl.setErrors({ ...(childCtrl.errors || {}), [name]: opts });
|
|
124
|
-
!ctrl._childrenErrors && defineHiddenProp(ctrl, '_childrenErrors', {});
|
|
125
|
-
ctrl._childrenErrors[name] = () => {
|
|
126
|
-
const { [name]: _toDelete, ...childErrors } = childCtrl.errors || {};
|
|
127
|
-
childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
return errors;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC12YWxpZGF0aW9uL2ZpZWxkLXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFtQixVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFvQixNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO0lBQUcsQ0FBQztJQUU1QyxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsSUFBc0M7UUFDL0YsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwRixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxL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ZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1seUNvbmZpZyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5RXh0ZW5zaW9uLCBWYWxpZGF0b3JPcHRpb24sIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZPUk1MWV9WQUxJREFUT1JTLCBkZWZpbmVIaWRkZW5Qcm9wLCBpc1Byb21pc2UsIG9ic2VydmUsIGNsb25lLCBpc09iamVjdCwgaGFzS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXBkYXRlVmFsaWRpdHkgfSBmcm9tICcuLi9maWVsZC1mb3JtL3V0aWxzJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgRmllbGRWYWxpZGF0aW9uRXh0ZW5zaW9uIGltcGxlbWVudHMgRm9ybWx5RXh0ZW5zaW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IEZvcm1seUNvbmZpZykge31cblxuICBvblBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgdGhpcy5pbml0RmllbGRWYWxpZGF0aW9uKGZpZWxkLCAndmFsaWRhdG9ycycpO1xuICAgIHRoaXMuaW5pdEZpZWxkVmFsaWRhdGlvbihmaWVsZCwgJ2FzeW5jVmFsaWRhdG9ycycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmllbGRWYWxpZGF0aW9uKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCB0eXBlOiAndmFsaWRhdG9ycycgfCAnYXN5bmNWYWxpZGF0b3JzJykge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAodHlwZSA9PT0gJ3ZhbGlkYXRvcnMnICYmICEoZmllbGQuaGFzT3duUHJvcGVydHkoJ2ZpZWxkR3JvdXAnKSAmJiAhaGFzS2V5KGZpZWxkKSkpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmdldFByZWRlZmluZWRGaWVsZFZhbGlkYXRpb24oZmllbGQpKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRbdHlwZV0pIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yTmFtZSBvZiBPYmplY3Qua2V5cyhmaWVsZFt0eXBlXSkpIHtcbiAgICAgICAgdmFsaWRhdG9yTmFtZSA9PT0gJ3ZhbGlkYXRpb24nXG4gICAgICAgICAgPyB2YWxpZGF0b3JzLnB1c2goLi4uZmllbGRbdHlwZV0udmFsaWRhdGlvbi5tYXAoKHY6IGFueSkgPT4gdGhpcy53cmFwTmdWYWxpZGF0b3JGbihmaWVsZCwgdikpKVxuICAgICAgICAgIDogdmFsaWRhdG9ycy5wdXNoKHRoaXMud3JhcE5nVmFsaWRhdG9yRm4oZmllbGQsIGZpZWxkW3R5cGVdW3ZhbGlkYXRvck5hbWVdLCB2YWxpZGF0b3JOYW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVmaW5lSGlkZGVuUHJvcChmaWVsZCwgJ18nICsgdHlwZSwgdmFsaWRhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGdldFByZWRlZmluZWRGaWVsZFZhbGlkYXRpb24oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpOiBWYWxpZGF0b3JGbiB7XG4gICAgbGV0IFZBTElEQVRPUlM6IHN0cmluZ1tdID0gW107XG4gICAgRk9STUxZX1ZBTElEQVRPUlMuZm9yRWFjaCgob3B0KSA9PlxuICAgICAgb2JzZXJ2ZShmaWVsZCwgWydwcm9wcycsIG9wdF0sICh7IGN1cnJlbnRWYWx1ZSwgZmlyc3RDaGFuZ2UgfSkgPT4ge1xuICAgICAgICBWQUxJREFUT1JTID0gVkFMSURBVE9SUy5maWx0ZXIoKG8pID0+IG8gIT09IG9wdCk7XG4gICAgICAgIGlmIChvcHQgPT09ICdyZXF1aXJlZCcgJiYgY3VycmVudFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGN1cnJlbnRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEZvcm1seTogSW52YWxpZCBwcm9wICdyZXF1aXJlZCcgb2YgdHlwZSAnJHt0eXBlb2YgY3VycmVudFZhbHVlfScsIGV4cGVjdGVkICdib29sZWFuJyAoRmllbGQ6JHtcbiAgICAgICAgICAgICAgZmllbGQua2V5XG4gICAgICAgICAgICB9KS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwgJiYgY3VycmVudFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICAgIFZBTElEQVRPUlMucHVzaChvcHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmlyc3RDaGFuZ2UgJiYgZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICB1cGRhdGVWYWxpZGl0eShmaWVsZC5mb3JtQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKFZBTElEQVRPUlMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlKFxuICAgICAgICBWQUxJREFUT1JTLm1hcCgob3B0KSA9PiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5wcm9wc1tvcHRdO1xuICAgICAgICAgIHN3aXRjaCAob3B0KSB7XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkKGNvbnRyb2wpO1xuICAgICAgICAgICAgY2FzZSAncGF0dGVybic6XG4gICAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnBhdHRlcm4odmFsdWUpKGNvbnRyb2wpO1xuICAgICAgICAgICAgY2FzZSAnbWluTGVuZ3RoJzpcbiAgICAgICAgICAgICAgY29uc3QgbWluTGVuZ3RoUmVzdWx0ID0gVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsdWUpKGNvbnRyb2wpO1xuICAgICAgICAgICAgICBjb25zdCBtaW5MZW5ndGhLZXkgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmdldFZhbGlkYXRvck1lc3NhZ2UoJ21pbmxlbmd0aCcpIHx8IGZpZWxkLnZhbGlkYXRpb24/Lm1lc3NhZ2VzPy5taW5sZW5ndGhcbiAgICAgICAgICAgICAgICAgID8gJ21pbmxlbmd0aCdcbiAgICAgICAgICAgICAgICAgIDogJ21pbkxlbmd0aCc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1pbkxlbmd0aFJlc3VsdCA/IHsgW21pbkxlbmd0aEtleV06IG1pbkxlbmd0aFJlc3VsdC5taW5sZW5ndGggfSA6IG51bGw7XG4gICAgICAgICAgICBjYXNlICdtYXhMZW5ndGgnOlxuICAgICAgICAgICAgICBjb25zdCBtYXhMZW5ndGhSZXN1bHQgPSBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1heExlbmd0aEtleSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yTWVzc2FnZSgnbWF4bGVuZ3RoJykgfHwgZmllbGQudmFsaWRhdGlvbj8ubWVzc2FnZXM/Lm1heGxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAnbWF4bGVuZ3RoJ1xuICAgICAgICAgICAgICAgICAgOiAnbWF4TGVuZ3RoJztcblxuICAgICAgICAgICAgICByZXR1cm4gbWF4TGVuZ3RoUmVzdWx0ID8geyBbbWF4TGVuZ3RoS2V5XTogbWF4TGVuZ3RoUmVzdWx0Lm1heGxlbmd0aCB9IDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5tYXgodmFsdWUpKGNvbnRyb2wpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICkhKGNvbnRyb2wpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHdyYXBOZ1ZhbGlkYXRvckZuKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCB2YWxpZGF0b3I6IGFueSwgdmFsaWRhdG9yTmFtZT86IHN0cmluZykge1xuICAgIGxldCB2YWxpZGF0b3JPcHRpb246IFZhbGlkYXRvck9wdGlvbjtcbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbGlkYXRvck9wdGlvbiA9IGNsb25lKHRoaXMuY29uZmlnLmdldFZhbGlkYXRvcih2YWxpZGF0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciA9PT0gJ29iamVjdCcgJiYgdmFsaWRhdG9yLm5hbWUpIHtcbiAgICAgIHZhbGlkYXRvck9wdGlvbiA9IGNsb25lKHRoaXMuY29uZmlnLmdldFZhbGlkYXRvcih2YWxpZGF0b3IubmFtZSkpO1xuICAgICAgaWYgKHZhbGlkYXRvci5vcHRpb25zKSB7XG4gICAgICAgIHZhbGlkYXRvck9wdGlvbi5vcHRpb25zID0gdmFsaWRhdG9yLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IgPT09ICdvYmplY3QnICYmIHZhbGlkYXRvci5leHByZXNzaW9uKSB7XG4gICAgICBjb25zdCB7IGV4cHJlc3Npb24sIC4uLm9wdGlvbnMgfSA9IHZhbGlkYXRvcjtcbiAgICAgIHZhbGlkYXRvck9wdGlvbiA9IHtcbiAgICAgICAgbmFtZTogdmFsaWRhdG9yTmFtZSxcbiAgICAgICAgdmFsaWRhdGlvbjogZXhwcmVzc2lvbixcbiAgICAgICAgb3B0aW9uczogT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCA/IG9wdGlvbnMgOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0ge1xuICAgICAgICBuYW1lOiB2YWxpZGF0b3JOYW1lLFxuICAgICAgICB2YWxpZGF0aW9uOiB2YWxpZGF0b3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBjb25zdCBlcnJvcnM6IGFueSA9IHZhbGlkYXRvck9wdGlvbi52YWxpZGF0aW9uKGNvbnRyb2wsIGZpZWxkLCB2YWxpZGF0b3JPcHRpb24ub3B0aW9ucyk7XG4gICAgICBpZiAoaXNQcm9taXNlKGVycm9ycykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ycy50aGVuKCh2KSA9PiB0aGlzLmhhbmRsZVJlc3VsdChmaWVsZCwgdmFsaWRhdG9yTmFtZSA/ICEhdiA6IHYsIHZhbGlkYXRvck9wdGlvbikpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKGVycm9ycykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ycy5waXBlKG1hcCgodikgPT4gdGhpcy5oYW5kbGVSZXN1bHQoZmllbGQsIHZhbGlkYXRvck5hbWUgPyAhIXYgOiB2LCB2YWxpZGF0b3JPcHRpb24pKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3VsdChmaWVsZCwgdmFsaWRhdG9yTmFtZSA/ICEhZXJyb3JzIDogZXJyb3JzLCB2YWxpZGF0b3JPcHRpb24pO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3VsdChmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgZXJyb3JzOiBhbnksIHsgbmFtZSwgb3B0aW9ucyB9OiBWYWxpZGF0b3JPcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGVycm9ycyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBlcnJvcnMgPSBlcnJvcnMgPyBudWxsIDogeyBbbmFtZV06IG9wdGlvbnMgPyBvcHRpb25zIDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGN0cmwgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICBjdHJsPy5fY2hpbGRyZW5FcnJvcnM/LltuYW1lXT8uKCk7XG5cbiAgICBpZiAoaXNPYmplY3QoZXJyb3JzKSkge1xuICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yUGF0aCA9IGVycm9yc1tuYW1lXS5lcnJvclBhdGggPyBlcnJvcnNbbmFtZV0uZXJyb3JQYXRoIDogb3B0aW9ucz8uZXJyb3JQYXRoO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkQ3RybCA9IGVycm9yUGF0aCA/IGZpZWxkLmZvcm1Db250cm9sLmdldChlcnJvclBhdGgpIDogbnVsbDtcbiAgICAgICAgaWYgKGNoaWxkQ3RybCkge1xuICAgICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoOiBfZXJyb3JQYXRoLCAuLi5vcHRzIH0gPSBlcnJvcnNbbmFtZV07XG4gICAgICAgICAgY2hpbGRDdHJsLnNldEVycm9ycyh7IC4uLihjaGlsZEN0cmwuZXJyb3JzIHx8IHt9KSwgW25hbWVdOiBvcHRzIH0pO1xuXG4gICAgICAgICAgIWN0cmwuX2NoaWxkcmVuRXJyb3JzICYmIGRlZmluZUhpZGRlblByb3AoY3RybCwgJ19jaGlsZHJlbkVycm9ycycsIHt9KTtcbiAgICAgICAgICBjdHJsLl9jaGlsZHJlbkVycm9yc1tuYW1lXSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgW25hbWVdOiBfdG9EZWxldGUsIC4uLmNoaWxkRXJyb3JzIH0gPSBjaGlsZEN0cmwuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgY2hpbGRDdHJsLnNldEVycm9ycyhPYmplY3Qua2V5cyhjaGlsZEVycm9ycykubGVuZ3RoID09PSAwID8gbnVsbCA6IGNoaWxkRXJyb3JzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy5jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEluamVjdG9yLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vdGVtcGxhdGVzL2ZpZWxkLnR5cGUnO1xuaW1wb3J0IHsgRm9ybWx5RXh0ZW5zaW9uIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnLi9maWVsZGNvbmZpZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5RmllbGRDb25maWdDYWNoZSBleHRlbmRzIEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgZm9ybT86IEZvcm1Hcm91cCB8IEZvcm1BcnJheTtcbiAgbW9kZWw/OiBhbnk7XG4gIGZvcm1Db250cm9sPzogQWJzdHJhY3RDb250cm9sICYgeyBfZmllbGRzPzogRm9ybWx5RmllbGRDb25maWdDYWNoZVtdOyBfY2hpbGRyZW5FcnJvcnM/OiB7IFtpZDogc3RyaW5nXTogRnVuY3Rpb24gfSB9O1xuICBwYXJlbnQ/OiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlO1xuICBvcHRpb25zPzogRm9ybWx5Rm9ybU9wdGlvbnNDYWNoZTtcbiAgc2hhcmVGb3JtQ29udHJvbD86IGJvb2xlYW47XG4gIGluZGV4PzogbnVtYmVyO1xuICBfbG9jYWxGaWVsZHM/OiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlW107XG4gIF9lbGVtZW50UmVmcz86IEVsZW1lbnRSZWZbXTtcbiAgX2V4cHJlc3Npb25zPzoge1xuICAgIFtwcm9wZXJ0eTogc3RyaW5nXToge1xuICAgICAgY2FsbGJhY2s/OiAoaW5nb3JlQ2FjaGU6IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICAgICBwYXRocz86IHN0cmluZ1tdO1xuICAgICAgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbDtcbiAgICAgIHZhbHVlJD86IE9ic2VydmFibGU8YW55PjtcbiAgICB9O1xuICB9O1xuICBfaGlkZT86IGJvb2xlYW47XG4gIF92YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbiAgX2FzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yRm5bXTtcbiAgX2NvbXBvbmVudFJlZnM/OiAoQ29tcG9uZW50UmVmPEZpZWxkVHlwZT4gfCBFbWJlZGRlZFZpZXdSZWY8RmllbGRUeXBlPilbXTtcbiAgX3Byb3h5SW5zdGFuY2U/OiBGb3JtbHlFeHRlbnNpb247XG4gIF9rZXlQYXRoPzoge1xuICAgIGtleTogRm9ybWx5RmllbGRDb25maWdbJ2tleSddO1xuICAgIHBhdGg6IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZvcm1PcHRpb25zQ2FjaGUgZXh0ZW5kcyBGb3JtbHlGb3JtT3B0aW9ucyB7XG4gIGNoZWNrRXhwcmVzc2lvbnM/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBpbmdvcmVDYWNoZT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIF92aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZjtcbiAgX2luamVjdG9yPzogSW5qZWN0b3I7XG4gIF9oaWRkZW5GaWVsZHNGb3JDaGVjaz86IHsgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGU7IGRlZmF1bHQ/OiBib29sZWFuIH1bXTtcbiAgX2luaXRpYWxNb2RlbD86IGFueTtcbiAgX2RldGVjdENoYW5nZXM/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBfYnVpbGRGb3JtPzogKCkgPT4gdm9pZDtcblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgX2NoZWNrRmllbGQ/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBpbmdvcmVDYWNoZT86IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIF9tYXJrRm9yQ2hlY2s/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkO1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRm9ybUdyb3VwLFxuICBGb3JtQXJyYXksXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICBWYWxpZGF0b3JGbixcbiAgQXN5bmNWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vdGVtcGxhdGVzL2ZpZWxkLnR5cGUnO1xuaW1wb3J0IHsgRmllbGRXcmFwcGVyIH0gZnJvbSAnLi4vdGVtcGxhdGVzL2ZpZWxkLndyYXBwZXInO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb24gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIEZpZWxkRXhwcmVzc2lvbjxUID0gYW55PiA9IHN0cmluZyB8ICgoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBUKSB8IE9ic2VydmFibGU8VD47XG50eXBlIEZpZWxkRXhwcmVzc2lvbnMgPSB7IFtwcm9wZXJ0eTogc3RyaW5nXTogRmllbGRFeHByZXNzaW9uIH0gJiB7XG4gIGNsYXNzTmFtZT86IEZpZWxkRXhwcmVzc2lvbjxzdHJpbmc+O1xuICBoaWRlPzogRmllbGRFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAncHJvcHMuZGlzYWJsZWQnPzogRmllbGRFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAncHJvcHMucmVxdWlyZWQnPzogRmllbGRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlGaWVsZENvbmZpZzxQcm9wcyA9IEZvcm1seUZpZWxkUHJvcHMgJiB7IFthZGRpdGlvbmFsUHJvcGVydGllczogc3RyaW5nXTogYW55IH0+IHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhhdCByZWxhdGVzIHRvIHRoZSBtb2RlbC4gVGhpcyB3aWxsIGxpbmsgdGhlIGZpZWxkIHZhbHVlIHRvIHRoZSBtb2RlbFxuICAgKi9cbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyIHwgKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAvKipcbiAgICogVGhpcyBzaG91bGQgYmUgYSBmb3JtbHktZmllbGQgdHlwZSBhZGRlZCBlaXRoZXIgYnkgeW91IG9yIGEgcGx1Z2luLiBNb3JlIGluZm9ybWF0aW9uIG92ZXIgYXQgQ3JlYXRpbmcgRm9ybWx5IEZpZWxkcy5cbiAgICovXG4gIHR5cGU/OiBzdHJpbmcgfCBUeXBlPEZpZWxkVHlwZT47XG5cbiAgLyoqXG4gICAqIFVzZSBgZGVmYXVsdFZhbHVlYCB0byBpbml0aWFsaXplIGl0IHRoZSBtb2RlbC4gSWYgdGhpcyBpcyBwcm92aWRlZCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBtb2RlbCBhdCBjb21waWxlLXRpbWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgd2lsbCBiZSBhc3NpZ25lZCB0byBgZGVmYXVsdFZhbHVlYC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcblxuICAvKipcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGBpZGAgb2YgeW91ciBmaWVsZC4gTm90ZSwgdGhlIGBpZGAgaXMgZ2VuZXJhdGVkIGlmIG5vdCBzZXQuXG4gICAqL1xuICBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgeW91IHdpc2gsIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGBuYW1lYCBmb3IgeW91ciBmaWVsZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91J3JlIHBvc3RpbmcgdGhlIGZvcm0gdG8gYSBzZXJ2ZXIgdXNpbmcgdGVjaG5pcXVlcyBvZiB5ZXN0ZXIteWVhci5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgcmVzZXJ2ZWQgZm9yIHRoZSB0ZW1wbGF0ZXMuIEFueSB0ZW1wbGF0ZS1zcGVjaWZpYyBvcHRpb25zIGdvIGluIGhlcmUuIExvb2sgYXQgeW91ciBzcGVjaWZpYyB0ZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbiB0byBrbm93IHRoZSBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGlzLlxuICAgKi9cbiAgcHJvcHM/OiBQcm9wcztcblxuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBwcm9wc2AgaW5zdGVhZC4gKi9cbiAgdGVtcGxhdGVPcHRpb25zPzogRm9ybWx5VGVtcGxhdGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2l0aCBhIGZldyB1c2VmdWwgcHJvcGVydGllc1xuICAgKiAtIGB2YWxpZGF0aW9uLm1lc3NhZ2VzYDogQSBtYXAgb2YgbWVzc2FnZSBuYW1lcyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gdGhlIGZpZWxkIGhhcyBlcnJvcnMuXG4gICAqIC0gYHZhbGlkYXRpb24uc2hvd2A6IEEgYm9vbGVhbiB5b3UgYXMgdGhlIGRldmVsb3BlciBjYW4gc2V0IHRvIGZvcmNlIGRpc3BsYXlpbmcgZXJyb3JzIHdoYXRldmVyIHRoZSBzdGF0ZSBvZiBmaWVsZC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UncmUgdHJ5aW5nIHRvIGNhbGwgdGhlIHVzZXIncyBhdHRlbnRpb24gdG8gc29tZSBmaWVsZHMgZm9yIHNvbWUgcmVhc29uLlxuICAgKi9cbiAgdmFsaWRhdGlvbj86IHtcbiAgICBtZXNzYWdlcz86IHsgW21lc3NhZ2VQcm9wZXJ0aWVzOiBzdHJpbmddOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblsnbWVzc2FnZSddIH0gJiB7XG4gICAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBtaW5MZW5ndGhgICovXG4gICAgICBtaW5sZW5ndGg/OiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblsnbWVzc2FnZSddO1xuXG4gICAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBtYXhMZW5ndGhgICovXG4gICAgICBtYXhsZW5ndGg/OiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblsnbWVzc2FnZSddO1xuICAgIH07XG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgcGFydGljdWxhciBmaWVsZC5cbiAgICogU2hvdWxkIGJlIGFuIG9iamVjdCBvZiBrZXkgLSB2YWx1ZSBwYWlycy4gVGhlIHZhbHVlIGNhbiBlaXRoZXIgYmUgYW4gZXhwcmVzc2lvbiB0byBldmFsdWF0ZSBvciBhIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICogRWFjaCBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSwgcmV0dXJuaW5nIHRydWUgd2hlbiB0aGUgZmllbGQgaXMgdmFsaWQuIFNlZSBWYWxpZGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgdmFsaWRhdG9ycz86IEZvcm1seVZhbGlkYXRpb248VmFsaWRhdG9yRm4sIGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBvbmUgZm9yIGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gdmFsaWRhdGUgYXN5bmNocm9ub3VzbHkuXG4gICAqIFByZXR0eSBtdWNoIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHZhbGlkYXRvcnMgYXBpLCBleGNlcHQgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UuXG4gICAqL1xuICBhc3luY1ZhbGlkYXRvcnM/OiBGb3JtbHlWYWxpZGF0aW9uPEFzeW5jVmFsaWRhdG9yRm4sIFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+PjtcblxuICAvKipcbiAgICogQ2FuIGJlIHNldCBpbnN0ZWFkIG9mIGB0eXBlYCB0byByZW5kZXIgY3VzdG9tIGh0bWwgY29udGVudC5cbiAgICovXG4gIHRlbXBsYXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgSXQgaXMgZXhwZWN0ZWQgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZXJzLlxuICAgKiAgVGhlIGZvcm1seSBmaWVsZCB0ZW1wbGF0ZSB3aWxsIGJlIHdyYXBwZWQgYnkgdGhlIGZpcnN0IHdyYXBwZXIsIHRoZW4gdGhlIHNlY29uZCwgdGhlbiB0aGUgdGhpcmQsIGV0Yy5cbiAgICogIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZXNlIGFzIHBhcnQgb2YgYSB0eXBlICh3aGljaCBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2gpLlxuICAgKi9cbiAgd3JhcHBlcnM/OiAoc3RyaW5nIHwgVHlwZTxGaWVsZFdyYXBwZXI+KVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgdGhlIGZpZWxkLiBEZWZhdWx0cyB0byBmYWxzZS4gSWYgeW91IHdpc2ggdGhpcyB0byBiZSBjb25kaXRpb25hbCB1c2UgYGV4cHJlc3Npb25zOiB7IGhpZGU6IC4uLiB9YFxuICAgKi9cbiAgaGlkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHZhbHVlIG9uIGhpZGUgb3Igbm90LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZXNldE9uSGlkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmRpdGlvbmFsbHkgaGlkaW5nIEZpZWxkIGJhc2VkIG9uIHZhbHVlcyBmcm9tIG90aGVyIEZpZWxkc1xuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGV4cHJlc3Npb25zOiB7IGhpZGU6IC4uLiB9YFxuICAgKi9cbiAgaGlkZUV4cHJlc3Npb24/OiBib29sZWFuIHwgc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU6IGFueSwgZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbik7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCB3aGVyZSB0aGUga2V5IGlzIGEgcHJvcGVydHkgdG8gYmUgc2V0IG9uIHRoZSBtYWluIGZpZWxkIGNvbmZpZyBhbmQgdGhlIHZhbHVlIGlzIGFuIGV4cHJlc3Npb24gdXNlZCB0byBhc3NpZ24gdGhhdCBwcm9wZXJ0eS5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBleHByZXNzaW9uc2BcbiAgICovXG4gIGV4cHJlc3Npb25Qcm9wZXJ0aWVzPzoge1xuICAgIFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU6IGFueSwgZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYW55KSB8IE9ic2VydmFibGU8YW55PjtcbiAgfTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHdoZXJlIHRoZSBrZXkgaXMgYSBwcm9wZXJ0eSB0byBiZSBzZXQgb24gdGhlIG1haW4gZmllbGQgY29uZmlnIGFuZCB0aGUgdmFsdWUgaXMgYW4gZXhwcmVzc2lvbiB1c2VkIHRvIGFzc2lnbiB0aGF0IHByb3BlcnR5LlxuICAgKi9cbiAgZXhwcmVzc2lvbnM/OiBGaWVsZEV4cHJlc3Npb25zO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgeW91ciBvd24gY2xhc3MgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGBmb3JtbHktZmllbGRgIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmeSB5b3VyIG93biBjbGFzcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYGZvcm1seS1ncm91cGAgY29tcG9uZW50LlxuICAgKi9cbiAgZmllbGRHcm91cENsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBmaWVsZCBncm91cCBpcyBhIHdheSB0byBncm91cCBmaWVsZHMgdG9nZXRoZXIsIG1ha2luZyBhZHZhbmNlZCBsYXlvdXQgdmVyeSBzaW1wbGUuXG4gICAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ3JvdXAgZmllbGRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBtb2RlbCAodXNlZnVsIGlmIGl0J3MgZGlmZmVyZW50IHRoYW4gdGhlIG1vZGVsIGZvciB0aGUgcmVzdCBvZiB0aGUgZmllbGRzKS5cbiAgICovXG4gIGZpZWxkR3JvdXA/OiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuXG4gIGZpZWxkQXJyYXk/OiBGb3JtbHlGaWVsZENvbmZpZyB8ICgoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBGb3JtbHlGaWVsZENvbmZpZyk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9jdXMgb3IgYmx1ciB0aGUgZWxlbWVudCBmaWVsZC4gRGVmYXVsdHMgdG8gZmFsc2UuIElmIHlvdSB3aXNoIHRoaXMgdG8gYmUgY29uZGl0aW9uYWwgdXNlIGBleHByZXNzaW9uc2BcbiAgICovXG4gIGZvY3VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHdpdGggYSBmZXcgdXNlZnVsIHByb3BlcnRpZXMgdG8gY29udHJvbCB0aGUgbW9kZWwgY2hhbmdlc1xuICAgKiAtIGBkZWJvdW5jZWA6IGludGVnZXIgdmFsdWUgd2hpY2ggY29udGFpbnMgdGhlIGRlYm91bmNlIG1vZGVsIHVwZGF0ZSB2YWx1ZSBpbiBtaWxsaXNlY29uZHMuIEEgdmFsdWUgb2YgMCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgdXBkYXRlLlxuICAgKiAtIGB1cGRhdGVPbmA6IHN0cmluZyBldmVudCB2YWx1ZSB0aGF0IGluc3RydWN0cyB3aGVuIHRoZSBjb250cm9sIHNob3VsZCBiZSB1cGRhdGVkXG4gICAqL1xuICBtb2RlbE9wdGlvbnM/OiB7XG4gICAgZGVib3VuY2U/OiB7XG4gICAgICBkZWZhdWx0OiBudW1iZXI7XG4gICAgfTtcbiAgICAvLyBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvQWJzdHJhY3RDb250cm9sI3VwZGF0ZU9uXG4gICAgdXBkYXRlT24/OiAnY2hhbmdlJyB8ICdibHVyJyB8ICdzdWJtaXQnO1xuICB9O1xuXG4gIGhvb2tzPzogRm9ybWx5SG9va0NvbmZpZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUsIGFzIGEgcGlwZWxpbmUsIHdoZW5ldmVyIHRoZSBtb2RlbCB1cGRhdGVzLCB1c3VhbGx5IHZpYSB1c2VyIGlucHV0LlxuICAgKi9cbiAgcGFyc2Vycz86ICgodmFsdWU6IGFueSkgPT4gYW55KVtdO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNoaWxkIGZpZWxkIGJ5IGtleSBuYW1lXG4gICAqL1xuICBnZXQ/OiAoa2V5OiBGb3JtbHlGaWVsZENvbmZpZ1sna2V5J10pID0+IEZvcm1seUZpZWxkQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdGhhdCBzdG9yZXMgYWxsIHRoZSBkYXRhLCB3aGVyZSB0aGUgbW9kZWxba2V5XSBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqL1xuICByZWFkb25seSBtb2RlbD86IGFueTtcblxuICAvKipcbiAgICogVGhlIHBhcmVudCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudD86IEZvcm1seUZpZWxkQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEZvcm1seUZvcm1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGZvcm0uXG4gICAqL1xuICByZWFkb25seSBmb3JtPzogRm9ybUdyb3VwIHwgRm9ybUFycmF5O1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBbRm9ybUNvbnRyb2xdKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvRm9ybUNvbnRyb2wpIGZvciB0aGUgZmllbGQuXG4gICAqIEl0IHByb3ZpZGVzIHlvdSBtb3JlIGNvbnRyb2wgbGlrZSBydW5uaW5nIHZhbGlkYXRvcnMsIGNhbGN1bGF0aW5nIHN0YXR1cywgYW5kIHJlc2V0dGluZyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZvcm1Db250cm9sPzogQWJzdHJhY3RDb250cm9sO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBvcHRpb25zVHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybWx5QXR0cmlidXRlRXZlbnQgPSAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBldmVudD86IGFueSkgPT4gdm9pZDtcblxuLyoqICBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlUZW1wbGF0ZU9wdGlvbnMgZXh0ZW5kcyBGb3JtbHlGaWVsZFByb3BzIHtcbiAgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5RmllbGRQcm9wcyB7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvcHRpb25zPzogYW55W10gfCBPYnNlcnZhYmxlPGFueVtdPjtcbiAgcm93cz86IG51bWJlcjtcbiAgY29scz86IG51bWJlcjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuXG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBgbWluTGVuZ3RoYCAqL1xuICBtaW5sZW5ndGg/OiBudW1iZXI7XG5cbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBtYXhMZW5ndGhgICovXG4gIG1heGxlbmd0aD86IG51bWJlcjtcblxuICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHRhYmluZGV4PzogbnVtYmVyO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIGF0dHJpYnV0ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9O1xuICBzdGVwPzogbnVtYmVyO1xuICBmb2N1cz86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBibHVyPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGtleXVwPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGtleWRvd24/OiBGb3JtbHlBdHRyaWJ1dGVFdmVudDtcbiAgY2xpY2s/OiBGb3JtbHlBdHRyaWJ1dGVFdmVudDtcbiAgY2hhbmdlPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGtleXByZXNzPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1seUhvb2tGbiA9IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5SG9va0NvbmZpZyB7XG4gIG9uSW5pdD86IEZvcm1seUhvb2tGbiB8ICgoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBPYnNlcnZhYmxlPGFueT4pO1xuICBvbkNoYW5nZXM/OiBGb3JtbHlIb29rRm47XG4gIGFmdGVyQ29udGVudEluaXQ/OiBGb3JtbHlIb29rRm47XG4gIGFmdGVyVmlld0luaXQ/OiBGb3JtbHlIb29rRm47XG4gIG9uRGVzdHJveT86IEZvcm1seUhvb2tGbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlGb3JtT3B0aW9ucyB7XG4gIHVwZGF0ZUluaXRpYWxWYWx1ZT86IChtb2RlbD86IGFueSkgPT4gdm9pZDtcbiAgcmVzZXRNb2RlbD86IChtb2RlbD86IGFueSkgPT4gdm9pZDtcbiAgZm9ybVN0YXRlPzogYW55O1xuICBmaWVsZENoYW5nZXM/OiBTdWJqZWN0PEZvcm1seVZhbHVlQ2hhbmdlRXZlbnQ+O1xuICBzaG93RXJyb3I/OiAoZmllbGQ6IEZpZWxkVHlwZSkgPT4gYm9vbGVhbjtcbiAgYnVpbGQ/OiAoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gRm9ybWx5RmllbGRDb25maWc7XG4gIGNoZWNrRXhwcmVzc2lvbnM/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkO1xuICBkZXRlY3RDaGFuZ2VzPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gdm9pZDtcbiAgcGFyZW50Rm9ybT86IEZvcm1Hcm91cERpcmVjdGl2ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5VmFsdWVDaGFuZ2VFdmVudCB7XG4gIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICBbbWV0YTogc3RyaW5nXTogYW55O1xufVxuXG5pbnRlcmZhY2UgRm9ybWx5VmFsaWRhdGlvbjxULCBSPiB7XG4gIHZhbGlkYXRpb24/OiAoc3RyaW5nIHwgVClbXSB8IGFueTtcbiAgW2tleTogc3RyaW5nXTogRm9ybWx5VmFsaWRhdG9yRm48Uj4gfCBGb3JtbHlWYWxpZGF0b3JFeHByZXNzaW9uRm48Uj4gfCBhbnk7XG59XG50eXBlIEZvcm1seVZhbGlkYXRvckZuPFQ+ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBUO1xuXG5pbnRlcmZhY2UgRm9ybWx5VmFsaWRhdG9yRXhwcmVzc2lvbkZuPFQ+IHtcbiAgZXhwcmVzc2lvbjogRm9ybWx5VmFsaWRhdG9yRm48VD47XG4gIG1lc3NhZ2U6IHN0cmluZyB8ICgoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pO1xufVxuIl19
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { defineHiddenProp, observe, disableTreeValidityCall, isHiddenField, isSignalRequired, } from '../utils';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./formly.config";
|
|
6
|
-
import * as i2 from "@angular/forms";
|
|
7
|
-
export class FormlyFormBuilder {
|
|
8
|
-
constructor(config, injector, viewContainerRef, parentForm) {
|
|
9
|
-
this.config = config;
|
|
10
|
-
this.injector = injector;
|
|
11
|
-
this.viewContainerRef = viewContainerRef;
|
|
12
|
-
this.parentForm = parentForm;
|
|
13
|
-
}
|
|
14
|
-
buildForm(form, fieldGroup = [], model, options) {
|
|
15
|
-
this.build({ fieldGroup, model, form, options });
|
|
16
|
-
}
|
|
17
|
-
build(field) {
|
|
18
|
-
if (!this.config.extensions.core) {
|
|
19
|
-
throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');
|
|
20
|
-
}
|
|
21
|
-
if (!field.parent) {
|
|
22
|
-
this._setOptions(field);
|
|
23
|
-
}
|
|
24
|
-
disableTreeValidityCall(field.form, () => {
|
|
25
|
-
this._build(field);
|
|
26
|
-
// TODO: add test for https://github.com/ngx-formly/ngx-formly/issues/3910
|
|
27
|
-
if (!field.parent || field.fieldArray) {
|
|
28
|
-
// detect changes early to avoid reset value by hidden fields
|
|
29
|
-
const options = field.options;
|
|
30
|
-
if (field.parent && isHiddenField(field)) {
|
|
31
|
-
// when hide is used in expression set defaul value will not be set until detect hide changes
|
|
32
|
-
// which causes default value not set on new item is added
|
|
33
|
-
options._hiddenFieldsForCheck?.push({ field, default: false });
|
|
34
|
-
}
|
|
35
|
-
options.checkExpressions?.(field, true);
|
|
36
|
-
options._detectChanges?.(field);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
_build(field) {
|
|
41
|
-
if (!field) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const extensions = Object.values(this.config.extensions);
|
|
45
|
-
extensions.forEach((extension) => extension.prePopulate?.(field));
|
|
46
|
-
extensions.forEach((extension) => extension.onPopulate?.(field));
|
|
47
|
-
field.fieldGroup?.forEach((f) => this._build(f));
|
|
48
|
-
extensions.forEach((extension) => extension.postPopulate?.(field));
|
|
49
|
-
}
|
|
50
|
-
_setOptions(field) {
|
|
51
|
-
field.form = field.form || new FormGroup({});
|
|
52
|
-
field.model = field.model || {};
|
|
53
|
-
field.options = field.options || {};
|
|
54
|
-
const options = field.options;
|
|
55
|
-
if (!options._viewContainerRef) {
|
|
56
|
-
defineHiddenProp(options, '_viewContainerRef', this.viewContainerRef);
|
|
57
|
-
}
|
|
58
|
-
if (!options._injector) {
|
|
59
|
-
defineHiddenProp(options, '_injector', this.injector);
|
|
60
|
-
}
|
|
61
|
-
if (!options.build) {
|
|
62
|
-
options._buildForm = () => {
|
|
63
|
-
console.warn(`Formly: 'options._buildForm' is deprecated since v6.0, use 'options.build' instead.`);
|
|
64
|
-
this.build(field);
|
|
65
|
-
};
|
|
66
|
-
options.build = (f = field) => {
|
|
67
|
-
this.build(f);
|
|
68
|
-
return f;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
if (!options.parentForm && this.parentForm) {
|
|
72
|
-
defineHiddenProp(options, 'parentForm', this.parentForm);
|
|
73
|
-
if (!isSignalRequired()) {
|
|
74
|
-
observe(options, ['parentForm', 'submitted'], ({ firstChange }) => {
|
|
75
|
-
if (!firstChange) {
|
|
76
|
-
options.detectChanges(field);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
FormlyFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyFormBuilder, deps: [{ token: i1.FormlyConfig }, { token: i0.Injector }, { token: i0.ViewContainerRef, optional: true }, { token: i2.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
84
|
-
FormlyFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyFormBuilder, providedIn: 'root' });
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyFormBuilder, decorators: [{
|
|
86
|
-
type: Injectable,
|
|
87
|
-
args: [{ providedIn: 'root' }]
|
|
88
|
-
}], ctorParameters: function () { return [{ type: i1.FormlyConfig }, { type: i0.Injector }, { type: i0.ViewContainerRef, decorators: [{
|
|
89
|
-
type: Optional
|
|
90
|
-
}] }, { type: i2.FormGroupDirective, decorators: [{
|
|
91
|
-
type: Optional
|
|
92
|
-
}] }]; } });
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2Zvcm1seS5idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBRzFFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHVCQUF1QixFQUN2QixhQUFhLEVBQ2IsZ0JBQWdCLEdBRWpCLE1BQU0sVUFBVSxDQUFDOzs7O0FBR2xCLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxNQUFvQixFQUNwQixRQUFrQixFQUNOLGdCQUFrQyxFQUNsQyxVQUE4QjtRQUgxQyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQW9CO0lBQ2pELENBQUM7SUFFSixTQUFTLENBQUMsSUFBMkIsRUFBRSxhQUFrQyxFQUFFLEVBQUUsS0FBVSxFQUFFLE9BQTBCO1FBQ2pILElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBd0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDJGQUEyRixDQUFDLENBQUM7U0FDOUc7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQiwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUssS0FBZ0MsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pFLDZEQUE2RDtnQkFDN0QsTUFBTSxPQUFPLEdBQUksS0FBZ0MsQ0FBQyxPQUFPLENBQUM7Z0JBRTFELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3hDLDZGQUE2RjtvQkFDN0YsMERBQTBEO29CQUMxRCxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRTtnQkFFRCxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUE2QjtRQUMxQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTztTQUNSO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUE2QjtRQUMvQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUM5QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO2dCQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLHFGQUFxRixDQUFDLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1lBRUYsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQXVCLEtBQUssRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVkLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXpELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN2QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO29CQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNoQixPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM5QjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDOzsrR0ExRlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFLN0IsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQXJyYXksIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seUNvbmZpZyB9IGZyb20gJy4vZm9ybWx5LmNvbmZpZyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMsIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgZGVmaW5lSGlkZGVuUHJvcCxcbiAgb2JzZXJ2ZSxcbiAgZGlzYWJsZVRyZWVWYWxpZGl0eUNhbGwsXG4gIGlzSGlkZGVuRmllbGQsXG4gIGlzU2lnbmFsUmVxdWlyZWQsXG4gIGlzVW5kZWZpbmVkLFxufSBmcm9tICcuLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRm9ybWx5Rm9ybUJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogRm9ybWx5Q29uZmlnLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudEZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKSB7fVxuXG4gIGJ1aWxkRm9ybShmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksIGZpZWxkR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSwgbW9kZWw6IGFueSwgb3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMpIHtcbiAgICB0aGlzLmJ1aWxkKHsgZmllbGRHcm91cCwgbW9kZWwsIGZvcm0sIG9wdGlvbnMgfSk7XG4gIH1cblxuICBidWlsZChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4dGVuc2lvbnMuY29yZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZ3hGb3JtbHk6IG1pc3NpbmcgYGZvclJvb3QoKWAgY2FsbC4gdXNlIGBmb3JSb290KClgIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIGBGb3JtbHlNb2R1bGVgLicpO1xuICAgIH1cblxuICAgIGlmICghZmllbGQucGFyZW50KSB7XG4gICAgICB0aGlzLl9zZXRPcHRpb25zKGZpZWxkKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlVHJlZVZhbGlkaXR5Q2FsbChmaWVsZC5mb3JtLCAoKSA9PiB7XG4gICAgICB0aGlzLl9idWlsZChmaWVsZCk7XG4gICAgICAvLyBUT0RPOiBhZGQgdGVzdCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL25neC1mb3JtbHkvbmd4LWZvcm1seS9pc3N1ZXMvMzkxMFxuICAgICAgaWYgKCFmaWVsZC5wYXJlbnQgfHwgKGZpZWxkIGFzIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpLmZpZWxkQXJyYXkpIHtcbiAgICAgICAgLy8gZGV0ZWN0IGNoYW5nZXMgZWFybHkgdG8gYXZvaWQgcmVzZXQgdmFsdWUgYnkgaGlkZGVuIGZpZWxkc1xuICAgICAgICBjb25zdCBvcHRpb25zID0gKGZpZWxkIGFzIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGZpZWxkLnBhcmVudCAmJiBpc0hpZGRlbkZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgIC8vIHdoZW4gaGlkZSBpcyB1c2VkIGluIGV4cHJlc3Npb24gc2V0IGRlZmF1bCB2YWx1ZSB3aWxsIG5vdCBiZSBzZXQgdW50aWwgZGV0ZWN0IGhpZGUgY2hhbmdlc1xuICAgICAgICAgIC8vIHdoaWNoIGNhdXNlcyBkZWZhdWx0IHZhbHVlIG5vdCBzZXQgb24gbmV3IGl0ZW0gaXMgYWRkZWRcbiAgICAgICAgICBvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjaz8ucHVzaCh7IGZpZWxkLCBkZWZhdWx0OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuY2hlY2tFeHByZXNzaW9ucz8uKGZpZWxkLCB0cnVlKTtcbiAgICAgICAgb3B0aW9ucy5fZGV0ZWN0Q2hhbmdlcz8uKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuY29uZmlnLmV4dGVuc2lvbnMpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ucHJlUG9wdWxhdGU/LihmaWVsZCkpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ub25Qb3B1bGF0ZT8uKGZpZWxkKSk7XG4gICAgZmllbGQuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4gdGhpcy5fYnVpbGQoZikpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ucG9zdFBvcHVsYXRlPy4oZmllbGQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE9wdGlvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBmaWVsZC5mb3JtID0gZmllbGQuZm9ybSB8fCBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBmaWVsZC5tb2RlbCA9IGZpZWxkLm1vZGVsIHx8IHt9O1xuICAgIGZpZWxkLm9wdGlvbnMgPSBmaWVsZC5vcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5vcHRpb25zO1xuXG4gICAgaWYgKCFvcHRpb25zLl92aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKG9wdGlvbnMsICdfdmlld0NvbnRhaW5lclJlZicsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLl9pbmplY3Rvcikge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChvcHRpb25zLCAnX2luamVjdG9yJywgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmJ1aWxkKSB7XG4gICAgICBvcHRpb25zLl9idWlsZEZvcm0gPSAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRm9ybWx5OiAnb3B0aW9ucy5fYnVpbGRGb3JtJyBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAsIHVzZSAnb3B0aW9ucy5idWlsZCcgaW5zdGVhZC5gKTtcbiAgICAgICAgdGhpcy5idWlsZChmaWVsZCk7XG4gICAgICB9O1xuXG4gICAgICBvcHRpb25zLmJ1aWxkID0gKGY6IEZvcm1seUZpZWxkQ29uZmlnID0gZmllbGQpID0+IHtcbiAgICAgICAgdGhpcy5idWlsZChmKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnBhcmVudEZvcm0gJiYgdGhpcy5wYXJlbnRGb3JtKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKG9wdGlvbnMsICdwYXJlbnRGb3JtJywgdGhpcy5wYXJlbnRGb3JtKTtcblxuICAgICAgaWYgKCFpc1NpZ25hbFJlcXVpcmVkKCkpIHtcbiAgICAgICAgb2JzZXJ2ZShvcHRpb25zLCBbJ3BhcmVudEZvcm0nLCAnc3VibWl0dGVkJ10sICh7IGZpcnN0Q2hhbmdlIH0pID0+IHtcbiAgICAgICAgICBpZiAoIWZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmRldGVjdENoYW5nZXMoZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|