'use strict'; const Buffer = require('buffer').Buffer; const Writable = require('stream').Writable; const fs = require('fs'); const util = require('util'); function assertEncoding(encoding) { if (encoding && !Buffer.isEncoding(encoding)) { throw new Error(`Unknown encoding: ${encoding}`); } } exports.assertEncoding = assertEncoding; // Temporary hack for process.stdout and process.stderr when piped to files. function SyncWriteStream(fd, options) { Writable.call(this); options = options || {}; this.fd = fd; this.readable = false; this.autoClose = options.autoClose === undefined ? true : options.autoClose; this.on('end', () => this._destroy()); } util.inherits(SyncWriteStream, Writable); SyncWriteStream.prototype._write = function(chunk, encoding, cb) { fs.writeSync(this.fd, chunk, 0, chunk.length); cb(); return true; }; SyncWriteStream.prototype._destroy = function() { if (this.fd === null) // already destroy()ed return; if (this.autoClose) fs.closeSync(this.fd); this.fd = null; return true; }; SyncWriteStream.prototype.destroySoon = SyncWriteStream.prototype.destroy = function() { this._destroy(); this.emit('close'); return true; }; exports.SyncWriteStream = SyncWriteStream;