Skip to content

⬅️ Back to Table of Contents

📄 createEventHook

📊 Analysis Summary

Metric Count
🔧 Functions 6
📦 Imports 2
⚡ Async/Await Patterns 2
📐 Interfaces 1
📑 Type Aliases 5

📚 Table of Contents

🛠️ File Location:

📂 packages/shared/createEventHook/index.ts

📦 Imports

Name Source
IsAny ../utils/types
tryOnScopeDispose ../tryOnScopeDispose

Async/Await Patterns

Type Function Await Expressions Promise Chains
promise-chain createEventHook none Promise.all
promise-chain trigger none Promise.all

Functions

createEventHook(): EventHookReturn<T>

Utility for creating event hooks

See: https://vueuse.org/createEventHook

Tags: @__NO_SIDE_EFFECTS__

Raw JSDoc
/**
 * Utility for creating event hooks
 *
 * @see https://vueuse.org/createEventHook
 *
 * @__NO_SIDE_EFFECTS__
 */

Calls:

  • fns.delete
  • fns.clear
  • fns.add
  • off
  • tryOnScopeDispose (from ../tryOnScopeDispose)
  • Promise.all
  • Array.from(fns).map
  • fn
Code
export function createEventHook<T = any>(): EventHookReturn<T> {
  const fns: Set<Callback<T>> = new Set()

  const off = (fn: Callback<T>) => {
    fns.delete(fn)
  }

  const clear = () => {
    fns.clear()
  }

  const on = (fn: Callback<T>) => {
    fns.add(fn)
    const offFn = () => off(fn)

    tryOnScopeDispose(offFn)

    return {
      off: offFn,
    }
  }

  const trigger: EventHookTrigger<T> = (...args) => {
    return Promise.all(Array.from(fns).map(fn => fn(...args)))
  }

  return {
    on,
    off,
    trigger,
    clear,
  }
}

Internal helpers

Declared inside another function in this file.

off(fn: Callback<T>): void

Parameters:

  • fn Callback<T>

Returns: void

Calls:

  • fns.delete
Code
(fn: Callback<T>) => {
    fns.delete(fn)
  }

clear(): void

Returns: void

Calls:

  • fns.clear
Code
() => {
    fns.clear()
  }

on(fn: Callback<T>): { off: () => void; }

Parameters:

  • fn Callback<T>

Returns: { off: () => void; }

Calls:

  • fns.add
  • off
  • tryOnScopeDispose (from ../tryOnScopeDispose)
Code
(fn: Callback<T>) => {
    fns.add(fn)
    const offFn = () => off(fn)

    tryOnScopeDispose(offFn)

    return {
      off: offFn,
    }
  }

offFn(): void

Returns: void

Calls:

  • off
Code
() => off(fn)

trigger(args: Parameters<Callback<T>>): Promise<void[]>

Parameters:

  • args Parameters<Callback<T>>

Returns: Promise<void[]>

Calls:

  • Promise.all
  • Array.from(fns).map
  • fn
Code
(...args) => {
    return Promise.all(Array.from(fns).map(fn => fn(...args)))
  }

Interfaces

EventHook<T = any>

Interface Code
export interface EventHook<T = any> {
  on: EventHookOn<T>
  off: EventHookOff<T>
  trigger: EventHookTrigger<T>
  clear: () => void
}

Properties

Name Type Optional Description
on EventHookOn<T> not shown
off EventHookOff<T> not shown
trigger EventHookTrigger<T> not shown
clear () => void not shown

Type Aliases

Callback<T>

type Callback<T> = IsAny<T> extends true
  ? (...param: any) => void
  : (
      [T] extends [void]
        ? (...param: unknown[]) => void
        : [T] extends [any[]]
            ? (...param: T) => void
            : (...param: [T, ...unknown[]]) => void
    );

EventHookOn<T = any>

type EventHookOn<T = any> = (fn: Callback<T>) => { off: () => void };

EventHookOff<T = any>

type EventHookOff<T = any> = (fn: Callback<T>) => void;

EventHookTrigger<T = any>

type EventHookTrigger<T = any> = (...param: Parameters<Callback<T>>) => Promise<unknown[]>;

EventHookReturn<T>

type EventHookReturn<T> = EventHook<T>;

Generated by Syntax Scribe