UNPKG

@awesome-nodes/mvvm

Version:

Application development framework using the *model* *view* *view-model* design pattern.

201 lines (157 loc) 24.8 kB
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; } var id = 0; function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; } import { EventArgs } from '@awesome-nodes/object'; import { Disposable } from "./Disposable"; import { BehaviorSubject, throwError } from 'rxjs'; var _thisArg2 = _classPrivateFieldLooseKey("_thisArg"); var _actionObservable = _classPrivateFieldLooseKey("_actionObservable"); var _actionSubscription = _classPrivateFieldLooseKey("_actionSubscription"); var _nextResult = _classPrivateFieldLooseKey("_nextResult"); var _nextResult$ = _classPrivateFieldLooseKey("_nextResult$"); var _actionResult = _classPrivateFieldLooseKey("_actionResult"); var _actionResult$ = _classPrivateFieldLooseKey("_actionResult$"); var _onProgress = _classPrivateFieldLooseKey("_onProgress"); var _onError = _classPrivateFieldLooseKey("_onError"); var _onComplete = _classPrivateFieldLooseKey("_onComplete"); export class ActionObserver extends Disposable { get action() { return _classPrivateFieldLooseBase(this, _actionObservable)[_actionObservable]; } get actionResult() { return _classPrivateFieldLooseBase(this, _actionResult$)[_actionResult$]; } get actionResultValue() { return _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].getValue(); } get actionResultAvailable() { return !!this.actionResultValue && this.actionResultValue !== this._defaultResult; } get nextResult() { return _classPrivateFieldLooseBase(this, _nextResult$)[_nextResult$]; } get nextValue() { return _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].getValue(); } get nextResultAvailable() { return !!this.nextValue && this.nextValue !== this._defaultResult; } set onProgress(value) { _classPrivateFieldLooseBase(this, _onProgress)[_onProgress] = _classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2] ? value.bind(_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2]) : value; } set onError(value) { _classPrivateFieldLooseBase(this, _onError)[_onError] = value; } set onComplete(value) { _classPrivateFieldLooseBase(this, _onComplete)[_onComplete] = _classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2] ? value.bind(_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2]) : value; } constructor(_thisArg, _defaultResult) { super(); this._defaultResult = _defaultResult; Object.defineProperty(this, _thisArg2, { writable: true, value: void 0 }); Object.defineProperty(this, _actionObservable, { writable: true, value: void 0 }); Object.defineProperty(this, _actionSubscription, { writable: true, value: void 0 }); Object.defineProperty(this, _nextResult, { writable: true, value: void 0 }); Object.defineProperty(this, _nextResult$, { writable: true, value: void 0 }); Object.defineProperty(this, _actionResult, { writable: true, value: void 0 }); Object.defineProperty(this, _actionResult$, { writable: true, value: void 0 }); Object.defineProperty(this, _onProgress, { writable: true, value: void 0 }); Object.defineProperty(this, _onError, { writable: true, value: void 0 }); Object.defineProperty(this, _onComplete, { writable: true, value: void 0 }); _classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2] = _thisArg || this; _classPrivateFieldLooseBase(this, _nextResult)[_nextResult] = new BehaviorSubject(_defaultResult); _classPrivateFieldLooseBase(this, _nextResult$)[_nextResult$] = _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].asObservable(); _classPrivateFieldLooseBase(this, _actionResult)[_actionResult] = new BehaviorSubject(_defaultResult); _classPrivateFieldLooseBase(this, _actionResult$)[_actionResult$] = _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].asObservable(); } observe(action, observer) { let observableResult = {}; if (observer) { if (typeof observer == 'function') { observableResult = { next: result => { _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].next(result); observer.bind(_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2])(_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2], EventArgs.empty); }, complete: () => { _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].next(_classPrivateFieldLooseBase(this, _nextResult)[_nextResult].getValue()); } }; } else { if (_classPrivateFieldLooseBase(this, _onProgress)[_onProgress] && observer.init) _classPrivateFieldLooseBase(this, _onProgress)[_onProgress](_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2], observer.init()); observableResult.error = e => { if (observer.error) observer.error(e);else if (_classPrivateFieldLooseBase(this, _onError)[_onError]) _classPrivateFieldLooseBase(this, _onError)[_onError](e);else console.error(e); }; observableResult.next = result => { if (result instanceof Error) { observableResult.error(result); return; } _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].next(result); if (_classPrivateFieldLooseBase(this, _onProgress)[_onProgress] && observer.next) _classPrivateFieldLooseBase(this, _onProgress)[_onProgress](_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2], observer.next(result)); }; observableResult.complete = () => { _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].next(_classPrivateFieldLooseBase(this, _nextResult)[_nextResult].getValue()); if (_classPrivateFieldLooseBase(this, _onComplete)[_onComplete] && observer.complete) _classPrivateFieldLooseBase(this, _onComplete)[_onComplete](_classPrivateFieldLooseBase(this, _thisArg2)[_thisArg2], observer.complete()); }; } } try { _classPrivateFieldLooseBase(this, _actionObservable)[_actionObservable] = action(); } catch (exception) { (_classPrivateFieldLooseBase(this, _onError)[_onError] || console.error)(exception); _classPrivateFieldLooseBase(this, _actionObservable)[_actionObservable] = throwError(exception); } if (observer) _classPrivateFieldLooseBase(this, _actionSubscription)[_actionSubscription] = _classPrivateFieldLooseBase(this, _actionObservable)[_actionObservable].subscribe(observableResult); return _classPrivateFieldLooseBase(this, _actionObservable)[_actionObservable]; } cancel() { _classPrivateFieldLooseBase(this, _actionSubscription)[_actionSubscription] && !_classPrivateFieldLooseBase(this, _actionSubscription)[_actionSubscription].closed && _classPrivateFieldLooseBase(this, _actionSubscription)[_actionSubscription].unsubscribe(); } reset() { _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].next(this._defaultResult); _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].next(this._defaultResult); } equals(other) { return super.equals(other) && _classPrivateFieldLooseBase(this, _actionResult)[_actionResult] === _classPrivateFieldLooseBase(other, _actionResult)[_actionResult]; } dispose(disposing) { if (disposing && !this.isDisposed) { this.cancel(); _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].unsubscribe(); _classPrivateFieldLooseBase(this, _actionResult)[_actionResult].unsubscribe(); } super.dispose(disposing); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tdnZtL21vZGVsL0FjdGlvbk9ic2VydmVyLnRzIl0sIm5hbWVzIjpbIkV2ZW50QXJncyIsIkRpc3Bvc2FibGUiLCJCZWhhdmlvclN1YmplY3QiLCJ0aHJvd0Vycm9yIiwiQWN0aW9uT2JzZXJ2ZXIiLCJhY3Rpb24iLCJhY3Rpb25SZXN1bHQiLCJhY3Rpb25SZXN1bHRWYWx1ZSIsImdldFZhbHVlIiwiYWN0aW9uUmVzdWx0QXZhaWxhYmxlIiwiX2RlZmF1bHRSZXN1bHQiLCJuZXh0UmVzdWx0IiwibmV4dFZhbHVlIiwibmV4dFJlc3VsdEF2YWlsYWJsZSIsIm9uUHJvZ3Jlc3MiLCJ2YWx1ZSIsImJpbmQiLCJvbkVycm9yIiwib25Db21wbGV0ZSIsImNvbnN0cnVjdG9yIiwiX3RoaXNBcmciLCJhc09ic2VydmFibGUiLCJvYnNlcnZlIiwib2JzZXJ2ZXIiLCJvYnNlcnZhYmxlUmVzdWx0IiwibmV4dCIsInJlc3VsdCIsImVtcHR5IiwiY29tcGxldGUiLCJpbml0IiwiZXJyb3IiLCJlIiwiY29uc29sZSIsIkVycm9yIiwiZXhjZXB0aW9uIiwic3Vic2NyaWJlIiwiY2FuY2VsIiwiY2xvc2VkIiwidW5zdWJzY3JpYmUiLCJyZXNldCIsImVxdWFscyIsIm90aGVyIiwiZGlzcG9zZSIsImRpc3Bvc2luZyIsImlzRGlzcG9zZWQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQVNBLFNBQVQsUUFBa0MsdUJBQWxDO0FBQ0EsU0FBU0MsVUFBVDtBQUVBLFNBQVNDLGVBQVQsRUFBcUVDLFVBQXJFLFFBQXVGLE1BQXZGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLE9BQU8sTUFBTUMsY0FBTixTQUFnQ0gsVUFBaEMsQ0FDUDtBQXdCcUIsTUFBTkksTUFBTSxHQUNqQjtBQUNJLHVDQUFPLElBQVA7QUFDSDs7QUFNc0IsTUFBWkMsWUFBWSxHQUN2QjtBQUNJLHVDQUFPLElBQVA7QUFDSDs7QUFNMkIsTUFBakJDLGlCQUFpQixHQUM1QjtBQUNJ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S0FBRCxFQUNiO0FBQ0ksV0FBTyxNQUFNRCxNQUFOLENBQWFDLEtBQWIsS0FBdUIsZ0dBQXdCQSxLQUF4QiwrQkFBOUI7QUFDSDs7QUFJTUMsRUFBQUEsT0FBTyxDQUFDQyxTQUFELEVBQ2Q7QUFDSSxRQUFJQSxTQUFTLElBQUksQ0FBQyxLQUFLQyxVQUF2QixFQUFtQztBQUMvQixXQUFLUixNQUFMOztBQUNBLGtFQUFrQkUsV0FBbEI7O0FBQ0Esc0VBQW9CQSxXQUFwQjtBQUNIOztBQUNELFVBQU1JLE9BQU4sQ0FBY0MsU0FBZDtBQUNIOztBQXpPTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50QXJncywgSUV2ZW50IH0gZnJvbSAnQGF3ZXNvbWUtbm9kZXMvb2JqZWN0JztcbmltcG9ydCB7IERpc3Bvc2FibGUgfSBmcm9tICdtdnZtL21vZGVsL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgT2JqZWN0TW9kZWwgfSBmcm9tICdtdnZtL21vZGVsL09iamVjdE1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUGFydGlhbE9ic2VydmVyLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnc2ltcGx5dHlwZWQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnRpYWxBY3Rpb25PYnNlcnZlcjxULCBURXZlbnRBcmdzIGV4dGVuZHMgRXZlbnRBcmdzID0gRXZlbnRBcmdzPlxue1xuICAgIGluaXQ/OiAoKSA9PiBURXZlbnRBcmdzO1xuICAgIG5leHQ/OiAodmFsdWU6IFQpID0+IFRFdmVudEFyZ3M7XG4gICAgZXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAgIGNvbXBsZXRlPzogKCkgPT4gVEV2ZW50QXJncztcbn1cblxuLyoqXG4gKiBBIG9iamVjdCBtb2RlbCB1dGlsaXR5IGZvciB3YXRjaGluZyBvYnNlcnZhYmxlcyB1c2luZyBjb21tYW5kIHBhdHRlcm4gc3R5bGUgaGFuZGxlciBmdW5jdGlvbnNcbiAqIHdoaWNoIGFyZSBib3VuZCB0byB0aGUgcHJvdmlkZWQge0BzZWUgQWN0aW9uT2JzZXJ2ZXIuI190aGlzQXJnfSBhcmd1bWVudC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25PYnNlcnZlcjxUPiBleHRlbmRzIERpc3Bvc2FibGVcbntcbiAgICAvL3JlZ2lvbiBJbnN0YW5jZSBNZW1iZXJzXG5cbiAgICByZWFkb25seSAjX3RoaXNBcmc6IE9iamVjdE1vZGVsO1xuICAgICNfYWN0aW9uT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8VD47XG4gICAgI19hY3Rpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcmVhZG9ubHkgI19uZXh0UmVzdWx0OiBCZWhhdmlvclN1YmplY3Q8VD47XG4gICAgcmVhZG9ubHkgI19uZXh0UmVzdWx0JDogT2JzZXJ2YWJsZTxUPjtcbiAgICByZWFkb25seSAjX2FjdGlvblJlc3VsdDogQmVoYXZpb3JTdWJqZWN0PFQ+O1xuICAgIHJlYWRvbmx5ICNfYWN0aW9uUmVzdWx0JDogT2JzZXJ2YWJsZTxUPjtcbiAgICAjX29uUHJvZ3Jlc3M/OiBJRXZlbnQ8T2JqZWN0TW9kZWw+O1xuICAgICNfb25FcnJvcj86IChlOiBFcnJvcikgPT4gdm9pZDtcbiAgICAjX29uQ29tcGxldGU/OiBJRXZlbnQ8T2JqZWN0TW9kZWw+O1xuXG4gICAgLy9lbmRyZWdpb25cblxuICAgIC8vcmVnaW9uIFB1YmxpYyBQcm9wZXJ0aWVzXG5cbiAgICAvL3JlZ2lvbiBBY3Rpb24gT2JzZXJ2YWJsZVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb2JzZXJ2YWJsZSByZXR1cm5lZCBmcm9tIHRoZSBsYXN0IG9ic2VydmVkIGFjdGlvbi5cbiAgICAgKiBAZGVzY3JpcHRpb24gU3Vic2NyaWJlIHRvIG9ic2VydmUgdGhlIGxhdGVzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBhY3Rpb24oKTogTnVsbGFibGU8T2JzZXJ2YWJsZTxUPj5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0ICduZXh0JyByZXN1bHQgZnJvbSB0aGUgbGFzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIFN1YnNjcmliZSB0byByZWNlaXZlIHRoZSBmaW5hbCAnbmV4dCcgcmVzdWx0IG9mIGFueSBjYWxsZWQgYWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWN0aW9uUmVzdWx0KCk6IE9ic2VydmFibGU8VD5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uUmVzdWx0JDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0ICduZXh0JyByZXN1bHQgdmFsdWUgZnJvbSB0aGUgbGFzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIEJpbmQgdG8gcmVjZWl2ZSB0aGUgZmluYWwgJ25leHQnIHJlc3VsdCB2YWx1ZSBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFjdGlvblJlc3VsdFZhbHVlKCk6IFRcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uUmVzdWx0LmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3ZWF0aGVyIHRoaXMgaW5zdGFuY2UgaGFzIGV2ZXIgcmVjZWl2ZWQgYSByZXN1bHRcbiAgICAgKiBvdGhlciB0aGFuIHRoZSBgQWN0aW9uT2JzZXJ2ZXIuX2RlZmF1bHRSZXN1bHRgIGZyb20gYW4gYWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWN0aW9uUmVzdWx0QXZhaWxhYmxlKCk6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYWN0aW9uUmVzdWx0VmFsdWUgJiYgdGhpcy5hY3Rpb25SZXN1bHRWYWx1ZSAhPT0gdGhpcy5fZGVmYXVsdFJlc3VsdDtcbiAgICB9XG5cbiAgICAvL2VuZHJlZ2lvblxuXG4gICAgLy9yZWdpb24gTmV4dCBSZXN1bHQgT2JzZXJ2YWJsZVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgJ25leHQnIHJlc3VsdCBmcm9tIHRoZSBjdXJyZW50bHkgb2JzZXJ2ZWQgYWN0aW9uLlxuICAgICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpYmUgdG8gcmVjZWl2ZSB0aGUgJ25leHQnIHJlc3VsdCBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5leHRSZXN1bHQoKTogT2JzZXJ2YWJsZTxUPlxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI19uZXh0UmVzdWx0JDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSAnbmV4dCcgcmVzdWx0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnRseSBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIEJpbmQgdG8gcmVjZWl2ZSB0aGUgJ25leHQnIHJlc3VsdCB2YWx1ZSBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5leHRWYWx1ZSgpOiBUXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy4jX25leHRSZXN1bHQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdlYXRoZXIgdGhpcyBpbnN0YW5jZSBoYXMgZXZlciByZWNlaXZlZCBhIHJlc3VsdFxuICAgICAqIG90aGVyIHRoYW4gdGhlIGBBY3Rpb25PYnNlcnZlci5fZGVmYXVsdFJlc3VsdGAgZnJvbSBhbiBhY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBuZXh0UmVzdWx0QXZhaWxhYmxlKCk6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubmV4dFZhbHVlICYmIHRoaXMubmV4dFZhbHVlICE9PSB0aGlzLl9kZWZhdWx0UmVzdWx0O1xuICAgIH1cblxuICAgIC8vZW5kcmVnaW9uXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgY29tbWFuZCBwYXR0ZXJuIHN0eWxlIGZ1bmN0aW9uIHVzZWQgdG8gb2JzZXJ2ZSB7QGxpbmsgTmV4dE9ic2VydmVyLm5leHR9IGV2ZW50cy5cbiAgICAgKiBAcGFyYW0ge0lFdmVudDxPYmplY3RNb2RlbD59IHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIHNldCBvblByb2dyZXNzKHZhbHVlOiBJRXZlbnQ8T2JqZWN0TW9kZWw+KVxuICAgIHtcbiAgICAgICAgdGhpcy4jX29uUHJvZ3Jlc3MgPSB0aGlzLiNfdGhpc0FyZyA/IHZhbHVlLmJpbmQodGhpcy4jX3RoaXNBcmcpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uIHVzZWQgdG8gb2JzZXJ2ZSB7QGxpbmsgRXJyb3JPYnNlcnZlci5lcnJvcn0gZXZlbnRzLlxuICAgICAqIE5vdGU6IFRoZSBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uIGlzIG5vdCBib3VuZCB0byB0aGlzIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7SUV2ZW50PE9iamVjdE1vZGVsPn0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG9uRXJyb3IodmFsdWU6IChlOiBFcnJvcikgPT4gdm9pZClcbiAgICB7XG4gICAgICAgIHRoaXMuI19vbkVycm9yID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGNvbW1hbmQgcGF0dGVybiBzdHlsZSBmdW5jdGlvbiB1c2VkIHRvIG9ic2VydmUge0BsaW5rIENvbXBsZXRpb25PYnNlcnZlci5jb21wbGV0ZX0gZXZlbnRzLlxuICAgICAqIEBwYXJhbSB7SUV2ZW50PE9iamVjdE1vZGVsPn0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG9uQ29tcGxldGUodmFsdWU6IElFdmVudDxPYmplY3RNb2RlbD4pXG4gICAge1xuICAgICAgICB0aGlzLiNfb25Db21wbGV0ZSA9IHRoaXMuI190aGlzQXJnID8gdmFsdWUuYmluZCh0aGlzLiNfdGhpc0FyZykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvL2VuZHJlZ2lvblxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX3RoaXNBcmcgSWYgcHJvdmlkZWQsIGFsbCBvYnNlcnZlciBmdW5jdGlvbnMgYXJlIGludm9rZWQgb24gZXhjZXB0IHRoZSBlcnJvciBvYnNlcnZlci5cbiAgICAgKiBAcGFyYW0gX2RlZmF1bHRSZXN1bHQgaWYgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIGZvciB0aGVcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoX3RoaXNBcmc/OiBPYmplY3RNb2RlbCwgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFJlc3VsdD86IFQpXG4gICAge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLiNfdGhpc0FyZyAgICAgICA9IF90aGlzQXJnIHx8IHRoaXM7XG4gICAgICAgIHRoaXMuI19uZXh0UmVzdWx0ICAgID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihfZGVmYXVsdFJlc3VsdCEpO1xuICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdCQgICA9IHRoaXMuI19uZXh0UmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLiNfYWN0aW9uUmVzdWx0ICA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4oX2RlZmF1bHRSZXN1bHQhKTtcbiAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdCQgPSB0aGlzLiNfYWN0aW9uUmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ic2VydmVzIGFjdGlvbnMgYnkgYWRkaXRpb25hbGx5IHVzaW5nIGEgcHJvdmlkZWQgbmV4dCBvYnNlcnZlciBmdW5jdGlvbiBvciBgUGFydGlhbEFjdGlvbk9ic2VydmVyYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uXG4gICAgICogQHBhcmFtIG9ic2VydmVyXG4gICAgICovXG4gICAgcHVibGljIG9ic2VydmU8VFNlbmRlciBleHRlbmRzIE9iamVjdE1vZGVsLCBURXZlbnRBcmdzIGV4dGVuZHMgRXZlbnRBcmdzPihcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICAgICAgICBvYnNlcnZlcj86IElFdmVudDxUU2VuZGVyLCBURXZlbnRBcmdzPiB8IElQYXJ0aWFsQWN0aW9uT2JzZXJ2ZXI8VCwgVEV2ZW50QXJncz4pOiBPYnNlcnZhYmxlPFQ+XG4gICAge1xuICAgICAgICBsZXQgb2JzZXJ2YWJsZVJlc3VsdCA9IHt9IGFzIFBhcnRpYWxPYnNlcnZlcjxUPjtcbiAgICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ICAgIDogKHJlc3VsdDogVCk6IHZvaWQgPT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX25leHRSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuYmluZCh0aGlzLiNfdGhpc0FyZykodGhpcy4jX3RoaXNBcmcgYXMgVFNlbmRlciwgRXZlbnRBcmdzLmVtcHR5IGFzIFRFdmVudEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCk6IHZvaWQgPT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC5uZXh0KHRoaXMuI19uZXh0UmVzdWx0LmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNfb25Qcm9ncmVzcyAmJiBvYnNlcnZlci5pbml0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNfb25Qcm9ncmVzcyh0aGlzLiNfdGhpc0FyZywgb2JzZXJ2ZXIuaW5pdCgpKTtcblxuICAgICAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQuZXJyb3IgPSAoZTogRXJyb3IpOiB2b2lkID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jX29uRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNfb25FcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5uZXh0ID0gKHJlc3VsdDogVCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICAgICAgKG9ic2VydmFibGVSZXN1bHQgYXMgYW55KS5lcnJvcihyZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jX25leHRSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jX29uUHJvZ3Jlc3MgJiYgb2JzZXJ2ZXIubmV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI19vblByb2dyZXNzKHRoaXMuI190aGlzQXJnLCBvYnNlcnZlci5uZXh0KHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0LmNvbXBsZXRlID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI19hY3Rpb25SZXN1bHQubmV4dCh0aGlzLiNfbmV4dFJlc3VsdC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI19vbkNvbXBsZXRlICYmIG9ic2VydmVyLmNvbXBsZXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX29uQ29tcGxldGUodGhpcy4jX3RoaXNBcmcsIG9ic2VydmVyLmNvbXBsZXRlKCkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuI19hY3Rpb25PYnNlcnZhYmxlID0gYWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgKHRoaXMuI19vbkVycm9yIHx8IGNvbnNvbGUuZXJyb3IpKGV4Y2VwdGlvbiBhcyBFcnJvcik7XG4gICAgICAgICAgICB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZSA9IHRocm93RXJyb3IoZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnNlcnZlcilcbiAgICAgICAgICAgIHRoaXMuI19hY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2YWJsZVJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI19hY3Rpb25PYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKTogdm9pZFxuICAgIHtcbiAgICAgICAgdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbiAmJiAhdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbi5jbG9zZWQgJiYgdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdC5uZXh0KHRoaXMuX2RlZmF1bHRSZXN1bHQhKTtcbiAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC5uZXh0KHRoaXMuX2RlZmF1bHRSZXN1bHQhKTtcbiAgICB9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBBY3Rpb25PYnNlcnZlcjxUPik6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiBzdXBlci5lcXVhbHMob3RoZXIpICYmIHRoaXMuI19hY3Rpb25SZXN1bHQgPT09IG90aGVyLiNfYWN0aW9uUmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIC8vdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWZsYWctYXJnc1xuICAgIHB1YmxpYyBkaXNwb3NlKGRpc3Bvc2luZz86IGJvb2xlYW4pOiB2b2lkXG4gICAge1xuICAgICAgICBpZiAoZGlzcG9zaW5nICYmICF0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoZGlzcG9zaW5nKTtcbiAgICB9XG59XG4iXX0=