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.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							86 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
 | |
| }
 |