@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.
Files changed (69) hide show
  1. package/README.md +26 -18
  2. package/covalent-dynamic-forms.d.ts +2 -1
  3. package/esm2020/covalent-dynamic-forms.mjs +5 -0
  4. package/esm2020/lib/dynamic-element.component.mjs +178 -0
  5. package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
  6. package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
  7. package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
  8. package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
  9. package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
  10. package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
  11. package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
  12. package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
  13. package/esm2020/lib/dynamic-forms.component.mjs +185 -0
  14. package/esm2020/lib/dynamic-forms.module.mjs +127 -0
  15. package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
  16. package/esm2020/public_api.mjs +13 -0
  17. package/fesm2015/covalent-dynamic-forms.mjs +748 -0
  18. package/fesm2015/covalent-dynamic-forms.mjs.map +1 -0
  19. package/fesm2020/covalent-dynamic-forms.mjs +746 -0
  20. package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
  21. package/{dynamic-element.component.d.ts → lib/dynamic-element.component.d.ts} +24 -17
  22. package/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +11 -0
  23. package/{dynamic-elements → lib/dynamic-elements}/dynamic-datepicker/dynamic-datepicker.component.d.ts +6 -3
  24. package/{dynamic-elements → lib/dynamic-elements}/dynamic-file-input/dynamic-file-input.component.d.ts +4 -1
  25. package/{dynamic-elements → lib/dynamic-elements}/dynamic-input/dynamic-input.component.d.ts +7 -4
  26. package/{dynamic-elements → lib/dynamic-elements}/dynamic-select/dynamic-select.component.d.ts +5 -2
  27. package/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +11 -0
  28. package/{dynamic-elements → lib/dynamic-elements}/dynamic-slider/dynamic-slider.component.d.ts +5 -2
  29. package/{dynamic-elements → lib/dynamic-elements}/dynamic-textarea/dynamic-textarea.component.d.ts +3 -0
  30. package/{dynamic-forms.component.d.ts → lib/dynamic-forms.component.d.ts} +4 -1
  31. package/lib/dynamic-forms.module.d.ts +28 -0
  32. package/{services → lib/services}/dynamic-forms.service.d.ts +5 -2
  33. package/package.json +32 -17
  34. package/public_api.d.ts +12 -12
  35. package/bundles/covalent-dynamic-forms.umd.js +0 -1654
  36. package/bundles/covalent-dynamic-forms.umd.js.map +0 -1
  37. package/bundles/covalent-dynamic-forms.umd.min.js +0 -16
  38. package/bundles/covalent-dynamic-forms.umd.min.js.map +0 -1
  39. package/covalent-dynamic-forms.metadata.json +0 -1
  40. package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +0 -8
  41. package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.scss +0 -0
  42. package/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.scss +0 -12
  43. package/dynamic-elements/dynamic-file-input/dynamic-file-input.component.scss +0 -15
  44. package/dynamic-elements/dynamic-input/dynamic-input.component.scss +0 -12
  45. package/dynamic-elements/dynamic-select/dynamic-select.component.scss +0 -12
  46. package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +0 -8
  47. package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.scss +0 -0
  48. package/dynamic-elements/dynamic-slider/dynamic-slider.component.scss +0 -17
  49. package/dynamic-elements/dynamic-textarea/dynamic-textarea.component.scss +0 -12
  50. package/dynamic-forms.component.scss +0 -29
  51. package/dynamic-forms.module.d.ts +0 -2
  52. package/esm2015/covalent-dynamic-forms.js +0 -10
  53. package/esm2015/dynamic-element.component.js +0 -340
  54. package/esm2015/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.js +0 -34
  55. package/esm2015/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.js +0 -49
  56. package/esm2015/dynamic-elements/dynamic-file-input/dynamic-file-input.component.js +0 -47
  57. package/esm2015/dynamic-elements/dynamic-input/dynamic-input.component.js +0 -55
  58. package/esm2015/dynamic-elements/dynamic-select/dynamic-select.component.js +0 -46
  59. package/esm2015/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.js +0 -34
  60. package/esm2015/dynamic-elements/dynamic-slider/dynamic-slider.component.js +0 -64
  61. package/esm2015/dynamic-elements/dynamic-textarea/dynamic-textarea.component.js +0 -40
  62. package/esm2015/dynamic-forms.component.js +0 -306
  63. package/esm2015/dynamic-forms.module.js +0 -73
  64. package/esm2015/index.js +0 -7
  65. package/esm2015/public_api.js +0 -18
  66. package/esm2015/services/dynamic-forms.service.js +0 -201
  67. package/fesm2015/covalent-dynamic-forms.js +0 -1269
  68. package/fesm2015/covalent-dynamic-forms.js.map +0 -1
  69. 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=