import { eventProxyProvider } from './eventProxyProvider' import { glueNodeMergerProvider } from './glueNodeMergerProvider' import { patcherProvider } from './patcherProvider' import { Props } from './Props' import { resolverProvider } from './resolverProvider' export function rendererProvider ( mutate, getContext, setContext /*, view, glueNode */ ) { const eventTargetProps = new WeakMap() const removedNodes = new WeakMap() const eventProxy = eventProxyProvider(mutate, getContext, eventTargetProps) return () => { const lifecycleEvents: Function[] = [] return [ // resolver resolverProvider(getContext, setContext), // meger glueNodeMergerProvider(removedNodes), // pather patcherProvider( mutate, lifecycleEvents, eventProxy, eventTargetProps, removedNodes ), // finallyer () => () => { lifecycleEvents.reduceRight((_, lifecycleEvent) => lifecycleEvent(), 0) } ] as [ Function | undefined, Function | undefined, Function | undefined, Function | undefined ] } }