import { LIFECYCLE, NODE } from './consts/glueNodeAttributeNames' import { DESTROY, REMOVE } from './consts/lifecycleNames' import { PROPS } from './consts/vNodeAttributeNames' import { deepGet } from './deepGet' import { GlueNode } from './GlueNode' const shouldBeCaptureLifecycles = {} shouldBeCaptureLifecycles[REMOVE] = 1 shouldBeCaptureLifecycles[DESTROY] = 2 export function resolveLifecycle ( rawLifecycle: string, captureLifecycle: string, glueNode: GlueNode, removedNodes: WeakMap ) { const shouldBeCaptureLifecycle = shouldBeCaptureLifecycles[rawLifecycle] const shouldBeCaptureLifecycleByCaptured = shouldBeCaptureLifecycles[captureLifecycle] const lifecycle = (shouldBeCaptureLifecycleByCaptured && (!shouldBeCaptureLifecycle || shouldBeCaptureLifecycle < shouldBeCaptureLifecycleByCaptured) && captureLifecycle) || rawLifecycle if (REMOVE == lifecycle) { const node = glueNode[NODE]! return removedNodes.get(node) || (REMOVE == rawLifecycle && !deepGet(glueNode, `${PROPS}.on${REMOVE}`)) ? DESTROY : REMOVE } return lifecycle }