Home / File/ merge-hook.ts — vue Source File

merge-hook.ts — vue Source File

Architecture documentation for merge-hook.ts, a typescript file in the vue codebase. 5 imports, 0 dependents.

File typescript CoreRuntime VirtualDOM 5 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252["merge-hook.ts"]
  a13b4a2c_7af7_bcfd_03a9_13286f908ca0["vnode.ts"]
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 --> a13b4a2c_7af7_bcfd_03a9_13286f908ca0
  6a05321e_c7cd_43ad_21be_69c7e5fd4488["VNode"]
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 --> 6a05321e_c7cd_43ad_21be_69c7e5fd4488
  a11c2d0a_9676_19da_3fd8_66e9ef25e812["update-listeners.ts"]
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 --> a11c2d0a_9676_19da_3fd8_66e9ef25e812
  72dc3fd8_ab45_fab8_4ee3_ade3f6e39143["createFnInvoker"]
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 --> 72dc3fd8_ab45_fab8_4ee3_ade3f6e39143
  156bf2e1_8a13_f22d_5437_54f14bcef8fa["util"]
  1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 --> 156bf2e1_8a13_f22d_5437_54f14bcef8fa
  style 1d9d4118_665c_f6c2_cd3e_e1c7a7b6e252 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import VNode from '../vnode'
import { createFnInvoker } from './update-listeners'
import { remove, isDef, isUndef, isTrue } from 'shared/util'

export function mergeVNodeHook(
  def: Record<string, any>,
  hookKey: string,
  hook: Function
) {
  if (def instanceof VNode) {
    def = def.data!.hook || (def.data!.hook = {})
  }
  let invoker
  const oldHook = def[hookKey]

  function wrappedHook() {
    hook.apply(this, arguments)
    // important: remove merged hook to ensure it's called only once
    // and prevent memory leak
    remove(invoker.fns, wrappedHook)
  }

  if (isUndef(oldHook)) {
    // no existing hook
    invoker = createFnInvoker([wrappedHook])
  } else {
    /* istanbul ignore if */
    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
      // already a merged invoker
      invoker = oldHook
      invoker.fns.push(wrappedHook)
    } else {
      // existing plain hook
      invoker = createFnInvoker([oldHook, wrappedHook])
    }
  }

  invoker.merged = true
  def[hookKey] = invoker
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does merge-hook.ts do?
merge-hook.ts is a source file in the vue codebase, written in typescript. It belongs to the CoreRuntime domain, VirtualDOM subdomain.
What functions are defined in merge-hook.ts?
merge-hook.ts defines 1 function(s): mergeVNodeHook.
What does merge-hook.ts depend on?
merge-hook.ts imports 5 module(s): VNode, createFnInvoker, update-listeners.ts, util, vnode.ts.
Where is merge-hook.ts in the architecture?
merge-hook.ts is located at src/core/vdom/helpers/merge-hook.ts (domain: CoreRuntime, subdomain: VirtualDOM, directory: src/core/vdom/helpers).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free