import { Observable, concatMap } from "rxjs"; import { DerivedStateDependencies } from "../../types/state"; import { DeriveDefinition } from "../derive-definition"; import { DerivedState } from "../derived-state"; import { DerivedStateProvider } from "../derived-state.provider"; export class InlineDerivedStateProvider implements DerivedStateProvider { get( parentState$: Observable, deriveDefinition: DeriveDefinition, dependencies: TDeps, ): DerivedState { return new InlineDerivedState(parentState$, deriveDefinition, dependencies); } } export class InlineDerivedState implements DerivedState { constructor( parentState$: Observable, deriveDefinition: DeriveDefinition, dependencies: TDeps, ) { this.state$ = parentState$.pipe( concatMap(async (value) => await deriveDefinition.derive(value, dependencies)), ); } state$: Observable; forceValue(value: TTo): Promise { // No need to force anything, we don't keep a cache return Promise.resolve(value); } }