l

    0.6.0 • Public • Published

    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
    • ...

    Install

    npm i l

    DownloadsWeekly Downloads

    591

    Version

    0.6.0

    License

    MIT

    Last publish

    Collaborators

    • aularon