npm.io
4.0.1 β€’ Published 6 years ago

@blakek/compose

Licence
MIT
Version
4.0.1
Deps
1
Size
103 kB
Vulns
0
Weekly
0
Stars
2

compose

Compose functions and promises

Code can become complex when several functions wrap others or reduce() is used to combine a list of funtions.

This allows composing a pipeline of functions. compose calls each function from right-to-left and passes the output from the previous to the next. pipe is the same, but works from left-to-right.

Install

Using Yarn:

$ yarn add @blakek/compose

…or using npm:

$ npm i --save @blakek/compose

Usage

import { compose, pipe } from '@blakek/compose';

const fetchUsers = () =>
  Promise.resolve([
    { sites: { github: { username: 'blakek' } } },
    { sites: { github: { username: 'gsandf' } } },
    { sites: { github: { username: 'google' } } }
  ]);

// using `compose`
const getUsers = compose(
  users => users.map(user => user.sites.github.username),
  fetchUsers
);

// using `pipe`
const getUsersPipe = pipe(fetchUsers, users =>
  users.map(user => user.sites.github.username)
);

getUsers().then(console.log); //Β» [ 'blakek', 'gsandf', 'google' ]

// NOTE: awaiting is only required if one of the arguments is a Promise
pipe(
  n => n + 2,
  n => n * 3
)(3); //Β» 15

await pipe(
  () => delay(500),
  n => n + 2,
  n => n * 3
)(3); //Β» 15

API

compose
function compose(...[fn, ...fns]: Function[]): Function;
pipe
function pipe(...[fn, ...fns]: Function[]): Function;

Contributing

Node.js and Yarn are required to work with this project.

To install all dependencies, run:

yarn
Useful Commands
yarn build Builds the project to ./dist
yarn format Format the source following the Prettier styles
yarn test Run project tests
yarn test --watch Run project tests, watching for file changes

License

MIT

Keywords