@blakek/compose

๐Ÿ›  Compose functions and promises

Usage no npm install needed!

<script type="module">
  import blakekCompose from 'https://cdn.skypack.dev/@blakek/compose';
</script>

README

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