Package Exports
- pipey
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (pipey) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Pipey
Utility functions to convert instance methods's to context-free functions ready for use with esnext pipeline operator and point-free functional programming.
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 { map, forEach } = fromClassPrototype(Array);
const { setAttribute } = fromClassPrototype(HTMLInputElement);
const inputs = ['.js-input-name', '.js-input-email'];
inputs
|> map(selector => document.querySelector(selector))
|> forEach(setAttribute('disabled', 'disabled'));