New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

pipe-now

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pipe-now

A pipe function that acts like the pipeline operator proposal.

latest
Source
npmnpm
Version
1.0.4
Version published
Maintainers
1
Created
Source

pipe-now

A tiny package that simulates the behavior of the pipeline-operator proposal.

Build Status Code Coverage version downloads MIT License

PRs Welcome Code of Conduct

Watch on GitHub Star on GitHub Tweet

Installation

This module is distributed via npm which is bundled with node and should be installed as one of your project's dependencies:

npm install --save pipe-now

The problem

The pipeline operator is an awesome thing, but unfortunately the proposals available for babel vary quite a bit, and they can still change more, as they are still in early stages of development and there's no agreement on an API yet.

This solution

This package tries to solve the problem stated above by simulating the pipeline operator through a function. I know, it's not as nice as having an actual syntax for that, but until the proposal gets more stable this can be a good replacement.

Usage

This package exports a function which receives a plain value as the first argument, and all the next arguments are functions that receives the previous value, and returns the next value.

You can use it with inline functions:

import pipe from 'pipe-now'

function getFruits() {
  const fruitsUppercase = ['APPLE', 'BANANA', 'ORANGE']
  const fruitsLowercase = pipe(
    fruitsUppercase,
    (values) => values.map((value) => value.toLowerCase()),
  )
  return fruitsLowercase // ['apple', 'banana', 'orange']
}

To avoid code duplication, you can also extract the functions and just pass the reference to them:

import pipe from 'pipe-now'

function arrayToLowerCase(arr) {
  return arr.map((value) => value.toLowerCase())
}

function getFruits() {
  const fruitsUppercase = ['APPLE', 'BANANA', 'ORANGE']
  const fruitsLowercase = pipe(
    fruitsUppercase,
    arrayToLowerCase,
  )
  return fruitsLowercase // ['apple', 'banana', 'orange']
}

You can also check below a more complex use of the pipe function, with data fetching and manipulating this data:

import pipe from 'pipe-now'

// Simulates an async data fetch
function fetchPeople() {
  return Promise.resolve({
    count: 3,
    results: [
      {
        name: 'Luke Skywalker',
        height: '172',
      },
      {
        name: 'C-3PO',
        height: '167',
      },
      {
        name: 'Darth Vader',
        height: '202',
      },
    ],
  })
}

function average(arr) {
  const sum = arr.reduce((a, b) => a + b)
  const avg = sum / arr.length

  return avg
}

async function getPeopleHeightAverage() {
  const peopleHeightAverage = pipe(
    await fetchPeople(), // Get list of Star Wars people
    (values) => values.results, // Get only the `results` property of the response
    (values) => values.map((people) => people.height), // Get only the people height
    (values) => values.map(Number), // Convert values from string to number
    average, // Calculate the average
    Math.round, // Round the value
  )

  return peopleHeightAverage // returns 180
}

Inspiration

Other Solutions

lodash's flow

You can kind of use it to simulate the pipeline syntax, like the following:

const value = _.flow(
  () => 'initial value',
  (val) => val.toUpperCase(),
)()

If you are already using lodash, you can of course also create a wrapper for that.

LICENSE

MIT

Keywords

pipe

FAQs

Package last updated on 06 Apr 2019

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