pnpm 6.22.2 → 6.23.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/node_modules/ansi-regex/index.js +8 -2
  2. package/dist/node_modules/ansi-regex/license +4 -16
  3. package/dist/node_modules/ansi-regex/package.json +53 -62
  4. package/dist/node_modules/aproba/index.js +33 -33
  5. package/dist/node_modules/aproba/package.json +5 -4
  6. package/dist/node_modules/are-we-there-yet/{index.js → lib/index.js} +0 -0
  7. package/dist/node_modules/are-we-there-yet/{tracker-base.js → lib/tracker-base.js} +0 -0
  8. package/dist/node_modules/are-we-there-yet/{tracker-group.js → lib/tracker-group.js} +14 -5
  9. package/dist/node_modules/are-we-there-yet/{tracker-stream.js → lib/tracker-stream.js} +0 -0
  10. package/dist/node_modules/are-we-there-yet/{tracker.js → lib/tracker.js} +3 -1
  11. package/dist/node_modules/are-we-there-yet/package.json +35 -17
  12. package/dist/node_modules/{npmlog → color-support}/LICENSE +0 -0
  13. package/dist/node_modules/color-support/bin.js +3 -0
  14. package/dist/node_modules/color-support/browser.js +14 -0
  15. package/dist/node_modules/color-support/index.js +134 -0
  16. package/dist/node_modules/color-support/package.json +36 -0
  17. package/dist/node_modules/debug/LICENSE +10 -9
  18. package/dist/node_modules/debug/package.json +6 -6
  19. package/dist/node_modules/debug/src/common.js +1 -1
  20. package/dist/node_modules/gauge/{base-theme.js → lib/base-theme.js} +7 -3
  21. package/dist/node_modules/gauge/lib/demo.js +45 -0
  22. package/dist/node_modules/gauge/{error.js → lib/error.js} +0 -0
  23. package/dist/node_modules/gauge/lib/has-color.js +4 -0
  24. package/dist/node_modules/gauge/{index.js → lib/index.js} +90 -33
  25. package/dist/node_modules/gauge/{plumbing.js → lib/plumbing.js} +3 -1
  26. package/dist/node_modules/gauge/{process.js → lib/process.js} +0 -0
  27. package/dist/node_modules/gauge/{progress-bar.js → lib/progress-bar.js} +12 -6
  28. package/dist/node_modules/gauge/{render-template.js → lib/render-template.js} +69 -28
  29. package/dist/node_modules/gauge/{set-immediate.js → lib/set-immediate.js} +0 -0
  30. package/dist/node_modules/gauge/{set-interval.js → lib/set-interval.js} +0 -0
  31. package/dist/node_modules/gauge/{spin.js → lib/spin.js} +0 -0
  32. package/dist/node_modules/gauge/{template-item.js → lib/template-item.js} +21 -7
  33. package/dist/node_modules/gauge/{theme-set.js → lib/theme-set.js} +31 -24
  34. package/dist/node_modules/gauge/lib/themes.js +56 -0
  35. package/dist/node_modules/gauge/{wide-truncate.js → lib/wide-truncate.js} +9 -3
  36. package/dist/node_modules/gauge/package.json +39 -40
  37. package/dist/node_modules/is-fullwidth-code-point/index.js +40 -36
  38. package/dist/node_modules/is-fullwidth-code-point/license +4 -16
  39. package/dist/node_modules/is-fullwidth-code-point/package.json +40 -43
  40. package/dist/node_modules/node-gyp/package.json +2 -2
  41. package/dist/node_modules/npmlog/{log.js → lib/log.js} +148 -54
  42. package/dist/node_modules/npmlog/package.json +30 -12
  43. package/dist/node_modules/readable-stream/errors-browser.js +127 -0
  44. package/dist/node_modules/readable-stream/errors.js +116 -0
  45. package/dist/node_modules/readable-stream/experimentalWarning.js +17 -0
  46. package/dist/node_modules/readable-stream/lib/_stream_duplex.js +52 -44
  47. package/dist/node_modules/readable-stream/lib/_stream_passthrough.js +1 -9
  48. package/dist/node_modules/readable-stream/lib/_stream_readable.js +446 -341
  49. package/dist/node_modules/readable-stream/lib/_stream_transform.js +29 -42
  50. package/dist/node_modules/readable-stream/lib/_stream_writable.js +200 -190
  51. package/dist/node_modules/readable-stream/lib/internal/streams/async_iterator.js +207 -0
  52. package/dist/node_modules/readable-stream/lib/internal/streams/buffer_list.js +210 -0
  53. package/dist/node_modules/readable-stream/lib/internal/streams/destroy.js +48 -17
  54. package/dist/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +104 -0
  55. package/dist/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  56. package/dist/node_modules/readable-stream/lib/internal/streams/from.js +64 -0
  57. package/dist/node_modules/readable-stream/lib/internal/streams/pipeline.js +97 -0
  58. package/dist/node_modules/readable-stream/lib/internal/streams/state.js +27 -0
  59. package/dist/node_modules/readable-stream/package.json +35 -19
  60. package/dist/node_modules/readable-stream/readable-browser.js +2 -0
  61. package/dist/node_modules/readable-stream/readable.js +5 -8
  62. package/dist/node_modules/safe-buffer/index.js +3 -0
  63. package/dist/node_modules/safe-buffer/package.json +18 -4
  64. package/dist/node_modules/signal-exit/index.js +30 -8
  65. package/dist/node_modules/signal-exit/package.json +7 -5
  66. package/dist/node_modules/socks-proxy-agent/package.json +2 -2
  67. package/dist/node_modules/string-width/index.js +29 -19
  68. package/dist/node_modules/string-width/license +4 -16
  69. package/dist/node_modules/string-width/package.json +54 -54
  70. package/dist/node_modules/string_decoder/package.json +5 -2
  71. package/dist/node_modules/strip-ansi/index.js +2 -4
  72. package/dist/node_modules/strip-ansi/license +4 -16
  73. package/dist/node_modules/strip-ansi/package.json +52 -55
  74. package/dist/pnpm.cjs +52779 -4337
  75. package/package.json +18 -18
  76. package/dist/node_modules/are-we-there-yet/LICENSE +0 -5
  77. package/dist/node_modules/code-point-at/index.js +0 -32
  78. package/dist/node_modules/code-point-at/license +0 -21
  79. package/dist/node_modules/code-point-at/package.json +0 -38
  80. package/dist/node_modules/core-util-is/LICENSE +0 -19
  81. package/dist/node_modules/core-util-is/lib/util.js +0 -107
  82. package/dist/node_modules/core-util-is/package.json +0 -38
  83. package/dist/node_modules/gauge/LICENSE +0 -13
  84. package/dist/node_modules/gauge/has-color.js +0 -12
  85. package/dist/node_modules/gauge/themes.js +0 -54
  86. package/dist/node_modules/isarray/component.json +0 -19
  87. package/dist/node_modules/isarray/index.js +0 -5
  88. package/dist/node_modules/isarray/package.json +0 -45
  89. package/dist/node_modules/isarray/test.js +0 -20
  90. package/dist/node_modules/number-is-nan/index.js +0 -4
  91. package/dist/node_modules/number-is-nan/license +0 -21
  92. package/dist/node_modules/number-is-nan/package.json +0 -35
  93. package/dist/node_modules/object-assign/index.js +0 -90
  94. package/dist/node_modules/object-assign/license +0 -21
  95. package/dist/node_modules/object-assign/package.json +0 -42
  96. package/dist/node_modules/process-nextick-args/index.js +0 -45
  97. package/dist/node_modules/process-nextick-args/package.json +0 -25
  98. package/dist/node_modules/readable-stream/duplex-browser.js +0 -1
  99. package/dist/node_modules/readable-stream/duplex.js +0 -1
  100. package/dist/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  101. package/dist/node_modules/readable-stream/passthrough.js +0 -1
  102. package/dist/node_modules/readable-stream/transform.js +0 -1
  103. package/dist/node_modules/readable-stream/writable-browser.js +0 -1
  104. package/dist/node_modules/readable-stream/writable.js +0 -8
  105. package/dist/node_modules/wide-align/node_modules/ansi-regex/index.js +0 -10
  106. package/dist/node_modules/wide-align/node_modules/ansi-regex/license +0 -9
  107. package/dist/node_modules/wide-align/node_modules/ansi-regex/package.json +0 -55
  108. package/dist/node_modules/wide-align/node_modules/is-fullwidth-code-point/index.js +0 -50
  109. package/dist/node_modules/wide-align/node_modules/is-fullwidth-code-point/license +0 -9
  110. package/dist/node_modules/wide-align/node_modules/is-fullwidth-code-point/package.json +0 -42
  111. package/dist/node_modules/wide-align/node_modules/string-width/index.js +0 -47
  112. package/dist/node_modules/wide-align/node_modules/string-width/license +0 -9
  113. package/dist/node_modules/wide-align/node_modules/string-width/package.json +0 -56
  114. package/dist/node_modules/wide-align/node_modules/strip-ansi/index.js +0 -4
  115. package/dist/node_modules/wide-align/node_modules/strip-ansi/license +0 -9
  116. package/dist/node_modules/wide-align/node_modules/strip-ansi/package.json +0 -54
@@ -18,118 +18,110 @@
18
18
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
19
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
20
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
21
  'use strict';
23
22
 
24
- /*<replacement>*/
25
-
26
- var pna = require('process-nextick-args');
27
- /*</replacement>*/
28
-
29
23
  module.exports = Readable;
30
-
31
24
  /*<replacement>*/
32
- var isArray = require('isarray');
33
- /*</replacement>*/
34
25
 
35
- /*<replacement>*/
36
26
  var Duplex;
37
27
  /*</replacement>*/
38
28
 
39
29
  Readable.ReadableState = ReadableState;
40
-
41
30
  /*<replacement>*/
31
+
42
32
  var EE = require('events').EventEmitter;
43
33
 
44
- var EElistenerCount = function (emitter, type) {
34
+ var EElistenerCount = function EElistenerCount(emitter, type) {
45
35
  return emitter.listeners(type).length;
46
36
  };
47
37
  /*</replacement>*/
48
38
 
49
39
  /*<replacement>*/
40
+
41
+
50
42
  var Stream = require('./internal/streams/stream');
51
43
  /*</replacement>*/
52
44
 
53
- /*<replacement>*/
54
45
 
55
- var Buffer = require('safe-buffer').Buffer;
46
+ var Buffer = require('buffer').Buffer;
47
+
56
48
  var OurUint8Array = global.Uint8Array || function () {};
49
+
57
50
  function _uint8ArrayToBuffer(chunk) {
58
51
  return Buffer.from(chunk);
59
52
  }
53
+
60
54
  function _isUint8Array(obj) {
61
55
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
62
56
  }
63
-
64
- /*</replacement>*/
65
-
66
57
  /*<replacement>*/
67
- var util = Object.create(require('core-util-is'));
68
- util.inherits = require('inherits');
69
- /*</replacement>*/
70
58
 
71
- /*<replacement>*/
59
+
72
60
  var debugUtil = require('util');
73
- var debug = void 0;
61
+
62
+ var debug;
63
+
74
64
  if (debugUtil && debugUtil.debuglog) {
75
65
  debug = debugUtil.debuglog('stream');
76
66
  } else {
77
- debug = function () {};
67
+ debug = function debug() {};
78
68
  }
79
69
  /*</replacement>*/
80
70
 
81
- var BufferList = require('./internal/streams/BufferList');
71
+
72
+ var BufferList = require('./internal/streams/buffer_list');
73
+
82
74
  var destroyImpl = require('./internal/streams/destroy');
75
+
76
+ var _require = require('./internal/streams/state'),
77
+ getHighWaterMark = _require.getHighWaterMark;
78
+
79
+ var _require$codes = require('../errors').codes,
80
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
81
+ ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
82
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
83
+ ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.
84
+
85
+
83
86
  var StringDecoder;
87
+ var createReadableStreamAsyncIterator;
88
+ var from;
84
89
 
85
- util.inherits(Readable, Stream);
90
+ require('inherits')(Readable, Stream);
86
91
 
92
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
87
93
  var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
88
94
 
89
95
  function prependListener(emitter, event, fn) {
90
96
  // Sadly this is not cacheable as some libraries bundle their own
91
97
  // event emitter implementation with them.
92
- if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
93
-
94
- // This is a hack to make sure that our error handler is attached before any
98
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
95
99
  // userland ones. NEVER DO THIS. This is here only because this code needs
96
100
  // to continue to work with older versions of Node.js that do not include
97
101
  // the prependListener() method. The goal is to eventually remove this hack.
98
- if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
102
+
103
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
99
104
  }
100
105
 
101
- function ReadableState(options, stream) {
106
+ function ReadableState(options, stream, isDuplex) {
102
107
  Duplex = Duplex || require('./_stream_duplex');
103
-
104
- options = options || {};
105
-
106
- // Duplex streams are both readable and writable, but share
108
+ options = options || {}; // Duplex streams are both readable and writable, but share
107
109
  // the same options object.
108
110
  // However, some cases require setting options to different
109
111
  // values for the readable and the writable sides of the duplex stream.
110
112
  // These options can be provided separately as readableXXX and writableXXX.
111
- var isDuplex = stream instanceof Duplex;
112
113
 
113
- // object stream flag. Used to make read(n) ignore n and to
114
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
114
115
  // make all the buffer merging and length checks go away
115
- this.objectMode = !!options.objectMode;
116
116
 
117
- if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
118
-
119
- // the point at which it stops calling _read() to fill the buffer
117
+ this.objectMode = !!options.objectMode;
118
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
120
119
  // Note: 0 is a valid value, means "don't call _read preemptively ever"
121
- var hwm = options.highWaterMark;
122
- var readableHwm = options.readableHighWaterMark;
123
- var defaultHwm = this.objectMode ? 16 : 16 * 1024;
124
-
125
- if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
126
-
127
- // cast to ints.
128
- this.highWaterMark = Math.floor(this.highWaterMark);
129
120
 
130
- // A linked list is used to store data chunks instead of an array because the
121
+ this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
131
122
  // linked list can remove elements from the beginning faster than
132
123
  // array.shift()
124
+
133
125
  this.buffer = new BufferList();
134
126
  this.length = 0;
135
127
  this.pipes = null;
@@ -137,37 +129,36 @@ function ReadableState(options, stream) {
137
129
  this.flowing = null;
138
130
  this.ended = false;
139
131
  this.endEmitted = false;
140
- this.reading = false;
141
-
142
- // a flag to be able to tell if the event 'readable'/'data' is emitted
132
+ this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
143
133
  // immediately, or on a later tick. We set this to true at first, because
144
134
  // any actions that shouldn't happen until "later" should generally also
145
135
  // not happen before the first read call.
146
- this.sync = true;
147
136
 
148
- // whenever we return null, then we set a flag to say
137
+ this.sync = true; // whenever we return null, then we set a flag to say
149
138
  // that we're awaiting a 'readable' event emission.
139
+
150
140
  this.needReadable = false;
151
141
  this.emittedReadable = false;
152
142
  this.readableListening = false;
153
143
  this.resumeScheduled = false;
144
+ this.paused = true; // Should close be emitted on destroy. Defaults to true.
154
145
 
155
- // has it been destroyed
156
- this.destroyed = false;
146
+ this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')
157
147
 
158
- // Crypto is kind of old and crusty. Historically, its default string
148
+ this.autoDestroy = !!options.autoDestroy; // has it been destroyed
149
+
150
+ this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string
159
151
  // encoding is 'binary' so we have to make this configurable.
160
152
  // Everything else in the universe uses 'utf8', though.
161
- this.defaultEncoding = options.defaultEncoding || 'utf8';
162
153
 
163
- // the number of writers that are awaiting a drain event in .pipe()s
164
- this.awaitDrain = 0;
154
+ this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
165
155
 
166
- // if true, a maybeReadMore has been scheduled
167
- this.readingMore = false;
156
+ this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
168
157
 
158
+ this.readingMore = false;
169
159
  this.decoder = null;
170
160
  this.encoding = null;
161
+
171
162
  if (options.encoding) {
172
163
  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
173
164
  this.decoder = new StringDecoder(options.encoding);
@@ -177,17 +168,16 @@ function ReadableState(options, stream) {
177
168
 
178
169
  function Readable(options) {
179
170
  Duplex = Duplex || require('./_stream_duplex');
171
+ if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
172
+ // the ReadableState constructor, at least with V8 6.5
180
173
 
181
- if (!(this instanceof Readable)) return new Readable(options);
182
-
183
- this._readableState = new ReadableState(options, this);
174
+ var isDuplex = this instanceof Duplex;
175
+ this._readableState = new ReadableState(options, this, isDuplex); // legacy
184
176
 
185
- // legacy
186
177
  this.readable = true;
187
178
 
188
179
  if (options) {
189
180
  if (typeof options.read === 'function') this._read = options.read;
190
-
191
181
  if (typeof options.destroy === 'function') this._destroy = options.destroy;
192
182
  }
193
183
 
@@ -195,36 +185,40 @@ function Readable(options) {
195
185
  }
196
186
 
197
187
  Object.defineProperty(Readable.prototype, 'destroyed', {
198
- get: function () {
188
+ // making it explicit this property is not enumerable
189
+ // because otherwise some prototype manipulation in
190
+ // userland will fail
191
+ enumerable: false,
192
+ get: function get() {
199
193
  if (this._readableState === undefined) {
200
194
  return false;
201
195
  }
196
+
202
197
  return this._readableState.destroyed;
203
198
  },
204
- set: function (value) {
199
+ set: function set(value) {
205
200
  // we ignore the value if the stream
206
201
  // has not been initialized yet
207
202
  if (!this._readableState) {
208
203
  return;
209
- }
210
-
211
- // backward compatibility, the user is explicitly
204
+ } // backward compatibility, the user is explicitly
212
205
  // managing destroyed
206
+
207
+
213
208
  this._readableState.destroyed = value;
214
209
  }
215
210
  });
216
-
217
211
  Readable.prototype.destroy = destroyImpl.destroy;
218
212
  Readable.prototype._undestroy = destroyImpl.undestroy;
213
+
219
214
  Readable.prototype._destroy = function (err, cb) {
220
- this.push(null);
221
215
  cb(err);
222
- };
223
-
224
- // Manually shove something into the read() buffer.
216
+ }; // Manually shove something into the read() buffer.
225
217
  // This returns true if the highWaterMark has not been hit yet,
226
218
  // similar to how Writable.write() returns true if you should
227
219
  // write() some more.
220
+
221
+
228
222
  Readable.prototype.push = function (chunk, encoding) {
229
223
  var state = this._readableState;
230
224
  var skipChunkCheck;
@@ -232,10 +226,12 @@ Readable.prototype.push = function (chunk, encoding) {
232
226
  if (!state.objectMode) {
233
227
  if (typeof chunk === 'string') {
234
228
  encoding = encoding || state.defaultEncoding;
229
+
235
230
  if (encoding !== state.encoding) {
236
231
  chunk = Buffer.from(chunk, encoding);
237
232
  encoding = '';
238
233
  }
234
+
239
235
  skipChunkCheck = true;
240
236
  }
241
237
  } else {
@@ -243,34 +239,40 @@ Readable.prototype.push = function (chunk, encoding) {
243
239
  }
244
240
 
245
241
  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
246
- };
242
+ }; // Unshift should *always* be something directly out of read()
243
+
247
244
 
248
- // Unshift should *always* be something directly out of read()
249
245
  Readable.prototype.unshift = function (chunk) {
250
246
  return readableAddChunk(this, chunk, null, true, false);
251
247
  };
252
248
 
253
249
  function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
250
+ debug('readableAddChunk', chunk);
254
251
  var state = stream._readableState;
252
+
255
253
  if (chunk === null) {
256
254
  state.reading = false;
257
255
  onEofChunk(stream, state);
258
256
  } else {
259
257
  var er;
260
258
  if (!skipChunkCheck) er = chunkInvalid(state, chunk);
259
+
261
260
  if (er) {
262
- stream.emit('error', er);
261
+ errorOrDestroy(stream, er);
263
262
  } else if (state.objectMode || chunk && chunk.length > 0) {
264
263
  if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
265
264
  chunk = _uint8ArrayToBuffer(chunk);
266
265
  }
267
266
 
268
267
  if (addToFront) {
269
- if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
268
+ if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
270
269
  } else if (state.ended) {
271
- stream.emit('error', new Error('stream.push() after EOF'));
270
+ errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
271
+ } else if (state.destroyed) {
272
+ return false;
272
273
  } else {
273
274
  state.reading = false;
275
+
274
276
  if (state.decoder && !encoding) {
275
277
  chunk = state.decoder.write(chunk);
276
278
  if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
@@ -280,61 +282,73 @@ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
280
282
  }
281
283
  } else if (!addToFront) {
282
284
  state.reading = false;
285
+ maybeReadMore(stream, state);
283
286
  }
284
- }
287
+ } // We can push more data if we are below the highWaterMark.
288
+ // Also, if we have no data yet, we can stand some more bytes.
289
+ // This is to work around cases where hwm=0, such as the repl.
285
290
 
286
- return needMoreData(state);
291
+
292
+ return !state.ended && (state.length < state.highWaterMark || state.length === 0);
287
293
  }
288
294
 
289
295
  function addChunk(stream, state, chunk, addToFront) {
290
296
  if (state.flowing && state.length === 0 && !state.sync) {
297
+ state.awaitDrain = 0;
291
298
  stream.emit('data', chunk);
292
- stream.read(0);
293
299
  } else {
294
300
  // update the buffer info.
295
301
  state.length += state.objectMode ? 1 : chunk.length;
296
302
  if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
297
-
298
303
  if (state.needReadable) emitReadable(stream);
299
304
  }
305
+
300
306
  maybeReadMore(stream, state);
301
307
  }
302
308
 
303
309
  function chunkInvalid(state, chunk) {
304
310
  var er;
311
+
305
312
  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
306
- er = new TypeError('Invalid non-string/buffer chunk');
313
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
307
314
  }
308
- return er;
309
- }
310
315
 
311
- // if it's past the high water mark, we can push in some more.
312
- // Also, if we have no data yet, we can stand some
313
- // more bytes. This is to work around cases where hwm=0,
314
- // such as the repl. Also, if the push() triggered a
315
- // readable event, and the user called read(largeNumber) such that
316
- // needReadable was set, then we ought to push more, so that another
317
- // 'readable' event will be triggered.
318
- function needMoreData(state) {
319
- return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
316
+ return er;
320
317
  }
321
318
 
322
319
  Readable.prototype.isPaused = function () {
323
320
  return this._readableState.flowing === false;
324
- };
321
+ }; // backwards compatibility.
322
+
325
323
 
326
- // backwards compatibility.
327
324
  Readable.prototype.setEncoding = function (enc) {
328
325
  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
329
- this._readableState.decoder = new StringDecoder(enc);
330
- this._readableState.encoding = enc;
326
+ var decoder = new StringDecoder(enc);
327
+ this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8
328
+
329
+ this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:
330
+
331
+ var p = this._readableState.buffer.head;
332
+ var content = '';
333
+
334
+ while (p !== null) {
335
+ content += decoder.write(p.data);
336
+ p = p.next;
337
+ }
338
+
339
+ this._readableState.buffer.clear();
340
+
341
+ if (content !== '') this._readableState.buffer.push(content);
342
+ this._readableState.length = content.length;
331
343
  return this;
332
- };
344
+ }; // Don't raise the hwm > 1GB
345
+
346
+
347
+ var MAX_HWM = 0x40000000;
333
348
 
334
- // Don't raise the hwm > 8MB
335
- var MAX_HWM = 0x800000;
336
349
  function computeNewHighWaterMark(n) {
337
350
  if (n >= MAX_HWM) {
351
+ // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
338
352
  n = MAX_HWM;
339
353
  } else {
340
354
  // Get the next highest power of 2 to prevent increasing hwm excessively in
@@ -347,56 +361,55 @@ function computeNewHighWaterMark(n) {
347
361
  n |= n >>> 16;
348
362
  n++;
349
363
  }
350
- return n;
351
- }
352
364
 
353
- // This function is designed to be inlinable, so please take care when making
365
+ return n;
366
+ } // This function is designed to be inlinable, so please take care when making
354
367
  // changes to the function body.
368
+
369
+
355
370
  function howMuchToRead(n, state) {
356
371
  if (n <= 0 || state.length === 0 && state.ended) return 0;
357
372
  if (state.objectMode) return 1;
373
+
358
374
  if (n !== n) {
359
375
  // Only flow one buffer at a time
360
376
  if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
361
- }
362
- // If we're asking for more than the current hwm, then raise the hwm.
377
+ } // If we're asking for more than the current hwm, then raise the hwm.
378
+
379
+
363
380
  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
364
- if (n <= state.length) return n;
365
- // Don't have enough
381
+ if (n <= state.length) return n; // Don't have enough
382
+
366
383
  if (!state.ended) {
367
384
  state.needReadable = true;
368
385
  return 0;
369
386
  }
387
+
370
388
  return state.length;
371
- }
389
+ } // you can override either this method, or the async _read(n) below.
390
+
372
391
 
373
- // you can override either this method, or the async _read(n) below.
374
392
  Readable.prototype.read = function (n) {
375
393
  debug('read', n);
376
394
  n = parseInt(n, 10);
377
395
  var state = this._readableState;
378
396
  var nOrig = n;
379
-
380
- if (n !== 0) state.emittedReadable = false;
381
-
382
- // if we're doing read(0) to trigger a readable event, but we
397
+ if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
383
398
  // already have a bunch of data in the buffer, then just trigger
384
399
  // the 'readable' event and move on.
385
- if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
400
+
401
+ if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
386
402
  debug('read: emitReadable', state.length, state.ended);
387
403
  if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
388
404
  return null;
389
405
  }
390
406
 
391
- n = howMuchToRead(n, state);
407
+ n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
392
408
 
393
- // if we've ended, and we're now clear, then finish it up.
394
409
  if (n === 0 && state.ended) {
395
410
  if (state.length === 0) endReadable(this);
396
411
  return null;
397
- }
398
-
399
- // All the actual chunk generation logic needs to be
412
+ } // All the actual chunk generation logic needs to be
400
413
  // *below* the call to _read. The reason is that in certain
401
414
  // synthetic stream cases, such as passthrough streams, _read
402
415
  // may be a completely synchronous operation which may change
@@ -417,33 +430,34 @@ Readable.prototype.read = function (n) {
417
430
  // 'readable' etc.
418
431
  //
419
432
  // 3. Actually pull the requested chunks out of the buffer and return.
420
-
421
433
  // if we need a readable event, then we need to do some reading.
434
+
435
+
422
436
  var doRead = state.needReadable;
423
- debug('need readable', doRead);
437
+ debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
424
438
 
425
- // if we currently have less than the highWaterMark, then also read some
426
439
  if (state.length === 0 || state.length - n < state.highWaterMark) {
427
440
  doRead = true;
428
441
  debug('length less than watermark', doRead);
429
- }
430
-
431
- // however, if we've ended, then there's no point, and if we're already
442
+ } // however, if we've ended, then there's no point, and if we're already
432
443
  // reading, then it's unnecessary.
444
+
445
+
433
446
  if (state.ended || state.reading) {
434
447
  doRead = false;
435
448
  debug('reading or ended', doRead);
436
449
  } else if (doRead) {
437
450
  debug('do read');
438
451
  state.reading = true;
439
- state.sync = true;
440
- // if the length is currently zero, then we *need* a readable event.
441
- if (state.length === 0) state.needReadable = true;
442
- // call internal read method
452
+ state.sync = true; // if the length is currently zero, then we *need* a readable event.
453
+
454
+ if (state.length === 0) state.needReadable = true; // call internal read method
455
+
443
456
  this._read(state.highWaterMark);
444
- state.sync = false;
445
- // If _read pushed data synchronously, then `reading` will be false,
457
+
458
+ state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
446
459
  // and we need to re-evaluate how much data we can return to the user.
460
+
447
461
  if (!state.reading) n = howMuchToRead(nOrig, state);
448
462
  }
449
463
 
@@ -451,91 +465,144 @@ Readable.prototype.read = function (n) {
451
465
  if (n > 0) ret = fromList(n, state);else ret = null;
452
466
 
453
467
  if (ret === null) {
454
- state.needReadable = true;
468
+ state.needReadable = state.length <= state.highWaterMark;
455
469
  n = 0;
456
470
  } else {
457
471
  state.length -= n;
472
+ state.awaitDrain = 0;
458
473
  }
459
474
 
460
475
  if (state.length === 0) {
461
476
  // If we have nothing in the buffer, then we want to know
462
477
  // as soon as we *do* get something into the buffer.
463
- if (!state.ended) state.needReadable = true;
478
+ if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
464
479
 
465
- // If we tried to read() past the EOF, then emit end on the next tick.
466
480
  if (nOrig !== n && state.ended) endReadable(this);
467
481
  }
468
482
 
469
483
  if (ret !== null) this.emit('data', ret);
470
-
471
484
  return ret;
472
485
  };
473
486
 
474
487
  function onEofChunk(stream, state) {
488
+ debug('onEofChunk');
475
489
  if (state.ended) return;
490
+
476
491
  if (state.decoder) {
477
492
  var chunk = state.decoder.end();
493
+
478
494
  if (chunk && chunk.length) {
479
495
  state.buffer.push(chunk);
480
496
  state.length += state.objectMode ? 1 : chunk.length;
481
497
  }
482
498
  }
499
+
483
500
  state.ended = true;
484
501
 
485
- // emit 'readable' now to make sure it gets picked up.
486
- emitReadable(stream);
487
- }
502
+ if (state.sync) {
503
+ // if we are sync, wait until next tick to emit the data.
504
+ // Otherwise we risk emitting data in the flow()
505
+ // the readable code triggers during a read() call
506
+ emitReadable(stream);
507
+ } else {
508
+ // emit 'readable' now to make sure it gets picked up.
509
+ state.needReadable = false;
488
510
 
489
- // Don't emit readable right away in sync mode, because this can trigger
511
+ if (!state.emittedReadable) {
512
+ state.emittedReadable = true;
513
+ emitReadable_(stream);
514
+ }
515
+ }
516
+ } // Don't emit readable right away in sync mode, because this can trigger
490
517
  // another read() call => stack overflow. This way, it might trigger
491
518
  // a nextTick recursion warning, but that's not so bad.
519
+
520
+
492
521
  function emitReadable(stream) {
493
522
  var state = stream._readableState;
523
+ debug('emitReadable', state.needReadable, state.emittedReadable);
494
524
  state.needReadable = false;
525
+
495
526
  if (!state.emittedReadable) {
496
527
  debug('emitReadable', state.flowing);
497
528
  state.emittedReadable = true;
498
- if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
529
+ process.nextTick(emitReadable_, stream);
499
530
  }
500
531
  }
501
532
 
502
533
  function emitReadable_(stream) {
503
- debug('emit readable');
504
- stream.emit('readable');
505
- flow(stream);
506
- }
534
+ var state = stream._readableState;
535
+ debug('emitReadable_', state.destroyed, state.length, state.ended);
507
536
 
508
- // at this point, the user has presumably seen the 'readable' event,
537
+ if (!state.destroyed && (state.length || state.ended)) {
538
+ stream.emit('readable');
539
+ state.emittedReadable = false;
540
+ } // The stream needs another readable event if
541
+ // 1. It is not flowing, as the flow mechanism will take
542
+ // care of it.
543
+ // 2. It is not ended.
544
+ // 3. It is below the highWaterMark, so we can schedule
545
+ // another readable later.
546
+
547
+
548
+ state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
549
+ flow(stream);
550
+ } // at this point, the user has presumably seen the 'readable' event,
509
551
  // and called read() to consume some data. that may have triggered
510
552
  // in turn another _read(n) call, in which case reading = true if
511
553
  // it's in progress.
512
554
  // However, if we're not ended, or reading, and the length < hwm,
513
555
  // then go ahead and try to read some more preemptively.
556
+
557
+
514
558
  function maybeReadMore(stream, state) {
515
559
  if (!state.readingMore) {
516
560
  state.readingMore = true;
517
- pna.nextTick(maybeReadMore_, stream, state);
561
+ process.nextTick(maybeReadMore_, stream, state);
518
562
  }
519
563
  }
520
564
 
521
565
  function maybeReadMore_(stream, state) {
522
- var len = state.length;
523
- while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
566
+ // Attempt to read more data if we should.
567
+ //
568
+ // The conditions for reading more data are (one of):
569
+ // - Not enough data buffered (state.length < state.highWaterMark). The loop
570
+ // is responsible for filling the buffer with enough data if such data
571
+ // is available. If highWaterMark is 0 and we are not in the flowing mode
572
+ // we should _not_ attempt to buffer any extra data. We'll get more data
573
+ // when the stream consumer calls read() instead.
574
+ // - No data in the buffer, and the stream is in flowing mode. In this mode
575
+ // the loop below is responsible for ensuring read() is called. Failing to
576
+ // call read here would abort the flow and there's no other mechanism for
577
+ // continuing the flow if the stream consumer has just subscribed to the
578
+ // 'data' event.
579
+ //
580
+ // In addition to the above conditions to keep reading data, the following
581
+ // conditions prevent the data from being read:
582
+ // - The stream has ended (state.ended).
583
+ // - There is already a pending 'read' operation (state.reading). This is a
584
+ // case where the the stream has called the implementation defined _read()
585
+ // method, but they are processing the call asynchronously and have _not_
586
+ // called push() with new data. In this case we skip performing more
587
+ // read()s. The execution ends in this method again after the _read() ends
588
+ // up calling push() with more data.
589
+ while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
590
+ var len = state.length;
524
591
  debug('maybeReadMore read 0');
525
592
  stream.read(0);
526
- if (len === state.length)
527
- // didn't get any data, stop spinning.
528
- break;else len = state.length;
593
+ if (len === state.length) // didn't get any data, stop spinning.
594
+ break;
529
595
  }
530
- state.readingMore = false;
531
- }
532
596
 
533
- // abstract method. to be overridden in specific implementation classes.
597
+ state.readingMore = false;
598
+ } // abstract method. to be overridden in specific implementation classes.
534
599
  // call cb(er, data) where data is <= n in length.
535
600
  // for virtual (non-string, non-buffer) streams, "length" is somewhat
536
601
  // arbitrary, and perhaps not very meaningful.
602
+
603
+
537
604
  Readable.prototype._read = function (n) {
538
- this.emit('error', new Error('_read() is not implemented'));
605
+ errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
539
606
  };
540
607
 
541
608
  Readable.prototype.pipe = function (dest, pipeOpts) {
@@ -546,24 +613,26 @@ Readable.prototype.pipe = function (dest, pipeOpts) {
546
613
  case 0:
547
614
  state.pipes = dest;
548
615
  break;
616
+
549
617
  case 1:
550
618
  state.pipes = [state.pipes, dest];
551
619
  break;
620
+
552
621
  default:
553
622
  state.pipes.push(dest);
554
623
  break;
555
624
  }
625
+
556
626
  state.pipesCount += 1;
557
627
  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
558
-
559
628
  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
560
-
561
629
  var endFn = doEnd ? onend : unpipe;
562
- if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
563
-
630
+ if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
564
631
  dest.on('unpipe', onunpipe);
632
+
565
633
  function onunpipe(readable, unpipeInfo) {
566
634
  debug('onunpipe');
635
+
567
636
  if (readable === src) {
568
637
  if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
569
638
  unpipeInfo.hasUnpiped = true;
@@ -575,19 +644,19 @@ Readable.prototype.pipe = function (dest, pipeOpts) {
575
644
  function onend() {
576
645
  debug('onend');
577
646
  dest.end();
578
- }
579
-
580
- // when the dest drains, it reduces the awaitDrain counter
647
+ } // when the dest drains, it reduces the awaitDrain counter
581
648
  // on the source. This would be more elegant with a .once()
582
649
  // handler in flow(), but adding and removing repeatedly is
583
650
  // too slow.
651
+
652
+
584
653
  var ondrain = pipeOnDrain(src);
585
654
  dest.on('drain', ondrain);
586
-
587
655
  var cleanedUp = false;
656
+
588
657
  function cleanup() {
589
- debug('cleanup');
590
- // cleanup event handlers once the pipe is broken
658
+ debug('cleanup'); // cleanup event handlers once the pipe is broken
659
+
591
660
  dest.removeListener('close', onclose);
592
661
  dest.removeListener('finish', onfinish);
593
662
  dest.removeListener('drain', ondrain);
@@ -596,75 +665,71 @@ Readable.prototype.pipe = function (dest, pipeOpts) {
596
665
  src.removeListener('end', onend);
597
666
  src.removeListener('end', unpipe);
598
667
  src.removeListener('data', ondata);
599
-
600
- cleanedUp = true;
601
-
602
- // if the reader is waiting for a drain event from this
668
+ cleanedUp = true; // if the reader is waiting for a drain event from this
603
669
  // specific writer, then it would cause it to never start
604
670
  // flowing again.
605
671
  // So, if this is awaiting a drain, then we just call it now.
606
672
  // If we don't know, then assume that we are waiting for one.
673
+
607
674
  if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
608
675
  }
609
676
 
610
- // If the user pushes more data while we're writing to dest then we'll end up
611
- // in ondata again. However, we only want to increase awaitDrain once because
612
- // dest will only emit one 'drain' event for the multiple writes.
613
- // => Introduce a guard on increasing awaitDrain.
614
- var increasedAwaitDrain = false;
615
677
  src.on('data', ondata);
678
+
616
679
  function ondata(chunk) {
617
680
  debug('ondata');
618
- increasedAwaitDrain = false;
619
681
  var ret = dest.write(chunk);
620
- if (false === ret && !increasedAwaitDrain) {
682
+ debug('dest.write', ret);
683
+
684
+ if (ret === false) {
621
685
  // If the user unpiped during `dest.write()`, it is possible
622
686
  // to get stuck in a permanently paused state if that write
623
687
  // also returned false.
624
688
  // => Check whether `dest` is still a piping destination.
625
689
  if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
626
- debug('false write response, pause', src._readableState.awaitDrain);
627
- src._readableState.awaitDrain++;
628
- increasedAwaitDrain = true;
690
+ debug('false write response, pause', state.awaitDrain);
691
+ state.awaitDrain++;
629
692
  }
693
+
630
694
  src.pause();
631
695
  }
632
- }
633
-
634
- // if the dest has an error, then stop piping into it.
696
+ } // if the dest has an error, then stop piping into it.
635
697
  // however, don't suppress the throwing behavior for this.
698
+
699
+
636
700
  function onerror(er) {
637
701
  debug('onerror', er);
638
702
  unpipe();
639
703
  dest.removeListener('error', onerror);
640
- if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
641
- }
704
+ if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
705
+ } // Make sure our error handler is attached before userland ones.
642
706
 
643
- // Make sure our error handler is attached before userland ones.
644
- prependListener(dest, 'error', onerror);
645
707
 
646
- // Both close and finish should trigger unpipe, but only once.
708
+ prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
709
+
647
710
  function onclose() {
648
711
  dest.removeListener('finish', onfinish);
649
712
  unpipe();
650
713
  }
714
+
651
715
  dest.once('close', onclose);
716
+
652
717
  function onfinish() {
653
718
  debug('onfinish');
654
719
  dest.removeListener('close', onclose);
655
720
  unpipe();
656
721
  }
722
+
657
723
  dest.once('finish', onfinish);
658
724
 
659
725
  function unpipe() {
660
726
  debug('unpipe');
661
727
  src.unpipe(dest);
662
- }
728
+ } // tell the dest that it's being piped to
663
729
 
664
- // tell the dest that it's being piped to
665
- dest.emit('pipe', src);
666
730
 
667
- // start the flow if it hasn't been started already.
731
+ dest.emit('pipe', src); // start the flow if it hasn't been started already.
732
+
668
733
  if (!state.flowing) {
669
734
  debug('pipe resume');
670
735
  src.resume();
@@ -674,10 +739,11 @@ Readable.prototype.pipe = function (dest, pipeOpts) {
674
739
  };
675
740
 
676
741
  function pipeOnDrain(src) {
677
- return function () {
742
+ return function pipeOnDrainFunctionResult() {
678
743
  var state = src._readableState;
679
744
  debug('pipeOnDrain', state.awaitDrain);
680
745
  if (state.awaitDrain) state.awaitDrain--;
746
+
681
747
  if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
682
748
  state.flowing = true;
683
749
  flow(src);
@@ -687,27 +753,24 @@ function pipeOnDrain(src) {
687
753
 
688
754
  Readable.prototype.unpipe = function (dest) {
689
755
  var state = this._readableState;
690
- var unpipeInfo = { hasUnpiped: false };
756
+ var unpipeInfo = {
757
+ hasUnpiped: false
758
+ }; // if we're not piping anywhere, then do nothing.
691
759
 
692
- // if we're not piping anywhere, then do nothing.
693
- if (state.pipesCount === 0) return this;
760
+ if (state.pipesCount === 0) return this; // just one destination. most common case.
694
761
 
695
- // just one destination. most common case.
696
762
  if (state.pipesCount === 1) {
697
763
  // passed in one, but it's not the right one.
698
764
  if (dest && dest !== state.pipes) return this;
765
+ if (!dest) dest = state.pipes; // got a match.
699
766
 
700
- if (!dest) dest = state.pipes;
701
-
702
- // got a match.
703
767
  state.pipes = null;
704
768
  state.pipesCount = 0;
705
769
  state.flowing = false;
706
770
  if (dest) dest.emit('unpipe', this, unpipeInfo);
707
771
  return this;
708
- }
772
+ } // slow case. multiple pipe destinations.
709
773
 
710
- // slow case. multiple pipe destinations.
711
774
 
712
775
  if (!dest) {
713
776
  // remove all.
@@ -718,80 +781,139 @@ Readable.prototype.unpipe = function (dest) {
718
781
  state.flowing = false;
719
782
 
720
783
  for (var i = 0; i < len; i++) {
721
- dests[i].emit('unpipe', this, unpipeInfo);
722
- }return this;
723
- }
784
+ dests[i].emit('unpipe', this, {
785
+ hasUnpiped: false
786
+ });
787
+ }
788
+
789
+ return this;
790
+ } // try to find the right one.
791
+
724
792
 
725
- // try to find the right one.
726
793
  var index = indexOf(state.pipes, dest);
727
794
  if (index === -1) return this;
728
-
729
795
  state.pipes.splice(index, 1);
730
796
  state.pipesCount -= 1;
731
797
  if (state.pipesCount === 1) state.pipes = state.pipes[0];
732
-
733
798
  dest.emit('unpipe', this, unpipeInfo);
734
-
735
799
  return this;
736
- };
737
-
738
- // set up data events if they are asked for
800
+ }; // set up data events if they are asked for
739
801
  // Ensure readable listeners eventually get something
802
+
803
+
740
804
  Readable.prototype.on = function (ev, fn) {
741
805
  var res = Stream.prototype.on.call(this, ev, fn);
806
+ var state = this._readableState;
742
807
 
743
808
  if (ev === 'data') {
744
- // Start flowing on next tick if stream isn't explicitly paused
745
- if (this._readableState.flowing !== false) this.resume();
809
+ // update readableListening so that resume() may be a no-op
810
+ // a few lines down. This is needed to support once('readable').
811
+ state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused
812
+
813
+ if (state.flowing !== false) this.resume();
746
814
  } else if (ev === 'readable') {
747
- var state = this._readableState;
748
815
  if (!state.endEmitted && !state.readableListening) {
749
816
  state.readableListening = state.needReadable = true;
817
+ state.flowing = false;
750
818
  state.emittedReadable = false;
751
- if (!state.reading) {
752
- pna.nextTick(nReadingNextTick, this);
753
- } else if (state.length) {
819
+ debug('on readable', state.length, state.reading);
820
+
821
+ if (state.length) {
754
822
  emitReadable(this);
823
+ } else if (!state.reading) {
824
+ process.nextTick(nReadingNextTick, this);
755
825
  }
756
826
  }
757
827
  }
758
828
 
759
829
  return res;
760
830
  };
831
+
761
832
  Readable.prototype.addListener = Readable.prototype.on;
762
833
 
834
+ Readable.prototype.removeListener = function (ev, fn) {
835
+ var res = Stream.prototype.removeListener.call(this, ev, fn);
836
+
837
+ if (ev === 'readable') {
838
+ // We need to check if there is someone still listening to
839
+ // readable and reset the state. However this needs to happen
840
+ // after readable has been emitted but before I/O (nextTick) to
841
+ // support once('readable', fn) cycles. This means that calling
842
+ // resume within the same tick will have no
843
+ // effect.
844
+ process.nextTick(updateReadableListening, this);
845
+ }
846
+
847
+ return res;
848
+ };
849
+
850
+ Readable.prototype.removeAllListeners = function (ev) {
851
+ var res = Stream.prototype.removeAllListeners.apply(this, arguments);
852
+
853
+ if (ev === 'readable' || ev === undefined) {
854
+ // We need to check if there is someone still listening to
855
+ // readable and reset the state. However this needs to happen
856
+ // after readable has been emitted but before I/O (nextTick) to
857
+ // support once('readable', fn) cycles. This means that calling
858
+ // resume within the same tick will have no
859
+ // effect.
860
+ process.nextTick(updateReadableListening, this);
861
+ }
862
+
863
+ return res;
864
+ };
865
+
866
+ function updateReadableListening(self) {
867
+ var state = self._readableState;
868
+ state.readableListening = self.listenerCount('readable') > 0;
869
+
870
+ if (state.resumeScheduled && !state.paused) {
871
+ // flowing needs to be set to true now, otherwise
872
+ // the upcoming resume will not flow.
873
+ state.flowing = true; // crude way to check if we should resume
874
+ } else if (self.listenerCount('data') > 0) {
875
+ self.resume();
876
+ }
877
+ }
878
+
763
879
  function nReadingNextTick(self) {
764
880
  debug('readable nexttick read 0');
765
881
  self.read(0);
766
- }
767
-
768
- // pause() and resume() are remnants of the legacy readable stream API
882
+ } // pause() and resume() are remnants of the legacy readable stream API
769
883
  // If the user uses them, then switch into old mode.
884
+
885
+
770
886
  Readable.prototype.resume = function () {
771
887
  var state = this._readableState;
888
+
772
889
  if (!state.flowing) {
773
- debug('resume');
774
- state.flowing = true;
890
+ debug('resume'); // we flow only if there is no one listening
891
+ // for readable, but we still have to call
892
+ // resume()
893
+
894
+ state.flowing = !state.readableListening;
775
895
  resume(this, state);
776
896
  }
897
+
898
+ state.paused = false;
777
899
  return this;
778
900
  };
779
901
 
780
902
  function resume(stream, state) {
781
903
  if (!state.resumeScheduled) {
782
904
  state.resumeScheduled = true;
783
- pna.nextTick(resume_, stream, state);
905
+ process.nextTick(resume_, stream, state);
784
906
  }
785
907
  }
786
908
 
787
909
  function resume_(stream, state) {
910
+ debug('resume', state.reading);
911
+
788
912
  if (!state.reading) {
789
- debug('resume read 0');
790
913
  stream.read(0);
791
914
  }
792
915
 
793
916
  state.resumeScheduled = false;
794
- state.awaitDrain = 0;
795
917
  stream.emit('resume');
796
918
  flow(stream);
797
919
  if (state.flowing && !state.reading) stream.read(0);
@@ -799,31 +921,37 @@ function resume_(stream, state) {
799
921
 
800
922
  Readable.prototype.pause = function () {
801
923
  debug('call pause flowing=%j', this._readableState.flowing);
802
- if (false !== this._readableState.flowing) {
924
+
925
+ if (this._readableState.flowing !== false) {
803
926
  debug('pause');
804
927
  this._readableState.flowing = false;
805
928
  this.emit('pause');
806
929
  }
930
+
931
+ this._readableState.paused = true;
807
932
  return this;
808
933
  };
809
934
 
810
935
  function flow(stream) {
811
936
  var state = stream._readableState;
812
937
  debug('flow', state.flowing);
813
- while (state.flowing && stream.read() !== null) {}
814
- }
815
938
 
816
- // wrap an old-style stream as the async data source.
939
+ while (state.flowing && stream.read() !== null) {
940
+ ;
941
+ }
942
+ } // wrap an old-style stream as the async data source.
817
943
  // This is *not* part of the readable stream interface.
818
944
  // It is an ugly unfortunate mess of history.
945
+
946
+
819
947
  Readable.prototype.wrap = function (stream) {
820
948
  var _this = this;
821
949
 
822
950
  var state = this._readableState;
823
951
  var paused = false;
824
-
825
952
  stream.on('end', function () {
826
953
  debug('wrapped end');
954
+
827
955
  if (state.decoder && !state.ended) {
828
956
  var chunk = state.decoder.end();
829
957
  if (chunk && chunk.length) _this.push(chunk);
@@ -831,42 +959,41 @@ Readable.prototype.wrap = function (stream) {
831
959
 
832
960
  _this.push(null);
833
961
  });
834
-
835
962
  stream.on('data', function (chunk) {
836
963
  debug('wrapped data');
837
- if (state.decoder) chunk = state.decoder.write(chunk);
964
+ if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
838
965
 
839
- // don't skip over falsy values in objectMode
840
966
  if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
841
967
 
842
968
  var ret = _this.push(chunk);
969
+
843
970
  if (!ret) {
844
971
  paused = true;
845
972
  stream.pause();
846
973
  }
847
- });
848
-
849
- // proxy all the other methods.
974
+ }); // proxy all the other methods.
850
975
  // important when wrapping filters and duplexes.
976
+
851
977
  for (var i in stream) {
852
978
  if (this[i] === undefined && typeof stream[i] === 'function') {
853
- this[i] = function (method) {
854
- return function () {
979
+ this[i] = function methodWrap(method) {
980
+ return function methodWrapReturnFunction() {
855
981
  return stream[method].apply(stream, arguments);
856
982
  };
857
983
  }(i);
858
984
  }
859
- }
985
+ } // proxy certain important events.
986
+
860
987
 
861
- // proxy certain important events.
862
988
  for (var n = 0; n < kProxyEvents.length; n++) {
863
989
  stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
864
- }
865
-
866
- // when we try to consume some more bytes, simply unpause the
990
+ } // when we try to consume some more bytes, simply unpause the
867
991
  // underlying stream.
992
+
993
+
868
994
  this._read = function (n) {
869
995
  debug('wrapped _read', n);
996
+
870
997
  if (paused) {
871
998
  paused = false;
872
999
  stream.resume();
@@ -876,144 +1003,122 @@ Readable.prototype.wrap = function (stream) {
876
1003
  return this;
877
1004
  };
878
1005
 
1006
+ if (typeof Symbol === 'function') {
1007
+ Readable.prototype[Symbol.asyncIterator] = function () {
1008
+ if (createReadableStreamAsyncIterator === undefined) {
1009
+ createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');
1010
+ }
1011
+
1012
+ return createReadableStreamAsyncIterator(this);
1013
+ };
1014
+ }
1015
+
879
1016
  Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
880
1017
  // making it explicit this property is not enumerable
881
1018
  // because otherwise some prototype manipulation in
882
1019
  // userland will fail
883
1020
  enumerable: false,
884
- get: function () {
1021
+ get: function get() {
885
1022
  return this._readableState.highWaterMark;
886
1023
  }
887
1024
  });
1025
+ Object.defineProperty(Readable.prototype, 'readableBuffer', {
1026
+ // making it explicit this property is not enumerable
1027
+ // because otherwise some prototype manipulation in
1028
+ // userland will fail
1029
+ enumerable: false,
1030
+ get: function get() {
1031
+ return this._readableState && this._readableState.buffer;
1032
+ }
1033
+ });
1034
+ Object.defineProperty(Readable.prototype, 'readableFlowing', {
1035
+ // making it explicit this property is not enumerable
1036
+ // because otherwise some prototype manipulation in
1037
+ // userland will fail
1038
+ enumerable: false,
1039
+ get: function get() {
1040
+ return this._readableState.flowing;
1041
+ },
1042
+ set: function set(state) {
1043
+ if (this._readableState) {
1044
+ this._readableState.flowing = state;
1045
+ }
1046
+ }
1047
+ }); // exposed for testing purposes only.
888
1048
 
889
- // exposed for testing purposes only.
890
1049
  Readable._fromList = fromList;
891
-
892
- // Pluck off n bytes from an array of buffers.
1050
+ Object.defineProperty(Readable.prototype, 'readableLength', {
1051
+ // making it explicit this property is not enumerable
1052
+ // because otherwise some prototype manipulation in
1053
+ // userland will fail
1054
+ enumerable: false,
1055
+ get: function get() {
1056
+ return this._readableState.length;
1057
+ }
1058
+ }); // Pluck off n bytes from an array of buffers.
893
1059
  // Length is the combined lengths of all the buffers in the list.
894
1060
  // This function is designed to be inlinable, so please take care when making
895
1061
  // changes to the function body.
1062
+
896
1063
  function fromList(n, state) {
897
1064
  // nothing buffered
898
1065
  if (state.length === 0) return null;
899
-
900
1066
  var ret;
901
1067
  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
902
1068
  // read it all, truncate the list
903
- if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
1069
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
904
1070
  state.buffer.clear();
905
1071
  } else {
906
1072
  // read part of list
907
- ret = fromListPartial(n, state.buffer, state.decoder);
1073
+ ret = state.buffer.consume(n, state.decoder);
908
1074
  }
909
-
910
- return ret;
911
- }
912
-
913
- // Extracts only enough buffered data to satisfy the amount requested.
914
- // This function is designed to be inlinable, so please take care when making
915
- // changes to the function body.
916
- function fromListPartial(n, list, hasStrings) {
917
- var ret;
918
- if (n < list.head.data.length) {
919
- // slice is the same for buffers and strings
920
- ret = list.head.data.slice(0, n);
921
- list.head.data = list.head.data.slice(n);
922
- } else if (n === list.head.data.length) {
923
- // first chunk is a perfect match
924
- ret = list.shift();
925
- } else {
926
- // result spans more than one buffer
927
- ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
928
- }
929
- return ret;
930
- }
931
-
932
- // Copies a specified amount of characters from the list of buffered data
933
- // chunks.
934
- // This function is designed to be inlinable, so please take care when making
935
- // changes to the function body.
936
- function copyFromBufferString(n, list) {
937
- var p = list.head;
938
- var c = 1;
939
- var ret = p.data;
940
- n -= ret.length;
941
- while (p = p.next) {
942
- var str = p.data;
943
- var nb = n > str.length ? str.length : n;
944
- if (nb === str.length) ret += str;else ret += str.slice(0, n);
945
- n -= nb;
946
- if (n === 0) {
947
- if (nb === str.length) {
948
- ++c;
949
- if (p.next) list.head = p.next;else list.head = list.tail = null;
950
- } else {
951
- list.head = p;
952
- p.data = str.slice(nb);
953
- }
954
- break;
955
- }
956
- ++c;
957
- }
958
- list.length -= c;
959
- return ret;
960
- }
961
-
962
- // Copies a specified amount of bytes from the list of buffered data chunks.
963
- // This function is designed to be inlinable, so please take care when making
964
- // changes to the function body.
965
- function copyFromBuffer(n, list) {
966
- var ret = Buffer.allocUnsafe(n);
967
- var p = list.head;
968
- var c = 1;
969
- p.data.copy(ret);
970
- n -= p.data.length;
971
- while (p = p.next) {
972
- var buf = p.data;
973
- var nb = n > buf.length ? buf.length : n;
974
- buf.copy(ret, ret.length - n, 0, nb);
975
- n -= nb;
976
- if (n === 0) {
977
- if (nb === buf.length) {
978
- ++c;
979
- if (p.next) list.head = p.next;else list.head = list.tail = null;
980
- } else {
981
- list.head = p;
982
- p.data = buf.slice(nb);
983
- }
984
- break;
985
- }
986
- ++c;
987
- }
988
- list.length -= c;
989
1075
  return ret;
990
1076
  }
991
1077
 
992
1078
  function endReadable(stream) {
993
1079
  var state = stream._readableState;
994
-
995
- // If we get here before consuming all the bytes, then that is a
996
- // bug in node. Should never happen.
997
- if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
1080
+ debug('endReadable', state.endEmitted);
998
1081
 
999
1082
  if (!state.endEmitted) {
1000
1083
  state.ended = true;
1001
- pna.nextTick(endReadableNT, state, stream);
1084
+ process.nextTick(endReadableNT, state, stream);
1002
1085
  }
1003
1086
  }
1004
1087
 
1005
1088
  function endReadableNT(state, stream) {
1006
- // Check that we didn't get one last unshift.
1089
+ debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.
1090
+
1007
1091
  if (!state.endEmitted && state.length === 0) {
1008
1092
  state.endEmitted = true;
1009
1093
  stream.readable = false;
1010
1094
  stream.emit('end');
1095
+
1096
+ if (state.autoDestroy) {
1097
+ // In case of duplex streams we need a way to detect
1098
+ // if the writable side is ready for autoDestroy as well
1099
+ var wState = stream._writableState;
1100
+
1101
+ if (!wState || wState.autoDestroy && wState.finished) {
1102
+ stream.destroy();
1103
+ }
1104
+ }
1011
1105
  }
1012
1106
  }
1013
1107
 
1108
+ if (typeof Symbol === 'function') {
1109
+ Readable.from = function (iterable, opts) {
1110
+ if (from === undefined) {
1111
+ from = require('./internal/streams/from');
1112
+ }
1113
+
1114
+ return from(Readable, iterable, opts);
1115
+ };
1116
+ }
1117
+
1014
1118
  function indexOf(xs, x) {
1015
1119
  for (var i = 0, l = xs.length; i < l; i++) {
1016
1120
  if (xs[i] === x) return i;
1017
1121
  }
1122
+
1018
1123
  return -1;
1019
1124
  }