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 |
|
}
|
|
|