@covalent/dynamic-forms 4.0.0 → 4.1.0-develop.2
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 +26 -18
- package/covalent-dynamic-forms.d.ts +2 -1
- package/esm2020/covalent-dynamic-forms.mjs +5 -0
- package/esm2020/lib/dynamic-element.component.mjs +178 -0
- package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
- package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
- package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
- package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
- package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
- package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
- package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
- package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
- package/esm2020/lib/dynamic-forms.component.mjs +185 -0
- package/esm2020/lib/dynamic-forms.module.mjs +127 -0
- package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
- package/esm2020/public_api.mjs +13 -0
- package/fesm2015/covalent-dynamic-forms.mjs +748 -0
- package/fesm2015/covalent-dynamic-forms.mjs.map +1 -0
- package/fesm2020/covalent-dynamic-forms.mjs +746 -0
- package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
- package/{dynamic-element.component.d.ts → lib/dynamic-element.component.d.ts} +24 -17
- package/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +11 -0
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-datepicker/dynamic-datepicker.component.d.ts +6 -3
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-file-input/dynamic-file-input.component.d.ts +4 -1
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-input/dynamic-input.component.d.ts +7 -4
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-select/dynamic-select.component.d.ts +5 -2
- package/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +11 -0
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-slider/dynamic-slider.component.d.ts +5 -2
- package/{dynamic-elements → lib/dynamic-elements}/dynamic-textarea/dynamic-textarea.component.d.ts +3 -0
- package/{dynamic-forms.component.d.ts → lib/dynamic-forms.component.d.ts} +4 -1
- package/lib/dynamic-forms.module.d.ts +28 -0
- package/{services → lib/services}/dynamic-forms.service.d.ts +5 -2
- package/package.json +32 -17
- package/public_api.d.ts +12 -12
- package/bundles/covalent-dynamic-forms.umd.js +0 -1654
- package/bundles/covalent-dynamic-forms.umd.js.map +0 -1
- package/bundles/covalent-dynamic-forms.umd.min.js +0 -16
- package/bundles/covalent-dynamic-forms.umd.min.js.map +0 -1
- package/covalent-dynamic-forms.metadata.json +0 -1
- package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +0 -8
- package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.scss +0 -0
- package/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.scss +0 -12
- package/dynamic-elements/dynamic-file-input/dynamic-file-input.component.scss +0 -15
- package/dynamic-elements/dynamic-input/dynamic-input.component.scss +0 -12
- package/dynamic-elements/dynamic-select/dynamic-select.component.scss +0 -12
- package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +0 -8
- package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.scss +0 -0
- package/dynamic-elements/dynamic-slider/dynamic-slider.component.scss +0 -17
- package/dynamic-elements/dynamic-textarea/dynamic-textarea.component.scss +0 -12
- package/dynamic-forms.component.scss +0 -29
- package/dynamic-forms.module.d.ts +0 -2
- package/esm2015/covalent-dynamic-forms.js +0 -10
- package/esm2015/dynamic-element.component.js +0 -340
- package/esm2015/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.js +0 -34
- package/esm2015/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.js +0 -49
- package/esm2015/dynamic-elements/dynamic-file-input/dynamic-file-input.component.js +0 -47
- package/esm2015/dynamic-elements/dynamic-input/dynamic-input.component.js +0 -55
- package/esm2015/dynamic-elements/dynamic-select/dynamic-select.component.js +0 -46
- package/esm2015/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.js +0 -34
- package/esm2015/dynamic-elements/dynamic-slider/dynamic-slider.component.js +0 -64
- package/esm2015/dynamic-elements/dynamic-textarea/dynamic-textarea.component.js +0 -40
- package/esm2015/dynamic-forms.component.js +0 -306
- package/esm2015/dynamic-forms.module.js +0 -73
- package/esm2015/index.js +0 -7
- package/esm2015/public_api.js +0 -18
- package/esm2015/services/dynamic-forms.service.js +0 -201
- package/fesm2015/covalent-dynamic-forms.js +0 -1269
- package/fesm2015/covalent-dynamic-forms.js.map +0 -1
- package/index.d.ts +0 -1
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: services/dynamic-forms.service.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable, SkipSelf, Optional } from '@angular/core';
|
|
7
|
-
import { Validators, FormControl } from '@angular/forms';
|
|
8
|
-
import { TdDynamicInputComponent } from '../dynamic-elements/dynamic-input/dynamic-input.component';
|
|
9
|
-
import { TdDynamicFileInputComponent } from '../dynamic-elements/dynamic-file-input/dynamic-file-input.component';
|
|
10
|
-
import { TdDynamicTextareaComponent } from '../dynamic-elements/dynamic-textarea/dynamic-textarea.component';
|
|
11
|
-
import { TdDynamicSlideToggleComponent } from '../dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';
|
|
12
|
-
import { TdDynamicCheckboxComponent } from '../dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';
|
|
13
|
-
import { TdDynamicSliderComponent } from '../dynamic-elements/dynamic-slider/dynamic-slider.component';
|
|
14
|
-
import { TdDynamicSelectComponent } from '../dynamic-elements/dynamic-select/dynamic-select.component';
|
|
15
|
-
import { TdDynamicDatepickerComponent } from '../dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';
|
|
16
|
-
/** @enum {string} */
|
|
17
|
-
const TdDynamicType = {
|
|
18
|
-
Text: "text",
|
|
19
|
-
Boolean: "boolean",
|
|
20
|
-
Number: "number",
|
|
21
|
-
Array: "array",
|
|
22
|
-
Date: "date",
|
|
23
|
-
};
|
|
24
|
-
export { TdDynamicType };
|
|
25
|
-
/** @enum {string} */
|
|
26
|
-
const TdDynamicElement = {
|
|
27
|
-
Input: "input",
|
|
28
|
-
Datepicker: "datepicker",
|
|
29
|
-
Password: "password",
|
|
30
|
-
Textarea: "textarea",
|
|
31
|
-
Slider: "slider",
|
|
32
|
-
SlideToggle: "slide-toggle",
|
|
33
|
-
Checkbox: "checkbox",
|
|
34
|
-
Select: "select",
|
|
35
|
-
FileInput: "file-input",
|
|
36
|
-
};
|
|
37
|
-
export { TdDynamicElement };
|
|
38
|
-
/**
|
|
39
|
-
* @record
|
|
40
|
-
*/
|
|
41
|
-
export function ITdDynamicElementValidator() { }
|
|
42
|
-
if (false) {
|
|
43
|
-
/** @type {?} */
|
|
44
|
-
ITdDynamicElementValidator.prototype.validator;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @record
|
|
48
|
-
*/
|
|
49
|
-
export function ITdDynamicElementCustomConfig() { }
|
|
50
|
-
/**
|
|
51
|
-
* @record
|
|
52
|
-
*/
|
|
53
|
-
export function ITdDynamicElementConfig() { }
|
|
54
|
-
if (false) {
|
|
55
|
-
/** @type {?|undefined} */
|
|
56
|
-
ITdDynamicElementConfig.prototype.label;
|
|
57
|
-
/** @type {?} */
|
|
58
|
-
ITdDynamicElementConfig.prototype.name;
|
|
59
|
-
/** @type {?|undefined} */
|
|
60
|
-
ITdDynamicElementConfig.prototype.hint;
|
|
61
|
-
/** @type {?} */
|
|
62
|
-
ITdDynamicElementConfig.prototype.type;
|
|
63
|
-
/** @type {?|undefined} */
|
|
64
|
-
ITdDynamicElementConfig.prototype.required;
|
|
65
|
-
/** @type {?|undefined} */
|
|
66
|
-
ITdDynamicElementConfig.prototype.disabled;
|
|
67
|
-
/** @type {?|undefined} */
|
|
68
|
-
ITdDynamicElementConfig.prototype.min;
|
|
69
|
-
/** @type {?|undefined} */
|
|
70
|
-
ITdDynamicElementConfig.prototype.max;
|
|
71
|
-
/** @type {?|undefined} */
|
|
72
|
-
ITdDynamicElementConfig.prototype.minLength;
|
|
73
|
-
/** @type {?|undefined} */
|
|
74
|
-
ITdDynamicElementConfig.prototype.maxLength;
|
|
75
|
-
/** @type {?|undefined} */
|
|
76
|
-
ITdDynamicElementConfig.prototype.selections;
|
|
77
|
-
/** @type {?|undefined} */
|
|
78
|
-
ITdDynamicElementConfig.prototype.multiple;
|
|
79
|
-
/** @type {?|undefined} */
|
|
80
|
-
ITdDynamicElementConfig.prototype.default;
|
|
81
|
-
/** @type {?|undefined} */
|
|
82
|
-
ITdDynamicElementConfig.prototype.flex;
|
|
83
|
-
/** @type {?|undefined} */
|
|
84
|
-
ITdDynamicElementConfig.prototype.validators;
|
|
85
|
-
/** @type {?|undefined} */
|
|
86
|
-
ITdDynamicElementConfig.prototype.customConfig;
|
|
87
|
-
/** @type {?|undefined} */
|
|
88
|
-
ITdDynamicElementConfig.prototype.placeholder;
|
|
89
|
-
}
|
|
90
|
-
/** @type {?} */
|
|
91
|
-
export const DYNAMIC_ELEMENT_NAME_REGEX = /^[^0-9][^\@]*$/;
|
|
92
|
-
export class TdDynamicFormsService {
|
|
93
|
-
/**
|
|
94
|
-
* Method to validate if the [name] is a proper element name.
|
|
95
|
-
* Throws error if name is not valid.
|
|
96
|
-
* @param {?} name
|
|
97
|
-
* @return {?}
|
|
98
|
-
*/
|
|
99
|
-
validateDynamicElementName(name) {
|
|
100
|
-
if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) {
|
|
101
|
-
throw new Error('Dynamic element name: "${name}" is not valid.');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]
|
|
106
|
-
* Throws error if it does not exists or not supported.
|
|
107
|
-
* @param {?} element
|
|
108
|
-
* @return {?}
|
|
109
|
-
*/
|
|
110
|
-
getDynamicElement(element) {
|
|
111
|
-
switch (element) {
|
|
112
|
-
case TdDynamicType.Text:
|
|
113
|
-
case TdDynamicType.Number:
|
|
114
|
-
case TdDynamicElement.Input:
|
|
115
|
-
case TdDynamicElement.Password:
|
|
116
|
-
return TdDynamicInputComponent;
|
|
117
|
-
case TdDynamicElement.Textarea:
|
|
118
|
-
return TdDynamicTextareaComponent;
|
|
119
|
-
case TdDynamicType.Boolean:
|
|
120
|
-
case TdDynamicElement.SlideToggle:
|
|
121
|
-
return TdDynamicSlideToggleComponent;
|
|
122
|
-
case TdDynamicElement.Checkbox:
|
|
123
|
-
return TdDynamicCheckboxComponent;
|
|
124
|
-
case TdDynamicElement.Slider:
|
|
125
|
-
return TdDynamicSliderComponent;
|
|
126
|
-
case TdDynamicType.Array:
|
|
127
|
-
case TdDynamicElement.Select:
|
|
128
|
-
return TdDynamicSelectComponent;
|
|
129
|
-
case TdDynamicElement.FileInput:
|
|
130
|
-
return TdDynamicFileInputComponent;
|
|
131
|
-
case TdDynamicElement.Datepicker:
|
|
132
|
-
case TdDynamicType.Date:
|
|
133
|
-
return TdDynamicDatepickerComponent;
|
|
134
|
-
default:
|
|
135
|
-
throw new Error(`Error: type ${element} does not exist or not supported.`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Creates form control for element depending [ITdDynamicElementConfig] properties.
|
|
140
|
-
* @param {?} config
|
|
141
|
-
* @return {?}
|
|
142
|
-
*/
|
|
143
|
-
createFormControl(config) {
|
|
144
|
-
/** @type {?} */
|
|
145
|
-
const validator = this.createValidators(config);
|
|
146
|
-
return new FormControl({ value: config.default, disabled: config.disabled }, validator);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Creates form validationdepending [ITdDynamicElementConfig] properties.
|
|
150
|
-
* @param {?} config
|
|
151
|
-
* @return {?}
|
|
152
|
-
*/
|
|
153
|
-
createValidators(config) {
|
|
154
|
-
/** @type {?} */
|
|
155
|
-
let validator;
|
|
156
|
-
if (config.required) {
|
|
157
|
-
validator = Validators.required;
|
|
158
|
-
}
|
|
159
|
-
if (config.max || config.max === 0) {
|
|
160
|
-
validator = Validators.compose([validator, Validators.max(parseFloat(config.max))]);
|
|
161
|
-
}
|
|
162
|
-
if (config.min || config.min === 0) {
|
|
163
|
-
validator = Validators.compose([validator, Validators.min(parseFloat(config.min))]);
|
|
164
|
-
}
|
|
165
|
-
if (config.maxLength || config.maxLength === 0) {
|
|
166
|
-
validator = Validators.compose([validator, Validators.maxLength(parseFloat(config.maxLength))]);
|
|
167
|
-
}
|
|
168
|
-
if (config.minLength || config.minLength === 0) {
|
|
169
|
-
validator = Validators.compose([validator, Validators.minLength(parseFloat(config.minLength))]);
|
|
170
|
-
}
|
|
171
|
-
// Add provided custom validators to the validator function
|
|
172
|
-
if (config.validators) {
|
|
173
|
-
config.validators.forEach((/**
|
|
174
|
-
* @param {?} validatorConfig
|
|
175
|
-
* @return {?}
|
|
176
|
-
*/
|
|
177
|
-
(validatorConfig) => {
|
|
178
|
-
validator = Validators.compose([validator, validatorConfig.validator]);
|
|
179
|
-
}));
|
|
180
|
-
}
|
|
181
|
-
return validator;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
TdDynamicFormsService.decorators = [
|
|
185
|
-
{ type: Injectable }
|
|
186
|
-
];
|
|
187
|
-
/**
|
|
188
|
-
* @param {?} parent
|
|
189
|
-
* @return {?}
|
|
190
|
-
*/
|
|
191
|
-
export function DYNAMIC_FORMS_PROVIDER_FACTORY(parent) {
|
|
192
|
-
return parent || new TdDynamicFormsService();
|
|
193
|
-
}
|
|
194
|
-
/** @type {?} */
|
|
195
|
-
export const DYNAMIC_FORMS_PROVIDER = {
|
|
196
|
-
// If there is already a service available, use that. Otherwise, provide a new one.
|
|
197
|
-
provide: TdDynamicFormsService,
|
|
198
|
-
deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]],
|
|
199
|
-
useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY,
|
|
200
|
-
};
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9keW5hbWljLWZvcm1zLyIsInNvdXJjZXMiOlsic2VydmljZXMvZHluYW1pYy1mb3Jtcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUsUUFBUSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQWUsV0FBVyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOztBQUVuSCxNQUFZLGFBQWE7SUFDdkIsSUFBSSxRQUFTO0lBQ2IsT0FBTyxXQUFZO0lBQ25CLE1BQU0sVUFBVztJQUNqQixLQUFLLFNBQVU7SUFDZixJQUFJLFFBQVM7RUFDZDs7O0FBRUQsTUFBWSxnQkFBZ0I7SUFDMUIsS0FBSyxTQUFVO0lBQ2YsVUFBVSxjQUFlO0lBQ3pCLFFBQVEsWUFBYTtJQUNyQixRQUFRLFlBQWE7SUFDckIsTUFBTSxVQUFXO0lBQ2pCLFdBQVcsZ0JBQWlCO0lBQzVCLFFBQVEsWUFBYTtJQUNyQixNQUFNLFVBQVc7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QzlCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDL0QsVUFBVSxFQUFFLDhCQUE4QjtDQUMzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFByb3ZpZGVyLCBTa2lwU2VsZiwgT3B0aW9uYWwsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUZER5bmFtaWNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1pbnB1dC9keW5hbWljLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZER5bmFtaWNGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtZmlsZS1pbnB1dC9keW5hbWljLWZpbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IFRkRHluYW1pY1NsaWRlVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtY2hlY2tib3gvZHluYW1pYy1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1kYXRlcGlja2VyL2R5bmFtaWMtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBUZER5bmFtaWNUeXBlIHtcbiAgVGV4dCA9ICd0ZXh0JyxcbiAgQm9vbGVhbiA9ICdib29sZWFuJyxcbiAgTnVtYmVyID0gJ251bWJlcicsXG4gIEFycmF5ID0gJ2FycmF5JyxcbiAgRGF0ZSA9ICdkYXRlJyxcbn1cblxuZXhwb3J0IGVudW0gVGREeW5hbWljRWxlbWVudCB7XG4gIElucHV0ID0gJ2lucHV0JyxcbiAgRGF0ZXBpY2tlciA9ICdkYXRlcGlja2VyJyxcbiAgUGFzc3dvcmQgPSAncGFzc3dvcmQnLFxuICBUZXh0YXJlYSA9ICd0ZXh0YXJlYScsXG4gIFNsaWRlciA9ICdzbGlkZXInLFxuICBTbGlkZVRvZ2dsZSA9ICdzbGlkZS10b2dnbGUnLFxuICBDaGVja2JveCA9ICdjaGVja2JveCcsXG4gIFNlbGVjdCA9ICdzZWxlY3QnLFxuICBGaWxlSW5wdXQgPSAnZmlsZS1pbnB1dCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRWYWxpZGF0b3Ige1xuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuO1xufVxuXG4vLyBQcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgc2V0IGluIGN1c3RvbSBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRDdXN0b21Db25maWcge1xuICBbbmFtZTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZER5bmFtaWNFbGVtZW50Q29uZmlnIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaGludD86IHN0cmluZztcbiAgdHlwZTogVGREeW5hbWljVHlwZSB8IFRkRHluYW1pY0VsZW1lbnQgfCBUeXBlPGFueT47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBtaW4/OiBhbnk7XG4gIG1heD86IGFueTtcbiAgbWluTGVuZ3RoPzogYW55O1xuICBtYXhMZW5ndGg/OiBhbnk7XG4gIHNlbGVjdGlvbnM/OiBzdHJpbmdbXSB8IHsgdmFsdWU6IGFueTsgbGFiZWw6IHN0cmluZyB9W107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGVmYXVsdD86IGFueTtcbiAgZmxleD86IG51bWJlcjtcbiAgdmFsaWRhdG9ycz86IElUZER5bmFtaWNFbGVtZW50VmFsaWRhdG9yW107XG4gIGN1c3RvbUNvbmZpZz86IElUZER5bmFtaWNFbGVtZW50Q3VzdG9tQ29uZmlnO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERZTkFNSUNfRUxFTUVOVF9OQU1FX1JFR0VYOiBSZWdFeHAgPSAvXlteMC05XVteXFxAXSokLztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRkRHluYW1pY0Zvcm1zU2VydmljZSB7XG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgaWYgdGhlIFtuYW1lXSBpcyBhIHByb3BlciBlbGVtZW50IG5hbWUuXG4gICAqIFRocm93cyBlcnJvciBpZiBuYW1lIGlzIG5vdCB2YWxpZC5cbiAgICovXG4gIHZhbGlkYXRlRHluYW1pY0VsZW1lbnROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghRFlOQU1JQ19FTEVNRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIGVsZW1lbnQgbmFtZTogXCIke25hbWV9XCIgaXMgbm90IHZhbGlkLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCBkZXBlbmRpbmcgb24gW1RkRHluYW1pY0VsZW1lbnQgfCBUZER5bmFtaWNUeXBlXVxuICAgKiBUaHJvd3MgZXJyb3IgaWYgaXQgZG9lcyBub3QgZXhpc3RzIG9yIG5vdCBzdXBwb3J0ZWQuXG4gICAqL1xuICBnZXREeW5hbWljRWxlbWVudChlbGVtZW50OiBUZER5bmFtaWNFbGVtZW50IHwgVGREeW5hbWljVHlwZSB8IFR5cGU8YW55Pik6IGFueSB7XG4gICAgc3dpdGNoIChlbGVtZW50KSB7XG4gICAgICBjYXNlIFRkRHluYW1pY1R5cGUuVGV4dDpcbiAgICAgIGNhc2UgVGREeW5hbWljVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuSW5wdXQ6XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuUGFzc3dvcmQ6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNJbnB1dENvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5UZXh0YXJlYTpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNUeXBlLkJvb2xlYW46XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuU2xpZGVUb2dnbGU6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNTbGlkZVRvZ2dsZUNvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5DaGVja2JveDpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY0NoZWNrYm94Q29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNFbGVtZW50LlNsaWRlcjpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY1NsaWRlckNvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljVHlwZS5BcnJheTpcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5TZWxlY3Q6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQ7XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuRmlsZUlucHV0OlxuICAgICAgICByZXR1cm4gVGREeW5hbWljRmlsZUlucHV0Q29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNFbGVtZW50LkRhdGVwaWNrZXI6XG4gICAgICBjYXNlIFRkRHluYW1pY1R5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY0RhdGVwaWNrZXJDb21wb25lbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiB0eXBlICR7ZWxlbWVudH0gZG9lcyBub3QgZXhpc3Qgb3Igbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBmb3JtIGNvbnRyb2wgZm9yIGVsZW1lbnQgZGVwZW5kaW5nIFtJVGREeW5hbWljRWxlbWVudENvbmZpZ10gcHJvcGVydGllcy5cbiAgICovXG4gIGNyZWF0ZUZvcm1Db250cm9sKGNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpOiBGb3JtQ29udHJvbCB7XG4gICAgY29uc3QgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IHRoaXMuY3JlYXRlVmFsaWRhdG9ycyhjb25maWcpO1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogY29uZmlnLmRlZmF1bHQsIGRpc2FibGVkOiBjb25maWcuZGlzYWJsZWQgfSwgdmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGZvcm0gdmFsaWRhdGlvbmRlcGVuZGluZyBbSVRkRHluYW1pY0VsZW1lbnRDb25maWddIHByb3BlcnRpZXMuXG4gICAqL1xuICBjcmVhdGVWYWxpZGF0b3JzKGNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpOiBWYWxpZGF0b3JGbiB7XG4gICAgbGV0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm47XG4gICAgaWYgKGNvbmZpZy5yZXF1aXJlZCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5tYXggfHwgY29uZmlnLm1heCA9PT0gMCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFt2YWxpZGF0b3IsIFZhbGlkYXRvcnMubWF4KHBhcnNlRmxvYXQoY29uZmlnLm1heCkpXSk7XG4gICAgfVxuICAgIGlmIChjb25maWcubWluIHx8IGNvbmZpZy5taW4gPT09IDApIHtcbiAgICAgIHZhbGlkYXRvciA9IFZhbGlkYXRvcnMuY29tcG9zZShbdmFsaWRhdG9yLCBWYWxpZGF0b3JzLm1pbihwYXJzZUZsb2F0KGNvbmZpZy5taW4pKV0pO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm1heExlbmd0aCB8fCBjb25maWcubWF4TGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW3ZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGFyc2VGbG9hdChjb25maWcubWF4TGVuZ3RoKSldKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5taW5MZW5ndGggfHwgY29uZmlnLm1pbkxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFt2YWxpZGF0b3IsIFZhbGlkYXRvcnMubWluTGVuZ3RoKHBhcnNlRmxvYXQoY29uZmlnLm1pbkxlbmd0aCkpXSk7XG4gICAgfVxuICAgIC8vIEFkZCBwcm92aWRlZCBjdXN0b20gdmFsaWRhdG9ycyB0byB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gICAgaWYgKGNvbmZpZy52YWxpZGF0b3JzKSB7XG4gICAgICBjb25maWcudmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3JDb25maWc6IElUZER5bmFtaWNFbGVtZW50VmFsaWRhdG9yKSA9PiB7XG4gICAgICAgIHZhbGlkYXRvciA9IFZhbGlkYXRvcnMuY29tcG9zZShbdmFsaWRhdG9yLCB2YWxpZGF0b3JDb25maWcudmFsaWRhdG9yXSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRFlOQU1JQ19GT1JNU19QUk9WSURFUl9GQUNUT1JZKHBhcmVudDogVGREeW5hbWljRm9ybXNTZXJ2aWNlKTogVGREeW5hbWljRm9ybXNTZXJ2aWNlIHtcbiAgcmV0dXJuIHBhcmVudCB8fCBuZXcgVGREeW5hbWljRm9ybXNTZXJ2aWNlKCk7XG59XG5cbmV4cG9ydCBjb25zdCBEWU5BTUlDX0ZPUk1TX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlcnZpY2UgYXZhaWxhYmxlLCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCBwcm92aWRlIGEgbmV3IG9uZS5cbiAgcHJvdmlkZTogVGREeW5hbWljRm9ybXNTZXJ2aWNlLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgVGREeW5hbWljRm9ybXNTZXJ2aWNlXV0sXG4gIHVzZUZhY3Rvcnk6IERZTkFNSUNfRk9STVNfUFJPVklERVJfRkFDVE9SWSxcbn07XG4iXX0=
|