Home / File/ update-listeners.ts — vue Source File

update-listeners.ts — vue Source File

Architecture documentation for update-listeners.ts, a typescript file in the vue codebase. 3 imports, 1 dependents.

File typescript VueCore VDom 3 imports 1 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  53936bdc_c7c5_5f72_336a_062133943169["update-listeners.ts"]
  90a2398a_1498_3263_c62e_0c064dd2c9b3["index"]
  53936bdc_c7c5_5f72_336a_062133943169 --> 90a2398a_1498_3263_c62e_0c064dd2c9b3
  09aa5370_2caa_6b33_3f44_6ac5211bd11b["util"]
  53936bdc_c7c5_5f72_336a_062133943169 --> 09aa5370_2caa_6b33_3f44_6ac5211bd11b
  64c87498_c46a_6944_ab9d_8e45519852a8["component"]
  53936bdc_c7c5_5f72_336a_062133943169 --> 64c87498_c46a_6944_ab9d_8e45519852a8
  2fe22abf_9073_15d3_f856_f421b0fe047a["merge-hook.ts"]
  2fe22abf_9073_15d3_f856_f421b0fe047a --> 53936bdc_c7c5_5f72_336a_062133943169
  style 53936bdc_c7c5_5f72_336a_062133943169 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { warn, invokeWithErrorHandling } from 'core/util/index'
import { cached, isUndef, isTrue, isArray } from 'shared/util'
import type { Component } from 'types/component'

const normalizeEvent = cached(
  (
    name: string
  ): {
    name: string
    once: boolean
    capture: boolean
    passive: boolean
    handler?: Function
    params?: Array<any>
  } => {
    const passive = name.charAt(0) === '&'
    name = passive ? name.slice(1) : name
    const once = name.charAt(0) === '~' // Prefixed last, checked first
    name = once ? name.slice(1) : name
    const capture = name.charAt(0) === '!'
    name = capture ? name.slice(1) : name
    return {
      name,
      once,
      capture,
      passive
    }
  }
)

export function createFnInvoker(
  fns: Function | Array<Function>,
  vm?: Component
): Function {
  function invoker() {
    const fns = invoker.fns
    if (isArray(fns)) {
      const cloned = fns.slice()
      for (let i = 0; i < cloned.length; i++) {
        invokeWithErrorHandling(
          cloned[i],
          null,
          arguments as any,
          vm,
          `v-on handler`
        )
      }
    } else {
      // return handler return value for single handlers
      return invokeWithErrorHandling(
        fns,
        null,
        arguments as any,
        vm,
        `v-on handler`
      )
    }
  }
  invoker.fns = fns
  return invoker
}

export function updateListeners(
  on: Object,
  oldOn: Object,
  add: Function,
  remove: Function,
  createOnceHandler: Function,
  vm: Component
) {
  let name, cur, old, event
  for (name in on) {
    cur = on[name]
    old = oldOn[name]
    event = normalizeEvent(name)
    if (isUndef(cur)) {
      __DEV__ &&
        warn(
          `Invalid handler for event "${event.name}": got ` + String(cur),
          vm
        )
    } else if (isUndef(old)) {
      if (isUndef(cur.fns)) {
        cur = on[name] = createFnInvoker(cur, vm)
      }
      if (isTrue(event.once)) {
        cur = on[name] = createOnceHandler(event.name, cur, event.capture)
      }
      add(event.name, cur, event.capture, event.passive, event.params)
    } else if (cur !== old) {
      old.fns = cur
      on[name] = old
    }
  }
  for (name in oldOn) {
    if (isUndef(on[name])) {
      event = normalizeEvent(name)
      remove(event.name, oldOn[name], event.capture)
    }
  }
}

Domain

Subdomains

Dependencies

  • component
  • index
  • util

Frequently Asked Questions

What does update-listeners.ts do?
update-listeners.ts is a source file in the vue codebase, written in typescript. It belongs to the VueCore domain, VDom subdomain.
What functions are defined in update-listeners.ts?
update-listeners.ts defines 3 function(s): createFnInvoker, normalizeEvent, updateListeners.
What does update-listeners.ts depend on?
update-listeners.ts imports 3 module(s): component, index, util.
What files import update-listeners.ts?
update-listeners.ts is imported by 1 file(s): merge-hook.ts.
Where is update-listeners.ts in the architecture?
update-listeners.ts is located at src/core/vdom/helpers/update-listeners.ts (domain: VueCore, subdomain: VDom, 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