UNPKG

@spartacus/core

Version:

Spartacus - the core framework

65 lines 9.63 kB
import { Injectable } from '@angular/core'; import { ReplaySubject, Subject, Subscription, zip } from 'rxjs'; import { concatMap, finalize, mergeMap, retry, switchMap, tap, } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class Command { } export var CommandStrategy; (function (CommandStrategy) { CommandStrategy[CommandStrategy["Parallel"] = 0] = "Parallel"; CommandStrategy[CommandStrategy["Queue"] = 1] = "Queue"; CommandStrategy[CommandStrategy["CancelPrevious"] = 2] = "CancelPrevious"; CommandStrategy[CommandStrategy["ErrorPrevious"] = 3] = "ErrorPrevious"; // SkipIfOngoing, // ErrorIfOngoing })(CommandStrategy || (CommandStrategy = {})); export class CommandService { constructor() { this.subscriptions = new Subscription(); } create(commandFactory, options) { const commands$ = new Subject(); const results$ = new Subject(); let process$; switch (options === null || options === void 0 ? void 0 : options.strategy) { case CommandStrategy.CancelPrevious: case CommandStrategy.ErrorPrevious: process$ = zip(commands$, results$).pipe(switchMap(([cmd, notifier$]) => commandFactory(cmd).pipe(tap(notifier$), finalize(() => options.strategy === CommandStrategy.CancelPrevious ? notifier$.complete() : notifier$.error(new Error('Canceled by next command'))))), retry()); break; case CommandStrategy.Parallel: process$ = zip(commands$, results$).pipe(mergeMap(([cmd, notifier$]) => commandFactory(cmd).pipe(tap(notifier$))), retry()); break; case CommandStrategy.Queue: default: process$ = zip(commands$, results$).pipe(concatMap(([cmd, notifier$]) => commandFactory(cmd).pipe(tap(notifier$))), retry()); break; } this.subscriptions.add(process$.subscribe()); const command = new (class extends Command { constructor() { super(...arguments); this.execute = (parameters) => { const result$ = new ReplaySubject(); results$.next(result$); commands$.next(parameters); return result$; }; } })(); return command; } ngOnDestroy() { this.subscriptions.unsubscribe(); } } CommandService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CommandService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); CommandService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CommandService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CommandService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvdXRpbC9jb21tYW5kLXF1ZXJ5L2NvbW1hbmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXhCLE1BQU0sT0FBZ0IsT0FBTztDQUU1QjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBT1g7QUFQRCxXQUFZLGVBQWU7SUFDekIsNkRBQVEsQ0FBQTtJQUNSLHVEQUFLLENBQUE7SUFDTCx5RUFBYyxDQUFBO0lBQ2QsdUVBQWEsQ0FBQTtJQUNiLGlCQUFpQjtJQUNqQixpQkFBaUI7QUFDbkIsQ0FBQyxFQVBXLGVBQWUsS0FBZixlQUFlLFFBTzFCO0FBS0QsTUFBTSxPQUFPLGNBQWM7SUFHekI7UUFGVSxrQkFBYSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTVDLENBQUM7SUFFaEIsTUFBTSxDQUNKLGNBQStDLEVBQy9DLE9BQXdDO1FBRXhDLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFFakQsSUFBSSxRQUF5QixDQUFDO1FBRTlCLFFBQVEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsRUFBRTtZQUN6QixLQUFLLGVBQWUsQ0FBQyxjQUFjLENBQUM7WUFDcEMsS0FBSyxlQUFlLENBQUMsYUFBYTtnQkFDaEMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQzdCLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFDZCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ1osT0FBTyxDQUFDLFFBQVEsS0FBSyxlQUFlLENBQUMsY0FBYztvQkFDakQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RCLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FDM0QsQ0FDRixDQUNGLEVBQ0QsS0FBSyxFQUFFLENBQ1IsQ0FBQztnQkFDRixNQUFNO1lBRVIsS0FBSyxlQUFlLENBQUMsUUFBUTtnQkFDM0IsUUFBUSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN0QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQzVCLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3pDLEVBQ0QsS0FBSyxFQUFFLENBQ1IsQ0FBQztnQkFDRixNQUFNO1lBRVIsS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzNCO2dCQUNFLFFBQVEsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDdEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUM3QixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUN6QyxFQUNELEtBQUssRUFBRSxDQUNSLENBQUM7Z0JBQ0YsTUFBTTtTQUNUO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFN0MsTUFBTSxPQUFPLEdBQWtCLElBQUksQ0FBQyxLQUFNLFNBQVEsT0FBTztZQUFyQjs7Z0JBQ2xDLFlBQU8sR0FBRyxDQUFDLFVBQWEsRUFBRSxFQUFFO29CQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsRUFBSyxDQUFDO29CQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QixTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMzQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUFBLENBQUMsRUFBRSxDQUFDO1FBRUwsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7OzJHQXBFVSxjQUFjOytHQUFkLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY29uY2F0TWFwLFxuICBmaW5hbGl6ZSxcbiAgbWVyZ2VNYXAsXG4gIHJldHJ5LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZDxQID0gdW5kZWZpbmVkLCBSID0gdW5rbm93bj4ge1xuICBhYnN0cmFjdCBleGVjdXRlKHBhcmFtczogUCk6IE9ic2VydmFibGU8Uj47XG59XG5cbmV4cG9ydCBlbnVtIENvbW1hbmRTdHJhdGVneSB7XG4gIFBhcmFsbGVsLFxuICBRdWV1ZSxcbiAgQ2FuY2VsUHJldmlvdXMsXG4gIEVycm9yUHJldmlvdXMsXG4gIC8vIFNraXBJZk9uZ29pbmcsXG4gIC8vIEVycm9ySWZPbmdvaW5nXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGNyZWF0ZTxQID0gdW5kZWZpbmVkLCBSID0gdW5rbm93bj4oXG4gICAgY29tbWFuZEZhY3Rvcnk6IChjb21tYW5kOiBQKSA9PiBPYnNlcnZhYmxlPGFueT4sXG4gICAgb3B0aW9ucz86IHsgc3RyYXRlZ3k/OiBDb21tYW5kU3RyYXRlZ3kgfVxuICApOiBDb21tYW5kPFAsIFI+IHtcbiAgICBjb25zdCBjb21tYW5kcyQgPSBuZXcgU3ViamVjdDxQPigpO1xuICAgIGNvbnN0IHJlc3VsdHMkID0gbmV3IFN1YmplY3Q8UmVwbGF5U3ViamVjdDxSPj4oKTtcblxuICAgIGxldCBwcm9jZXNzJDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgc3dpdGNoIChvcHRpb25zPy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBDb21tYW5kU3RyYXRlZ3kuQ2FuY2VsUHJldmlvdXM6XG4gICAgICBjYXNlIENvbW1hbmRTdHJhdGVneS5FcnJvclByZXZpb3VzOlxuICAgICAgICBwcm9jZXNzJCA9IHppcChjb21tYW5kcyQsIHJlc3VsdHMkKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoW2NtZCwgbm90aWZpZXIkXSkgPT5cbiAgICAgICAgICAgIGNvbW1hbmRGYWN0b3J5KGNtZCkucGlwZShcbiAgICAgICAgICAgICAgdGFwKG5vdGlmaWVyJCksXG4gICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJhdGVneSA9PT0gQ29tbWFuZFN0cmF0ZWd5LkNhbmNlbFByZXZpb3VzXG4gICAgICAgICAgICAgICAgICA/IG5vdGlmaWVyJC5jb21wbGV0ZSgpXG4gICAgICAgICAgICAgICAgICA6IG5vdGlmaWVyJC5lcnJvcihuZXcgRXJyb3IoJ0NhbmNlbGVkIGJ5IG5leHQgY29tbWFuZCcpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZXRyeSgpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbW1hbmRTdHJhdGVneS5QYXJhbGxlbDpcbiAgICAgICAgcHJvY2VzcyQgPSB6aXAoY29tbWFuZHMkLCByZXN1bHRzJCkucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoW2NtZCwgbm90aWZpZXIkXSkgPT5cbiAgICAgICAgICAgIGNvbW1hbmRGYWN0b3J5KGNtZCkucGlwZSh0YXAobm90aWZpZXIkKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHJldHJ5KClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29tbWFuZFN0cmF0ZWd5LlF1ZXVlOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJvY2VzcyQgPSB6aXAoY29tbWFuZHMkLCByZXN1bHRzJCkucGlwZShcbiAgICAgICAgICBjb25jYXRNYXAoKFtjbWQsIG5vdGlmaWVyJF0pID0+XG4gICAgICAgICAgICBjb21tYW5kRmFjdG9yeShjbWQpLnBpcGUodGFwKG5vdGlmaWVyJCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZXRyeSgpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQocHJvY2VzcyQuc3Vic2NyaWJlKCkpO1xuXG4gICAgY29uc3QgY29tbWFuZDogQ29tbWFuZDxQLCBSPiA9IG5ldyAoY2xhc3MgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICAgIGV4ZWN1dGUgPSAocGFyYW1ldGVyczogUCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQkID0gbmV3IFJlcGxheVN1YmplY3Q8Uj4oKTtcbiAgICAgICAgcmVzdWx0cyQubmV4dChyZXN1bHQkKTtcbiAgICAgICAgY29tbWFuZHMkLm5leHQocGFyYW1ldGVycyk7XG4gICAgICAgIHJldHVybiByZXN1bHQkO1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19