@awesome-nodes/mvvm
Version:
Application development framework using the *model* *view* *view-model* design pattern.
201 lines (157 loc) • 24.8 kB
JavaScript
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=