import { Observable, firstValueFrom, from, } from 'rxjs' import { filter, // eslint-disable-next-line import/extensions } from 'rxjs/operators' import type { State, Interpreter, StateSchema, } from 'xstate' const waitForSelector = async ( stream$: Observable, selector: (x: T) => boolean, ): Promise => { const future = firstValueFrom( stream$.pipe( filter(selector), ), ) return future.then(() => undefined) } const waitForMachineState = async ( interpreter: Interpreter< any, TServiceCtlState, any >, state: keyof TServiceCtlState['states'], ): Promise => { const selector = ( x: State, ) => x.value === state return waitForSelector( from(interpreter), selector, ) } export { waitForSelector, waitForMachineState, }