| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | // 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 = ProxyWritervar 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)}
 |