import { JSXNode, JSXElement } from '../jsx' import { Path, Patch, diff } from '../diff' import { JSXAsync, JSXElementAsync } from './jsx' import { jsxAsyncToSync } from './sync' export const diffAsync = (jsx: JSXAsync, path: Path = []): Observable => { const jsx$ = jsxAsyncToSync(jsx) return new Observable(observer => { let ready = false let lastNode: JSXNode return jsx$.subscribe( nextNode => { if (ready) observer.next(diff(lastNode, nextNode, path)) else ready = true lastNode = nextNode }, error => observer.error(error), () => observer.complete() ) }) }