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-decorator

v1.0.1

Published

A pipe decorator for javascript

Downloads

4

Readme

Pipeline Decorator 🚰

NOTE: THIS IS NOT STREAMING PIPES

Introduction

It's more than two years in making of pipe operator and no one knows if it's going to make it into final JS spec. For more information about Pipeline operator, please refer the below documentation.

link to Pipeline Operator docs

Pipeline operators are more common in functional programming languages, like Elixer, Haskell etc. Whether they are good for your codebase or how readable they are, those decisions I will leave it to you. But, if you like it and want to incorporate into your JS codebase, boy this is the library you are looking for. For more information on why I wrote this decorator, please read my blog.

I made Pipeline Decorator for one who wants to use Pipeline Operator in JavaScript 🚰

To make things better and useful, this library works with a combination of Promise and functions.

Use cases

  1. Makes your code clean and easy to read.
  2. Better and chaining
  3. Makes multiple Promise handling cleaner and readable with pre and post data preparation.

Install

$ npm i pipe-decorator

Usage

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

pipe(<primitive-type>)([Function])(<primitive-type>)([Promise])();

Notice how we close with empty invocation to return the value.

Examples

const _ = require('lodash');
const axios = require('axios');
const pipe = require('./index');

async function fetchBlogCommentsByPostIds(postIds) {
	return await axios
		.get('https://jsonplaceholder.typicode.com/comments', {
			params: {
				postId: postIds
			}
		})
		.then((response) => {
			return response.data;
		});
}

let preFilter = [ 0, 1, false, 2, '', 3 ];
let differenceArray = [ 2, 4, 5, 6 ];
let emailToFind = { email: '[email protected]' };

// Empty Pipe
let test1 = pipe();

// Pipe with just one param
let test2 = pipe(preFilter)();

// Pipe with param and a filter
let test3 = pipe(preFilter)(_.compact)();

// Pipe with param and a filter then along with second parameter passed to another filter
let test4 = pipe(preFilter)(_.compact)(differenceArray)(_.difference)(); //Output: [1, 3]

// Pipe with pre processing of data before an API call. It returns a promise
let test5 = pipe(preFilter)(_.compact)(fetchBlogCommentsForPostIds)();

// Pipe with post processing of data after the Promise returns. It also returns a promise
let test6 = pipe(differenceArray)(fetchBlogCommentsForPostIds)(emailToFind)(_.filter)();

// Pipe with pre and post processing of data with 2 parameters for filter at some point. This also returns a promise.
let test7 = pipe(preFilter)(_.compact)(differenceArray)(_.difference)(fetchBlogCommentsByPostIds)(emailToFind)(_.filter)();

Asserts

console.assert(test1 === undefined);
console.assert(_.isEqual(test2, preFilter));
console.assert(_.isEqual(test3, [ 1, 2, 3 ]));
console.assert(_.isEqual(test4, [ 1, 3 ]));

test5.then((value) => {
	console.assert(value.length > 1);
});

test6.then((value) => {
	console.assert(_.isEqual(value, []));
});

test7.then((value) => {
	console.assert(value.length > 0);
});

TODO

  1. Pass function as argument to be invoked as part of another function's argument.
  2. Make browser compatible. It only works on Nodejs.
  3. Test with 3 or 4 arguments. It works, but needs more testing.
  4. More testing in general.