UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

303 lines (302 loc) 28.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Injectable } from '@angular/core'; import { BackgroundProcess } from '../share/model/BackgroundProcess'; import { ObservableManager } from './ObservableManager.service'; var /** @type {?} */ PROCESS_START_TOPIC_NAME = 'bg-proc-mgr.process.start'; var /** @type {?} */ PROCESS_END_TOPIC_NAME = 'bg-proc-mgr.process.end'; var /** @type {?} */ PROCESS_ERROR_TOPIC_NAME = 'bg-proc-mgr.process.error'; /** * <p style="text-indent: 2em;"> * A <code>ng</code> service class providing <code>background process</code> execution machanism. This class is an implementation of * [[IBackgroundProcessManager]]. So, please see [[IBackgroundProcessManager]] for more information. * </p> * * @see [[IBackgroundProcessManager]] * @see [[BackgroundProcess]] * * @author shiorin, tee4cute */ var BackgroundProcessManager = /** @class */ (function () { function BackgroundProcessManager(obsvMgr) { this.processesPool = []; this.obsvMgr = obsvMgr; } /** * @param {?} processFunc * @param {?=} processType * @param {?=} name * @param {?=} option * @return {?} */ BackgroundProcessManager.prototype.getWrapperProcess = /** * @param {?} processFunc * @param {?=} processType * @param {?=} name * @param {?=} option * @return {?} */ function (processFunc, processType, name, option) { var /** @type {?} */ processProm = Promise.resolve(null); if (processFunc !== null && typeof processFunc === 'function') { var /** @type {?} */ returnVal = processFunc.call(null, null); if (typeof returnVal === 'undefined') { // function with no return processProm = Promise.resolve(returnVal); } else if (typeof returnVal === 'object') { if (returnVal instanceof Promise) { processProm = returnVal; } else { processProm = Promise.resolve(returnVal); } } else { processProm = Promise.resolve(returnVal); } } var /** @type {?} */ result = new BackgroundProcess(processProm, processType, name, undefined, option); return result; }; /** * @param {?} bgProcess * @param {?} options * @return {?} */ BackgroundProcessManager.prototype.isMatchAllOptions = /** * @param {?} bgProcess * @param {?} options * @return {?} */ function (bgProcess, options) { var /** @type {?} */ isMatchAll = true; if (bgProcess !== null && bgProcess !== undefined) { if (options !== null && options !== undefined) { for (var /** @type {?} */ key in options) { var /** @type {?} */ optVal = options[key]; if (bgProcess.options !== null && bgProcess.options !== undefined) { var /** @type {?} */ bgProcVal = bgProcess.options[key]; if (optVal !== bgProcVal) { isMatchAll = false; break; } } else { isMatchAll = false; break; } } } } else { if (options !== null && options !== undefined) { isMatchAll = false; } } return isMatchAll; }; /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.execute]] for more information. * </p> * * @see [[IBackgroundProcessManager.execute]] * @param {?} processFunc * @param {?=} options * @return {?} */ BackgroundProcessManager.prototype.execute = /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.execute]] for more information. * </p> * * @see [[IBackgroundProcessManager.execute]] * @param {?} processFunc * @param {?=} options * @return {?} */ function (processFunc, options) { var _this = this; if (processFunc === null || typeof processFunc === 'undefined') { return null; } var /** @type {?} */ processType = null; var /** @type {?} */ name = null; if (options !== null && typeof options !== 'undefined') { processType = options.type; name = options.name; } // return wrapper promise var /** @type {?} */ bgProcess = this.getWrapperProcess(processFunc, processType, name, options); if (bgProcess !== null && bgProcess.process !== null) { this.processesPool.push(bgProcess); // start onprocess adding if (this.obsvMgr !== null && typeof this.obsvMgr !== 'undefined') { this.obsvMgr.publish(BackgroundProcessManager.PROCESS_START_TOPIC_NAME, bgProcess); } var /** @type {?} */ wrapBgProcess = new Promise(function (resolve, reject) { bgProcess.process.then(function (result) { bgProcess.result = result; resolve(result); var /** @type {?} */ index = _this.processesPool.indexOf(bgProcess); if (index >= 0) { _this.processesPool.splice(index, 1); } if (_this.obsvMgr !== null && typeof _this.obsvMgr !== 'undefined') { _this.obsvMgr.publish(BackgroundProcessManager.PROCESS_END_TOPIC_NAME, bgProcess); } }, function (error) { bgProcess.error = error; reject(error); var /** @type {?} */ index = _this.processesPool.indexOf(bgProcess); if (index >= 0) { _this.processesPool.splice(index, 1); } if (_this.obsvMgr !== null && typeof _this.obsvMgr !== 'undefined') { _this.obsvMgr.publish(BackgroundProcessManager.PROCESS_ERROR_TOPIC_NAME, bgProcess); } }); }); return wrapBgProcess; } return null; }; /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.getRunningProcessesCount]] for more information. * </p> * * @see [[IBackgroundProcessManager.getRunningProcessesCount]] * @param {?} typeName * @param {?} name * @param {?=} options * @return {?} */ BackgroundProcessManager.prototype.getRunningProcessesCount = /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.getRunningProcessesCount]] for more information. * </p> * * @see [[IBackgroundProcessManager.getRunningProcessesCount]] * @param {?} typeName * @param {?} name * @param {?=} options * @return {?} */ function (typeName, name, options) { return this.getRunningProcesses(typeName, name, options).length; }; /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.getRunningProcesses]] for more information. This method returns * an array of process model class [[BackgroundProcess]]. * </p> * * @see [[IBackgroundProcessManager.getRunningProcesses]] * @param {?} typeName * @param {?} name * @param {?=} options * @return {?} */ BackgroundProcessManager.prototype.getRunningProcesses = /** * <p style="text-indent: 1em;"> * Please see [[IBackgroundProcessManager.getRunningProcesses]] for more information. This method returns * an array of process model class [[BackgroundProcess]]. * </p> * * @see [[IBackgroundProcessManager.getRunningProcesses]] * @param {?} typeName * @param {?} name * @param {?=} options * @return {?} */ function (typeName, name, options) { if (typeName === null && name === null) { return this.processesPool; } var /** @type {?} */ result = []; try { for (var _a = tslib_1.__values(this.processesPool), _b = _a.next(); !_b.done; _b = _a.next()) { var process_1 = _b.value; var /** @type {?} */ pType = process_1.type; var /** @type {?} */ pName = process_1.name; var /** @type {?} */ pUserAction = process_1.userAction; var /** @type {?} */ allMatch = true; if (typeName !== null && typeName !== undefined) { if (typeName !== pType) { allMatch = false; } } if (name !== null && name !== undefined) { if (name !== pName) { allMatch = false; } } // check more is allMatch if (allMatch && options !== null && typeof options !== 'undefined') { if (options.userAction !== null && typeof options.userAction !== 'undefined') { if (pUserAction !== options.userAction) { allMatch = false; } } // check more is allMatch if (allMatch) { var /** @type {?} */ isMatchAllOpt = this.isMatchAllOptions(process_1, options); if (!isMatchAllOpt) { allMatch = false; } } } // check more is allMatch if (allMatch) { result.push(process_1); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } return result; var e_1, _c; }; BackgroundProcessManager.PROCESS_START_TOPIC_NAME = PROCESS_START_TOPIC_NAME; BackgroundProcessManager.PROCESS_END_TOPIC_NAME = PROCESS_END_TOPIC_NAME; BackgroundProcessManager.PROCESS_ERROR_TOPIC_NAME = PROCESS_ERROR_TOPIC_NAME; BackgroundProcessManager.decorators = [ { type: Injectable }, ]; /** @nocollapse */ BackgroundProcessManager.ctorParameters = function () { return [ { type: ObservableManager, }, ]; }; return BackgroundProcessManager; }()); export { BackgroundProcessManager }; function BackgroundProcessManager_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ BackgroundProcessManager.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ BackgroundProcessManager.ctorParameters; /** @type {?} */ BackgroundProcessManager.PROCESS_START_TOPIC_NAME; /** @type {?} */ BackgroundProcessManager.PROCESS_END_TOPIC_NAME; /** @type {?} */ BackgroundProcessManager.PROCESS_ERROR_TOPIC_NAME; /** @type {?} */ BackgroundProcessManager.prototype.processesPool; /** @type {?} */ BackgroundProcessManager.prototype.obsvMgr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlL0JhY2tncm91bmRQcm9jZXNzTWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVoRSxxQkFBTSx3QkFBd0IsR0FBVywyQkFBMkIsQ0FBQztBQUNyRSxxQkFBTSxzQkFBc0IsR0FBVyx5QkFBeUIsQ0FBQztBQUNqRSxxQkFBTSx3QkFBd0IsR0FBVywyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQXVCbkUsa0NBQVksT0FBMEI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7S0FDeEI7Ozs7Ozs7O0lBRU8sb0RBQWlCOzs7Ozs7O2NBQUMsV0FBcUIsRUFBRSxXQUFvQixFQUFFLElBQWEsRUFBRSxNQUFZO1FBQ2hHLHFCQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxxQkFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzs7Z0JBRXJDLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxD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QUFDOzRCQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO3lCQUNsQjtxQkFDRjtpQkFDRjs7Z0JBR0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQU8sQ0FBQyxDQUFDO2lCQUN0QjthQUNGOzs7Ozs7Ozs7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDOzs7d0RBdk0wQyx3QkFBd0I7c0RBQzFCLHNCQUFzQjt3REFDcEIsd0JBQXdCOztnQkFMbkYsVUFBVTs7OztnQkFqQkYsaUJBQWlCOzttQ0FIMUI7O1NBcUJhLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIgfSBmcm9tICcuLi9zaGFyZS9JQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyJztcbmltcG9ydCB7IEJhY2tncm91bmRQcm9jZXNzIH0gZnJvbSAnLi4vc2hhcmUvbW9kZWwvQmFja2dyb3VuZFByb2Nlc3MnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1hbmFnZXIgfSBmcm9tICcuL09ic2VydmFibGVNYW5hZ2VyLnNlcnZpY2UnO1xuXG5jb25zdCBQUk9DRVNTX1NUQVJUX1RPUElDX05BTUU6IHN0cmluZyA9ICdiZy1wcm9jLW1nci5wcm9jZXNzLnN0YXJ0JztcbmNvbnN0IFBST0NFU1NfRU5EX1RPUElDX05BTUU6IHN0cmluZyA9ICdiZy1wcm9jLW1nci5wcm9jZXNzLmVuZCc7XG5jb25zdCBQUk9DRVNTX0VSUk9SX1RPUElDX05BTUU6IHN0cmluZyA9ICdiZy1wcm9jLW1nci5wcm9jZXNzLmVycm9yJztcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBIDxjb2RlPm5nPC9jb2RlPiBzZXJ2aWNlIGNsYXNzIHByb3ZpZGluZyA8Y29kZT5iYWNrZ3JvdW5kIHByb2Nlc3M8L2NvZGU+IGV4ZWN1dGlvbiBtYWNoYW5pc20uIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gb2ZcbiAqIFtbSUJhY2tncm91bmRQcm9jZXNzTWFuYWdlcl1dLiBTbywgcGxlYXNlIHNlZSBbW0lCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXJdXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqIDwvcD5cbiAqXG4gKiBAc2VlIFtbSUJhY2tncm91bmRQcm9jZXNzTWFuYWdlcl1dXG4gKiBAc2VlIFtbQmFja2dyb3VuZFByb2Nlc3NdXVxuICpcbiAqIEBhdXRob3Igc2hpb3JpbiwgdGVlNGN1dGVcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRQcm9jZXNzTWFuYWdlciBpbXBsZW1lbnRzIElCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPQ0VTU19TVEFSVF9UT1BJQ19OQU1FOiBzdHJpbmcgPSBQUk9DRVNTX1NUQVJUX1RPUElDX05BTUU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPQ0VTU19FTkRfVE9QSUNfTkFNRTogc3RyaW5nID0gUFJPQ0VTU19FTkRfVE9QSUNfTkFNRTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9DRVNTX0VSUk9SX1RPUElDX05BTUU6IHN0cmluZyA9IFBST0NFU1NfRVJST1JfVE9QSUNfTkFNRTtcblxuICBwcml2YXRlIHByb2Nlc3Nlc1Bvb2w6IEJhY2tncm91bmRQcm9jZXNzW107XG4gIHByaXZhdGUgb2Jzdk1ncjogT2JzZXJ2YWJsZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3Iob2Jzdk1ncjogT2JzZXJ2YWJsZU1hbmFnZXIpIHtcbiAgICB0aGlzLnByb2Nlc3Nlc1Bvb2wgPSBbXTtcbiAgICB0aGlzLm9ic3ZNZ3IgPSBvYnN2TWdyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXcmFwcGVyUHJvY2Vzcyhwcm9jZXNzRnVuYzogRnVuY3Rpb24sIHByb2Nlc3NUeXBlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBvcHRpb24/OiBhbnkpOiBCYWNrZ3JvdW5kUHJvY2VzcyB7XG4gICAgbGV0IHByb2Nlc3NQcm9tID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXG4gICAgaWYgKHByb2Nlc3NGdW5jICE9PSBudWxsICYmIHR5cGVvZiBwcm9jZXNzRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHJldHVyblZhbCA9IHByb2Nlc3NGdW5jLmNhbGwobnVsbCwgbnVsbCk7XG4gICAgICBpZiAodHlwZW9mIHJldHVyblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZnVuY3Rpb24gd2l0aCBubyByZXR1cm5cbiAgICAgICAgcHJvY2Vzc1Byb20gPSBQcm9taXNlLnJlc29sdmUocmV0dXJuVmFsKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJldHVyblZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJldHVyblZhbCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9jZXNzUHJvbSA9IHJldHVyblZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzUHJvbSA9IFByb21pc2UucmVzb2x2ZShyZXR1cm5WYWwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzUHJvbSA9IFByb21pc2UucmVzb2x2ZShyZXR1cm5WYWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IEJhY2tncm91bmRQcm9jZXNzID0gbmV3IEJhY2tncm91bmRQcm9jZXNzKHByb2Nlc3NQcm9tLCBwcm9jZXNzVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBvcHRpb24pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaXNNYXRjaEFsbE9wdGlvbnMoYmdQcm9jZXNzOiBCYWNrZ3JvdW5kUHJvY2Vzcywgb3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTWF0Y2hBbGwgPSB0cnVlO1xuXG4gICAgaWYgKGJnUHJvY2VzcyAhPT0gbnVsbCAmJiBiZ1Byb2Nlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgbGV0IG9wdFZhbCA9IG9wdGlvbnNba2V5XTtcblxuICAgICAgICAgIGlmIChiZ1Byb2Nlc3Mub3B0aW9ucyAhPT0gbnVsbCAmJiBiZ1Byb2Nlc3Mub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgYmdQcm9jVmFsID0gYmdQcm9jZXNzLm9wdGlvbnNba2V5XTtcblxuICAgICAgICAgICAgaWYgKG9wdFZhbCAhPT0gYmdQcm9jVmFsKSB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzTWF0Y2hBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaXNNYXRjaEFsbCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc01hdGNoQWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDFlbTtcIj5cbiAgICogUGxlYXNlIHNlZSBbW0lCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuZXhlY3V0ZV1dIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKiA8L3A+XG4gICAqXG4gICAqIEBzZWUgW1tJQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLmV4ZWN1dGVdXVxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGUocHJvY2Vzc0Z1bmM6IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAocHJvY2Vzc0Z1bmMgPT09IG51bGwgfHwgdHlwZW9mIHByb2Nlc3NGdW5jID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByb2Nlc3NUeXBlID0gbnVsbDtcbiAgICBsZXQgbmFtZSA9IG51bGw7XG4gICAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcm9jZXNzVHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICAgIG5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHdyYXBwZXIgcHJvbWlzZVxuICAgIGxldCBiZ1Byb2Nlc3MgPSB0aGlzLmdldFdyYXBwZXJQcm9jZXNzKHByb2Nlc3NGdW5jLCBwcm9jZXNzVHlwZSwgbmFtZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoYmdQcm9jZXNzICE9PSBudWxsICYmIGJnUHJvY2Vzcy5wcm9jZXNzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByb2Nlc3Nlc1Bvb2wucHVzaChiZ1Byb2Nlc3MpO1xuXG4gICAgICAvLyBzdGFydCBvbnByb2Nlc3MgYWRkaW5nXG4gICAgICBpZiAodGhpcy5vYnN2TWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9ic3ZNZ3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMub2Jzdk1nci5wdWJsaXNoKEJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5QUk9DRVNTX1NUQVJUX1RPUElDX05BTUUsIGJnUHJvY2Vzcyk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3cmFwQmdQcm9jZXNzID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBiZ1Byb2Nlc3MucHJvY2Vzcy50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBiZ1Byb2Nlc3MucmVzdWx0ID0gcmVzdWx0O1xuXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuXG4gICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5wcm9jZXNzZXNQb29sLmluZGV4T2YoYmdQcm9jZXNzKTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZXNQb29sLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMub2Jzdk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5vYnN2TWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5vYnN2TWdyLnB1Ymxpc2goQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLlBST0NFU1NfRU5EX1RPUElDX05BTUUsIGJnUHJvY2Vzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBiZ1Byb2Nlc3MuZXJyb3IgPSBlcnJvcjtcblxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG5cbiAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnByb2Nlc3Nlc1Bvb2wuaW5kZXhPZihiZ1Byb2Nlc3MpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3Nlc1Bvb2wuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5vYnN2TWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9ic3ZNZ3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLm9ic3ZNZ3IucHVibGlzaChCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuUFJPQ0VTU19FUlJPUl9UT1BJQ19OQU1FLCBiZ1Byb2Nlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHdyYXBCZ1Byb2Nlc3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgKiBQbGVhc2Ugc2VlIFtbSUJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5nZXRSdW5uaW5nUHJvY2Vzc2VzQ291bnRdXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogPC9wPlxuICAgKlxuICAgKiBAc2VlIFtbSUJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5nZXRSdW5uaW5nUHJvY2Vzc2VzQ291bnRdXVxuICAgKi9cbiAgcHVibGljIGdldFJ1bm5pbmdQcm9jZXNzZXNDb3VudCh0eXBlTmFtZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFJ1bm5pbmdQcm9jZXNzZXModHlwZU5hbWUsIG5hbWUsIG9wdGlvbnMpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAqIFBsZWFzZSBzZWUgW1tJQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLmdldFJ1bm5pbmdQcm9jZXNzZXNdXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gVGhpcyBtZXRob2QgcmV0dXJuc1xuICAgKiBhbiBhcnJheSBvZiBwcm9jZXNzIG1vZGVsIGNsYXNzIFtbQmFja2dyb3VuZFByb2Nlc3NdXS5cbiAgICogPC9wPlxuICAgKlxuICAgKiBAc2VlIFtbSUJhY2tncm91bmRQcm9jZXNzTWFuYWdlci5nZXRSdW5uaW5nUHJvY2Vzc2VzXV1cbiAgICovXG4gIHB1YmxpYyBnZXRSdW5uaW5nUHJvY2Vzc2VzKHR5cGVOYW1lOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IEJhY2tncm91bmRQcm9jZXNzW10ge1xuICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCAmJiBuYW1lID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZXNQb29sO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBwcm9jZXNzIG9mIHRoaXMucHJvY2Vzc2VzUG9vbCkge1xuICAgICAgbGV0IHBUeXBlOiBzdHJpbmcgPSBwcm9jZXNzLnR5cGU7XG4gICAgICBsZXQgcE5hbWU6IHN0cmluZyA9IHByb2Nlc3MubmFtZTtcbiAgICAgIGxldCBwVXNlckFjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MudXNlckFjdGlvbjtcbiAgICAgIGxldCBhbGxNYXRjaDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlTmFtZSAhPT0gbnVsbCAmJiB0eXBlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlTmFtZSAhPT0gcFR5cGUpIHtcbiAgICAgICAgICBhbGxNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lICE9PSBudWxsICYmIG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobmFtZSAhPT0gcE5hbWUpIHtcbiAgICAgICAgICBhbGxNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIG1vcmUgaXMgYWxsTWF0Y2hcbiAgICAgIGlmIChhbGxNYXRjaCAmJiBvcHRpb25zICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VyQWN0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zLnVzZXJBY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHBVc2VyQWN0aW9uICE9PSBvcHRpb25zLnVzZXJBY3Rpb24pIHtcbiAgICAgICAgICAgIGFsbE1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgbW9yZSBpcyBhbGxNYXRjaFxuICAgICAgICBpZiAoYWxsTWF0Y2gpIHtcbiAgICAgICAgICBsZXQgaXNNYXRjaEFsbE9wdCA9IHRoaXMuaXNNYXRjaEFsbE9wdGlvbnMocHJvY2Vzcywgb3B0aW9ucyk7XG5cbiAgICAgICAgICBpZiAoIWlzTWF0Y2hBbGxPcHQpIHtcbiAgICAgICAgICAgIGFsbE1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIG1vcmUgaXMgYWxsTWF0Y2hcbiAgICAgIGlmIChhbGxNYXRjaCkge1xuICAgICAgICByZXN1bHQucHVzaChwcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=