UNPKG

@mini-rx/signal-store

Version:
35 lines 5.08 kB
// Credits go to Angular // Copied from with small modifications: https://github.com/angular/angular/blob/16.2.10/packages/core/rxjs-interop/src/to_observable.ts /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { assertInInjectionContext, DestroyRef, effect, inject, Injector, untracked, } from '@angular/core'; import { Subject } from 'rxjs'; // Reimplemented `toObservable` from Angular // Use Subject instead of ReplaySubject (which is more lightweight and sufficient for internal use in MiniRx) export function miniRxToObservable(source, options) { !options?.injector && assertInInjectionContext(miniRxToObservable); const injector = options?.injector ?? inject(Injector); const subject = new Subject(); const watcher = effect(() => { let value; try { value = source(); } catch (err) { untracked(() => subject.error(err)); return; } untracked(() => subject.next(value)); }, { injector, manualCleanup: true }); injector.get(DestroyRef).onDestroy(() => { watcher.destroy(); subject.complete(); }); return subject.asObservable(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaS1yeC10by1vYnNlcnZhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zaWduYWwtc3RvcmUvc3JjL2xpYi9taW5pLXJ4LXRvLW9ic2VydmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCO0FBQ3hCLHdJQUF3STtBQUV4STs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyw0Q0FBNEM7QUFDNUMsNkdBQTZHO0FBQzdHLE1BQU0sVUFBVSxrQkFBa0IsQ0FDOUIsTUFBaUIsRUFDakIsT0FBNkI7SUFFN0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkUsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUssQ0FBQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQ2xCLEdBQUcsRUFBRTtRQUNELElBQUksS0FBUSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQ0QsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPO1FBQ1gsQ0FBQztRQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FDcEMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNwQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWRpdHMgZ28gdG8gQW5ndWxhclxuLy8gQ29waWVkIGZyb20gd2l0aCBzbWFsbCBtb2RpZmljYXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTYuMi4xMC9wYWNrYWdlcy9jb3JlL3J4anMtaW50ZXJvcC9zcmMvdG9fb2JzZXJ2YWJsZS50c1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIFNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9PYnNlcnZhYmxlT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy8gUmVpbXBsZW1lbnRlZCBgdG9PYnNlcnZhYmxlYCBmcm9tIEFuZ3VsYXJcbi8vIFVzZSBTdWJqZWN0IGluc3RlYWQgb2YgUmVwbGF5U3ViamVjdCAod2hpY2ggaXMgbW9yZSBsaWdodHdlaWdodCBhbmQgc3VmZmljaWVudCBmb3IgaW50ZXJuYWwgdXNlIGluIE1pbmlSeClcbmV4cG9ydCBmdW5jdGlvbiBtaW5pUnhUb09ic2VydmFibGU8VD4oXG4gICAgc291cmNlOiBTaWduYWw8VD4sXG4gICAgb3B0aW9ucz86IFRvT2JzZXJ2YWJsZU9wdGlvbnNcbik6IE9ic2VydmFibGU8VD4ge1xuICAgICFvcHRpb25zPy5pbmplY3RvciAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQobWluaVJ4VG9PYnNlcnZhYmxlKTtcbiAgICBjb25zdCBpbmplY3RvciA9IG9wdGlvbnM/LmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PFQ+KCk7XG5cbiAgICBjb25zdCB3YXRjaGVyID0gZWZmZWN0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU6IFQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gc291cmNlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gc3ViamVjdC5lcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gc3ViamVjdC5uZXh0KHZhbHVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaW5qZWN0b3IsIG1hbnVhbENsZWFudXA6IHRydWUgfVxuICAgICk7XG5cbiAgICBpbmplY3Rvci5nZXQoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgd2F0Y2hlci5kZXN0cm95KCk7XG4gICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xufVxuIl19