| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | // A reader for when we don't yet know what kind of thing// the thing is.module.exports = ProxyReadervar Reader = require('./reader.js')var getType = require('./get-type.js')var inherits = require('inherits')var fs = require('graceful-fs')inherits(ProxyReader, Reader)function ProxyReader (props) {  var self = this  if (!(self instanceof ProxyReader)) {    throw new Error('ProxyReader must be called as constructor.')  }  self.props = props  self._buffer = []  self.ready = false  Reader.call(self, props)}ProxyReader.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(Reader(props, current))  })}ProxyReader.prototype._addProxy = function (proxy) {  var self = this  if (self._proxyTarget) {    return self.error('proxy already set')  }  self._proxyTarget = proxy  proxy._proxy = self  ;[    'error',    'data',    'end',    'close',    'linkpath',    'entry',    'entryEnd',    'child',    'childEnd',    'warn',    'stat'  ].forEach(function (ev) {    // console.error('~~ proxy event', ev, self.path)    proxy.on(ev, self.emit.bind(self, ev))  })  self.emit('proxy', proxy)  proxy.on('ready', function () {    // console.error("~~ proxy is ready!", self.path)    self.ready = true    self.emit('ready')  })  var calls = self._buffer  self._buffer.length = 0  calls.forEach(function (c) {    proxy[c[0]].apply(proxy, c[1])  })}ProxyReader.prototype.pause = function () {  return this._proxyTarget ? this._proxyTarget.pause() : false}ProxyReader.prototype.resume = function () {  return this._proxyTarget ? this._proxyTarget.resume() : false}
 |