com.phloxui
Version:
PhloxUI Ng2+ Framework
750 lines (749 loc) • 67.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input, ViewContainerRef, ComponentFactoryResolver, ElementRef } from '@angular/core';
import { DataUtils } from '../share/utils/DataUtils';
import { AbstractPage } from './AbstractPage';
import { BackgroundProcessManager } from '../service/BackgroundProcessManager.service';
import { PhloxAppInfo } from '../component/model/PhloxAppInfo';
var /** @type {?} */ TYPE_NAME = "phx-component-wrapper";
var ComponentWrapper = /** @class */ (function () {
function ComponentWrapper(target, componentFactoryResolver, elementRef, bgProcessMgr) {
this.PAGE_LOOP_TIMEOUT = 5;
this.target = target;
this.componentFactoryResolver = componentFactoryResolver;
this.dataChildren = [];
this.elementRef = elementRef;
this.bgProcessMgr = bgProcessMgr;
}
/**
* @return {?}
*/
ComponentWrapper.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @param {?} changes
* @return {?}
*/
ComponentWrapper.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes['type'] !== null && typeof changes['type'] !== 'undefined') {
var /** @type {?} */ oldType = changes['type'].previousValue;
var /** @type {?} */ newType = changes['type'].currentValue;
if (oldType !== newType) {
this.render();
}
}
if (this.componentRef !== null && typeof this.componentRef !== 'undefined') {
if (changes['class'] !== null && typeof changes['class'] !== 'undefined') {
var /** @type {?} */ oldClass = changes['class'].previousValue;
var /** @type {?} */ newClass = changes['class'].currentValue;
if (oldClass !== newClass) {
$(this.componentRef.location.nativeElement).attr('class', newClass);
}
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.render = /**
* @return {?}
*/
function () {
var _this = this;
// remove old dom
if (this.elementRef !== null && typeof this.elementRef !== 'undefined') {
if (this.componentRef !== null && typeof this.componentRef !== 'undefined') {
if (typeof this.componentRef.instance.setData === 'function') {
this.componentRef.instance.setData(null);
}
if (typeof this.componentRef.instance.setDataParent === 'function') {
this.componentRef.instance.setDataParent(null);
}
this.componentRef.destroy();
}
}
// check if component type or typestring reslove
if (this.type !== null && (typeof this.type !== 'undefined')) {
var /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.type);
var /** @type {?} */ compRef = this.target.createComponent(simpleCompoFactory);
this.componentRef = compRef;
// Add css class into component element
if (this.cssClass !== null && typeof this.cssClass === 'string') {
$(compRef.location.nativeElement).attr('class', this.cssClass);
}
// Set options first
this.setOptions(this.options);
// Overwrite this values (if specified)
this.setIgnoreParentData(this.ignoreParentData);
this.setIgnoreParentDisabled(this.ignoreParentDisabled);
this.setSetting(this.setting);
this.setModel(this.model);
this.setOnEnabled(this.onEnabled);
this.setOnDisabled(this.onDisabled);
this.setDelegateHistory(this.delegateHistory);
this.setI18NKey(this.i18nKey);
this.setBypassKey(this.bypass);
// Set data parent then
this.setDataParent(this.dataParent);
this.setData(this.data);
// Apply i18n lastly
this.applyI18N(this.i18n);
if (this.handler !== null && typeof this.handler === 'function') {
this.handler({
data: this.data,
instance: compRef.instance,
setting: this.setting,
model: this.model,
options: this.options,
i18n: this.i18n,
ignoreParentData: this.ignoreParentData,
ignoreParentDisabled: this.ignoreParentDisabled,
onEnabled: this.onEnabled,
onDisabled: this.onDisabled,
delegateHistory: this.delegateHistory,
i18nKey: this.i18nKey,
bypass: this.bypass,
dataParent: this.dataParent
});
}
if (compRef.instance !== null && typeof compRef.instance !== 'undefined') {
var /** @type {?} */ anyInstance_1 = compRef.instance;
// start loader
if (!(anyInstance_1 instanceof AbstractPage)) {
if (typeof anyInstance_1.isPageLoaded === 'function') {
// page load activate or end
if (this.bgProcessMgr !== null && typeof this.bgProcessMgr !== 'undefined') {
this.bgProcessMgr.execute(function () {
return new Promise(function (resolve, reject) {
var /** @type {?} */ timeout = PhloxAppInfo.DEFAULT_PAGE_LOAD_TIMEOUT;
if (_this.phloxAppInfo !== null && typeof _this.phloxAppInfo !== 'undefined' && _this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT !== null && typeof _this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT !== 'undefined') {
timeout = _this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT;
}
var /** @type {?} */ startTime = null;
var /** @type {?} */ handler = function () {
if (startTime === null) {
startTime = (new Date()).getTime();
}
var /** @type {?} */ currentTime = (new Date()).getTime();
if (anyInstance_1.isPageLoaded()) {
resolve();
}
else if ((currentTime - startTime) >= timeout) {
reject();
}
else {
setTimeout(handler, _this.PAGE_LOOP_TIMEOUT);
}
};
handler();
});
}, {
type: "connection.page"
});
}
}
}
// end loader
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getData = /**
* @return {?}
*/
function () {
return this.data;
};
/**
* @param {?} data
* @return {?}
*/
ComponentWrapper.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.data = data;
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setData === 'function') {
this.componentRef.instance.setData(this.data);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getSetting = /**
* @return {?}
*/
function () {
return this.setting;
};
/**
* @param {?} setting
* @return {?}
*/
ComponentWrapper.prototype.setSetting = /**
* @param {?} setting
* @return {?}
*/
function (setting) {
this.setting = setting;
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setSetting === 'function') {
this.componentRef.instance.setSetting(this.setting);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @param {?} model
* @return {?}
*/
ComponentWrapper.prototype.setModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.model = model;
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setModel === 'function') {
this.componentRef.instance.setModel(this.model);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getDataParent = /**
* @return {?}
*/
function () {
return this.dataParent;
};
/**
* @param {?} dataParent
* @return {?}
*/
ComponentWrapper.prototype.setDataParent = /**
* @param {?} dataParent
* @return {?}
*/
function (dataParent) {
this.dataParent = dataParent;
if (this.dataParent !== undefined && this.componentRef !== null && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setDataParent === 'function') {
this.componentRef.instance.setDataParent(this.dataParent);
}
}
};
/**
* @param {?} child
* @return {?}
*/
ComponentWrapper.prototype.addDataChild = /**
* @param {?} child
* @return {?}
*/
function (child) {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.addDataChild === 'function') {
this.componentRef.instance.addDataChild(child);
}
}
};
/**
* @param {?} child
* @return {?}
*/
ComponentWrapper.prototype.removeDataChild = /**
* @param {?} child
* @return {?}
*/
function (child) {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.removeDataChild === 'function') {
this.componentRef.instance.removeDataChild(child);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getDataChildren = /**
* @return {?}
*/
function () {
return this.dataChildren;
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getChangeEvent = /**
* @return {?}
*/
function () {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.getChangeEvent === 'function') {
this.componentRef.instance.getChangeEvent();
}
}
return null;
};
/**
* @return {?}
*/
ComponentWrapper.prototype.isDataDirty = /**
* @return {?}
*/
function () {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.isDataDirty === 'function') {
this.componentRef.instance.isDataDirty();
}
}
return false;
};
/**
* @param {?=} data
* @return {?}
*/
ComponentWrapper.prototype.saveData = /**
* @param {?=} data
* @return {?}
*/
function (data) {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.saveData === 'function') {
this.componentRef.instance.saveData(data);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.resetData = /**
* @return {?}
*/
function () {
if (this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.resetData === 'function') {
this.componentRef.instance.resetData();
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.isIgnoreParentData = /**
* @return {?}
*/
function () {
return this.ignoreParentData;
};
/**
* @param {?} ignore
* @return {?}
*/
ComponentWrapper.prototype.setIgnoreParentData = /**
* @param {?} ignore
* @return {?}
*/
function (ignore) {
this.ignoreParentData = ignore;
if (this.ignoreParentData !== undefined && this.componentRef !== null && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setIgnoreParentData === 'function') {
this.componentRef.instance.setIgnoreParentData(this.ignoreParentData);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.isIgnoreParentDisabled = /**
* @return {?}
*/
function () {
return this.ignoreParentDisabled;
};
/**
* @param {?} ignore
* @return {?}
*/
ComponentWrapper.prototype.setIgnoreParentDisabled = /**
* @param {?} ignore
* @return {?}
*/
function (ignore) {
this.ignoreParentDisabled = ignore;
if (this.ignoreParentDisabled !== undefined && this.componentRef !== null && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setIgnoreParentDisabled === 'function') {
this.componentRef.instance.setIgnoreParentDisabled(this.ignoreParentDisabled);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.isDelegateHistory = /**
* @return {?}
*/
function () {
return this.delegateHistory;
};
/**
* @param {?} delegate
* @return {?}
*/
ComponentWrapper.prototype.setDelegateHistory = /**
* @param {?} delegate
* @return {?}
*/
function (delegate) {
this.delegateHistory = delegate;
if (this.delegateHistory !== undefined && this.componentRef !== null && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setDelegateHistory === 'function') {
this.componentRef.instance.setDelegateHistory(this.delegateHistory);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getOptions = /**
* @return {?}
*/
function () {
return this.options;
};
/**
* @param {?} options
* @return {?}
*/
ComponentWrapper.prototype.setOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
this.options = options;
if (this.options !== undefined && this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setOptions === 'function') {
this.componentRef.instance.setOptions(this.options);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getOnEnabled = /**
* @return {?}
*/
function () {
return this.onEnabled;
};
/**
* @param {?} handler
* @return {?}
*/
ComponentWrapper.prototype.setOnEnabled = /**
* @param {?} handler
* @return {?}
*/
function (handler) {
this.onEnabled = handler;
if (this.onEnabled !== undefined && this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setOnEnabled === 'function') {
this.componentRef.instance.setOnEnabled(this.onEnabled);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getOnDisabled = /**
* @return {?}
*/
function () {
return this.onDisabled;
};
/**
* @param {?} handler
* @return {?}
*/
ComponentWrapper.prototype.setOnDisabled = /**
* @param {?} handler
* @return {?}
*/
function (handler) {
this.onDisabled = handler;
if (this.onDisabled !== undefined && this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setOnDisabled === 'function') {
this.componentRef.instance.setOnDisabled(this.onDisabled);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getComponentRef = /**
* @return {?}
*/
function () {
return this.componentRef;
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getComponentInstance = /**
* @return {?}
*/
function () {
var /** @type {?} */ compRef = this.getComponentRef();
if (compRef === null || typeof compRef === 'undefined') {
return null;
}
return compRef.instance;
};
/**
* @param {?} value
* @return {?}
*/
ComponentWrapper.prototype.applyI18N = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === 'undefined') {
return;
}
this.i18n = value;
var /** @type {?} */ compInst = this.getComponentInstance();
if (compInst === null || typeof compInst.applyI18N !== 'function') {
return;
}
if (value === null) {
compInst.applyI18N(null);
}
else {
if (this.isBypassKey()) {
compInst.applyI18N(value);
}
else {
var /** @type {?} */ i18nKey = this.getI18NKey();
if (i18nKey !== null && typeof i18nKey !== 'undefined') {
// We use DataUtils.getDataValue() here to support i18nKey in dot notation (.) format:
// foo.bar ...
if (DataUtils.containsDataKey(i18nKey, value)) {
compInst.applyI18N(DataUtils.getDataValue(i18nKey, value));
}
else {
compInst.applyI18N(undefined);
}
}
else {
compInst.applyI18N(value);
}
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getI18NKey = /**
* @return {?}
*/
function () {
if (this.i18nKey !== undefined) {
return this.i18nKey;
}
var /** @type {?} */ compInst = this.getComponentInstance();
if (compInst === null || typeof compInst.getI18NKey !== 'function') {
return null;
}
return compInst.getI18NKey();
};
/**
* @param {?} i18nKey
* @return {?}
*/
ComponentWrapper.prototype.setI18NKey = /**
* @param {?} i18nKey
* @return {?}
*/
function (i18nKey) {
this.i18nKey = i18nKey;
if (this.i18nKey !== undefined && this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setI18NKey === 'function') {
this.componentRef.instance.setI18NKey(this.i18nKey);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.isBypassKey = /**
* @return {?}
*/
function () {
if (this.bypass !== undefined) {
return this.bypass;
}
var /** @type {?} */ compInst = this.getComponentInstance();
if (compInst === null || typeof compInst.isBypassKey !== 'function') {
return false;
}
return compInst.isBypassKey();
};
/**
* @param {?} bypass
* @return {?}
*/
ComponentWrapper.prototype.setBypassKey = /**
* @param {?} bypass
* @return {?}
*/
function (bypass) {
this.bypass = bypass;
if (this.bypass !== undefined && this.componentRef !== null && this.componentRef !== undefined && this.componentRef.instance !== null) {
if (typeof this.componentRef.instance.setBypassKey === 'function') {
this.componentRef.instance.setBypassKey(this.bypass);
}
}
};
/**
* @return {?}
*/
ComponentWrapper.prototype.getCSSClass = /**
* @return {?}
*/
function () {
return this.cssClass;
};
/**
* @param {?} clazz
* @return {?}
*/
ComponentWrapper.prototype.setCSSClass = /**
* @param {?} clazz
* @return {?}
*/
function (clazz) {
this.cssClass = clazz;
};
ComponentWrapper.TYPE_NAME = TYPE_NAME;
ComponentWrapper.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: ""
},] },
];
/** @nocollapse */
ComponentWrapper.ctorParameters = function () { return [
{ type: ViewContainerRef, },
{ type: ComponentFactoryResolver, },
{ type: ElementRef, },
{ type: BackgroundProcessManager, },
]; };
ComponentWrapper.propDecorators = {
"dataParent": [{ type: Input },],
"type": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"handler": [{ type: Input },],
"setting": [{ type: Input },],
"model": [{ type: Input },],
"onEnabled": [{ type: Input },],
"onDisabled": [{ type: Input },],
"data": [{ type: Input },],
"i18n": [{ type: Input },],
"options": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"cssClass": [{ type: Input, args: ['class',] },],
};
return ComponentWrapper;
}());
export { ComponentWrapper };
function ComponentWrapper_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentWrapper.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentWrapper.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentWrapper.propDecorators;
/** @type {?} */
ComponentWrapper.TYPE_NAME;
/** @type {?} */
ComponentWrapper.prototype.PAGE_LOOP_TIMEOUT;
/** @type {?} */
ComponentWrapper.prototype.dataParent;
/** @type {?} */
ComponentWrapper.prototype.type;
/** @type {?} */
ComponentWrapper.prototype.ignoreParentData;
/** @type {?} */
ComponentWrapper.prototype.ignoreParentDisabled;
/** @type {?} */
ComponentWrapper.prototype.delegateHistory;
/** @type {?} */
ComponentWrapper.prototype.handler;
/** @type {?} */
ComponentWrapper.prototype.setting;
/** @type {?} */
ComponentWrapper.prototype.model;
/** @type {?} */
ComponentWrapper.prototype.onEnabled;
/** @type {?} */
ComponentWrapper.prototype.onDisabled;
/** @type {?} */
ComponentWrapper.prototype.data;
/** @type {?} */
ComponentWrapper.prototype.i18n;
/** @type {?} */
ComponentWrapper.prototype.options;
/** @type {?} */
ComponentWrapper.prototype.i18nKey;
/** @type {?} */
ComponentWrapper.prototype.bypass;
/** @type {?} */
ComponentWrapper.prototype.cssClass;
/** @type {?} */
ComponentWrapper.prototype.componentRef;
/** @type {?} */
ComponentWrapper.prototype.elementRef;
/** @type {?} */
ComponentWrapper.prototype.bgProcessMgr;
/** @type {?} */
ComponentWrapper.prototype.phloxAppInfo;
/** @type {?} */
ComponentWrapper.prototype.dataChildren;
/** @type {?} */
ComponentWrapper.prototype.componentFactoryResolver;
/** @type {?} */
ComponentWrapper.prototype.target;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50V3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQ29tcG9uZW50V3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxnQkFBZ0IsRUFBUSx3QkFBd0IsRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBU2hKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSy9ELHFCQUFNLFNBQVMsR0FBVyx1QkFBdUIsQ0FBQzs7SUFzRGhELDBCQUFZLE1BQXdCLEVBQUUsd0JBQWtELEVBQUUsVUFBc0IsRUFBRSxZQUFzQztpQ0EzQ3BILENBQUM7UUE0Q25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztLQUNsQzs7OztJQUVNLG1DQUFROzs7Ozs7Ozs7SUFJUixzQ0FBVzs7OztjQUFDLE9BQVk7UUFDN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLHFCQUFJLE9BQU8sR0FBRyxPQUFP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QUFLLENBQUM7O2lDQTlkbUIsU0FBUzs7Z0JBUHJELFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUsRUFBRTtpQkFDYjs7OztnQkF2QjZDLGdCQUFnQjtnQkFBUSx3QkFBd0I7Z0JBQWdCLFVBQVU7Z0JBVy9HLHdCQUF3Qjs7OytCQW1COUIsS0FBSzt5QkFFTCxLQUFLO3FDQUVMLEtBQUs7eUNBRUwsS0FBSztvQ0FFTCxLQUFLOzRCQUVMLEtBQUs7NEJBRUwsS0FBSzswQkFFTCxLQUFLOzhCQUVMLEtBQUs7K0JBRUwsS0FBSzt5QkFFTCxLQUFLO3lCQUVMLEtBQUs7NEJBRUwsS0FBSzs0QkFFTCxLQUFLOzJCQUVMLEtBQUssU0FBQyxZQUFZOzZCQUVsQixLQUFLLFNBQUMsT0FBTzs7MkJBNURoQjs7U0F3QmEsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsIFR5cGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgSUhhc01vZGVsIH0gZnJvbSAnLi9JSGFzTW9kZWwnO1xuaW1wb3J0IHsgSUhhc1NldHRpbmcgfSBmcm9tICcuL0lIYXNTZXR0aW5nJztcbmltcG9ydCB7IElDaGFuZ2VhYmxlIH0gZnJvbSAnLi9JQ2hhbmdlYWJsZSc7XG5cbmltcG9ydCB7IElJMThOQXBwbGljYWJsZSB9IGZyb20gJy4uL3NoYXJlL0lJMThOQXBwbGljYWJsZSc7XG5pbXBvcnQgeyBJSGFzT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlL0lIYXNPcHRpb25zJztcblxuaW1wb3J0IHsgRGF0YVV0aWxzIH0gZnJvbSAnLi4vc2hhcmUvdXRpbHMvRGF0YVV0aWxzJztcbmltcG9ydCB7IEFic3RyYWN0UGFnZSB9IGZyb20gJy4vQWJzdHJhY3RQYWdlJztcbmltcG9ydCB7IEJhY2tncm91bmRQcm9jZXNzTWFuYWdlciB9IGZyb20gJy4uL3NlcnZpY2UvQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5pbXBvcnQgeyBQaGxveEFwcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1BobG94QXBwU2VydmljZS5zZXJ2aWNlJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWNvbXBvbmVudC13cmFwcGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50V3JhcHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBJSGFzRGF0YSwgSUhhc1NldHRpbmcsIElIYXNNb2RlbCwgSUNoYW5nZWFibGUsIElJMThOQXBwbGljYWJsZSwgSUhhc09wdGlvbnMge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgcHJpdmF0ZSBQQUdFX0xPT1BfVElNRU9VVDogbnVtYmVyID0gNTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHR5cGU6IGFueTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBoYW5kbGVyOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzZXR0aW5nOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbW9kZWw6IGFueTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBwcml2YXRlIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBpMThuOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIGkxOG5LZXk6IGFueTtcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgcHJpdmF0ZSBieXBhc3M6IGFueTtcbiAgQElucHV0KCdjbGFzcycpXG4gIHByaXZhdGUgY3NzQ2xhc3M6IHN0cmluZztcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogYW55O1xuICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgYmdQcm9jZXNzTWdyOiBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXI7XG4gIHByaXZhdGUgcGhsb3hBcHBJbmZvOiBQaGxveEFwcEluZm87XG4gIHByaXZhdGUgZGF0YUNoaWxkcmVuOiBJSGFzRGF0YVtdO1xuICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xuICBwcml2YXRlIHRhcmdldDogVmlld0NvbnRhaW5lclJlZjtcblxuICBjb25zdHJ1Y3Rvcih0YXJnZXQ6IFZpZXdDb250YWluZXJSZWYsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBiZ1Byb2Nlc3NNZ3I6IEJhY2tncm91bmRQcm9jZXNzTWFuYWdlcikge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xuICAgIHRoaXMuZGF0YUNoaWxkcmVuID0gW107XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLmJnUHJvY2Vzc01nciA9IGJnUHJvY2Vzc01ncjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzWyd0eXBlJ10gIT09IG51bGwgJiYgdHlwZW9mIGNoYW5nZXNbJ3R5cGUnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBvbGRUeXBlID0gY2hhbmdlc1sndHlwZSddLnByZXZpb3VzVmFsdWU7XG4gICAgICBsZXQgbmV3VHlwZTogYW55ID0gY2hhbmdlc1sndHlwZSddLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKG9sZFR5cGUgIT09IG5ld1R5cGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9uZW50UmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGNoYW5nZXNbJ2NsYXNzJ10gIT09IG51bGwgJiYgdHlwZW9mIGNoYW5nZXNbJ2NsYXNzJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBvbGRDbGFzcyA9IGNoYW5nZXNbJ2NsYXNzJ10ucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgbGV0IG5ld0NsYXNzOiBhbnkgPSBjaGFuZ2VzWydjbGFzcyddLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICBpZiAob2xkQ2xhc3MgIT09IG5ld0NsYXNzKSB7XG4gICAgICAgICAgJCh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KS5hdHRyKCdjbGFzcycsIG5ld0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKTogdm9pZCB7XG4gICAgLy8gcmVtb3ZlIG9sZCBkb21cbiAgICBpZiAodGhpcy5lbGVtZW50UmVmICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmVsZW1lbnRSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9uZW50UmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXREYXRhKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXREYXRhUGFyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0RGF0YVBhcmVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtc