🐛 Update: Added support for the 'find' command in settings.local.json. Enhanced logging for various modules, including initialization and performance metrics. Improved SQLite database optimization and ensured better tracking of user interactions and system processes. 📚
This commit is contained in:
87
network-visualization/node_modules/duplexer/index.js
generated
vendored
Normal file
87
network-visualization/node_modules/duplexer/index.js
generated
vendored
Normal file
@ -0,0 +1,87 @@
|
||||
var Stream = require("stream")
|
||||
var writeMethods = ["write", "end", "destroy"]
|
||||
var readMethods = ["resume", "pause"]
|
||||
var readEvents = ["data", "close"]
|
||||
var slice = Array.prototype.slice
|
||||
|
||||
module.exports = duplex
|
||||
|
||||
function forEach (arr, fn) {
|
||||
if (arr.forEach) {
|
||||
return arr.forEach(fn)
|
||||
}
|
||||
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
fn(arr[i], i)
|
||||
}
|
||||
}
|
||||
|
||||
function duplex(writer, reader) {
|
||||
var stream = new Stream()
|
||||
var ended = false
|
||||
|
||||
forEach(writeMethods, proxyWriter)
|
||||
|
||||
forEach(readMethods, proxyReader)
|
||||
|
||||
forEach(readEvents, 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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user