UNPKG

@ngrx/effects

Version:

Side effect model for @ngrx/store

55 lines 12.3 kB
import { defer, merge, Subject } from 'rxjs'; import { concatMap, dematerialize, filter, finalize, map, materialize, } from 'rxjs/operators'; /** * Wraps project fn with error handling making it safe to use in Effects. * Takes either a config with named properties that represent different possible * callbacks or project/error callbacks that are required. */ export function act( /** Allow to take either config object or project/error functions */ configOrProject, errorFn) { const { project, error, complete, operator, unsubscribe } = typeof configOrProject === 'function' ? { project: configOrProject, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion error: errorFn, operator: concatMap, complete: undefined, unsubscribe: undefined, } : { ...configOrProject, operator: configOrProject.operator || concatMap }; return (source) => defer(() => { const subject = new Subject(); return merge(source.pipe(operator((input, index) => defer(() => { let completed = false; let errored = false; let projectedCount = 0; return project(input, index).pipe(materialize(), map((notification) => { switch (notification.kind) { case 'E': errored = true; return { kind: 'N', value: error(notification.error, input), }; case 'C': completed = true; return complete ? { kind: 'N', value: complete(projectedCount, input), } : undefined; default: ++projectedCount; return notification; } }), filter((n) => n != null), dematerialize(), finalize(() => { if (!completed && !errored && unsubscribe) { subject.next(unsubscribe(projectedCount, input)); } })); }))), subject); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9lZmZlY3RzL3NyYy9hY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWdDLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFDSCxXQUFXLEdBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQTBEeEI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHO0FBT2pCLG9FQUFvRTtBQUNwRSxlQVErRCxFQUMvRCxPQUFtRDtJQU1uRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUN2RCxPQUFPLGVBQWUsS0FBSyxVQUFVO1FBQ25DLENBQUMsQ0FBQztZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLG9FQUFvRTtZQUNwRSxLQUFLLEVBQUUsT0FBUTtZQUNmLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsR0FBRyxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7SUFPOUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2hCLEtBQUssQ0FBQyxHQUE2QixFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUNWLE1BQU0sQ0FBQyxJQUFJLENBQ1QsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ3hCLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQixXQUFXLEVBQUUsRUFDYixHQUFHLENBQ0QsQ0FDRSxZQUFZLEVBS0EsRUFBRTtnQkFDZCxRQUFRLFlBQVksQ0FBQyxJQUFJLEVBQUU7b0JBQ3pCLEtBQUssR0FBRzt3QkFDTixPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNmLE9BQU87NEJBQ0wsSUFBSSxFQUFFLEdBQUc7NEJBQ1QsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzt5QkFDeEMsQ0FBQztvQkFDSixLQUFLLEdBQUc7d0JBQ04sU0FBUyxHQUFHLElBQUksQ0FBQzt3QkFDakIsT0FBTyxRQUFROzRCQUNiLENBQUMsQ0FBQztnQ0FDRSxJQUFJLEVBQUUsR0FBRztnQ0FDVCxLQUFLLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUM7NkJBQ3ZDOzRCQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2hCO3dCQUNFLEVBQUUsY0FBYyxDQUFDO3dCQUNqQixPQUFPLFlBQW9ELENBQUM7aUJBQy9EO1lBQ0gsQ0FBQyxDQUNGLEVBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUE4QixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUNwRCxhQUFhLEVBQUUsRUFDZixRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFO29CQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDbEQ7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FDRixFQUNELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgZGVmZXIsIG1lcmdlLCBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjb25jYXRNYXAsXG4gIGRlbWF0ZXJpYWxpemUsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIG1hcCxcbiAgbWF0ZXJpYWxpemUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGVOb3RpZmljYXRpb24gfSBmcm9tICcuL3V0aWxzJztcblxuLyoqIFJlcHJlc2VudHMgY29uZmlnIHdpdGggbmFtZWQgcGFyYW1ldGVycyBmb3IgYWN0ICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdENvbmZpZzxcbiAgSW5wdXQsXG4gIE91dHB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbixcbiAgRXJyb3JBY3Rpb24gZXh0ZW5kcyBBY3Rpb24sXG4gIENvbXBsZXRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uLFxuICBVbnN1YnNjcmliZUFjdGlvbiBleHRlbmRzIEFjdGlvblxuPiB7XG4gIC8vIFByb2plY3QgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyB0aGUgb3V0cHV0IGFjdGlvbnMgaW4gc3VjY2VzcyBjYXNlc1xuICBwcm9qZWN0OiAoaW5wdXQ6IElucHV0LCBpbmRleDogbnVtYmVyKSA9PiBPYnNlcnZhYmxlPE91dHB1dEFjdGlvbj47XG4gIC8vIEVycm9yIGhhbmRsZSBmdW5jdGlvbiBmb3IgcHJvamVjdFxuICAvLyBlcnJvciB0aGF0IGhhcHBlbmVkIGR1cmluZyBwcm9qZWN0IGV4ZWN1dGlvblxuICAvLyBpbnB1dCB2YWx1ZSB0aGF0IHByb2plY3QgZXJyb3JlZCB3aXRoXG4gIGVycm9yOiAoZXJyb3I6IGFueSwgaW5wdXQ6IElucHV0KSA9PiBFcnJvckFjdGlvbjtcbiAgLy8gT3B0aW9uYWwgY29tcGxldGUgYWN0aW9uIHByb3ZpZGVyXG4gIC8vIGNvdW50IGlzIHRoZSBudW1iZXIgb2YgYWN0aW9ucyBwcm9qZWN0IGVtaXR0ZWQgYmVmb3JlIGNvbXBsZXRpb25cbiAgLy8gaW5wdXQgdmFsdWUgdGhhdCBwcm9qZWN0IGNvbXBsZXRlZCB3aXRoXG4gIGNvbXBsZXRlPzogKGNvdW50OiBudW1iZXIsIGlucHV0OiBJbnB1dCkgPT4gQ29tcGxldGVBY3Rpb247XG4gIC8vIE9wdGlvbmFsIGZsYXR0ZW5pbmcgb3BlcmF0b3JcbiAgb3BlcmF0b3I/OiA8SW5wdXQsIE91dHB1dEFjdGlvbj4oXG4gICAgcHJvamVjdDogKGlucHV0OiBJbnB1dCwgaW5kZXg6IG51bWJlcikgPT4gT2JzZXJ2YWJsZTxPdXRwdXRBY3Rpb24+XG4gICkgPT4gT3BlcmF0b3JGdW5jdGlvbjxJbnB1dCwgT3V0cHV0QWN0aW9uPjtcbiAgLy8gT3B0aW9uYWwgdW5zdWJzY3JpYmUgYWN0aW9uIHByb3ZpZGVyXG4gIC8vIGNvdW50IGlzIHRoZSBudW1iZXIgb2YgYWN0aW9ucyBwcm9qZWN0IGVtaXR0ZWQgYmVmb3JlIHVuc3Vic2NyaWJpbmdcbiAgLy8gaW5wdXQgdmFsdWUgdGhhdCB3YXMgdW5zdWJzY3JpYmVkIGZyb21cbiAgdW5zdWJzY3JpYmU/OiAoY291bnQ6IG51bWJlciwgaW5wdXQ6IElucHV0KSA9PiBVbnN1YnNjcmliZUFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdDxcbiAgSW5wdXQsXG4gIE91dHB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbixcbiAgRXJyb3JBY3Rpb24gZXh0ZW5kcyBBY3Rpb25cbj4oXG4gIHByb2plY3Q6IChpbnB1dDogSW5wdXQsIGluZGV4OiBudW1iZXIpID0+IE9ic2VydmFibGU8T3V0cHV0QWN0aW9uPixcbiAgZXJyb3I6IChlcnJvcjogYW55LCBpbnB1dDogSW5wdXQpID0+IEVycm9yQWN0aW9uXG4pOiAoc291cmNlOiBPYnNlcnZhYmxlPElucHV0PikgPT4gT2JzZXJ2YWJsZTxPdXRwdXRBY3Rpb24gfCBFcnJvckFjdGlvbj47XG5leHBvcnQgZnVuY3Rpb24gYWN0PFxuICBJbnB1dCxcbiAgT3V0cHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uLFxuICBFcnJvckFjdGlvbiBleHRlbmRzIEFjdGlvbixcbiAgQ29tcGxldGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gPSBuZXZlcixcbiAgVW5zdWJzY3JpYmVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gPSBuZXZlclxuPihcbiAgY29uZmlnOiBBY3RDb25maWc8XG4gICAgSW5wdXQsXG4gICAgT3V0cHV0QWN0aW9uLFxuICAgIEVycm9yQWN0aW9uLFxuICAgIENvbXBsZXRlQWN0aW9uLFxuICAgIFVuc3Vic2NyaWJlQWN0aW9uXG4gID5cbik6IChcbiAgc291cmNlOiBPYnNlcnZhYmxlPElucHV0PlxuKSA9PiBPYnNlcnZhYmxlPFxuICBPdXRwdXRBY3Rpb24gfCBFcnJvckFjdGlvbiB8IENvbXBsZXRlQWN0aW9uIHwgVW5zdWJzY3JpYmVBY3Rpb25cbj47XG4vKipcbiAqIFdyYXBzIHByb2plY3QgZm4gd2l0aCBlcnJvciBoYW5kbGluZyBtYWtpbmcgaXQgc2FmZSB0byB1c2UgaW4gRWZmZWN0cy5cbiAqIFRha2VzIGVpdGhlciBhIGNvbmZpZyB3aXRoIG5hbWVkIHByb3BlcnRpZXMgdGhhdCByZXByZXNlbnQgZGlmZmVyZW50IHBvc3NpYmxlXG4gKiBjYWxsYmFja3Mgb3IgcHJvamVjdC9lcnJvciBjYWxsYmFja3MgdGhhdCBhcmUgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3Q8XG4gIElucHV0LFxuICBPdXRwdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24sXG4gIEVycm9yQWN0aW9uIGV4dGVuZHMgQWN0aW9uLFxuICBDb21wbGV0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiA9IG5ldmVyLFxuICBVbnN1YnNjcmliZUFjdGlvbiBleHRlbmRzIEFjdGlvbiA9IG5ldmVyXG4+KFxuICAvKiogQWxsb3cgdG8gdGFrZSBlaXRoZXIgY29uZmlnIG9iamVjdCBvciBwcm9qZWN0L2Vycm9yIGZ1bmN0aW9ucyAqL1xuICBjb25maWdPclByb2plY3Q6XG4gICAgfCBBY3RDb25maWc8XG4gICAgICAgIElucHV0LFxuICAgICAgICBPdXRwdXRBY3Rpb24sXG4gICAgICAgIEVycm9yQWN0aW9uLFxuICAgICAgICBDb21wbGV0ZUFjdGlvbixcbiAgICAgICAgVW5zdWJzY3JpYmVBY3Rpb25cbiAgICAgID5cbiAgICB8ICgoaW5wdXQ6IElucHV0LCBpbmRleDogbnVtYmVyKSA9PiBPYnNlcnZhYmxlPE91dHB1dEFjdGlvbj4pLFxuICBlcnJvckZuPzogKGVycm9yOiBhbnksIGlucHV0OiBJbnB1dCkgPT4gRXJyb3JBY3Rpb25cbik6IChcbiAgc291cmNlOiBPYnNlcnZhYmxlPElucHV0PlxuKSA9PiBPYnNlcnZhYmxlPFxuICBPdXRwdXRBY3Rpb24gfCBFcnJvckFjdGlvbiB8IENvbXBsZXRlQWN0aW9uIHwgVW5zdWJzY3JpYmVBY3Rpb25cbj4ge1xuICBjb25zdCB7IHByb2plY3QsIGVycm9yLCBjb21wbGV0ZSwgb3BlcmF0b3IsIHVuc3Vic2NyaWJlIH0gPVxuICAgIHR5cGVvZiBjb25maWdPclByb2plY3QgPT09ICdmdW5jdGlvbidcbiAgICAgID8ge1xuICAgICAgICAgIHByb2plY3Q6IGNvbmZpZ09yUHJvamVjdCxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIGVycm9yOiBlcnJvckZuISxcbiAgICAgICAgICBvcGVyYXRvcjogY29uY2F0TWFwLFxuICAgICAgICAgIGNvbXBsZXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgdW5zdWJzY3JpYmU6IHVuZGVmaW5lZCxcbiAgICAgICAgfVxuICAgICAgOiB7IC4uLmNvbmZpZ09yUHJvamVjdCwgb3BlcmF0b3I6IGNvbmZpZ09yUHJvamVjdC5vcGVyYXRvciB8fCBjb25jYXRNYXAgfTtcblxuICB0eXBlIFJlc3VsdEFjdGlvbiA9XG4gICAgfCBPdXRwdXRBY3Rpb25cbiAgICB8IEVycm9yQWN0aW9uXG4gICAgfCBDb21wbGV0ZUFjdGlvblxuICAgIHwgVW5zdWJzY3JpYmVBY3Rpb247XG4gIHJldHVybiAoc291cmNlKSA9PlxuICAgIGRlZmVyKCgpOiBPYnNlcnZhYmxlPFJlc3VsdEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PFVuc3Vic2NyaWJlQWN0aW9uPigpO1xuICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICBvcGVyYXRvcigoaW5wdXQsIGluZGV4KSA9PlxuICAgICAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxldCBwcm9qZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9qZWN0KGlucHV0LCBpbmRleCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICApOlxuICAgICAgICAgICAgICAgICAgICB8IE9ic2VydmFibGVOb3RpZmljYXRpb248XG4gICAgICAgICAgICAgICAgICAgICAgICBFcnJvckFjdGlvbiB8IENvbXBsZXRlQWN0aW9uIHwgT3V0cHV0QWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZXJyb3Iobm90aWZpY2F0aW9uLmVycm9yLCBpbnB1dCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb21wbGV0ZShwcm9qZWN0ZWRDb3VudCwgaW5wdXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICsrcHJvamVjdGVkQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uIGFzIE9ic2VydmFibGVOb3RpZmljYXRpb248T3V0cHV0QWN0aW9uPjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChuKTogbiBpcyBOb25OdWxsYWJsZTx0eXBlb2Ygbj4gPT4gbiAhPSBudWxsKSxcbiAgICAgICAgICAgICAgICBkZW1hdGVyaWFsaXplKCksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQgJiYgIWVycm9yZWQgJiYgdW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KHVuc3Vic2NyaWJlKHByb2plY3RlZENvdW50LCBpbnB1dCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc3ViamVjdFxuICAgICAgKTtcbiAgICB9KTtcbn1cbiJdfQ==