npm.io
0.0.1 • Published 4d ago

@mostajs/trigger

Licence
AGPL-3.0-or-later
Version
0.0.1
Deps
0
Size
22 kB
Vulns
0
Weekly
0

@mostajs/trigger

Liaison déclarative événement → action (la brique TRIGGER du triptyque State · Rule · Trigger, motif Drupal Trigger / reaction rule). Hub pub/sub découplé, gate when injecté (→ @mostajs/rules), différé injecté (→ @mostajs/queue).

Auteur : Dr Hamid MADANI drmdh@msn.com · Licence : AGPL-3.0-or-later

Installation

npm i @mostajs/trigger

Cœur sans dépendance. Le gate (@mostajs/rules) et le scheduler (@mostajs/queue) sont injectés.

Exemple

import { createTriggerHub } from "@mostajs/trigger";

const hub = createTriggerHub();
hub.define({ on: "enter:validee", do: (ctx) => sendEmail(ctx) });
hub.define({ on: "enter:validee", when: (ctx) => ctx.notify === true, do: (ctx) => audit(ctx), weight: 1 });

await hub.fire("enter:validee", { orderId: 42, notify: true }); // exécute, par poids, les actions dont `when` tient

Composition

Capacité Injection Module
condition (when) gate @mostajs/rules
différé / planifié (schedule) scheduler @mostajs/queue
action courante (notify) dans le do @mostajs/notifications
const hub = createTriggerHub({ scheduler: (event, at, ctx) => queue.enqueueAt(event, at, ctx) });
await hub.schedule("subscription.expiring", new Date(2026, 5, 10), { userId: 7 });

API

createTriggerHub({ scheduler? })TriggerHub. define/register(def), on(event, action, extra?), unregister(name), listTriggers(event?), fire(event, ctx?, { onError? })Promise<number>, schedule(event, at, ctx?). TriggerDef = { name?, on, when?, do, weight? }.

Comportement

  • fire est séquentiel (ordre par weight, déterministe) et fire-and-forget : une action qui échoue n'interrompt pas les autres (erreur via onError).
  • Actions idempotentes (un événement peut être rejoué — @mostajs/queue est at-least-once).
  • when = condition pure.

Statut

v0.0.1 — cœur implémenté et testé (hub pub/sub, define/fire/schedule/unregister, gate, poids, fire-and-forget). Feuille de route : docs/03-PLAN-DEV-TRIGGER.md (0.1 Scheduler réel @mostajs/queue + idempotence, 1.0 = 14 livrables). Étude : docs/01-ETUDE-ETAT-ART-TRIGGER-07062026.md.