Socket
Socket
Sign inDemoInstall

l

Package Overview
Dependencies
0
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    l

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


Version published
Weekly downloads
1.4K
increased by46.74%
Maintainers
1
Install size
27.3 kB
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 19 Jun 2017

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc