JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 9
  • Score
    100M100P100Q42999F
  • 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.

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 { 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'));