pipey

0.0.4 • Public • Published

Pipey

Utility functions to convert instance methods's to context-free functions ready for use with esnext pipeline operator and point-free functional programming.

CircleCI npm bundle size (minified + gzip) Codecov

Read the documentation for more information

Install

To add the project to your project

yarn add pipey

Usage

Import it to your file

import { createPipe, createPipes, fromClassPrototype, compose } from 'pipey';
// Note: compose is a regular lodash-like compose function

fromClassPrototype

const { map, filter } = fromClassPrototype(Array);
 
const doubleNumbers = map(x => x * 2);
const doubleOddNumbers = compose(doubleNumbers, filter(x => x % 2));
 
doubleOddNumbers([ 2, 3, 4, 5 ]); // Returns [ 6, 10 ]

createPipe

const forEach = createPipe('forEach');
forEach(x => console.log(x))([ 1, 2, 3, 4 ]); // Logs 1 2 3 4

createPipes

const { map, filter, split } = createPipes(['map', 'filter', 'split']);
const head = ([ first ]) => first;
const compact = filter(Boolean);
 
const getFirstNames = names =>
    names
        |> compact
        |> map(split(' '))
        |> map(head);
 
getFirstNames([ '', null, 'Akshay Nair', 'John Doe', 'Bruce Fucking Lee' ]); // Returns ['Akshay', 'John', 'Bruce']

Example use cases

  • Using with the amazing pipe operator
const { map, filter, reduce } = fromClassPrototype(Array);
 
const fromPairs = reduce((acc, [ k, v ]) => ({ ...acc, [k]: v }), {});
 
const getInputData = () =>
    [...document.querySelectorAll('.js-input')]
        |> map($input => [ $input.name, $input.value ])
        |> filter(([_, value]) => value)
        |> fromPairs;
 
getInputData(); // Returns something like { email: 'han.solo@gmail.com', name: 'Han Solo' }
  • Working with collection methods
// Two ways to extract methods out (createPipes & fromClassPrototype)
const { map, filter } = fromClassPrototype(Array);
const { split } = createPipes(['split']);
const head = ([ first ]) => first;
 
const getFirstNames = compose(
    map(head),
    map(split(' ')),
    filter(Boolean),
);
 
getFirstNames([ '', null, 'Akshay Nair', 'John Doe', 'Bruce Fucking Lee' ]); // Returns ['Akshay', 'John', 'Bruce']
  • Working with dom methods
const { forEach, join } = fromClassPrototype(Array);
const { setAttribute } = fromClassPrototype(HTMLInputElement);
const inputs = ['.js-input-name', '.js-input-email'];
 
inputs
    |> join('')
    |> (selector => document.querySelectorAll(selector))
    |> forEach(setAttribute('disabled', 'disabled'));

Package Sidebar

Install

npm i pipey

Weekly Downloads

6

Version

0.0.4

License

MIT

Unpacked Size

21.3 kB

Total Files

23

Last publish

Collaborators

  • phenax