Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

pipe-functions

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pipe-functions

Pipe functions in a Unix-like style. It supports Promises (async) anywhere in the pipeline and every step will be executed sequentially. The return (resolve in case of Promises) of each function will be passed in as an argument to the next one

  • 1.2.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

pipe-functions

Build Status

Pipe functions in a Unix-like style. It supports Promises (async) anywhere in the pipeline and every step will be executed sequentially. The return (resolve in case of Promises) of each function will be passed in as an argument to the next one

Key features:

  • Supports Promises, or any lib following the Promises/A+ spec about being thenable (.then() method)
  • Promises will be executed sequentially
  • First argument can be of any type (String, Number, Date, etc.) or even a Function or a Promise
  • Node.js and Browser ready (to be used on a Browser, without a build step, check lib/pipe-non-es6.js)
  • Lightweight, 501 bytes, before gzip!

Install

NPM / Node

npm install pipe-functions

Usage

Sync

const pipe = require('pipe-functions');

// First argument can be of any type
const result = pipe('input', fn1, fn2, fnN);
// And also a function
const result2 = pipe(fn0, fn1, fn2, fnN);

Async (Promises)

If the pipeline contains a Promise anywhere in the pipeline, we must treat pipe like a Promise itself, so we must to use .then() to get the final result.

const pipe = require('pipe-functions');

// First argument can be of any type, as shown in the previous example
pipe('input', fn1, fnPromise1, fn2, fnPromise2).then(console.log);

A suggestion regarding Promises. Probably you've seen, or had to write, a stack of promises like that:

someAsyncFunction('param')
  .then(doSomethingWithTheResult)
  .then(doSomethingElseWithTheResultOfTheLast)
  .then(oneMore)
  .then(almostThere)
  .then(done)
  .catch(console.log)

It could be written as:

const pipe = require('pipe-functions');

pipe(
    someAsyncFunction('param'),
    doSomethingWithTheResult,
    doSomethingElseWithTheResultOfTheLast,
    oneMore,
    almostThere,
    done
).catch(console.log)

Examples

OBS: Some examples needs a platform with support for Destructuring (Nodejs v6+, Chrome).

Sync

const pipe = require('pipe-functions');

/** Functions **/
const capitalize = v => v[0].toUpperCase() + v.slice(1);
const quote = v => `"${v}"`;

/** Pipe **/
// result will be: "Time"
const result = pipe('time', capitalize, quote);

Async (Promises)

const pipe = require('pipe-functions');

/** Functions **/
// Sync
const capitalize = v => v[0].toUpperCase() + v.slice(1);
// Async
const fetchAndSetBandName = v => new Promise((resolve, reject) => setTimeout(() => resolve(`Pink Floyd - ${v}`), 1000));

/** Pipe **/
// the result will be: Pink Floyd - Time
pipe('time', capitalize, fetchAndSetBandName).then(console.log)
Example with destructuring,

To easily pass in more than one value (within an Object or Array) through the pipeline.

const pipe = require('pipe-functions');

/** Functions **/
// Async
const fetchBandName = ({ song }) => new Promise((resolve, reject) =>
setTimeout(() => resolve({ song, band: 'Pink Floyd' }), 1000));
// Sync
const concatBandAndSong = ({ song, band }) => `${band} - ${song}`;

/** Pipe **/
// the result will be: Pink Floyd - Time
pipe('time', fetchBandName, concatBandAndSong).then(console.log)

Keywords

FAQs

Package last updated on 17 Aug 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc