@rotomeca/event - v5.0.0
    Preparing search index...

    Class CircularEventHandler<TRecord, T>

    Gestionnaire d'événements circulaire — chaque callback reçoit et transforme le résultat du précédent.

    Contrairement à EventHandler où les callbacks sont indépendants, CircularEventHandler propage un record muté de callback en callback. Chaque résultat est mergé dans le record courant avant d'être transmis au callback suivant.

    Inspiré du pattern Middleware de C# / ASP.NET Core, où chaque maillon de la chaîne peut enrichir la requête avant de la passer au suivant.

    const pipeline = new CircularEventHandler<{ value: number }>();

    pipeline.add('double', ({ value }) => ({ value: value * 2 }));
    pipeline.add('addTen', ({ value }) => ({ value: value + 10 }));

    const result = pipeline.invoke({ value: 5 });
    // result.type → 'record'
    // result.value → { value: 20 } (5 * 2 = 10, puis 10 + 10 = 20)

    Type Parameters

    • TRecord extends Record<string, unknown> = Record<string, unknown>

      Type du record transmis et muté entre les callbacks. Doit étendre Record<string, unknown>. Par défaut Record<string, unknown>.

    • T extends Func<[TRecord], Partial<TRecord>> = Func<[TRecord], Partial<TRecord>>

      Type des callbacks, doit retourner Partial<TRecord>. Par défaut Func<[TRecord], Partial<TRecord>>.

    Hierarchy (View Summary)

    Index

    Constructors

    Accessors

    • get keys(): string[]

      Retourne la liste des clés des callbacks actuellement enregistrés.

      Returns string[]

      const keys = event.keys; // ['handler1', 'handler2']
      

    Methods

    • Protected

      Retourne les données associées à la clé donnée, ou null si la clé n'existe pas.

      Point d'accès protégé au dictionnaire interne — permet aux classes concrètes d'accéder aux données d'un callback sans exposer #_callbacks directement.

      Parameters

      • key: string

        La clé du callback à récupérer.

      Returns MayBe<IEventData<[TRecord], T>>

      Les données du callback, ou null si la clé est absente.

    • Ajoute un callback avec une clé spécifique.

      Parameters

      • key: string

        Clé identifiant le callback.

      • event: T

        Le callback à ajouter.

      • ...args: [TRecord?]

        Arguments par défaut transmis au callback à chaque appel.

      Returns this

      L'instance courante pour permettre le chaînage.

    • Déclenche la chaîne de callbacks et retourne le record final.

      Conserve la compatibilité avec l'ancienne API JsCircularEvent.call(). Préférer invoke qui retourne un CircularEventCallResult discriminé, plus sûr à utiliser en TypeScript.

      Parameters

      • param: TRecord

        Le record initial transmis au premier callback.

      Returns TRecord | null

      Le record final après passage dans tous les callbacks, ou null si aucun callback n'est enregistré.

      Utilisez invoke à la place.

    • Supprime tous les callbacks enregistrés en une seule opération O(1).

      Capture la liste des callbacks avant l'effacement, puis déclenche onHandlerCleared après — garantissant que la Map est vide avant la notification, sans risque de double déclenchement si un observateur appelle add dans son callback.

      Returns this

      L'instance courante pour permettre le chaînage.

    • Vérifie si un callback est enregistré sous la clé donnée.

      Parameters

      • key: string

        La clé à vérifier.

      Returns boolean

      true si un callback existe pour cette clé, false sinon.

    • Déclenche la chaîne de callbacks en propageant un record muté de l'un à l'autre.

      Pour chaque callback enregistré, dans l'ordre d'enregistrement :

      1. Les arguments par défaut du callback (s'ils sont un plain object) sont mergés dans le record courant.
      2. Le callback est appelé avec le record courant.
      3. Si le résultat est un plain object, il est mergé dans le record courant avant le prochain callback.

      Si args_0 n'est pas un plain object, un avertissement est émis via logger, la valeur est wrappée dans { default: args_0 } et la chaîne est exécutée normalement. Le résultat est alors de type 'other'.

      Parameters

      • args_0: TRecord

        Le record initial transmis au premier callback.

      Returns CircularEventCallResult<TRecord>

      Un CircularEventCallResult décrivant le résultat :

      • { type: 'empty' } si aucun callback n'est enregistré.
      • { type: 'record', value } si la chaîne s'est exécutée normalement.
      • { type: 'other', value, originalValue } si args_0 n'était pas un plain object.
      const result = pipeline.invoke({ count: 0 });

      if (result.type === 'record') {
      console.log(result.value.count);
      }