import { Signal, untracked, Injector } from '@angular/core'; import type { RxReactivityFactory, ReactivityLambda } from '../../types'; import { toSignal } from '@angular/core/rxjs-interop'; /** * Type-level function (ReactivityLambda) for Angular signals. * Use this as the Reactivity type parameter for properly typed signals. * * @example * const db = await createRxDatabase({ * reactivity: createReactivityFactory(injector) * }); * const signal = doc.age$$; // Signal */ export interface AngularSignalReactivityLambda extends ReactivityLambda { readonly _result: Signal; } export function createReactivityFactory( injector: Injector ): RxReactivityFactory { return { fromObservable(observable$: any, initialValue: any): any { return untracked(() => toSignal(observable$, { initialValue, injector }) ); } }; }