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 🙏

© 2024 – Pkg Stats / Ryan Hefner

pipeline-maker

v2.1.1

Published

A library to create pipelines with small and smart classes.

Downloads

3

Readme

Welcome to pipeline-runner 👋

Version Documentation Maintenance License: MIT TypeScript

This library provides a mechanism to create flows of calls to functions in the form of a pipeline with a fluid and very flexible API.

🏠 Homepage

Install

npm install pipeline-runner

Note: The package includes Typescript type metadata for secure typing support, it is lightweight and easy to use. It's very cool

Usage

This library allows to implement a well-known and used pipeline pattern, for example, in the http framework that performs a pipeline of the processing of the incoming http request, where a context is handled that is passed to each agent / function to receive said context and a 'next' function that allows the execution line to continue. The philosophy is simple and well known

const { usePipeline } = require("pipeline-runner");

function someObject(){
  this.test = false;
}

const value = new someObject();
const pipeline = usePipeline((x, next) => { x.test = true; next(); })
 .pipe((x, next) => { x.test = false; next(); })
 .pipe((x, next) => { x.test = true;  });
pipeline.run(value); // the last agent set the value to true

Observation

  • The 'next' argument allows the execution of the next agent in the pipeline to continue.
  • You can import the 'usePipeline' helper to factory a pipeline object without instance the class.
  • The method run invoke the pipeline and require an argument that this is a context
const { usePipeline } = require("pipeline-runner");

function someObject(){
  this.test = false;
}

const value = new someObject();
const pipeline = usePipeline((x, next) => { x.test = true; next(); })
 .pipe((x, next) => { x.test = false;  })
 .pipe((x, next) => { x.test = true;  });
pipeline.run(value); // the last agent executed set false because the next is not invoked

Note: If the argument is 'next' it is omitted, that is, a function is passed that only receives one argument, the context, then the pipeline is given continuously by itself

Using Typescript

import { usePipeline } from 'pipeline-runner';

class ContextA {
    public msg: string;
    public num: number;
}

// tslint:disable-next-line: max-classes-per-file
class ContextB {
    public result: string;
    constructor(_result: string){
        this.result = _result;
    }
}

const result = usePipeline<ContextA>(x => x.msg = "data")
.pipe(x => x.num = 22)
.mutate(x => new ContextB(`this is a message: ${x.msg} and number ${x.num}`))
.pipe(x => x.result += '...')
.run(new ContextA())

console.log(result.result);

Typescript allows to improve the development experience significantly for well-known reasons, it also makes using the context mutations make sense, since in each mutation the IDE through the type system, it will not say the properties and context methods that we are passing in the pipeline In other words, we will have autocompletion of the current context using the 'pipe' method and when we invoke 'run', the type of argument will be the one that initially had the first pipeline instance. So the 'mutate' method concatenates n pipes as we like to allow us a flexible and typed flow.

Note: Note that you are using functions in this pipeline without the next argument, an example of an auto continuous pipeline

Async Pipeline Support

Not everything is synchronous and linear in Javascript, so it can come to us asynchronously certain information through events, service responses and etc, for that, a special type of pipeline is implemented, which works with asynchronous agents (pipes) where each process waits for its predecessor to be executed.

Run tests

You can run the many tests included in this repo, then you must clone this repo and install dependencies.

npm run test

Author

👤 Oliver Valiente

🤝 Contributing

Contributions, issues and feature requests are welcome!

Feel free to check issues page. You can also take a look at the contributing guide.

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2021 Oliver Valiente.

This project is MIT licensed.


This README was generated with ❤️ by readme-md-generator