| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 
							- var Stream = require('stream')
 
- module.exports = MuteStream
 
- // var out = new MuteStream(process.stdout)
 
- // argument auto-pipes
 
- function MuteStream (opts) {
 
-   Stream.apply(this)
 
-   opts = opts || {}
 
-   this.writable = this.readable = true
 
-   this.muted = false
 
-   this.on('pipe', this._onpipe)
 
-   this.replace = opts.replace
 
-   // For readline-type situations
 
-   // This much at the start of a line being redrawn after a ctrl char
 
-   // is seen (such as backspace) won't be redrawn as the replacement
 
-   this._prompt = opts.prompt || null
 
-   this._hadControl = false
 
- }
 
- MuteStream.prototype = Object.create(Stream.prototype)
 
- Object.defineProperty(MuteStream.prototype, 'constructor', {
 
-   value: MuteStream,
 
-   enumerable: false
 
- })
 
- MuteStream.prototype.mute = function () {
 
-   this.muted = true
 
- }
 
- MuteStream.prototype.unmute = function () {
 
-   this.muted = false
 
- }
 
- Object.defineProperty(MuteStream.prototype, '_onpipe', {
 
-   value: onPipe,
 
-   enumerable: false,
 
-   writable: true,
 
-   configurable: true
 
- })
 
- function onPipe (src) {
 
-   this._src = src
 
- }
 
- Object.defineProperty(MuteStream.prototype, 'isTTY', {
 
-   get: getIsTTY,
 
-   set: setIsTTY,
 
-   enumerable: true,
 
-   configurable: true
 
- })
 
- function getIsTTY () {
 
-   return( (this._dest) ? this._dest.isTTY
 
-         : (this._src) ? this._src.isTTY
 
-         : false
 
-         )
 
- }
 
- // basically just get replace the getter/setter with a regular value
 
- function setIsTTY (isTTY) {
 
-   Object.defineProperty(this, 'isTTY', {
 
-     value: isTTY,
 
-     enumerable: true,
 
-     writable: true,
 
-     configurable: true
 
-   })
 
- }
 
- Object.defineProperty(MuteStream.prototype, 'rows', {
 
-   get: function () {
 
-     return( this._dest ? this._dest.rows
 
-           : this._src ? this._src.rows
 
-           : undefined )
 
-   }, enumerable: true, configurable: true })
 
- Object.defineProperty(MuteStream.prototype, 'columns', {
 
-   get: function () {
 
-     return( this._dest ? this._dest.columns
 
-           : this._src ? this._src.columns
 
-           : undefined )
 
-   }, enumerable: true, configurable: true })
 
- MuteStream.prototype.pipe = function (dest, options) {
 
-   this._dest = dest
 
-   return Stream.prototype.pipe.call(this, dest, options)
 
- }
 
- MuteStream.prototype.pause = function () {
 
-   if (this._src) return this._src.pause()
 
- }
 
- MuteStream.prototype.resume = function () {
 
-   if (this._src) return this._src.resume()
 
- }
 
- MuteStream.prototype.write = function (c) {
 
-   if (this.muted) {
 
-     if (!this.replace) return true
 
-     if (c.match(/^\u001b/)) {
 
-       if(c.indexOf(this._prompt) === 0) {
 
-         c = c.substr(this._prompt.length);
 
-         c = c.replace(/./g, this.replace);
 
-         c = this._prompt + c;
 
-       }
 
-       this._hadControl = true
 
-       return this.emit('data', c)
 
-     } else {
 
-       if (this._prompt && this._hadControl &&
 
-           c.indexOf(this._prompt) === 0) {
 
-         this._hadControl = false
 
-         this.emit('data', this._prompt)
 
-         c = c.substr(this._prompt.length)
 
-       }
 
-       c = c.toString().replace(/./g, this.replace)
 
-     }
 
-   }
 
-   this.emit('data', c)
 
- }
 
- MuteStream.prototype.end = function (c) {
 
-   if (this.muted) {
 
-     if (c && this.replace) {
 
-       c = c.toString().replace(/./g, this.replace)
 
-     } else {
 
-       c = null
 
-     }
 
-   }
 
-   if (c) this.emit('data', c)
 
-   this.emit('end')
 
- }
 
- function proxy (fn) { return function () {
 
-   var d = this._dest
 
-   var s = this._src
 
-   if (d && d[fn]) d[fn].apply(d, arguments)
 
-   if (s && s[fn]) s[fn].apply(s, arguments)
 
- }}
 
- MuteStream.prototype.destroy = proxy('destroy')
 
- MuteStream.prototype.destroySoon = proxy('destroySoon')
 
- MuteStream.prototype.close = proxy('close')
 
 
  |