JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8
  • Score
    100M100P100Q45098F
  • License MIT

Utility functions to convert class-based api's to parameter-based functions

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. Convert any x => 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'));