UNPKG

@kephas/ngx-core

Version:

Provides integration capabilities with Angular 13+.

89 lines 10.4 kB
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=