UNPKG

@tangential/configurable-input-widgets

Version:

Input Widgets with persistable, dynamic configuration.

111 lines 18.9 kB
import { Injectable } from '@angular/core'; import { ObjectUtil } from '@tangential/core'; //noinspection ES6PreferShortImport import { CheckboxWidgetConfig } from '../widgets/checkbox/checkbox-widget-config'; //noinspection ES6PreferShortImport import { CheckboxWidgetTemplateComponent } from '../widgets/checkbox/checkbox-widget.template.component'; //noinspection ES6PreferShortImport import { DateTimeInputConfig } from '../widgets/date-time-input/date-time-input-config'; //noinspection ES6PreferShortImport import { DateTimeTemplateComponent } from '../widgets/date-time-input/date-time-template.component'; //noinspection ES6PreferShortImport import { DurationPickerConfig } from '../widgets/duration-picker/duration-picker-config'; //noinspection ES6PreferShortImport import { DurationPickerTemplateComponent } from '../widgets/duration-picker/duration-picker-template.component'; //noinspection ES6PreferShortImport import { IconRatingWidgetConfig } from '../widgets/icon-rating-widget/icon-rating-widget-config'; //noinspection ES6PreferShortImport import { IconRatingWidgetTemplateComponent } from '../widgets/icon-rating-widget/icon-rating-widget.template.component'; //noinspection ES6PreferShortImport import { NumberInputConfig } from '../widgets/number-input/number-input-config'; //noinspection ES6PreferShortImport import { NumberTemplateComponent } from '../widgets/number-input/number-template.component'; //noinspection ES6PreferShortImport import { NumberSliderConfig } from '../widgets/number-slider/number-slider-config'; //noinspection ES6PreferShortImport import { NumberSliderTemplateComponent } from '../widgets/number-slider/number-slider-template.component'; //noinspection ES6PreferShortImport import { NumberSpinnerConfig } from '../widgets/number-spinner/number-spinner-config'; //noinspection ES6PreferShortImport import { NumberSpinnerTemplateComponent } from '../widgets/number-spinner/number-spinner-template.component'; //noinspection ES6PreferShortImport import { SlideToggleConfig } from '../widgets/slide-toggle/slide-toggle-widget-config'; //noinspection ES6PreferShortImport import { SlideToggleWidgetTemplateComponent } from '../widgets/slide-toggle/slide-toggle-widget.template.component'; //noinspection ES6PreferShortImport import { TextInputConfig } from '../widgets/text-input/text-input-config'; //noinspection ES6PreferShortImport import { TextTemplateComponent } from '../widgets/text-input/text-template.component'; import { InputViewModes } from './input-view-mode'; import * as i0 from "@angular/core"; export class InputSet { constructor(config, view) { this.inputCtor = config; this.view = view; } createInputConfig(data, key) { return new this.inputCtor(data || {}, key); } } export class InputRegistry { constructor() { this.inputEntries = {}; this.registerTypes(); } registerTypes() { this.inputEntries[CheckboxWidgetConfig.INPUT_NAME] = new InputSet(CheckboxWidgetConfig, CheckboxWidgetTemplateComponent); this.inputEntries[SlideToggleConfig.INPUT_NAME] = new InputSet(SlideToggleConfig, SlideToggleWidgetTemplateComponent); this.inputEntries[NumberInputConfig.INPUT_NAME] = new InputSet(NumberInputConfig, NumberTemplateComponent); this.inputEntries[NumberSpinnerConfig.INPUT_NAME] = new InputSet(NumberSpinnerConfig, NumberSpinnerTemplateComponent); this.inputEntries[NumberSliderConfig.INPUT_NAME] = new InputSet(NumberSliderConfig, NumberSliderTemplateComponent); this.inputEntries[TextInputConfig.INPUT_NAME] = new InputSet(TextInputConfig, TextTemplateComponent); this.inputEntries[DateTimeInputConfig.INPUT_NAME] = new InputSet(DateTimeInputConfig, DateTimeTemplateComponent); this.inputEntries[DurationPickerConfig.INPUT_NAME] = new InputSet(DurationPickerConfig, DurationPickerTemplateComponent); this.inputEntries[IconRatingWidgetConfig.INPUT_NAME] = new InputSet(IconRatingWidgetConfig, IconRatingWidgetTemplateComponent); } allTemplates(mode) { return ObjectUtil.keys(this.inputEntries).map((inputName) => { return this.createTemplateForTypeKey(inputName, mode); }); } getInputSet(inputName) { return this.inputEntries[inputName]; } getComponentCtorFor(inputConfig, mode) { let result; const entry = this.inputEntries[inputConfig._inputName]; result = entry.view; if (!result) { throw new Error(`Invalid mode '${mode}'.`); } return result; } createTemplateForTypeKey(inputName, mode) { const inputEntrySet = this.getInputSet(inputName); const inputConfig = inputEntrySet.createInputConfig(); return { config: inputConfig, ival: inputConfig.typeConfig.createValue(), mode: mode }; } createTemplateForType(inputConfig, mode, ival) { ival = ival || inputConfig.typeConfig.createValue({}); mode = mode || InputViewModes.EDIT; ival.$key = inputConfig.$key; return { config: inputConfig, ival: ival, mode: mode }; } get inputNames() { return Object.keys(this.inputEntries); } } InputRegistry.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: InputRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); InputRegistry.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: InputRegistry }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: InputRegistry, decorators: [{ type: Injectable }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdHlwZXMtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nZW50aWFsL2NvbmZpZ3VyYWJsZS1pbnB1dC13aWRnZXRzL3NyYy9saWIvc3VwcG9ydC9pbnB1dC10eXBlcy1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVYLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxVQUFVLEVBRVgsTUFBTSxrQkFBa0IsQ0FBQTtBQUl6QixtQ0FBbUM7QUFDbkMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDL0UsbUNBQW1DO0FBQ25DLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHdEQUF3RCxDQUFBO0FBQ3RHLG1DQUFtQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtREFBbUQsQ0FBQTtBQUNyRixtQ0FBbUM7QUFDbkMsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0seURBQXlELENBQUE7QUFDakcsbUNBQW1DO0FBQ25DLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFBO0FBQ3RGLG1DQUFtQztBQUNuQyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSwrREFBK0QsQ0FBQTtBQUM3RyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seURBQXlELENBQUE7QUFDOUYsbUNBQW1DO0FBQ25DLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHFFQUFxRSxDQUFBO0FBQ3JILG1DQUFtQztBQUNuQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQTtBQUM3RSxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sbURBQW1ELENBQUE7QUFDekYsbUNBQW1DO0FBQ25DLE9BQU8sRUFBQyxrQkFB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V0FBVyxDQUFDLElBQUksQ0FBQTtRQUM1QixPQUFPO1lBQ0wsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxFQUFJLElBQUk7WUFDWixJQUFJLEVBQUksSUFBSTtTQUNiLENBQUE7SUFDSCxDQUFDO0lBR0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN2QyxDQUFDOzsyR0FoRVUsYUFBYTsrR0FBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBPYmplY3RVdGlsLFxuICBPYmpNYXBcbn0gZnJvbSAnQHRhbmdlbnRpYWwvY29yZSdcbmltcG9ydCB7Q29uZmlndXJhYmxlSW5wdXRJdmFsfSBmcm9tICcuLi9kYXRhLXR5cGUvY29uZmlndXJhYmxlLWlucHV0LWl2YWwnXG5pbXBvcnQge0NvbmZpZ3VyYWJsZUlucHV0VHlwZUpzb259IGZyb20gJy4uL2RhdGEtdHlwZS9jb25maWd1cmFibGUtaW5wdXQtdHlwZSdcbmltcG9ydCB7SW5wdXRDb25maWd9IGZyb20gJy4uL2lucHV0LWNvbmZpZydcbi8vbm9pbnNwZWN0aW9uIEVTNlByZWZlclNob3J0SW1wb3J0XG5pbXBvcnQge0NoZWNrYm94V2lkZ2V0Q29uZmlnfSBmcm9tICcuLi93aWRnZXRzL2NoZWNrYm94L2NoZWNrYm94LXdpZGdldC1jb25maWcnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtDaGVja2JveFdpZGdldFRlbXBsYXRlQ29tcG9uZW50fSBmcm9tICcuLi93aWRnZXRzL2NoZWNrYm94L2NoZWNrYm94LXdpZGdldC50ZW1wbGF0ZS5jb21wb25lbnQnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtEYXRlVGltZUlucHV0Q29uZmlnfSBmcm9tICcuLi93aWRnZXRzL2RhdGUtdGltZS1pbnB1dC9kYXRlLXRpbWUtaW5wdXQtY29uZmlnJ1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7RGF0ZVRpbWVUZW1wbGF0ZUNvbXBvbmVudH0gZnJvbSAnLi4vd2lkZ2V0cy9kYXRlLXRpbWUtaW5wdXQvZGF0ZS10aW1lLXRlbXBsYXRlLmNvbXBvbmVudCdcbi8vbm9pbnNwZWN0aW9uIEVTNlByZWZlclNob3J0SW1wb3J0XG5pbXBvcnQge0R1cmF0aW9uUGlja2VyQ29uZmlnfSBmcm9tICcuLi93aWRnZXRzL2R1cmF0aW9uLXBpY2tlci9kdXJhdGlvbi1waWNrZXItY29uZmlnJ1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7RHVyYXRpb25QaWNrZXJUZW1wbGF0ZUNvbXBvbmVudH0gZnJvbSAnLi4vd2lkZ2V0cy9kdXJhdGlvbi1waWNrZXIvZHVyYXRpb24tcGlja2VyLXRlbXBsYXRlLmNvbXBvbmVudCdcbi8vbm9pbnNwZWN0aW9uIEVTNlByZWZlclNob3J0SW1wb3J0XG5pbXBvcnQge0ljb25SYXRpbmdXaWRnZXRDb25maWd9IGZyb20gJy4uL3dpZGdldHMvaWNvbi1yYXRpbmctd2lkZ2V0L2ljb24tcmF0aW5nLXdpZGdldC1jb25maWcnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtJY29uUmF0aW5nV2lkZ2V0VGVtcGxhdGVDb21wb25lbnR9IGZyb20gJy4uL3dpZGdldHMvaWNvbi1yYXRpbmctd2lkZ2V0L2ljb24tcmF0aW5nLXdpZGdldC50ZW1wbGF0ZS5jb21wb25lbnQnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtOdW1iZXJJbnB1dENvbmZpZ30gZnJvbSAnLi4vd2lkZ2V0cy9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0LWNvbmZpZydcbi8vbm9pbnNwZWN0aW9uIEVTNlByZWZlclNob3J0SW1wb3J0XG5pbXBvcnQge051bWJlclRlbXBsYXRlQ29tcG9uZW50fSBmcm9tICcuLi93aWRnZXRzL251bWJlci1pbnB1dC9udW1iZXItdGVtcGxhdGUuY29tcG9uZW50J1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7TnVtYmVyU2xpZGVyQ29uZmlnfSBmcm9tICcuLi93aWRnZXRzL251bWJlci1zbGlkZXIvbnVtYmVyLXNsaWRlci1jb25maWcnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtOdW1iZXJTbGlkZXJUZW1wbGF0ZUNvbXBvbmVudH0gZnJvbSAnLi4vd2lkZ2V0cy9udW1iZXItc2xpZGVyL251bWJlci1zbGlkZXItdGVtcGxhdGUuY29tcG9uZW50J1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7TnVtYmVyU3Bpbm5lckNvbmZpZ30gZnJvbSAnLi4vd2lkZ2V0cy9udW1iZXItc3Bpbm5lci9udW1iZXItc3Bpbm5lci1jb25maWcnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtOdW1iZXJTcGlubmVyVGVtcGxhdGVDb21wb25lbnR9IGZyb20gJy4uL3dpZGdldHMvbnVtYmVyLXNwaW5uZXIvbnVtYmVyLXNwaW5uZXItdGVtcGxhdGUuY29tcG9uZW50J1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7U2xpZGVUb2dnbGVDb25maWd9IGZyb20gJy4uL3dpZGdldHMvc2xpZGUtdG9nZ2xlL3NsaWRlLXRvZ2dsZS13aWRnZXQtY29uZmlnJ1xuLy9ub2luc3BlY3Rpb24gRVM2UHJlZmVyU2hvcnRJbXBvcnRcbmltcG9ydCB7U2xpZGVUb2dnbGVXaWRnZXRUZW1wbGF0ZUNvbXBvbmVudH0gZnJvbSAnLi4vd2lkZ2V0cy9zbGlkZS10b2dnbGUvc2xpZGUtdG9nZ2xlLXdpZGdldC50ZW1wbGF0ZS5jb21wb25lbnQnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtUZXh0SW5wdXRDb25maWd9IGZyb20gJy4uL3dpZGdldHMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LWNvbmZpZydcbi8vbm9pbnNwZWN0aW9uIEVTNlByZWZlclNob3J0SW1wb3J0XG5pbXBvcnQge1RleHRUZW1wbGF0ZUNvbXBvbmVudH0gZnJvbSAnLi4vd2lkZ2V0cy90ZXh0LWlucHV0L3RleHQtdGVtcGxhdGUuY29tcG9uZW50J1xuaW1wb3J0IHtcbiAgSW5wdXRWaWV3TW9kZSxcbiAgSW5wdXRWaWV3TW9kZXNcbn0gZnJvbSAnLi9pbnB1dC12aWV3LW1vZGUnXG4vL25vaW5zcGVjdGlvbiBFUzZQcmVmZXJTaG9ydEltcG9ydFxuaW1wb3J0IHtJbnB1dFRlbXBsYXRlSUZ9IGZyb20gJy4vdGVtcGxhdGUtY29tcG9uZW50cy9pbnB1dC10ZW1wbGF0ZS1jb21wb25lbnQvaW5wdXQtdGVtcGxhdGUuY29tcG9uZW50J1xuXG5cbmV4cG9ydCBjbGFzcyBJbnB1dFNldCB7XG4gIGlucHV0Q3RvcjogVHlwZTxJbnB1dENvbmZpZz5cblxuICB2aWV3OiBUeXBlPElucHV0VGVtcGxhdGVJRj5cblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFR5cGU8SW5wdXRDb25maWc+LCB2aWV3OiBUeXBlPElucHV0VGVtcGxhdGVJRj4pIHtcbiAgICB0aGlzLmlucHV0Q3RvciA9IGNvbmZpZ1xuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgfVxuXG4gIGNyZWF0ZUlucHV0Q29uZmlnKGRhdGE/OiBDb25maWd1cmFibGVJbnB1dFR5cGVKc29uLCBrZXk/OiBzdHJpbmcpOiBJbnB1dENvbmZpZyB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLmlucHV0Q3RvcihkYXRhIHx8IHt9LCBrZXkpXG4gIH1cblxufVxuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJbnB1dFJlZ2lzdHJ5IHtcblxuICBwcml2YXRlIGlucHV0RW50cmllczogT2JqTWFwPElucHV0U2V0PiA9IHt9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZWdpc3RlclR5cGVzKClcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJUeXBlcygpIHtcbiAgICB0aGlzLmlucHV0RW50cmllc1tDaGVja2JveFdpZGdldENvbmZpZy5JTlBVVF9OQU1FXSA9IG5ldyBJbnB1dFNldChDaGVja2JveFdpZGdldENvbmZpZywgQ2hlY2tib3hXaWRnZXRUZW1wbGF0ZUNvbXBvbmVudClcbiAgICB0aGlzLmlucHV0RW50cmllc1tTbGlkZVRvZ2dsZUNvbmZpZy5JTlBVVF9OQU1FXSA9IG5ldyBJbnB1dFNldChTbGlkZVRvZ2dsZUNvbmZpZywgU2xpZGVUb2dnbGVXaWRnZXRUZW1wbGF0ZUNvbXBvbmVudClcbiAgICB0aGlzLmlucHV0RW50cmllc1tOdW1iZXJJbnB1dENvbmZpZy5JTlBVVF9OQU1FXSA9IG5ldyBJbnB1dFNldChOdW1iZXJJbnB1dENvbmZpZywgTnVtYmVyVGVtcGxhdGVDb21wb25lbnQpXG4gICAgdGhpcy5pbnB1dEVudHJpZXNbTnVtYmVyU3Bpbm5lckNvbmZpZy5JTlBVVF9OQU1FXSA9IG5ldyBJbnB1dFNldChOdW1iZXJTcGlubmVyQ29uZmlnLCBOdW1iZXJTcGlubmVyVGVtcGxhdGVDb21wb25lbnQpXG4gICAgdGhpcy5pbnB1dEVudHJpZXNbTnVtYmVyU2xpZGVyQ29uZmlnLklOUFVUX05BTUVdID0gbmV3IElucHV0U2V0KE51bWJlclNsaWRlckNvbmZpZywgTnVtYmVyU2xpZGVyVGVtcGxhdGVDb21wb25lbnQpXG4gICAgdGhpcy5pbnB1dEVudHJpZXNbVGV4dElucHV0Q29uZmlnLklOUFVUX05BTUVdID0gbmV3IElucHV0U2V0KFRleHRJbnB1dENvbmZpZywgVGV4dFRlbXBsYXRlQ29tcG9uZW50KVxuICAgIHRoaXMuaW5wdXRFbnRyaWVzW0RhdGVUaW1lSW5wdXRDb25maWcuSU5QVVRfTkFNRV0gPSBuZXcgSW5wdXRTZXQoRGF0ZVRpbWVJbnB1dENvbmZpZywgRGF0ZVRpbWVUZW1wbGF0ZUNvbXBvbmVudClcbiAgICB0aGlzLmlucHV0RW50cmllc1tEdXJhdGlvblBpY2tlckNvbmZpZy5JTlBVVF9OQU1FXSA9IG5ldyBJbnB1dFNldChEdXJhdGlvblBpY2tlckNvbmZpZywgRHVyYXRpb25QaWNrZXJUZW1wbGF0ZUNvbXBvbmVudClcbiAgICB0aGlzLmlucHV0RW50cmllc1tJY29uUmF0aW5nV2lkZ2V0Q29uZmlnLklOUFVUX05BTUVdID0gbmV3IElucHV0U2V0KEljb25SYXRpbmdXaWRnZXRDb25maWcsIEljb25SYXRpbmdXaWRnZXRUZW1wbGF0ZUNvbXBvbmVudClcbiAgfVxuXG4gIGFsbFRlbXBsYXRlcyhtb2RlOiBJbnB1dFZpZXdNb2RlKTogSW5wdXRUZW1wbGF0ZUlGW10ge1xuICAgIHJldHVybiBPYmplY3RVdGlsLmtleXModGhpcy5pbnB1dEVudHJpZXMpLm1hcCgoaW5wdXROYW1lKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVUZW1wbGF0ZUZvclR5cGVLZXkoaW5wdXROYW1lLCBtb2RlKVxuICAgIH0pXG4gIH1cblxuICBnZXRJbnB1dFNldChpbnB1dE5hbWU6IHN0cmluZyk6IElucHV0U2V0IHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVudHJpZXNbaW5wdXROYW1lXVxuICB9XG5cbiAgZ2V0Q29tcG9uZW50Q3RvckZvcihpbnB1dENvbmZpZzogSW5wdXRDb25maWcsIG1vZGU6IElucHV0Vmlld01vZGUpOiBUeXBlPGFueT4ge1xuICAgIGxldCByZXN1bHQ6IFR5cGU8YW55PlxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5pbnB1dEVudHJpZXNbaW5wdXRDb25maWcuX2lucHV0TmFtZV1cbiAgICByZXN1bHQgPSBlbnRyeS52aWV3XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb2RlICcke21vZGV9Jy5gKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjcmVhdGVUZW1wbGF0ZUZvclR5cGVLZXkoaW5wdXROYW1lOiBzdHJpbmcsIG1vZGU6IElucHV0Vmlld01vZGUpOiBJbnB1dFRlbXBsYXRlSUYge1xuICAgIGNvbnN0IGlucHV0RW50cnlTZXQgPSB0aGlzLmdldElucHV0U2V0KGlucHV0TmFtZSlcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IGlucHV0RW50cnlTZXQuY3JlYXRlSW5wdXRDb25maWcoKVxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGlucHV0Q29uZmlnLFxuICAgICAgaXZhbDogICBpbnB1dENvbmZpZy50eXBlQ29uZmlnLmNyZWF0ZVZhbHVlKCksXG4gICAgICBtb2RlOiAgIG1vZGVcbiAgICB9XG4gIH1cblxuICBjcmVhdGVUZW1wbGF0ZUZvclR5cGUoaW5wdXRDb25maWc6IElucHV0Q29uZmlnLCBtb2RlPzogSW5wdXRWaWV3TW9kZSwgaXZhbD86IENvbmZpZ3VyYWJsZUlucHV0SXZhbCk6IElucHV0VGVtcGxhdGVJRiB7XG4gICAgaXZhbCA9IGl2YWwgfHwgaW5wdXRDb25maWcudHlwZUNvbmZpZy5jcmVhdGVWYWx1ZSh7fSlcbiAgICBtb2RlID0gbW9kZSB8fCBJbnB1dFZpZXdNb2Rlcy5FRElUXG4gICAgaXZhbC4ka2V5ID0gaW5wdXRDb25maWcuJGtleVxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGlucHV0Q29uZmlnLFxuICAgICAgaXZhbDogICBpdmFsLFxuICAgICAgbW9kZTogICBtb2RlXG4gICAgfVxuICB9XG5cblxuICBnZXQgaW5wdXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5wdXRFbnRyaWVzKVxuICB9XG5cblxufVxuIl19