You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							85 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							85 lines
						
					
					
						
							2.0 KiB
						
					
					
				// the parent class for all fstreams. | 
						|
 | 
						|
module.exports = Abstract | 
						|
 | 
						|
var Stream = require('stream').Stream | 
						|
var 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 | 
						|
}
 | 
						|
 |