npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

pipeline.js

v2.0.33

Published

Pipeline.js - async workflow framework for node.js and browser

Downloads

27

Readme

#Цель: библиотека для повторного использования кода и упрощенного тестировани. по сути не отличается от обычного модульного программирования. основное преимущество, можно комбинировать код простым добавлением новых видов stage/pipline и их последующее использование в процессе работы.

Pipeline с именованными шагами, для того чтобы иметь возможность создавать возвраты. для этого необходим либо новая ходилка по шагам либо своя ходилка по шагам.

  • дополнительные стандартные stage условный переход

  • возможность возврата на любой шаг вперед и назад

  • возможность задать следующий шаг

  • операции типа split combine для параллельного выполнения и задания точек синхронизации (типа сети петри)

  • обработка ошибок: должна быть отделена от основного механизма хождения по шагам, для того чтобы можно было установить новый следующий шаг в случае ошибки, либо выбрать шаги из другого списка шагов... по усмотрению разработчика.

  • возможность сериализовать структуру stage в файл.

  • останавливать выполнение stage (workflow);

#Требования к параллельному и к последовательному испольнению

  1. последовательно:
    • последовательно обработать массив конекстов.
    • stage который выполнит по

это специальный тип pipeline.

##Sequential

Stage с параметрами:

  • stage - Stage который будет выполняться внутри.

  • fork - процедура процедура которая делает fork текущего context-а для stage, или создает новый, может быть и на основен текущего, в зависимости от необходимости, и заполняет его специфичными данными.

  • reachEnd - условие завершения последовательности.

  • combine - метод который будет формировать результирующий контекст.

##Parallel c parallel все немного сложнее... проблема в том, что нужно будет предварительно создать все котексты и запустить из обработку... поэтмоу, возможно, в нем нет необходимости. НО!

  • stage - Stage который будет выполняться внутри.

  • fork - процедура процедура, которая сформирует массив конектстов, которые должны будут выполниться параллельно. Работает на основе fork текущего context-а для stage, или создает новый, может быть и на основен текущего, в зависимости от необходимости, и заполняет его специфичными данными.

  • combine - метод который будет формировать результирующий контекст.

##IFELSE

Stage с параметрами

  • condition - функция, которая на основании текущего контекта вычисляет условие.

  • succeess - Stage, который выполняется в случае condition(ctx) = true;

  • failed - , который выполняется в случае condition(ctx) = false;

#SWITCH

Stage с параметрами

  • condition - функция определяет строку для выборки условия.

  • cases - пары {значение:Stage}

  • defaults - ни один из перечисленных

обработка ошибок:

все последовательные операции обрываются после первой ошибки. все параллельные операции выполняются до конца, и ошибки суммируются.

записывать путь, который прошел контекст по конвееру - лог. чтобы было видно как и где и что.

https://twitter.com/NodeDublin/status/301307831133540352?uid=75756871&iid=fd641cec-8801-44b6-95fc-ff116de470a6&nid=12+595+20130212 может быть использовать stream? или что-то такое https://github.com/substack/stream-handbook, это позволит уйти от callback и вывести управление ошибками отдельно... скорее всего у меня все готово для этого... может быть придется чего то менять...

unwind делает сплит по всем вложенным полям объекта.

всякие правила удаления нужно проверять как раз на этапе подгрузки данных на сервер. и только для удаления... подготовку к удалению разделить на три метода, 1. обычное, 2. аггрегация, 3. композиция.... придумать как их удалять. поскольку в одном случает ассоциация требует удаления всех связанных, в другом, запрещает удаление при наличии хотя бы одного элемента.

???при создании элемента ключа у объекта может не быть.... и посмотреть транзакцию со встроенными объектами -- правда получиться что-то типа того, как я делал с импортом схемы.

подумать стоит ли загружать объекты связи.... соменваюсь.

с новой транзакцией можно задавать механизмы для сохранения объектов и прочее.

и следует поменять машину состояний или вообще убрать...

контекст надо оборачивать вокруг класса. создавая для него проперти. тогда для некоторых вещей не надо будет делать обращения через getParent()

сделать версию для browser

TODO: 1. Timeout если код все же выполнился, какой-то метод придумать чтобы он мог быть вызыван Promises/A+ mpromise этот проще. q навороченный но... тяжелый... и не нужно так много... написать тесты на промисы.... 2. сделать подробное описание MWS сделать милисекунды в контексте https://nodejs.org/api/process.html#process_process_hrtime Context... посмотреть может быть сделать Wrapper вокруг контекста.... тогда все свойства брать через .get() !!!schema теперь обрабатывает ошибки... можно смело использовать для валидации и в начале и в конце... 3. Context сделать изменяемым через методы, а не напрямую... как это сделано в mongoose, и вообще посмотреть как это можно убрать.... или действительно делать wrapper не хочеться чтобы из за этого тормозило.

можно использовать React
все условия сделать с возможностью запуска асинхронного кода либо через callback либо через promise