Sha256: 7b2f3f94d3d636a67a35494f918873767f0788a290fd4ea0a299d079ad860db3
Contents?: true
Size: 1.69 KB
Versions: 3
Compression:
Stored size: 1.69 KB
Contents
var Stream = require("stream") , writeMethods = ["write", "end", "destroy"] , readMethods = ["resume", "pause"] , readEvents = ["data", "close"] , slice = Array.prototype.slice module.exports = duplex function duplex(writer, reader) { var stream = new Stream() , ended = false writeMethods.forEach(proxyWriter) readMethods.forEach(proxyReader) readEvents.forEach(proxyStream) reader.on("end", handleEnd) writer.on("drain", function() { stream.emit("drain") }) writer.on("error", reemit) reader.on("error", reemit) stream.writable = writer.writable stream.readable = reader.readable return stream function proxyWriter(methodName) { stream[methodName] = method function method() { return writer[methodName].apply(writer, arguments) } } function proxyReader(methodName) { stream[methodName] = method function method() { stream.emit(methodName) var func = reader[methodName] if (func) { return func.apply(reader, arguments) } reader.emit(methodName) } } function proxyStream(methodName) { reader.on(methodName, reemit) function reemit() { var args = slice.call(arguments) args.unshift(methodName) stream.emit.apply(stream, args) } } function handleEnd() { if (ended) { return } ended = true var args = slice.call(arguments) args.unshift("end") stream.emit.apply(stream, args) } function reemit(err) { stream.emit("error", err) } }
Version data entries
3 entries across 3 versions & 2 rubygems