Skip to content

Commit

Permalink
stream: use readableEncoding public api for child_process
Browse files Browse the repository at this point in the history
PR-URL: nodejs#28548
Refs: nodejs#445
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
  • Loading branch information
ZYSzys authored and Trott committed Jul 15, 2019
1 parent 461bf36 commit 6c430b4
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 6 deletions.
11 changes: 11 additions & 0 deletions doc/api/stream.md
Original file line number Diff line number Diff line change
Expand Up @@ -1085,6 +1085,16 @@ added: v11.4.0

Is `true` if it is safe to call [`readable.read()`][stream-read].

##### readable.readableEncoding
<!-- YAML
added: REPLACEME
-->

* {null|string}

Getter for the property `encoding` of a given `Readable` stream. The `encoding`
property can be set using the [`readable.setEncoding()`][] method.

##### readable.readableHighWaterMark
<!-- YAML
added: v9.3.0
Expand Down Expand Up @@ -2655,6 +2665,7 @@ contain multi-byte characters.
[`process.stdin`]: process.html#process_process_stdin
[`process.stdout`]: process.html#process_process_stdout
[`readable.push('')`]: #stream_readable_push
[`readable.setEncoding()`]: #stream_readable_setencoding_encoding
[`stream.Readable.from()`]: #stream_stream_readable_from_iterable_options
[`stream.cork()`]: #stream_writable_cork
[`stream.finished()`]: #stream_stream_finished_stream_options_callback
Expand Down
7 changes: 7 additions & 0 deletions lib/_stream_readable.js
Original file line number Diff line number Diff line change
Expand Up @@ -1075,6 +1075,13 @@ Object.defineProperty(Readable.prototype, 'readableObjectMode', {
}
});

Object.defineProperty(Readable.prototype, 'readableEncoding', {
enumerable: false,
get() {
return this._readableState ? this._readableState.encoding : null;
}
});

// Pluck off n bytes from an array of buffers.
// Length is the combined lengths of all the buffers in the list.
// This function is designed to be inlinable, so please take care when making
Expand Down
10 changes: 4 additions & 6 deletions lib/child_process.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,7 @@ function execFile(file /* , args, options, callback */) {
if (encoding ||
(
child.stdout &&
child.stdout._readableState &&
child.stdout._readableState.encoding
child.stdout.readableEncoding
)) {
stdout = _stdout.join('');
} else {
Expand All @@ -276,8 +275,7 @@ function execFile(file /* , args, options, callback */) {
if (encoding ||
(
child.stderr &&
child.stderr._readableState &&
child.stderr._readableState.encoding
child.stderr.readableEncoding
)) {
stderr = _stderr.join('');
} else {
Expand Down Expand Up @@ -344,7 +342,7 @@ function execFile(file /* , args, options, callback */) {
child.stdout.setEncoding(encoding);

child.stdout.on('data', function onChildStdout(chunk) {
const encoding = child.stdout._readableState.encoding;
const encoding = child.stdout.readableEncoding;
const length = encoding ?
Buffer.byteLength(chunk, encoding) :
chunk.length;
Expand All @@ -367,7 +365,7 @@ function execFile(file /* , args, options, callback */) {
child.stderr.setEncoding(encoding);

child.stderr.on('data', function onChildStderr(chunk) {
const encoding = child.stderr._readableState.encoding;
const encoding = child.stderr.readableEncoding;
const length = encoding ?
Buffer.byteLength(chunk, encoding) :
chunk.length;
Expand Down
12 changes: 12 additions & 0 deletions test/parallel/test-stream2-basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,14 +422,26 @@ class TestWriter extends EE {
assert.strictEqual(r, r2);
}

{
// Verify readableEncoding property
assert(R.prototype.hasOwnProperty('readableEncoding'));

const r = new R({ encoding: 'utf8' });
assert.strictEqual(r.readableEncoding, 'utf8');
}

{
// Verify readableObjectMode property
assert(R.prototype.hasOwnProperty('readableObjectMode'));

const r = new R({ objectMode: true });
assert.strictEqual(r.readableObjectMode, true);
}

{
// Verify writableObjectMode property
assert(W.prototype.hasOwnProperty('writableObjectMode'));

const w = new W({ objectMode: true });
assert.strictEqual(w.writableObjectMode, true);
}

0 comments on commit 6c430b4

Please sign in to comment.