Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/virgo-agent-toolkit/luvit-stream

Stream interface in Luvit - this is now in Luvit core
https://github.com/virgo-agent-toolkit/luvit-stream

Last synced: 3 months ago
JSON representation

Stream interface in Luvit - this is now in Luvit core

Awesome Lists containing this project

README

        

luvit-stream
============

Stream interface in Luvit

## Examples

A simple example of `Readable` stream in string mode:

```

local stream = require('..')

local Numbers = stream.Readable:extend()

function Numbers:initialize(count, options)
local opt = options or {}
stream.Readable.initialize(self, opt)
self.current = 1
self.count = count
end

function Numbers:_read()
if self.current > self.count then
self:push(nil)
return
else
self:push(tostring(self.current))
self.current = self.current + 1
end
end

Numbers:new(9):pipe(process.stdout)

```

A more complex example using object mode with a `Readable` stream and two `Transform` streams:

```

local stream = require('..')
local fs = require('fs')
local core = require('core')

local Numbers = stream.Readable:extend()

function Numbers:initialize(count, options)
local opt = options or {}
opt.objectMode = true
stream.Readable.initialize(self, opt)
self.current = 1
self.count = count
end

function Numbers:_read()
if self.current > self.count then
self:push(nil)
return
else
self:push({num = self.current})
self.current = self.current + 1
end
end

local NumberIncreaser = stream.Transform:extend()

function NumberIncreaser:initialize(options)
local opt = options or {}
opt.objectMode = true
stream.Transform.initialize(self, opt)
end

function NumberIncreaser:_transform(data, encoding, callback)
callback(nil, {num = data.num + 1})
end

local Stringify = stream.Transform:extend()

function Stringify:initialize(options)
local opt = options or {}
opt.objectMode = true
stream.Transform.initialize(self, opt)
end

function Stringify:_transform(data, encoding, callback)
if data and data.num then
callback(nil, tostring(data.num))
end
end

Numbers:new(9):pipe(NumberIncreaser:new()):pipe(Stringify:new()):pipe(process.stdout)

```