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

pipe-now

v1.0.4

Published

A pipe function that acts like the pipeline operator proposal.

Downloads

14

Readme

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