UNPKG

@awesome-nodes/mvvm

Version:

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

212 lines (163 loc) 24.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ActionObserver = void 0; var _object = require("@awesome-nodes/object"); var _Disposable = require("./Disposable"); var _rxjs = require("rxjs"); 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; } 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"); class ActionObserver extends _Disposable.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 _rxjs.BehaviorSubject(_defaultResult); _classPrivateFieldLooseBase(this, _nextResult$)[_nextResult$] = _classPrivateFieldLooseBase(this, _nextResult)[_nextResult].asObservable(); _classPrivateFieldLooseBase(this, _actionResult)[_actionResult] = new _rxjs.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], _object.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] = (0, _rxjs.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); } } exports.ActionObserver = ActionObserver; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tdnZtL21vZGVsL0FjdGlvbk9ic2VydmVyLnRzIl0sIm5hbWVzIjpbIkFjdGlvbk9ic2VydmVyIiwiRGlzcG9zYWJsZSIsImFjdGlvbiIsImFjdGlvblJlc3VsdCIsImFjdGlvblJlc3VsdFZhbHVlIiwiZ2V0VmFsdWUiLCJhY3Rpb25SZXN1bHRBdmFpbGFibGUiLCJfZGVmYXVsdFJlc3VsdCIsIm5leHRSZXN1bHQiLCJuZXh0VmFsdWUiLCJuZXh0UmVzdWx0QXZhaWxhYmxlIiwib25Qcm9ncmVzcyIsInZhbHVlIiwiYmluZCIsIm9uRXJyb3IiLCJvbkNvbXBsZXRlIiwiY29uc3RydWN0b3IiLCJfdGhpc0FyZyIsIkJlaGF2aW9yU3ViamVjdCIsImFzT2JzZXJ2YWJsZSIsIm9ic2VydmUiLCJvYnNlcnZlciIsIm9ic2VydmFibGVSZXN1bHQiLCJuZXh0IiwicmVzdWx0IiwiRXZlbnRBcmdzIiwiZW1wdHkiLCJjb21wbGV0ZSIsImluaXQiLCJlcnJvciIsImUiLCJjb25zb2xlIiwiRXJyb3IiLCJleGNlcHRpb24iLCJzdWJzY3JpYmUiLCJjYW5jZWwiLCJjbG9zZWQiLCJ1bnN1YnNjcmliZSIsInJlc2V0IiwiZXF1YWxzIiwib3RoZXIiLCJkaXNwb3NlIiwiZGlzcG9zaW5nIiwiaXNEaXNwb3NlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJPLE1BQU1BLGNBQU4sU0FBZ0NDLHNCQUFoQyxDQUNQO0FBd0JxQixNQUFOQyxNQUFNLEdBQ2pCO0FBQ0ksdUNBQU8sSUFBUDtBQUNIOztBQU1zQixNQUFaQyxZQUFZLEdBQ3ZCO0FBQ0ksdUNBQU8sSUFBUDtBQUNIOztBQU0yQixNQUFqQkMsaUJBQWlCLEdBQzVCO0FBQ0ksV0FBTyxnRUFBb0JDLFFBQXBCLEVBQVA7QUFDSDs7QUFNK0IsTUFBckJDLHFCQUFxQixHQUNoQztBQUNJLFdBQU8sQ0FBQyxDQUFDLEtB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T0FBTyxDQUFDQyxTQUFELEVBQ2Q7QUFDSSxRQUFJQSxTQUFTLElBQUksQ0FBQyxLQUFLQyxVQUF2QixFQUFtQztBQUMvQixXQUFLUixNQUFMOztBQUNBLGtFQUFrQkUsV0FBbEI7O0FBQ0Esc0VBQW9CQSxXQUFwQjtBQUNIOztBQUNELFVBQU1JLE9BQU4sQ0FBY0MsU0FBZDtBQUNIOztBQXpPTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50QXJncywgSUV2ZW50IH0gZnJvbSAnQGF3ZXNvbWUtbm9kZXMvb2JqZWN0JztcbmltcG9ydCB7IERpc3Bvc2FibGUgfSBmcm9tICdtdnZtL21vZGVsL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgT2JqZWN0TW9kZWwgfSBmcm9tICdtdnZtL21vZGVsL09iamVjdE1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUGFydGlhbE9ic2VydmVyLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnc2ltcGx5dHlwZWQnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnRpYWxBY3Rpb25PYnNlcnZlcjxULCBURXZlbnRBcmdzIGV4dGVuZHMgRXZlbnRBcmdzID0gRXZlbnRBcmdzPlxue1xuICAgIGluaXQ/OiAoKSA9PiBURXZlbnRBcmdzO1xuICAgIG5leHQ/OiAodmFsdWU6IFQpID0+IFRFdmVudEFyZ3M7XG4gICAgZXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAgIGNvbXBsZXRlPzogKCkgPT4gVEV2ZW50QXJncztcbn1cblxuLyoqXG4gKiBBIG9iamVjdCBtb2RlbCB1dGlsaXR5IGZvciB3YXRjaGluZyBvYnNlcnZhYmxlcyB1c2luZyBjb21tYW5kIHBhdHRlcm4gc3R5bGUgaGFuZGxlciBmdW5jdGlvbnNcbiAqIHdoaWNoIGFyZSBib3VuZCB0byB0aGUgcHJvdmlkZWQge0BzZWUgQWN0aW9uT2JzZXJ2ZXIuI190aGlzQXJnfSBhcmd1bWVudC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25PYnNlcnZlcjxUPiBleHRlbmRzIERpc3Bvc2FibGVcbntcbiAgICAvL3JlZ2lvbiBJbnN0YW5jZSBNZW1iZXJzXG5cbiAgICByZWFkb25seSAjX3RoaXNBcmc6IE9iamVjdE1vZGVsO1xuICAgICNfYWN0aW9uT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8VD47XG4gICAgI19hY3Rpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcmVhZG9ubHkgI19uZXh0UmVzdWx0OiBCZWhhdmlvclN1YmplY3Q8VD47XG4gICAgcmVhZG9ubHkgI19uZXh0UmVzdWx0JDogT2JzZXJ2YWJsZTxUPjtcbiAgICByZWFkb25seSAjX2FjdGlvblJlc3VsdDogQmVoYXZpb3JTdWJqZWN0PFQ+O1xuICAgIHJlYWRvbmx5ICNfYWN0aW9uUmVzdWx0JDogT2JzZXJ2YWJsZTxUPjtcbiAgICAjX29uUHJvZ3Jlc3M/OiBJRXZlbnQ8T2JqZWN0TW9kZWw+O1xuICAgICNfb25FcnJvcj86IChlOiBFcnJvcikgPT4gdm9pZDtcbiAgICAjX29uQ29tcGxldGU/OiBJRXZlbnQ8T2JqZWN0TW9kZWw+O1xuXG4gICAgLy9lbmRyZWdpb25cblxuICAgIC8vcmVnaW9uIFB1YmxpYyBQcm9wZXJ0aWVzXG5cbiAgICAvL3JlZ2lvbiBBY3Rpb24gT2JzZXJ2YWJsZVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb2JzZXJ2YWJsZSByZXR1cm5lZCBmcm9tIHRoZSBsYXN0IG9ic2VydmVkIGFjdGlvbi5cbiAgICAgKiBAZGVzY3JpcHRpb24gU3Vic2NyaWJlIHRvIG9ic2VydmUgdGhlIGxhdGVzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBhY3Rpb24oKTogTnVsbGFibGU8T2JzZXJ2YWJsZTxUPj5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0ICduZXh0JyByZXN1bHQgZnJvbSB0aGUgbGFzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIFN1YnNjcmliZSB0byByZWNlaXZlIHRoZSBmaW5hbCAnbmV4dCcgcmVzdWx0IG9mIGFueSBjYWxsZWQgYWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWN0aW9uUmVzdWx0KCk6IE9ic2VydmFibGU8VD5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uUmVzdWx0JDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0ICduZXh0JyByZXN1bHQgdmFsdWUgZnJvbSB0aGUgbGFzdCBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIEJpbmQgdG8gcmVjZWl2ZSB0aGUgZmluYWwgJ25leHQnIHJlc3VsdCB2YWx1ZSBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFjdGlvblJlc3VsdFZhbHVlKCk6IFRcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLiNfYWN0aW9uUmVzdWx0LmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3ZWF0aGVyIHRoaXMgaW5zdGFuY2UgaGFzIGV2ZXIgcmVjZWl2ZWQgYSByZXN1bHRcbiAgICAgKiBvdGhlciB0aGFuIHRoZSBgQWN0aW9uT2JzZXJ2ZXIuX2RlZmF1bHRSZXN1bHRgIGZyb20gYW4gYWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWN0aW9uUmVzdWx0QXZhaWxhYmxlKCk6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYWN0aW9uUmVzdWx0VmFsdWUgJiYgdGhpcy5hY3Rpb25SZXN1bHRWYWx1ZSAhPT0gdGhpcy5fZGVmYXVsdFJlc3VsdDtcbiAgICB9XG5cbiAgICAvL2VuZHJlZ2lvblxuXG4gICAgLy9yZWdpb24gTmV4dCBSZXN1bHQgT2JzZXJ2YWJsZVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgJ25leHQnIHJlc3VsdCBmcm9tIHRoZSBjdXJyZW50bHkgb2JzZXJ2ZWQgYWN0aW9uLlxuICAgICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpYmUgdG8gcmVjZWl2ZSB0aGUgJ25leHQnIHJlc3VsdCBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5leHRSZXN1bHQoKTogT2JzZXJ2YWJsZTxUPlxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI19uZXh0UmVzdWx0JDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSAnbmV4dCcgcmVzdWx0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnRseSBvYnNlcnZlZCBhY3Rpb24uXG4gICAgICogQGRlc2NyaXB0aW9uIEJpbmQgdG8gcmVjZWl2ZSB0aGUgJ25leHQnIHJlc3VsdCB2YWx1ZSBvZiBhbnkgY2FsbGVkIGFjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5leHRWYWx1ZSgpOiBUXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy4jX25leHRSZXN1bHQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdlYXRoZXIgdGhpcyBpbnN0YW5jZSBoYXMgZXZlciByZWNlaXZlZCBhIHJlc3VsdFxuICAgICAqIG90aGVyIHRoYW4gdGhlIGBBY3Rpb25PYnNlcnZlci5fZGVmYXVsdFJlc3VsdGAgZnJvbSBhbiBhY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBuZXh0UmVzdWx0QXZhaWxhYmxlKCk6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubmV4dFZhbHVlICYmIHRoaXMubmV4dFZhbHVlICE9PSB0aGlzLl9kZWZhdWx0UmVzdWx0O1xuICAgIH1cblxuICAgIC8vZW5kcmVnaW9uXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgY29tbWFuZCBwYXR0ZXJuIHN0eWxlIGZ1bmN0aW9uIHVzZWQgdG8gb2JzZXJ2ZSB7QGxpbmsgTmV4dE9ic2VydmVyLm5leHR9IGV2ZW50cy5cbiAgICAgKiBAcGFyYW0ge0lFdmVudDxPYmplY3RNb2RlbD59IHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIHNldCBvblByb2dyZXNzKHZhbHVlOiBJRXZlbnQ8T2JqZWN0TW9kZWw+KVxuICAgIHtcbiAgICAgICAgdGhpcy4jX29uUHJvZ3Jlc3MgPSB0aGlzLiNfdGhpc0FyZyA/IHZhbHVlLmJpbmQodGhpcy4jX3RoaXNBcmcpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uIHVzZWQgdG8gb2JzZXJ2ZSB7QGxpbmsgRXJyb3JPYnNlcnZlci5lcnJvcn0gZXZlbnRzLlxuICAgICAqIE5vdGU6IFRoZSBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uIGlzIG5vdCBib3VuZCB0byB0aGlzIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7SUV2ZW50PE9iamVjdE1vZGVsPn0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG9uRXJyb3IodmFsdWU6IChlOiBFcnJvcikgPT4gdm9pZClcbiAgICB7XG4gICAgICAgIHRoaXMuI19vbkVycm9yID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGNvbW1hbmQgcGF0dGVybiBzdHlsZSBmdW5jdGlvbiB1c2VkIHRvIG9ic2VydmUge0BsaW5rIENvbXBsZXRpb25PYnNlcnZlci5jb21wbGV0ZX0gZXZlbnRzLlxuICAgICAqIEBwYXJhbSB7SUV2ZW50PE9iamVjdE1vZGVsPn0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG9uQ29tcGxldGUodmFsdWU6IElFdmVudDxPYmplY3RNb2RlbD4pXG4gICAge1xuICAgICAgICB0aGlzLiNfb25Db21wbGV0ZSA9IHRoaXMuI190aGlzQXJnID8gdmFsdWUuYmluZCh0aGlzLiNfdGhpc0FyZykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvL2VuZHJlZ2lvblxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX3RoaXNBcmcgSWYgcHJvdmlkZWQsIGFsbCBvYnNlcnZlciBmdW5jdGlvbnMgYXJlIGludm9rZWQgb24gZXhjZXB0IHRoZSBlcnJvciBvYnNlcnZlci5cbiAgICAgKiBAcGFyYW0gX2RlZmF1bHRSZXN1bHQgaWYgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIGZvciB0aGVcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoX3RoaXNBcmc/OiBPYmplY3RNb2RlbCwgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFJlc3VsdD86IFQpXG4gICAge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLiNfdGhpc0FyZyAgICAgICA9IF90aGlzQXJnIHx8IHRoaXM7XG4gICAgICAgIHRoaXMuI19uZXh0UmVzdWx0ICAgID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihfZGVmYXVsdFJlc3VsdCEpO1xuICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdCQgICA9IHRoaXMuI19uZXh0UmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLiNfYWN0aW9uUmVzdWx0ICA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4oX2RlZmF1bHRSZXN1bHQhKTtcbiAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdCQgPSB0aGlzLiNfYWN0aW9uUmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ic2VydmVzIGFjdGlvbnMgYnkgYWRkaXRpb25hbGx5IHVzaW5nIGEgcHJvdmlkZWQgbmV4dCBvYnNlcnZlciBmdW5jdGlvbiBvciBgUGFydGlhbEFjdGlvbk9ic2VydmVyYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uXG4gICAgICogQHBhcmFtIG9ic2VydmVyXG4gICAgICovXG4gICAgcHVibGljIG9ic2VydmU8VFNlbmRlciBleHRlbmRzIE9iamVjdE1vZGVsLCBURXZlbnRBcmdzIGV4dGVuZHMgRXZlbnRBcmdzPihcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICAgICAgICBvYnNlcnZlcj86IElFdmVudDxUU2VuZGVyLCBURXZlbnRBcmdzPiB8IElQYXJ0aWFsQWN0aW9uT2JzZXJ2ZXI8VCwgVEV2ZW50QXJncz4pOiBPYnNlcnZhYmxlPFQ+XG4gICAge1xuICAgICAgICBsZXQgb2JzZXJ2YWJsZVJlc3VsdCA9IHt9IGFzIFBhcnRpYWxPYnNlcnZlcjxUPjtcbiAgICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ICAgIDogKHJlc3VsdDogVCk6IHZvaWQgPT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX25leHRSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuYmluZCh0aGlzLiNfdGhpc0FyZykodGhpcy4jX3RoaXNBcmcgYXMgVFNlbmRlciwgRXZlbnRBcmdzLmVtcHR5IGFzIFRFdmVudEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCk6IHZvaWQgPT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC5uZXh0KHRoaXMuI19uZXh0UmVzdWx0LmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNfb25Qcm9ncmVzcyAmJiBvYnNlcnZlci5pbml0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNfb25Qcm9ncmVzcyh0aGlzLiNfdGhpc0FyZywgb2JzZXJ2ZXIuaW5pdCgpKTtcblxuICAgICAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQuZXJyb3IgPSAoZTogRXJyb3IpOiB2b2lkID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jX29uRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNfb25FcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5uZXh0ID0gKHJlc3VsdDogVCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICAgICAgKG9ic2VydmFibGVSZXN1bHQgYXMgYW55KS5lcnJvcihyZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jX25leHRSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jX29uUHJvZ3Jlc3MgJiYgb2JzZXJ2ZXIubmV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI19vblByb2dyZXNzKHRoaXMuI190aGlzQXJnLCBvYnNlcnZlci5uZXh0KHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0LmNvbXBsZXRlID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI19hY3Rpb25SZXN1bHQubmV4dCh0aGlzLiNfbmV4dFJlc3VsdC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI19vbkNvbXBsZXRlICYmIG9ic2VydmVyLmNvbXBsZXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jX29uQ29tcGxldGUodGhpcy4jX3RoaXNBcmcsIG9ic2VydmVyLmNvbXBsZXRlKCkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuI19hY3Rpb25PYnNlcnZhYmxlID0gYWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgKHRoaXMuI19vbkVycm9yIHx8IGNvbnNvbGUuZXJyb3IpKGV4Y2VwdGlvbiBhcyBFcnJvcik7XG4gICAgICAgICAgICB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZSA9IHRocm93RXJyb3IoZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnNlcnZlcilcbiAgICAgICAgICAgIHRoaXMuI19hY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLiNfYWN0aW9uT2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2YWJsZVJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI19hY3Rpb25PYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKTogdm9pZFxuICAgIHtcbiAgICAgICAgdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbiAmJiAhdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbi5jbG9zZWQgJiYgdGhpcy4jX2FjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdC5uZXh0KHRoaXMuX2RlZmF1bHRSZXN1bHQhKTtcbiAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC5uZXh0KHRoaXMuX2RlZmF1bHRSZXN1bHQhKTtcbiAgICB9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBBY3Rpb25PYnNlcnZlcjxUPik6IGJvb2xlYW5cbiAgICB7XG4gICAgICAgIHJldHVybiBzdXBlci5lcXVhbHMob3RoZXIpICYmIHRoaXMuI19hY3Rpb25SZXN1bHQgPT09IG90aGVyLiNfYWN0aW9uUmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIC8vdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWZsYWctYXJnc1xuICAgIHB1YmxpYyBkaXNwb3NlKGRpc3Bvc2luZz86IGJvb2xlYW4pOiB2b2lkXG4gICAge1xuICAgICAgICBpZiAoZGlzcG9zaW5nICYmICF0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLiNfbmV4dFJlc3VsdC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy4jX2FjdGlvblJlc3VsdC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoZGlzcG9zaW5nKTtcbiAgICB9XG59XG4iXX0=