@kephas/ngx-core
Version:
Provides integration capabilities with Angular 13+.
89 lines • 10.4 kB
JavaScript
var _CommandQuery_loading, _CommandQuery_lastError;
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
import { BehaviorSubject, of } from 'rxjs';
import { catchError, finalize, map } from 'rxjs/operators';
/**
* Observable based on a command query.
*
* @export
* @abstract
* @class CommandQuery
* @extends {BehaviorSubject<TValue>}
* @template TArgs
* @template TResponseMessage
* @template TValue
*/
export class CommandQuery extends BehaviorSubject {
/**
* Creates an instance of CommandQuery.
* @param {CommandProcessorClient} processor
* @param {string} command
* @param {(r: TResponseMessage, state?: CommandState<TArgs>) => TValue} [resultMap]
* @param {(args?: TArgs, state?: CommandState<TArgs>) => TArgs} [argsMap]
* @param {TValue} [emptyResult={} as TValue]
* @memberof CommandQuery
*/
constructor(processor, command, resultMap, argsMap, emptyResult = {}) {
super(null);
this.processor = processor;
this.command = command;
this.resultMap = resultMap;
this.argsMap = argsMap;
this.emptyResult = emptyResult;
_CommandQuery_loading.set(this, false);
_CommandQuery_lastError.set(this, void 0);
this.args ?? (this.args = {});
}
/**
* Gets a value indicating whether the query is executing.
*
* @readonly
* @type {boolean}
* @memberof CommandQuery
*/
get loading() {
return __classPrivateFieldGet(this, _CommandQuery_loading, "f");
}
/**
* Gets the last error executing this query.
*
* @readonly
* @type {*}
* @memberof CommandQuery
*/
get lastError() {
return __classPrivateFieldGet(this, _CommandQuery_lastError, "f");
}
/**
* Executes the command asynchronously.
*
* @param {CommandState<TArgs>} [state]
* @memberof CommandQuery
*/
execute(state) {
// no need to unsubscribe, as this is an auto-complete observable.
this.fetch(state?.command ?? this.command, state?.args ?? this.args, state)
.subscribe(x => super.next(x));
}
fetch(command, args, state) {
__classPrivateFieldSet(this, _CommandQuery_loading, true, "f");
args = this.mapArgs(args, state);
return this.processor
.process(command, args)
.pipe(map(response => {
__classPrivateFieldSet(this, _CommandQuery_lastError, undefined, "f");
return this.mapResponse(response, state);
}), finalize(() => __classPrivateFieldSet(this, _CommandQuery_loading, false, "f")), catchError(err => {
__classPrivateFieldSet(this, _CommandQuery_lastError, err, "f");
return of(this.emptyResult);
}));
}
mapResponse(response, state) {
return this.resultMap ? this.resultMap(response, state) : response;
}
mapArgs(args, state) {
return this.argsMap ? this.argsMap(args, state) : args;
}
}
_CommandQuery_loading = new WeakMap(), _CommandQuery_lastError = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZFF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2VwaGFzL25neC1jb3JlL3NyYy9saWIvcXVlcmllcy9jb21tYW5kUXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsZUFBZSxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFTaEU7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBZ0IsWUFBOEMsU0FBUSxlQUF1QjtJQU1qRzs7Ozs7Ozs7T0FRRztJQUNILFlBQ3FCLFNBQWlDLEVBQzFDLE9BQWUsRUFDZixTQUF3RSxFQUN4RSxPQUE4RCxFQUM5RCxjQUFzQixFQUFZO1FBQzVDLEtBQUssQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUxNLGNBQVMsR0FBVCxTQUFTLENBQXdCO1FBQzFDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUErRDtRQUN4RSxZQUFPLEdBQVAsT0FBTyxDQUF1RDtRQUM5RCxnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFuQjlDLGdDQUFXLEtBQUssRUFBQztRQUNqQiwwQ0FBZ0I7UUFvQmQsSUFBSSxDQUFDLElBQUksS0FBVCxJQUFJLENBQUMsSUFBSSxHQUFLLEVBQVcsRUFBQztJQUM1QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyx1QkFBQSxJQUFJLDZCQUFTLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksU0FBUztRQUNYLE9BQU8sdUJBQUEsSUFBSSwrQkFBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxLQUEyQjtRQUN4QyxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSyxFQUFFLEtBQUssQ0FBQzthQUN6RSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVTLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBWSxFQUFFLEtBQTJCO1FBQ3hFLHVCQUFBLElBQUkseUJBQVksSUFBSSxNQUFBLENBQUM7UUFFckIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFLLENBQUM7YUFDdkIsSUFBSSxDQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLHVCQUFBLElBQUksMkJBQWMsU0FBUyxNQUFBLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUkseUJBQVksS0FBSyxNQUFBLENBQUMsRUFDckMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsdUJBQUEsSUFBSSwyQkFBYyxHQUFHLE1BQUEsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFUyxXQUFXLENBQUMsUUFBMEIsRUFBRSxLQUEyQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUE2QixDQUFDO0lBQzFGLENBQUM7SUFFUyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQTJCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tYW5kUHJvY2Vzc29yQ2xpZW50IH0gZnJvbSAnQGtlcGhhcy9jb21tYW5kcyc7XHJcbmltcG9ydCB7IEV4cGFuZG8gfSBmcm9tICdAa2VwaGFzL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kU3RhdGU8VEFyZ3M+IGV4dGVuZHMgRXhwYW5kbyB7XHJcbiAgY29tbWFuZD86IHN0cmluZztcclxuICBhcmdzPzogVEFyZ3M7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPYnNlcnZhYmxlIGJhc2VkIG9uIGEgY29tbWFuZCBxdWVyeS5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAYWJzdHJhY3RcclxuICogQGNsYXNzIENvbW1hbmRRdWVyeVxyXG4gKiBAZXh0ZW5kcyB7QmVoYXZpb3JTdWJqZWN0PFRWYWx1ZT59XHJcbiAqIEB0ZW1wbGF0ZSBUQXJnc1xyXG4gKiBAdGVtcGxhdGUgVFJlc3BvbnNlTWVzc2FnZVxyXG4gKiBAdGVtcGxhdGUgVFZhbHVlXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZFF1ZXJ5PFRBcmdzLCBUUmVzcG9uc2VNZXNzYWdlLCBUVmFsdWU+IGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PFRWYWx1ZT4ge1xyXG4gICNsb2FkaW5nID0gZmFsc2U7XHJcbiAgI2xhc3RFcnJvcjogYW55O1xyXG5cclxuICBwdWJsaWMgYXJncz86IFRBcmdzO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENvbW1hbmRRdWVyeS5cclxuICAgKiBAcGFyYW0ge0NvbW1hbmRQcm9jZXNzb3JDbGllbnR9IHByb2Nlc3NvclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXHJcbiAgICogQHBhcmFtIHsocjogVFJlc3BvbnNlTWVzc2FnZSwgc3RhdGU/OiBDb21tYW5kU3RhdGU8VEFyZ3M+KSA9PiBUVmFsdWV9IFtyZXN1bHRNYXBdXHJcbiAgICogQHBhcmFtIHsoYXJncz86IFRBcmdzLCBzdGF0ZT86IENvbW1hbmRTdGF0ZTxUQXJncz4pID0+IFRBcmdzfSBbYXJnc01hcF1cclxuICAgKiBAcGFyYW0ge1RWYWx1ZX0gW2VtcHR5UmVzdWx0PXt9IGFzIFRWYWx1ZV1cclxuICAgKiBAbWVtYmVyb2YgQ29tbWFuZFF1ZXJ5XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvY2Vzc29yOiBDb21tYW5kUHJvY2Vzc29yQ2xpZW50LFxyXG4gICAgcHJvdGVjdGVkIGNvbW1hbmQ6IHN0cmluZyxcclxuICAgIHByb3RlY3RlZCByZXN1bHRNYXA/OiAocjogVFJlc3BvbnNlTWVzc2FnZSwgc3RhdGU/OiBDb21tYW5kU3RhdGU8VEFyZ3M+KSA9PiBUVmFsdWUsXHJcbiAgICBwcm90ZWN0ZWQgYXJnc01hcD86IChhcmdzPzogVEFyZ3MsIHN0YXRlPzogQ29tbWFuZFN0YXRlPFRBcmdzPikgPT4gVEFyZ3MsXHJcbiAgICBwcm90ZWN0ZWQgZW1wdHlSZXN1bHQ6IFRWYWx1ZSA9IHt9IGFzIFRWYWx1ZSkge1xyXG4gICAgc3VwZXIobnVsbCEpO1xyXG4gICAgdGhpcy5hcmdzID8/PSB7fSBhcyBUQXJncztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHF1ZXJ5IGlzIGV4ZWN1dGluZy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBDb21tYW5kUXVlcnlcclxuICAgKi9cclxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLiNsb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGFzdCBlcnJvciBleGVjdXRpbmcgdGhpcyBxdWVyeS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBDb21tYW5kUXVlcnlcclxuICAgKi9cclxuICBnZXQgbGFzdEVycm9yKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy4jbGFzdEVycm9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NvbW1hbmRTdGF0ZTxUQXJncz59IFtzdGF0ZV1cclxuICAgKiBAbWVtYmVyb2YgQ29tbWFuZFF1ZXJ5XHJcbiAgICovXHJcbiAgcHVibGljIGV4ZWN1dGUoc3RhdGU/OiBDb21tYW5kU3RhdGU8VEFyZ3M+KTogdm9pZCB7XHJcbiAgICAvLyBubyBuZWVkIHRvIHVuc3Vic2NyaWJlLCBhcyB0aGlzIGlzIGFuIGF1dG8tY29tcGxldGUgb2JzZXJ2YWJsZS5cclxuICAgIHRoaXMuZmV0Y2goc3RhdGU/LmNvbW1hbmQgPz8gdGhpcy5jb21tYW5kLCBzdGF0ZT8uYXJncyA/PyB0aGlzLmFyZ3MhLCBzdGF0ZSlcclxuICAgICAgLnN1YnNjcmliZSh4ID0+IHN1cGVyLm5leHQoeCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZldGNoKGNvbW1hbmQ6IHN0cmluZywgYXJncz86IFRBcmdzLCBzdGF0ZT86IENvbW1hbmRTdGF0ZTxUQXJncz4pOiBPYnNlcnZhYmxlPFRWYWx1ZT4ge1xyXG4gICAgdGhpcy4jbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgYXJncyA9IHRoaXMubWFwQXJncyhhcmdzLCBzdGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc29yXHJcbiAgICAgIC5wcm9jZXNzKGNvbW1hbmQsIGFyZ3MhKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jbGFzdEVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwUmVzcG9uc2UocmVzcG9uc2UgYXMgdW5rbm93biBhcyBUUmVzcG9uc2VNZXNzYWdlLCBzdGF0ZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jbG9hZGluZyA9IGZhbHNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICB0aGlzLiNsYXN0RXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5lbXB0eVJlc3VsdCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYXBSZXNwb25zZShyZXNwb25zZTogVFJlc3BvbnNlTWVzc2FnZSwgc3RhdGU/OiBDb21tYW5kU3RhdGU8VEFyZ3M+KTogVFZhbHVlIHtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdE1hcCA/IHRoaXMucmVzdWx0TWFwKHJlc3BvbnNlLCBzdGF0ZSkgOiByZXNwb25zZSBhcyB1bmtub3duIGFzIFRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYXBBcmdzKGFyZ3M/OiBUQXJncywgc3RhdGU/OiBDb21tYW5kU3RhdGU8VEFyZ3M+KTogVEFyZ3MgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYXJnc01hcCA/IHRoaXMuYXJnc01hcChhcmdzLCBzdGF0ZSkgOiBhcmdzO1xyXG4gIH1cclxufVxyXG4iXX0=