UNPKG

@noaestudio/forms

Version:

Dynamic forms extension for Covalent

273 lines (272 loc) 29 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable, SkipSelf, Optional } from '@angular/core'; import { Validators, FormControl } from '@angular/forms'; import { TdDynamicInputComponent } from '../dynamic-elements/dynamic-input/dynamic-input.component'; import { TdDynamicFileInputComponent } from '../dynamic-elements/dynamic-file-input/dynamic-file-input.component'; import { TdDynamicTextareaComponent } from '../dynamic-elements/dynamic-textarea/dynamic-textarea.component'; import { TdDynamicSlideToggleComponent } from '../dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component'; import { TdDynamicCheckboxComponent } from '../dynamic-elements/dynamic-checkbox/dynamic-checkbox.component'; import { TdDynamicSliderComponent } from '../dynamic-elements/dynamic-slider/dynamic-slider.component'; import { TdDynamicSelectComponent } from '../dynamic-elements/dynamic-select/dynamic-select.component'; import { TdDynamicDatepickerComponent } from '../dynamic-elements/dynamic-datepicker/dynamic-datepicker.component'; import { TextEditorComponent } from '../dynamic-elements/text-editor/text-editor.component'; import { ColorPickerComponent } from '../dynamic-elements/color-picker/color-picker.component'; import { TimePickerComponent } from '../dynamic-elements/time-picker/time-picker.component'; import { DateTimePickerComponent } from '../dynamic-elements/date-time-picker/date-time-picker.component'; import { TranslateComponent } from '../dynamic-elements/translatable/translate.component'; import { FormOrganizationComponent } from '../dynamic-elements/form-organization/form-organization.component'; import { GallerySelectorComponent } from '../dynamic-elements/gallery-selector/gallery-selector.component'; import { TreeSelectorComponent } from '../dynamic-elements/tree-selector/tree-selector.component'; import { EditableTableComponent } from '../dynamic-elements/editable-table/editable-table.component'; import { ChipSelectorComponent } from '../dynamic-elements/chip-selector/chip-selector.component'; /** @enum {string} */ const TdDynamicType = { Text: 'text', Boolean: 'boolean', Number: 'number', Array: 'array', Date: 'date', }; export { TdDynamicType }; /** @enum {string} */ const TdDynamicElement = { Input: 'input', Datepicker: 'datepicker', Password: 'password', Textarea: 'textarea', Slider: 'slider', SlideToggle: 'slide-toggle', Checkbox: 'checkbox', Select: 'select', FileInput: 'file-input', TextEditor: 'text-editor', ColorPicker: 'color-picker', TimePicker: 'time-picker', DateTimePicker: 'date-time-picker', Organization: 'organization', GallerySelector: 'gallery-selector', TreeSelector: 'tree-selector', EditableTable: 'editable-table', ChipSelector: 'chip-selector', }; export { TdDynamicElement }; /** @enum {number} */ const Visibility = { None: -1, All: 0, Add: 1, Edit: 2, }; export { Visibility }; Visibility[Visibility.None] = "None"; Visibility[Visibility.All] = "All"; Visibility[Visibility.Add] = "Add"; Visibility[Visibility.Edit] = "Edit"; /** * @record */ export function ITdDynamicElementValidator() { } function ITdDynamicElementValidator_tsickle_Closure_declarations() { /** @type {?} */ ITdDynamicElementValidator.prototype.validator; } /** * @record */ export function ITdDynamicElementConfig() { } function ITdDynamicElementConfig_tsickle_Closure_declarations() { /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.label; /** @type {?} */ ITdDynamicElementConfig.prototype.name; /** @type {?} */ ITdDynamicElementConfig.prototype.type; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.required; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.disabled; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.hidden; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.min; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.max; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.minLength; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.maxLength; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.step; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.selections; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.default; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.flex; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.validators; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.visibility; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.selectComplex; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.selectMultiple; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.searchable; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.translate; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.treeItems; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.action; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.schema; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.draggable; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.extras; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.extraFields; /** @type {?|undefined} */ ITdDynamicElementConfig.prototype.chips; } export const /** @type {?} */ DYNAMIC_ELEMENT_NAME_REGEX = /^[^0-9][^\@]*$/; export class TdDynamicFormsService { /** * Method to validate if the [name] is a proper element name. * Throws error if name is not valid. * @param {?} name * @return {?} */ validateDynamicElementName(name) { if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) { throw new Error('Dynamic element name: "${name}" is not valid.'); } } /** * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType] * Throws error if it does not exists or not supported. * @param {?} element * @param {?=} translate * @return {?} */ getDynamicElement(element, translate = false) { if (translate) { return TranslateComponent; } switch (element) { case TdDynamicType.Text: case TdDynamicType.Number: case TdDynamicElement.Input: case TdDynamicElement.Password: return TdDynamicInputComponent; case TdDynamicElement.Textarea: return TdDynamicTextareaComponent; case TdDynamicType.Boolean: case TdDynamicElement.SlideToggle: return TdDynamicSlideToggleComponent; case TdDynamicElement.Checkbox: return TdDynamicCheckboxComponent; case TdDynamicElement.Slider: return TdDynamicSliderComponent; case TdDynamicType.Array: case TdDynamicElement.Select: return TdDynamicSelectComponent; case TdDynamicElement.FileInput: return TdDynamicFileInputComponent; case TdDynamicElement.Datepicker: case TdDynamicType.Date: return TdDynamicDatepickerComponent; case TdDynamicElement.TextEditor: return TextEditorComponent; case TdDynamicElement.ColorPicker: return ColorPickerComponent; case TdDynamicElement.TimePicker: return TimePickerComponent; case TdDynamicElement.DateTimePicker: return DateTimePickerComponent; case TdDynamicElement.Organization: return FormOrganizationComponent; case TdDynamicElement.GallerySelector: return GallerySelectorComponent; case TdDynamicElement.TreeSelector: return TreeSelectorComponent; case TdDynamicElement.EditableTable: return EditableTableComponent; case TdDynamicElement.ChipSelector: return ChipSelectorComponent; default: throw new Error(`Error: type ${element} does not exist or not supported.`); } } /** * Creates form control for element depending [ITdDynamicElementConfig] properties. * @param {?} config * @return {?} */ createFormControl(config) { let /** @type {?} */ validator = this.createValidators(config); return new FormControl({ value: config.default, disabled: config.disabled }, validator); } /** * Creates form validationdepending [ITdDynamicElementConfig] properties. * @param {?} config * @return {?} */ createValidators(config) { let /** @type {?} */ validator; if (config.required) { validator = Validators.required; } if (config.max || config.max === 0) { validator = Validators.compose([validator, Validators.max(parseFloat(config.max))]); } if (config.min || config.min === 0) { validator = Validators.compose([validator, Validators.min(parseFloat(config.min))]); } if (config.maxLength || config.maxLength === 0) { validator = Validators.compose([validator, Validators.maxLength(parseFloat(config.maxLength))]); } if (config.minLength || config.minLength === 0) { validator = Validators.compose([validator, Validators.minLength(parseFloat(config.minLength))]); } // Add provided custom validators to the validator function if (config.validators) { config.validators.forEach((validatorConfig) => { validator = Validators.compose([validator, validatorConfig.validator]); }); } return validator; } } TdDynamicFormsService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ TdDynamicFormsService.ctorParameters = () => []; function TdDynamicFormsService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TdDynamicFormsService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TdDynamicFormsService.ctorParameters; } /** * @param {?} parent * @return {?} */ export function DYNAMIC_FORMS_PROVIDER_FACTORY(parent) { return parent || new TdDynamicFormsService(); } export const /** @type {?} */ DYNAMIC_FORMS_PROVIDER = { // If there is already a service available, use that. Otherwise, provide a new one. provide: TdDynamicFormsService, deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]], useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvdmFsZW50L2R5bmFtaWMtZm9ybXMvIiwic291cmNlcyI6WyJzZXJ2aWNlcy9keW5hbWljLWZvcm1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFlLFdBQVcsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUVuSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxt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LE1BQTZCO0lBQzVCLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0NBQzdDO0FBRUQsTUFBTSxDQUFDLHVCQUFNLHNCQUFzQixHQUFhOztJQUUvQyxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDL0QsVUFBVSxFQUFFLDhCQUE4QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgUHJvdmlkZXIsIFNraXBTZWxmLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRkRHluYW1pY0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWlucHV0L2R5bmFtaWMtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGREeW5hbWljRmlsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWZpbGUtaW5wdXQvZHluYW1pYy1maWxlLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGREeW5hbWljU2xpZGVUb2dnbGVDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGUtdG9nZ2xlL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRkRHluYW1pY0NoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWNoZWNrYm94L2R5bmFtaWMtY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGREeW5hbWljU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRkRHluYW1pY0RhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtZGF0ZXBpY2tlci9keW5hbWljLWRhdGVwaWNrZXIuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbG9yUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy90cmFuc2xhdGFibGUvdHJhbnNsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Pcmdhbml6YXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2Zvcm0tb3JnYW5pemF0aW9uL2Zvcm0tb3JnYW5pemF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdhbGxlcnlTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvZ2FsbGVyeS1zZWxlY3Rvci9nYWxsZXJ5LXNlbGVjdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyZWVTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvdHJlZS1zZWxlY3Rvci90cmVlLXNlbGVjdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRhYmxlVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2VkaXRhYmxlLXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoaXBTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvY2hpcC1zZWxlY3Rvci9jaGlwLXNlbGVjdG9yLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgZW51bSBUZER5bmFtaWNUeXBlIHtcclxuXHRUZXh0ID0gJ3RleHQnLFxyXG5cdEJvb2xlYW4gPSAnYm9vbGVhbicsXHJcblx0TnVtYmVyID0gJ251bWJlcicsXHJcblx0QXJyYXkgPSAnYXJyYXknLFxyXG5cdERhdGUgPSAnZGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGREeW5hbWljRWxlbWVudCB7XHJcblx0SW5wdXQgPSAnaW5wdXQnLFxyXG5cdERhdGVwaWNrZXIgPSAnZGF0ZXBpY2tlcicsXHJcblx0UGFzc3dvcmQgPSAncGFzc3dvcmQnLFxyXG5cdFRleHRhcmVhID0gJ3RleHRhcmVhJyxcclxuXHRTbGlkZXIgPSAnc2xpZGVyJyxcclxuXHRTbGlkZVRvZ2dsZSA9ICdzbGlkZS10b2dnbGUnLFxyXG5cdENoZWNrYm94ID0gJ2NoZWNrYm94JyxcclxuXHRTZWxlY3QgPSAnc2VsZWN0JyxcclxuXHRGaWxlSW5wdXQgPSAnZmlsZS1pbnB1dCcsXHJcblx0VGV4dEVkaXRvciA9ICd0ZXh0LWVkaXRvcicsXHJcblx0Q29sb3JQaWNrZXIgPSAnY29sb3ItcGlja2VyJyxcclxuXHRUaW1lUGlja2VyID0gJ3RpbWUtcGlja2VyJyxcclxuXHREYXRlVGltZVBpY2tlciA9ICdkYXRlLXRpbWUtcGlja2VyJyxcclxuXHRPcmdhbml6YXRpb24gPSAnb3JnYW5pemF0aW9uJyxcclxuXHRHYWxsZXJ5U2VsZWN0b3IgPSAnZ2FsbGVyeS1zZWxlY3RvcicsXHJcblx0VHJlZVNlbGVjdG9yID0gJ3RyZWUtc2VsZWN0b3InLFxyXG5cdEVkaXRhYmxlVGFibGUgPSAnZWRpdGFibGUtdGFibGUnLFxyXG5cdENoaXBTZWxlY3RvciA9ICdjaGlwLXNlbGVjdG9yJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBWaXNpYmlsaXR5IHtcclxuXHROb25lID0gLTEsXHJcblx0QWxsID0gMCxcclxuXHRBZGQgPSAxLFxyXG5cdEVkaXQgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRWYWxpZGF0b3Ige1xyXG5cdHZhbGlkYXRvcjogVmFsaWRhdG9yRm47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRDb25maWcge1xyXG5cdGxhYmVsPzogc3RyaW5nO1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHR0eXBlOiBUZER5bmFtaWNUeXBlIHwgVGREeW5hbWljRWxlbWVudDtcclxuXHRyZXF1aXJlZD86IGJvb2xlYW47XHJcblx0ZGlzYWJsZWQ/OiBib29sZWFuO1xyXG5cdGhpZGRlbj86IGJvb2xlYW47XHJcblx0bWluPzogYW55O1xyXG5cdG1heD86IGFueTtcclxuXHRtaW5MZW5ndGg/OiBhbnk7XHJcblx0bWF4TGVuZ3RoPzogYW55O1xyXG5cdHN0ZXA/OiBudW1iZXIsXHJcblx0c2VsZWN0aW9ucz86IHN0cmluZ1tdIHwgeyB2YWx1ZTogYW55LCBsYWJlbDogc3RyaW5nIH1bXTtcclxuXHRkZWZhdWx0PzogYW55O1xyXG5cdGZsZXg/OiBudW1iZXI7XHJcblx0dmFsaWRhdG9ycz86IElUZER5bmFtaWNFbGVtZW50VmFsaWRhdG9yW107XHJcblx0dmlzaWJpbGl0eT8gOiBWaXNpYmlsaXR5O1xyXG5cdHNlbGVjdENvbXBsZXg/IDogYm9vbGVhbjtcclxuXHRzZWxlY3RNdWx0aXBsZT8gOiBib29sZWFuO1xyXG5cdHNlYXJjaGFibGU/OiBib29sZWFuO1xyXG5cdHRyYW5zbGF0ZT8gOiBib29sZWFuO1xyXG5cdHRyZWVJdGVtcz86IGFueTtcclxuXHRhY3Rpb24/IDogKHZhbHVlPyA6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cdHNjaGVtYT8gOiBhbnk7XHJcblx0ZHJhZ2dhYmxlPyA6IGFueTtcclxuXHRleHRyYXM/IDogYW55O1xyXG5cdGV4dHJhRmllbGRzPzogc3RyaW5nW107XHJcblx0Y2hpcHM/IDogeyB2YWx1ZSA6IGFueSAsIGxhYmVsIDogc3RyaW5nLCBhY3RpdmUgOiBib29sZWFufVtdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRFlOQU1JQ19FTEVNRU5UX05BTUVfUkVHRVg6IFJlZ0V4cCA9IC9eW14wLTldW15cXEBdKiQvO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRm9ybXNTZXJ2aWNlIHtcclxuXHJcblx0LyoqXHJcblx0KiBNZXRob2QgdG8gdmFsaWRhdGUgaWYgdGhlIFtuYW1lXSBpcyBhIHByb3BlciBlbGVtZW50IG5hbWUuXHJcblx0KiBUaHJvd3MgZXJyb3IgaWYgbmFtZSBpcyBub3QgdmFsaWQuXHJcblx0Ki9cclxuXHR2YWxpZGF0ZUR5bmFtaWNFbGVtZW50TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmICghRFlOQU1JQ19FTEVNRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgZWxlbWVudCBuYW1lOiBcIiR7bmFtZX1cIiBpcyBub3QgdmFsaWQuJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQqIEdldHMgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIGRlcGVuZGluZyBvbiBbVGREeW5hbWljRWxlbWVudCB8IFRkRHluYW1pY1R5cGVdXHJcblx0KiBUaHJvd3MgZXJyb3IgaWYgaXQgZG9lcyBub3QgZXhpc3RzIG9yIG5vdCBzdXBwb3J0ZWQuXHJcblx0Ki9cclxuXHRnZXREeW5hbWljRWxlbWVudChlbGVtZW50OiBUZER5bmFtaWNFbGVtZW50IHwgVGREeW5hbWljVHlwZSwgdHJhbnNsYXRlIDogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRcdGlmICh0cmFuc2xhdGUpIHtcclxuXHRcdFx0cmV0dXJuIFRyYW5zbGF0ZUNvbXBvbmVudDtcclxuXHRcdH1cclxuXHJcblx0XHRzd2l0Y2ggKGVsZW1lbnQpIHtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNUeXBlLlRleHQ6XHJcblx0XHRcdGNhc2UgVGREeW5hbWljVHlwZS5OdW1iZXI6XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5JbnB1dDpcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LlBhc3N3b3JkOlxyXG5cdFx0XHRcdHJldHVybiBUZER5bmFtaWNJbnB1dENvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LlRleHRhcmVhOlxyXG5cdFx0XHRcdHJldHVybiBUZER5bmFtaWNUZXh0YXJlYUNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNUeXBlLkJvb2xlYW46XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5TbGlkZVRvZ2dsZTpcclxuXHRcdFx0XHRyZXR1cm4gVGREeW5hbWljU2xpZGVUb2dnbGVDb21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5DaGVja2JveDpcclxuXHRcdFx0XHRyZXR1cm4gVGREeW5hbWljQ2hlY2tib3hDb21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5TbGlkZXI6XHJcblx0XHRcdFx0cmV0dXJuIFRkRHluYW1pY1NsaWRlckNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNUeXBlLkFycmF5OlxyXG5cdFx0XHRjYXNlIFRkRHluYW1pY0VsZW1lbnQuU2VsZWN0OlxyXG5cdFx0XHRcdHJldHVybiBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5GaWxlSW5wdXQ6XHJcblx0XHRcdFx0cmV0dXJuIFRkRHluYW1pY0ZpbGVJbnB1dENvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LkRhdGVwaWNrZXI6XHJcblx0XHRcdGNhc2UgVGREeW5hbWljVHlwZS5EYXRlOlxyXG5cdFx0XHRcdHJldHVybiBUZER5bmFtaWNEYXRlcGlja2VyQ29tcG9uZW50O1xyXG5cdFx0XHRjYXNlIFRkRHluYW1pY0VsZW1lbnQuVGV4dEVkaXRvcjpcclxuXHRcdFx0XHRyZXR1cm4gVGV4dEVkaXRvckNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LkNvbG9yUGlja2VyOlxyXG5cdFx0XHRcdHJldHVybiBDb2xvclBpY2tlckNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LlRpbWVQaWNrZXI6XHJcblx0XHRcdFx0cmV0dXJuIFRpbWVQaWNrZXJDb21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5EYXRlVGltZVBpY2tlcjpcclxuXHRcdFx0XHRyZXR1cm4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5Pcmdhbml6YXRpb246XHJcblx0XHRcdFx0cmV0dXJuIEZvcm1Pcmdhbml6YXRpb25Db21wb25lbnQ7XHJcblx0XHRcdGNhc2UgVGREeW5hbWljRWxlbWVudC5HYWxsZXJ5U2VsZWN0b3I6XHJcblx0XHRcdFx0cmV0dXJuIEdhbGxlcnlTZWxlY3RvckNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LlRyZWVTZWxlY3RvcjpcclxuXHRcdFx0XHRyZXR1cm4gVHJlZVNlbGVjdG9yQ29tcG9uZW50O1xyXG5cdFx0XHRjYXNlIFRkRHluYW1pY0VsZW1lbnQuRWRpdGFibGVUYWJsZTpcclxuXHRcdFx0XHRyZXR1cm4gRWRpdGFibGVUYWJsZUNvbXBvbmVudDtcclxuXHRcdFx0Y2FzZSBUZER5bmFtaWNFbGVtZW50LkNoaXBTZWxlY3RvcjpcclxuXHRcdFx0XHRyZXR1cm4gQ2hpcFNlbGVjdG9yQ29tcG9uZW50O1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3I6IHR5cGUgJHtlbGVtZW50fSBkb2VzIG5vdCBleGlzdCBvciBub3Qgc3VwcG9ydGVkLmApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0KiBDcmVhdGVzIGZvcm0gY29udHJvbCBmb3IgZWxlbWVudCBkZXBlbmRpbmcgW0lUZER5bmFtaWNFbGVtZW50Q29uZmlnXSBwcm9wZXJ0aWVzLlxyXG5cdCovXHJcblx0Y3JlYXRlRm9ybUNvbnRyb2woY29uZmlnOiBJVGREeW5hbWljRWxlbWVudENvbmZpZyk6IEZvcm1Db250cm9sIHtcclxuXHRcdGxldCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gdGhpcy5jcmVhdGVWYWxpZGF0b3JzKGNvbmZpZyk7XHJcblx0XHRyZXR1cm4gbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogY29uZmlnLmRlZmF1bHQsIGRpc2FibGVkOiBjb25maWcuZGlzYWJsZWR9LCB2YWxpZGF0b3IpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0KiBDcmVhdGVzIGZvcm0gdmFsaWRhdGlvbmRlcGVuZGluZyBbSVRkRHluYW1pY0VsZW1lbnRDb25maWddIHByb3BlcnRpZXMuXHJcblx0Ki9cclxuXHRjcmVhdGVWYWxpZGF0b3JzKGNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpOiBWYWxpZGF0b3JGbiB7XHJcblx0XHRsZXQgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbjtcclxuXHRcdGlmIChjb25maWcucmVxdWlyZWQpIHtcclxuXHRcdFx0dmFsaWRhdG9yID0gVmFsaWRhdG9ycy5yZXF1aXJlZDtcclxuXHRcdH1cclxuXHRcdGlmIChjb25maWcubWF4IHx8IGNvbmZpZy5tYXggPT09IDApIHtcclxuXHRcdFx0dmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFt2YWxpZGF0b3IsIFZhbGlkYXRvcnMubWF4KHBhcnNlRmxvYXQoY29uZmlnLm1heCkpXSk7XHJcblx0XHR9XHJcblx0XHRpZiAoY29uZmlnLm1pbiB8fCBjb25maWcubWluID09PSAwKSB7XHJcblx0XHRcdHZhbGlkYXRvciA9IFZhbGlkYXRvcnMuY29tcG9zZShbdmFsaWRhdG9yLCBWYWxpZGF0b3JzLm1pbihwYXJzZUZsb2F0KGNvbmZpZy5taW4pKV0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNvbmZpZy5tYXhMZW5ndGggfHwgY29uZmlnLm1heExlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR2YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW3ZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGFyc2VGbG9hdChjb25maWcubWF4TGVuZ3RoKSldKTtcclxuXHRcdH1cclxuXHRcdGlmIChjb25maWcubWluTGVuZ3RoIHx8IGNvbmZpZy5taW5MZW5ndGggPT09IDApIHtcclxuXHRcdFx0dmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFt2YWxpZGF0b3IsIFZhbGlkYXRvcnMubWluTGVuZ3RoKHBhcnNlRmxvYXQoY29uZmlnLm1pbkxlbmd0aCkpXSk7XHJcblx0XHR9XHJcblx0XHQvLyBBZGQgcHJvdmlkZWQgY3VzdG9tIHZhbGlkYXRvcnMgdG8gdGhlIHZhbGlkYXRvciBmdW5jdGlvblxyXG5cdFx0aWYgKGNvbmZpZy52YWxpZGF0b3JzKSB7XHJcblx0XHRcdGNvbmZpZy52YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvckNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRWYWxpZGF0b3IpID0+IHtcclxuXHRcdFx0XHR2YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW3ZhbGlkYXRvciwgdmFsaWRhdG9yQ29uZmlnLnZhbGlkYXRvcl0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWxpZGF0b3I7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRFlOQU1JQ19GT1JNU19QUk9WSURFUl9GQUNUT1JZKFxyXG5cdHBhcmVudDogVGREeW5hbWljRm9ybXNTZXJ2aWNlKTogVGREeW5hbWljRm9ybXNTZXJ2aWNlIHtcclxuXHRcdHJldHVybiBwYXJlbnQgfHwgbmV3IFRkRHluYW1pY0Zvcm1zU2VydmljZSgpO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGNvbnN0IERZTkFNSUNfRk9STVNfUFJPVklERVI6IFByb3ZpZGVyID0ge1xyXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlcnZpY2UgYXZhaWxhYmxlLCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCBwcm92aWRlIGEgbmV3IG9uZS5cclxuXHRcdHByb3ZpZGU6IFRkRHluYW1pY0Zvcm1zU2VydmljZSxcclxuXHRcdGRlcHM6IFtbbmV3IE9wdGlvbmFsKCksIG5ldyBTa2lwU2VsZigpLCBUZER5bmFtaWNGb3Jtc1NlcnZpY2VdXSxcclxuXHRcdHVzZUZhY3Rvcnk6IERZTkFNSUNfRk9STVNfUFJPVklERVJfRkFDVE9SWSxcclxuXHR9O1xyXG4iXX0=