initial commit
This commit is contained in:
111
node_modules/fstream/lib/proxy-writer.js
generated
vendored
Normal file
111
node_modules/fstream/lib/proxy-writer.js
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
// A writer for when we don't know what kind of thing
|
||||
// the thing is. That is, it's not explicitly set,
|
||||
// so we're going to make it whatever the thing already
|
||||
// is, or "File"
|
||||
//
|
||||
// Until then, collect all events.
|
||||
|
||||
module.exports = ProxyWriter
|
||||
|
||||
var Writer = require('./writer.js')
|
||||
var getType = require('./get-type.js')
|
||||
var inherits = require('inherits')
|
||||
var collect = require('./collect.js')
|
||||
var fs = require('fs')
|
||||
|
||||
inherits(ProxyWriter, Writer)
|
||||
|
||||
function ProxyWriter (props) {
|
||||
var self = this
|
||||
if (!(self instanceof ProxyWriter)) {
|
||||
throw new Error('ProxyWriter must be called as constructor.')
|
||||
}
|
||||
|
||||
self.props = props
|
||||
self._needDrain = false
|
||||
|
||||
Writer.call(self, props)
|
||||
}
|
||||
|
||||
ProxyWriter.prototype._stat = function () {
|
||||
var self = this
|
||||
var props = self.props
|
||||
// stat the thing to see what the proxy should be.
|
||||
var stat = props.follow ? 'stat' : 'lstat'
|
||||
|
||||
fs[stat](props.path, function (er, current) {
|
||||
var type
|
||||
if (er || !current) {
|
||||
type = 'File'
|
||||
} else {
|
||||
type = getType(current)
|
||||
}
|
||||
|
||||
props[type] = true
|
||||
props.type = self.type = type
|
||||
|
||||
self._old = current
|
||||
self._addProxy(Writer(props, current))
|
||||
})
|
||||
}
|
||||
|
||||
ProxyWriter.prototype._addProxy = function (proxy) {
|
||||
// console.error("~~ set proxy", this.path)
|
||||
var self = this
|
||||
if (self._proxy) {
|
||||
return self.error('proxy already set')
|
||||
}
|
||||
|
||||
self._proxy = proxy
|
||||
;[
|
||||
'ready',
|
||||
'error',
|
||||
'close',
|
||||
'pipe',
|
||||
'drain',
|
||||
'warn'
|
||||
].forEach(function (ev) {
|
||||
proxy.on(ev, self.emit.bind(self, ev))
|
||||
})
|
||||
|
||||
self.emit('proxy', proxy)
|
||||
|
||||
var calls = self._buffer
|
||||
calls.forEach(function (c) {
|
||||
// console.error("~~ ~~ proxy buffered call", c[0], c[1])
|
||||
proxy[c[0]].apply(proxy, c[1])
|
||||
})
|
||||
self._buffer.length = 0
|
||||
if (self._needsDrain) self.emit('drain')
|
||||
}
|
||||
|
||||
ProxyWriter.prototype.add = function (entry) {
|
||||
// console.error("~~ proxy add")
|
||||
collect(entry)
|
||||
|
||||
if (!this._proxy) {
|
||||
this._buffer.push(['add', [entry]])
|
||||
this._needDrain = true
|
||||
return false
|
||||
}
|
||||
return this._proxy.add(entry)
|
||||
}
|
||||
|
||||
ProxyWriter.prototype.write = function (c) {
|
||||
// console.error('~~ proxy write')
|
||||
if (!this._proxy) {
|
||||
this._buffer.push(['write', [c]])
|
||||
this._needDrain = true
|
||||
return false
|
||||
}
|
||||
return this._proxy.write(c)
|
||||
}
|
||||
|
||||
ProxyWriter.prototype.end = function (c) {
|
||||
// console.error('~~ proxy end')
|
||||
if (!this._proxy) {
|
||||
this._buffer.push(['end', [c]])
|
||||
return false
|
||||
}
|
||||
return this._proxy.end(c)
|
||||
}
|
||||
Reference in New Issue
Block a user