Перейти к содержимому

@triggery/core

Рантайм, на котором работают все биндинги Triggery. Framework-agnostic, без рантайм-зависимостей, запускается везде, где есть JavaScript (браузер, Node, Workers, React Native, edge).

npm bundle

pnpm add @triggery/core
ЭкспортНазначение
createTriggerОписать сценарий (события, условия, required, обработчик).
createRuntimeИнстанцировать изолированный рантайм.
getDefaultRuntime / setDefaultRuntimeХелперы для глобального синглтона.
createCheckСобрать хелперы check.is/all/any для контекста обработчика.
createInspectorКастомный инспектор на кольцевом буфере.
createSchedulerСобрать кастомный планировщик.
Все публичные типыTriggerSchema, TriggerCtx, Middleware, ConcurrencyStrategy, …
import { createRuntime, createTrigger } from '@triggery/core';

const runtime = createRuntime();

const trigger = createTrigger<{
  events:  { tick: number };
  actions: { log: number };
}>(
  {
    id: 'demo:tick',
    events: ['tick'],
    handler: ({ event, actions }) => actions.log?.(event.payload),
  },
  runtime,
);

runtime.registerAction('demo:tick', 'log', n => console.log('tick', n));
runtime.fireSync('tick', 42);   // → "tick 42"

Это рантайм в чистом виде. В реальном приложении ручной registerAction не нужен — биндинги делают это через useAction.

Рантайм — обычный JavaScript-объект с реестром на Map. Он не импортирует React. Не импортирует виртуальный DOM. Запускается:

  • В web-воркере или service-воркере.
  • В Node.js-процессе — CLI, сервер, edge-функция.
  • В React Native (DOM-адаптер рантайму не нужен).
  • В ванильной HTML-странице без бандлера.

Одно и то же объявление createTrigger({ … }) без изменений работает во всех перечисленных средах. Биндинги (~50 строк каждый) связывают useEvent / useCondition / useAction с жизненным циклом хост-фреймворка.

  • Индексированный диспатчMap<eventKey, Trigger[]>, никаких полных сканов.
  • required-гейт — обработчик пропускается (с записью в инспектор), пока не зарегистрированы все обязательные условия.
  • Стратегии конкурентности для асинхронных обработчиков: take-latest (по умолчанию), take-every, take-first, queue, exhaust, sync.
  • Цепочки действий: actions.debounce(ms).foo(p), actions.throttle, actions.defer, actions.queue.
  • Безопасность каскадов — лимит глубины и обнаружение циклов в цепочках action → fireEvent.
  • MiddlewareonFire, onBeforeMatch, onSkip, onActionStart, onActionEnd, onError, onCascade.
  • Кольцевой буфер инспектора — встроен, по умолчанию автоматически отключается в PROD. Opt-in через @triggery/core/inspect для bundle-friendly factory pattern (v0.10+).
  • Last-write-wins для владения condition / action регистрациями с DEV warn-once.
  • Чистый ESM, без side-effects, tree-shakable.

~4.2 KB gzipped для main entry @triggery/core (v0.10, production-минификация). Если в бандле используется и subpath @triggery/core/builder (бандлер дедуплицирует общие хелперы), суммарная стоимость — ~3.8 KB gz. Каждый framework-биндинг добавляет сверху ~1 KB.