Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ pipey Public

Create pipeline operator ready functions by converting instance methods's to context-free functions

License

Notifications You must be signed in to change notification settings

phenax/pipey

Repository files navigation

Pipey

Utility functions to convert instance methods's to context-free functions ready for use with esnext pipeline operator and point-free functional programming. Convert any x.whatever(...args) to whatever(...arg)(x).

CircleCI npm bundle size (minified + gzip) Codecov

Read the documentation for more information

Install it

yarn add pipey

Import it to your file

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

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']

Proxy based api

A proxy based alternative api for pipey Read the documentation

import _ from 'pipey/proxy';
const getInitials = compose(
 _.join(''),
 _.map(_.charAt(0)),
 _.split(' '),
 _.$prop('name'), // $prop is a pre-defined plugin
);
getInitials({ name: 'Akshay Nair' }) === 'AN';

Example use cases

  • Using with the amazing pipe operator
const { map, filter, reduce } = fromClassPrototype(Array);
const getInputData = () =>
 document.querySelectorAll('.js-input')
 |> map($input => [ $input.name, $input.value ])
 |> filter(([_, value]) => value)
 |> Object.fromEntries
 |> Array.from;
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 getFirstNames = compose(
 map(xs => xs[0]),
 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'));

About

Create pipeline operator ready functions by converting instance methods's to context-free functions

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /