l
Mix Async/Sync code with Promises and Streams in a reusable unified line
Last updated 3 years ago by aularon .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install l 
SYNC missed versions from official npm registry.

L

Mix Async/Sync code with Promises and Streams in a reusable unified line

Build Status Coverage Status

You have multiple functions, some of them are async, others are promise-based, and you have some stream transformers, and you want to plug everything together: This module takes an array of functions/streams and gives you a single function, that can be used with callback, or as a promise. It takes care of piping consecutive streams, buffering them before passing them to the next function... etc.

Installation

npm install --save l

Features

  • A segment can be sync, async with a callback, can return a promise, or can define a stream
  • Consecutive streams are automatically piped, only buffered when next segment is not a stream
  • You can return a stream, and it will be automatically buffered/piped

Usage Example

const l = require('l');

var calc = l([
  (val) => val * 5, // sync
  { // Split
    add: (val) => Promise.resolve(val + 2), // promise
    mul: (val, done) => process.nextTick(() => done(null, val * 7)) // async
  },
  (composed) => composed.add + composed.mul // Join
])

calc(1, function (error, answer) { // with a callback
  require('assert').strictEqual(answer, 42)
})

calc(Math.PI).then(result => { // as a promise
  console.log(result) // 127.66370614359172
})

For a more complete example that involves streams, please check examples and tests.

Debugging

To enable debugging:

DEBUG=line node ./examples/npm-module-github-stats.js penguin
>executing on: penguin (5 segments)
   0 <async IncomingMessage {   _readableState: [Object],   readable: true,...
   1 @consuming readable stream...
   1 <sync { _id: 'penguin',   _rev: '151-868f4a334cf6a0bc8ced2f4485e7da78',   name: 'penguin',...
   2 <promise etabits/node-penguin
   3 <async IncomingMessage {   _readableState: [Object],   readable: true,...
   4 @consuming readable stream...
   4 <sync { gh: [Object],   npm: [Object] }...
<finished with { gh: [Object],   npm: [Object] }...

Running tests

npm test

Compatibility

Next (Roadmap)

  • Ability to split and rejoin a stream (parallel execution)
  • Return a readable stream when last element is a stream (optional)
  • Syntactic sugar, once uses cases are established, so we have a stable API
  • Browser use?
  • objectMode streams between segments
  • create objectMode stream duplex instead of a function wrapper
  • ...

Current Tags

  • 0.6.0                                ...           latest (3 years ago)

4 Versions

  • 0.6.0                                ...           3 years ago
  • 0.5.1                                ...           3 years ago
  • 0.5.0                                ...           3 years ago
  • 0.0.1                                ...           9 years ago
Maintainers (1)
Downloads
Today 0
This Week 11
This Month 11
Last Day 2
Last Week 15
Last Month 53
Dependencies (0)
None
Dev Dependencies (5)

Copyright 2014 - 2016 © taobao.org |