@mini-rx/signal-store
Version:
Signal Store for Angular
25 lines • 5.92 kB
JavaScript
import { EnvironmentInjector, inject, isSignal } from '@angular/core';
import { isObservable, Subject } from 'rxjs';
import { defaultEffectsErrorHandler } from '@mini-rx/common';
import { miniRxToObservable } from './mini-rx-to-observable';
import { createSignalStoreSubSink } from './signal-store-sub-sink';
export function createRxEffectFn() {
const subSink = createSignalStoreSubSink();
const injector = inject(EnvironmentInjector);
function rxEffect(effectFn) {
const subject = new Subject();
const effect$ = effectFn(subject);
subSink.sink = effect$.pipe(defaultEffectsErrorHandler).subscribe();
return ((observableOrValue) => {
// If we detect a Signal: convert Signal to Observable
observableOrValue = isSignal(observableOrValue)
? miniRxToObservable(observableOrValue, { injector })
: observableOrValue;
isObservable(observableOrValue)
? (subSink.sink = observableOrValue.subscribe((v) => subject.next(v)))
: subject.next(observableOrValue);
});
}
return rxEffect;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJ4LWVmZmVjdC1mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc2lnbmFsLXN0b3JlL3NyYy9saWIvY3JlYXRlLXJ4LWVmZmVjdC1mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsZ0JBQWdCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixFQUFFLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0MsU0FBUyxRQUFRLENBZ0JmLFFBQXNEO1FBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFxQixDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFcEUsT0FBTyxDQUFDLENBQ0osaUJBQXdGLEVBQzFGLEVBQUU7WUFDQSxzREFBc0Q7WUFDdEQsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUMzQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBRXhCLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQW1DLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQTBCLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudEluamVjdG9yLCBpbmplY3QsIGlzU2lnbmFsLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVmYXVsdEVmZmVjdHNFcnJvckhhbmRsZXIgfSBmcm9tICdAbWluaS1yeC9jb21tb24nO1xuaW1wb3J0IHsgbWluaVJ4VG9PYnNlcnZhYmxlIH0gZnJvbSAnLi9taW5pLXJ4LXRvLW9ic2VydmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsU3RvcmVTdWJTaW5rIH0gZnJvbSAnLi9zaWduYWwtc3RvcmUtc3ViLXNpbmsnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnhFZmZlY3RGbigpIHtcbiAgICBjb25zdCBzdWJTaW5rID0gY3JlYXRlU2lnbmFsU3RvcmVTdWJTaW5rKCk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgICBmdW5jdGlvbiByeEVmZmVjdDxcbiAgICAgICAgLy8gQ3JlZGl0cyBmb3IgdGhlIHR5cGluZ3MgZ28gdG8gTmdSeCAoQ29tcG9uZW50IFN0b3JlKTogaHR0cHM6Ly9naXRodWIuY29tL25ncngvcGxhdGZvcm0vYmxvYi8xMy4xLjAvbW9kdWxlcy9jb21wb25lbnQtc3RvcmUvc3JjL2NvbXBvbmVudC1zdG9yZS50cyNMMjc5LUwyOTFcbiAgICAgICAgUHJvdmlkZWRUeXBlID0gdm9pZCxcbiAgICAgICAgLy8gVGhlIGFjdHVhbCBvcmlnaW4kIHR5cGUsIHdoaWNoIGNvdWxkIGJlIHVua25vd24sIHdoZW4gbm90IHNwZWNpZmllZFxuICAgICAgICBPcmlnaW5UeXBlIGV4dGVuZHMgT2JzZXJ2YWJsZTxQcm92aWRlZFR5cGU+IHwgdW5rbm93biA9IE9ic2VydmFibGU8UHJvdmlkZWRUeXBlPixcbiAgICAgICAgLy8gVW53cmFwcGVkIGFjdHVhbCB0eXBlIG9mIHRoZSBvcmlnaW4kIE9ic2VydmFibGUsIGFmdGVyIGRlZmF1bHQgd2FzIGFwcGxpZWRcbiAgICAgICAgT2JzZXJ2YWJsZVR5cGUgPSBPcmlnaW5UeXBlIGV4dGVuZHMgT2JzZXJ2YWJsZTxpbmZlciBBPiA/IEEgOiBuZXZlcixcbiAgICAgICAgLy8gUmV0dXJuIGVpdGhlciBhbiBlbXB0eSBjYWxsYmFjayBvciBhIGZ1bmN0aW9uIHJlcXVpcmluZyBzcGVjaWZpYyB0eXBlcyBhcyBpbnB1dHNcbiAgICAgICAgUmV0dXJuVHlwZSA9IFByb3ZpZGVkVHlwZSB8IE9ic2VydmFibGVUeXBlIGV4dGVuZHMgdm9pZFxuICAgICAgICAgICAgPyAoKSA9PiB2b2lkXG4gICAgICAgICAgICA6IChcbiAgICAgICAgICAgICAgICAgIG9ic2VydmFibGVPclZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgIHwgT2JzZXJ2YWJsZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB8IE9ic2VydmFibGU8T2JzZXJ2YWJsZVR5cGU+XG4gICAgICAgICAgICAgICAgICAgICAgfCBTaWduYWw8T2JzZXJ2YWJsZVR5cGU+XG4gICAgICAgICAgICAgICkgPT4gdm9pZFxuICAgID4oZWZmZWN0Rm46IChvcmlnaW4kOiBPcmlnaW5UeXBlKSA9PiBPYnNlcnZhYmxlPHVua25vd24+KTogUmV0dXJuVHlwZSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxPYnNlcnZhYmxlVHlwZT4oKTtcbiAgICAgICAgY29uc3QgZWZmZWN0JCA9IGVmZmVjdEZuKHN1YmplY3QgYXMgT3JpZ2luVHlwZSk7XG4gICAgICAgIHN1YlNpbmsuc2luayA9IGVmZmVjdCQucGlwZShkZWZhdWx0RWZmZWN0c0Vycm9ySGFuZGxlcikuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgcmV0dXJuICgoXG4gICAgICAgICAgICBvYnNlcnZhYmxlT3JWYWx1ZT86IE9ic2VydmFibGVUeXBlIHwgT2JzZXJ2YWJsZTxPYnNlcnZhYmxlVHlwZT4gfCBTaWduYWw8T2JzZXJ2YWJsZVR5cGU+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UgZGV0ZWN0IGEgU2lnbmFsOiBjb252ZXJ0IFNpZ25hbCB0byBPYnNlcnZhYmxlXG4gICAgICAgICAgICBvYnNlcnZhYmxlT3JWYWx1ZSA9IGlzU2lnbmFsKG9ic2VydmFibGVPclZhbHVlKVxuICAgICAgICAgICAgICAgID8gbWluaVJ4VG9PYnNlcnZhYmxlKG9ic2VydmFibGVPclZhbHVlLCB7IGluamVjdG9yIH0pXG4gICAgICAgICAgICAgICAgOiBvYnNlcnZhYmxlT3JWYWx1ZTtcblxuICAgICAgICAgICAgaXNPYnNlcnZhYmxlKG9ic2VydmFibGVPclZhbHVlKVxuICAgICAgICAgICAgICAgID8gKHN1YlNpbmsuc2luayA9IG9ic2VydmFibGVPclZhbHVlLnN1YnNjcmliZSgodikgPT4gc3ViamVjdC5uZXh0KHYpKSlcbiAgICAgICAgICAgICAgICA6IHN1YmplY3QubmV4dChvYnNlcnZhYmxlT3JWYWx1ZSBhcyBPYnNlcnZhYmxlVHlwZSk7XG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgUmV0dXJuVHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnhFZmZlY3Q7XG59XG4iXX0=