开发者社区> 镜像站> NPM> @blakek/compose
@blakek/compose
🛠 Compose functions and promises
Last updated 2 months ago by blakek .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @blakek/compose 
SYNC missed versions from official npm registry.

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

Current Tags

  • 4.0.1                                ...           latest (2 months ago)

6 Versions

  • 4.0.1                                ...           2 months ago
  • 4.0.0                                ...           2 months ago
  • 3.0.1                                ...           2 months ago
  • 3.0.0                                ...           6 months ago
  • 2.0.0                                ...           6 months ago
  • 1.0.0                                ...           6 months ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 6
Last Month 12
Dependencies (1)
Dependents (0)
None