| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | // the parent class for all fstreams.module.exports = Abstractvar Stream = require('stream').Streamvar inherits = require('inherits')function Abstract () {  Stream.call(this)}inherits(Abstract, Stream)Abstract.prototype.on = function (ev, fn) {  if (ev === 'ready' && this.ready) {    process.nextTick(fn.bind(this))  } else {    Stream.prototype.on.call(this, ev, fn)  }  return this}Abstract.prototype.abort = function () {  this._aborted = true  this.emit('abort')}Abstract.prototype.destroy = function () {}Abstract.prototype.warn = function (msg, code) {  var self = this  var er = decorate(msg, code, self)  if (!self.listeners('warn')) {    console.error('%s %s\n' +    'path = %s\n' +    'syscall = %s\n' +    'fstream_type = %s\n' +    'fstream_path = %s\n' +    'fstream_unc_path = %s\n' +    'fstream_class = %s\n' +    'fstream_stack =\n%s\n',      code || 'UNKNOWN',      er.stack,      er.path,      er.syscall,      er.fstream_type,      er.fstream_path,      er.fstream_unc_path,      er.fstream_class,      er.fstream_stack.join('\n'))  } else {    self.emit('warn', er)  }}Abstract.prototype.info = function (msg, code) {  this.emit('info', msg, code)}Abstract.prototype.error = function (msg, code, th) {  var er = decorate(msg, code, this)  if (th) throw er  else this.emit('error', er)}function decorate (er, code, self) {  if (!(er instanceof Error)) er = new Error(er)  er.code = er.code || code  er.path = er.path || self.path  er.fstream_type = er.fstream_type || self.type  er.fstream_path = er.fstream_path || self.path  if (self._path !== self.path) {    er.fstream_unc_path = er.fstream_unc_path || self._path  }  if (self.linkpath) {    er.fstream_linkpath = er.fstream_linkpath || self.linkpath  }  er.fstream_class = er.fstream_class || self.constructor.name  er.fstream_stack = er.fstream_stack ||    new Error().stack.split(/\n/).slice(3).map(function (s) {      return s.replace(/^ {4}at /, '')    })  return er}
 |