import { Observable, concatMap } from "rxjs"; import { DeriveDefinition, DerivedState, DerivedStateDependencies, DerivedStateProvider, } from "@bitwarden/state"; 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); } }