@kephas/ngx-core
Version:
Provides integration capabilities with Angular 13+.
80 lines • 9.6 kB
JavaScript
var _MessageQuery_loading, _MessageQuery_lastError;
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
import { BehaviorSubject, of } from 'rxjs';
import { catchError, finalize, map } from 'rxjs/operators';
/**
* Observable based on a message query.
*
* @export
* @abstract
* @class MessageQuery
* @extends {BehaviorSubject<TValue>}
* @template TMessage
* @template TResponseMessage
* @template TValue
*/
export class MessageQuery extends BehaviorSubject {
/**
* Creates an instance of MessageQuery.
* @param {MessageProcessorClient} processor
* @param {(r: TResponseMessage, state?: MessageState<TMessage>) => TValue} [resultMap]
* @param {(m: TMessage, state?: MessageState<TMessage>) => TMessage} [messageMap]
* @param {TValue} [emptyResult={} as TValue]
* @memberof MessageQuery
*/
constructor(processor, resultMap, messageMap, emptyResult = {}) {
super(null);
this.processor = processor;
this.resultMap = resultMap;
this.messageMap = messageMap;
this.emptyResult = emptyResult;
_MessageQuery_loading.set(this, false);
_MessageQuery_lastError.set(this, void 0);
}
/**
* Gets a value indicating whether the query is executing.
*
* @readonly
* @type {boolean}
* @memberof CommandQuery
*/
get loading() {
return __classPrivateFieldGet(this, _MessageQuery_loading, "f");
}
/**
* Gets the last error executing this query.
*
* @readonly
* @type {*}
* @memberof CommandQuery
*/
get lastError() {
return __classPrivateFieldGet(this, _MessageQuery_lastError, "f");
}
execute(state) {
// no need to unsubscribe, as this is an auto-complete observable.
this.fetch(state?.message, state)
.subscribe(x => super.next(x));
}
fetch(message, state) {
__classPrivateFieldSet(this, _MessageQuery_loading, true, "f");
message = this.mapMessage(message, state);
return this.processor
.process(message)
.pipe(map(response => {
__classPrivateFieldSet(this, _MessageQuery_lastError, undefined, "f");
return this.mapResponse(response, state);
}), finalize(() => __classPrivateFieldSet(this, _MessageQuery_loading, false, "f")), catchError(err => {
__classPrivateFieldSet(this, _MessageQuery_lastError, err, "f");
return of(this.emptyResult);
}));
}
mapResponse(response, state) {
return this.resultMap ? this.resultMap(response, state) : response;
}
mapMessage(message, state) {
return this.messageMap ? this.messageMap(message, state) : message;
}
}
_MessageQuery_loading = new WeakMap(), _MessageQuery_lastError = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZVF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2VwaGFzL25neC1jb3JlL3NyYy9saWIvcXVlcmllcy9tZXNzYWdlUXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsZUFBZSxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFRaEU7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBZ0IsWUFBeUUsU0FBUSxlQUF1QjtJQUk1SDs7Ozs7OztPQU9HO0lBQ0gsWUFDcUIsU0FBaUMsRUFDMUMsU0FBMkUsRUFDM0UsVUFBc0UsRUFDdEUsY0FBc0IsRUFBWTtRQUM1QyxLQUFLLENBQUMsSUFBSyxDQUFDLENBQUM7UUFKTSxjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUMxQyxjQUFTLEdBQVQsU0FBUyxDQUFrRTtRQUMzRSxlQUFVLEdBQVYsVUFBVSxDQUE0RDtRQUN0RSxnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFmOUMsZ0NBQVcsS0FBSyxFQUFDO1FBQ2pCLDBDQUFnQjtJQWdCaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sdUJBQUEsSUFBSSw2QkFBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLHVCQUFBLElBQUksK0JBQVcsQ0FBQztJQUN6QixDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQThCO1FBQzNDLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRVMsS0FBSyxDQUFDLE9BQVksRUFBRSxLQUE4QjtRQUMxRCx1QkFBQSxJQUFJLHlCQUFZLElBQUksTUFBQSxDQUFDO1FBRXJCLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxQyxPQUFPLElBQUksQ0FBQyxTQUFTO2FBQ2xCLE9BQU8sQ0FBQyxPQUFPLENBQUM7YUFDaEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLHVCQUFBLElBQUksMkJBQWMsU0FBUyxNQUFBLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUkseUJBQVksS0FBSyxNQUFBLENBQUMsRUFDckMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsdUJBQUEsSUFBSSwyQkFBYyxHQUFHLE1BQUEsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFUyxXQUFXLENBQUMsUUFBMEIsRUFBRSxLQUE4QjtRQUM5RSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUE2QixDQUFDO0lBQzFGLENBQUM7SUFFUyxVQUFVLENBQUMsT0FBaUIsRUFBRSxLQUE4QjtRQUNwRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWVzc2FnZVByb2Nlc3NvckNsaWVudCwgUmVzcG9uc2VNZXNzYWdlIH0gZnJvbSAnQGtlcGhhcy9tZXNzYWdpbmcnO1xyXG5pbXBvcnQgeyBFeHBhbmRvLCBUeXBlIH0gZnJvbSAnQGtlcGhhcy9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVN0YXRlPFRNZXNzYWdlPiBleHRlbmRzIEV4cGFuZG8ge1xyXG4gIG1lc3NhZ2U/OiBUTWVzc2FnZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE9ic2VydmFibGUgYmFzZWQgb24gYSBtZXNzYWdlIHF1ZXJ5LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBhYnN0cmFjdFxyXG4gKiBAY2xhc3MgTWVzc2FnZVF1ZXJ5XHJcbiAqIEBleHRlbmRzIHtCZWhhdmlvclN1YmplY3Q8VFZhbHVlPn1cclxuICogQHRlbXBsYXRlIFRNZXNzYWdlXHJcbiAqIEB0ZW1wbGF0ZSBUUmVzcG9uc2VNZXNzYWdlXHJcbiAqIEB0ZW1wbGF0ZSBUVmFsdWVcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNZXNzYWdlUXVlcnk8VE1lc3NhZ2UsIFRSZXNwb25zZU1lc3NhZ2UgZXh0ZW5kcyBSZXNwb25zZU1lc3NhZ2UsIFRWYWx1ZT4gZXh0ZW5kcyBCZWhhdmlvclN1YmplY3Q8VFZhbHVlPiB7XHJcbiAgI2xvYWRpbmcgPSBmYWxzZTtcclxuICAjbGFzdEVycm9yOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTWVzc2FnZVF1ZXJ5LlxyXG4gICAqIEBwYXJhbSB7TWVzc2FnZVByb2Nlc3NvckNsaWVudH0gcHJvY2Vzc29yXHJcbiAgICogQHBhcmFtIHsocjogVFJlc3BvbnNlTWVzc2FnZSwgc3RhdGU/OiBNZXNzYWdlU3RhdGU8VE1lc3NhZ2U+KSA9PiBUVmFsdWV9IFtyZXN1bHRNYXBdXHJcbiAgICogQHBhcmFtIHsobTogVE1lc3NhZ2UsIHN0YXRlPzogTWVzc2FnZVN0YXRlPFRNZXNzYWdlPikgPT4gVE1lc3NhZ2V9IFttZXNzYWdlTWFwXVxyXG4gICAqIEBwYXJhbSB7VFZhbHVlfSBbZW1wdHlSZXN1bHQ9e30gYXMgVFZhbHVlXVxyXG4gICAqIEBtZW1iZXJvZiBNZXNzYWdlUXVlcnlcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBwcm9jZXNzb3I6IE1lc3NhZ2VQcm9jZXNzb3JDbGllbnQsXHJcbiAgICBwcm90ZWN0ZWQgcmVzdWx0TWFwPzogKHI6IFRSZXNwb25zZU1lc3NhZ2UsIHN0YXRlPzogTWVzc2FnZVN0YXRlPFRNZXNzYWdlPikgPT4gVFZhbHVlLFxyXG4gICAgcHJvdGVjdGVkIG1lc3NhZ2VNYXA/OiAobTogVE1lc3NhZ2UsIHN0YXRlPzogTWVzc2FnZVN0YXRlPFRNZXNzYWdlPikgPT4gVE1lc3NhZ2UsXHJcbiAgICBwcm90ZWN0ZWQgZW1wdHlSZXN1bHQ6IFRWYWx1ZSA9IHt9IGFzIFRWYWx1ZSkge1xyXG4gICAgc3VwZXIobnVsbCEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgcXVlcnkgaXMgZXhlY3V0aW5nLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIENvbW1hbmRRdWVyeVxyXG4gICAqL1xyXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI2xvYWRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsYXN0IGVycm9yIGV4ZWN1dGluZyB0aGlzIHF1ZXJ5LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUgeyp9XHJcbiAgICogQG1lbWJlcm9mIENvbW1hbmRRdWVyeVxyXG4gICAqL1xyXG4gIGdldCBsYXN0RXJyb3IoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLiNsYXN0RXJyb3I7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhlY3V0ZShzdGF0ZT86IE1lc3NhZ2VTdGF0ZTxUTWVzc2FnZT4pOiB2b2lkIHtcclxuICAgIC8vIG5vIG5lZWQgdG8gdW5zdWJzY3JpYmUsIGFzIHRoaXMgaXMgYW4gYXV0by1jb21wbGV0ZSBvYnNlcnZhYmxlLlxyXG4gICAgdGhpcy5mZXRjaChzdGF0ZT8ubWVzc2FnZSwgc3RhdGUpXHJcbiAgICAgIC5zdWJzY3JpYmUoeCA9PiBzdXBlci5uZXh0KHgpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmZXRjaChtZXNzYWdlOiBhbnksIHN0YXRlPzogTWVzc2FnZVN0YXRlPFRNZXNzYWdlPik6IE9ic2VydmFibGU8VFZhbHVlPiB7XHJcbiAgICB0aGlzLiNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBtZXNzYWdlID0gdGhpcy5tYXBNZXNzYWdlKG1lc3NhZ2UsIHN0YXRlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzb3JcclxuICAgICAgLnByb2Nlc3MobWVzc2FnZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHRoaXMuI2xhc3RFcnJvciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHJldHVybiB0aGlzLm1hcFJlc3BvbnNlKHJlc3BvbnNlIGFzIHVua25vd24gYXMgVFJlc3BvbnNlTWVzc2FnZSwgc3RhdGUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuI2xvYWRpbmcgPSBmYWxzZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jbGFzdEVycm9yID0gZXJyO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHRoaXMuZW1wdHlSZXN1bHQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFwUmVzcG9uc2UocmVzcG9uc2U6IFRSZXNwb25zZU1lc3NhZ2UsIHN0YXRlPzogTWVzc2FnZVN0YXRlPFRNZXNzYWdlPik6IFRWYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRNYXAgPyB0aGlzLnJlc3VsdE1hcChyZXNwb25zZSwgc3RhdGUpIDogcmVzcG9uc2UgYXMgdW5rbm93biBhcyBUVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFwTWVzc2FnZShtZXNzYWdlOiBUTWVzc2FnZSwgc3RhdGU/OiBNZXNzYWdlU3RhdGU8VE1lc3NhZ2U+KTogVE1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZU1hcCA/IHRoaXMubWVzc2FnZU1hcChtZXNzYWdlLCBzdGF0ZSkgOiBtZXNzYWdlO1xyXG4gIH1cclxufVxyXG4iXX0=