Transferum как язык описания взаимодействий компонентов

Вышел стабильный релиз v1.1.0 библиотеки Transferum для построения типобезопасных графов обработки данных на TypeScript.

В отличие от реактивных библиотек (RxJS, Most.js и др.), которые строятся вокруг одного абстрактного примитива (наблюдаемого потока), Transferum основан на концепции способностей. Каждый узел графа — трансфер — декларирует, что он умеет делать: принимать данные, отдавать данные, фильтровать, буферизировать, опрашивать, блокировать поток. Эти способности одновременно являются runtime-значениями и compile-time-гарантиями — TypeScript точно знает, какие методы доступны на каждом этапе пайплайна, без кастов и runtime-проверок.

Ключевая идея: поведение системы описывается как композиция независимых способностей, которые одновременно определяют тип, реализацию и правила взаимодействия.

Библиотека предоставляет мощный набор компонуемых примитивов: — трансферы — базовые узлы потока данных (каналы, буферы, debounce/throttle, polling, merge/split и др.); — мосты — управляемые соединители с поддержкой динамической маршрутизации и гейтинга; — операторы — трансформеры и фильтры данных (синхронные и асинхронные). — билдеры — fluent-конструкторы цепочек (включая отдельные async-версии);

Ключевое решение — единая архитектура, которая позволяет seamlessly объединять разнородные источники данных: — push-based стримы, — pull-based API, — периодический polling — асинхронные операции.

Автоматическое связывание через linkTransfers с учётом возможностей каждого узла (capability flags) избавляет от большинства glue-кода, сохраняя полную типобезопасность на всём протяжении пайплайна и предоставляя явное управление жизненным циклом (destroy() + owned-ресурсы).

Библиотека предоставляет четыре слоя абстракции: 1. Трансферы — узлы графа (каналы, буферы, debounce/throttle, polling, merge/split, gate/routing, адаптеры). 2. Мосты — управляемые соединения между узлами с динамической маршрутизацией и гейтингом. 3. Операторы — Stateless-трансформеры и фильтры данных (синхронные и асинхронные). 4. Билдеры — fluent-конструкторы цепочек (включая async-версии).

Архитектурная основа — capability flags system. Флаги isPushable, isPullable, isSubscribable, isGate и другие — это не просто свойства объекта. Это вычислимые метаданные, которые: — Определяют TypeScript-интерфейс трансфера на этапе компиляции. — Управляют стратегией связывания linkTransfers() на этапе выполнения. — Обеспечивают совместимость в билдерах без приведений типов.

Один флаг — три потребителя. Это единый источник истины для всей системы.

Это означает: если тип трансфера включает isPushable: true, вы можете вызвать push() — TypeScript не выдаст ошибку. Если флаг отсутствует (или false), метода нет в типе, и попытка вызвать его — compile-time ошибка, а не runtime-сюрприз.

Transferum идеален для:

TypeScript-first проектов — благодаря максимально строгой типизации и compile-time вычисления доступных методов каждого трансфера на основе его capability flags. — Смешанных sync/async пайплайнов — в единой модели без ручного преобразования. — Pull-based получения данных — polling API, датчиков, хранилищ с PollingProxy. Явного flow control — gates, bridges, selectors для runtime-маршрутизации. — Устойчивой обработки ошибок — локальная, non-fatal обработка: одна стадия не убивает пайплайн, сломанные poller останавливаются (fail-safe), ничего не подавляется молча. — Game development / IoT — frame-aligned tickers, idle polling, sensor aggregation.

Установка: npm i transferum

Transferum не имеет зависимостей и покрыт тестами на 100%.

Разработка ведётся на GitHub. Там же в README вы найдете примеры использования для различных use-кейсов.

Transferum как язык описания взаимодействий компонентов | Сетка — социальная сеть от hh.ru