Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stream: add destroy and _destroy methods. #12925

Closed
wants to merge 1 commit into from
Closed

Conversation

@mcollina
Copy link
Member

mcollina commented May 9, 2017

Adds destroy() and _destroy() methods to Readable, Writable, Duplex
and Transform. It also standardize the behavior and the implementation
of destroy(), which has been incosistent in userland.
This PR also updates all subsystems of core to use the new destroy().

Fixes: nodejs/readable-stream#124

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines
Affected core subsystem(s)

stream, net, fs, process

@mcollina
Copy link
Member Author

mcollina commented May 9, 2017

@mcollina
Copy link
Member Author

mcollina commented May 9, 2017

This change might be semver-major, because now we are always emitting the error passed to destroy asynchronously, but stdio did so synchronously: https://github.com/nodejs/node/pull/12925/files#diff-5224cdaa6225b9d4e1e7bd73a2ea284f.
However, that might be also seen as a bug of the previous implementation, as all the other parts of core emitted those asynchronously.

I'm currently tagging this semver-minor, but feel free to bump to semver-major if you think it's the case.

@cjihrig
Copy link
Contributor

cjihrig commented May 9, 2017

This has a conflict in doc/api/stream.md. We'll definitely want a CITGM run on this too.

@thefourtheye
Copy link
Contributor

thefourtheye commented May 9, 2017

This already has a merge conflict 😮

doc/api/stream.md Outdated
@@ -499,6 +499,13 @@ write('hello', () => {

A Writable stream in object mode will always ignore the `encoding` argument.

##### writable.destroy([error])

destroy the stream, and emit the passed error. after this call, the

This comment has been minimized.

Copy link
@thefourtheye

thefourtheye May 9, 2017

Contributor

Initcap please.

Copy link
Contributor

cjihrig left a comment

Did a first pass of review.

doc/api/stream.md Outdated
@@ -499,6 +499,13 @@ write('hello', () => {

A Writable stream in object mode will always ignore the `encoding` argument.

##### writable.destroy([error])

destroy the stream, and emit the passed error. after this call, the

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

destroy -> Destroy. after -> After

doc/api/stream.md Outdated

destroy the stream, and emit the passed error. after this call, the
writible stream has ended.
implementors should not override this method, but implement to

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

implementors -> Implementors

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Maybe say "but instead implement writable._destroy"

doc/api/stream.md Outdated
@@ -1073,6 +1080,13 @@ myReader.on('readable', () => {
});
```

##### readable.destroy([error])

Destroy the stream, and emit the passed error. After this call, the

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Instead of "emit the passed error" maybe just say "emit error"

doc/api/stream.md Outdated
##### readable.destroy([error])

Destroy the stream, and emit the passed error. After this call, the
readable stream would release any internal resources.

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

would -> will

doc/api/stream.md Outdated

Destroy the stream, and emit the passed error. After this call, the
readable stream would release any internal resources.
implementors should not override this method, but implement to

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Capitalize implementors.

This comment has been minimized.

Copy link
@jasnell

jasnell May 9, 2017

Member

s/implement to/implement

doc/api/stream.md Outdated
#### writable.\_destroy(err, callback)

* `err` {Error} An error.
* `callback` {Function} A callback function (optionally with an error

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

A callback function that takes an optional error argument which is invoked when the writable is destroyed.

lib/_stream_readable.js Outdated
@@ -132,9 +135,25 @@ function Readable(options) {
if (options && typeof options.read === 'function')
this._read = options.read;

if (options && typeof options.destroy === 'function')

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Can options be typeof options === 'object'. I believe by this point we know that it isn't null.

This comment has been minimized.

Copy link
@calvinmetcalf

calvinmetcalf May 10, 2017

Contributor

we do the same thing 3 lines earlier so so consistency wise it's probably fine.

test/parallel/test-process-external-stdio-close-spawn.js Outdated
process.disconnect();
}));
} else {
// '--inspect', '--inspect-brk',

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

This can be removed.

test/parallel/test-process-external-stdio-close-spawn.js Outdated
}));
} else {
// '--inspect', '--inspect-brk',
const child = cp.spawn(process.execPath, [ __filename, 'child'], {

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Unnecessary space before __filename

test/parallel/test-stream-duplex-destroy.js Outdated
read() {}
});

duplex._destroy = function(err, cb) {

This comment has been minimized.

Copy link
@cjihrig

cjihrig May 9, 2017

Contributor

Might be worth wrapping the right hand side in common.mustCall() throughout if you know exactly how many times it will be called.

@@ -194,6 +194,14 @@ Transform.prototype._read = function(n) {
};


Transform.prototype._destroy = function(err, cb) {
Duplex.prototype._destroy.call(this, err, (err2) => {

This comment has been minimized.

Copy link
@calvinmetcalf

calvinmetcalf May 10, 2017

Contributor

can we just use super._destroy here ?

This comment has been minimized.

Copy link
@mcollina

mcollina May 10, 2017

Author Member

we are not inheriting with class, so no super.

This comment has been minimized.

Copy link
@calvinmetcalf

calvinmetcalf May 10, 2017

Contributor

I don't think that matters

edit: according to mdn it doesn't.

This comment has been minimized.

Copy link
@mcollina

mcollina May 10, 2017

Author Member

@calvinmetcalf it doesn't work. super is defined only for object literals.

This comment has been minimized.

Copy link
@calvinmetcalf

calvinmetcalf May 10, 2017

Contributor

right only for object shorthand syntax my bad.

@mcollina mcollina force-pushed the mcollina:destroy branch 2 times, most recently May 10, 2017
@mcollina
Copy link
Member Author

mcollina commented May 10, 2017

@cjihrig please have a look.

@mcollina
Copy link
Member Author

mcollina commented May 10, 2017

@MylesBorins can you look at those citgm failures from master? There seems to be quite a bit of breakage even on the one on master, and I have trouble reading out if I broke something here.
Also, there were a bit of npm failures as well.

@gibfahn
Copy link
Member

gibfahn commented May 10, 2017

For CitGM, winston and watchify failures are expected, see #12220 (comment)

@mcollina
Copy link
Member Author

mcollina commented May 11, 2017

So, we are breaking a bit the ecosystem for this, here are duplexify tests:

$ READABLE_STREAM=disable ../node/node test.js
TAP version 13
# passthrough
ok 1 should finish
ok 2 same in as out
# passthrough + double end
ok 3 should finish
ok 4 same in as out
# async passthrough + end
ok 5 should finish
ok 6 same in as out
# duplex
ok 7 onwrite should match
ok 8 onwrite should match
ok 9 onwrite should match
ok 10 should finish
ok 11 ondata should match
ok 12 ondata should match
ok 13 ondata should match
ok 14 should end
# async
ok 15 same in as out
# destroy
ok 16 write destroyed
ok 17 close emitted
ok 18 write destroyed
not ok 19 plan != count
  ---
    operator: fail
    expected: 2
    actual:   3
    at: Transform.write.destroy (/Users/matteo/Repositories/duplexify/test.js:126:7)
  ...
ok 20 close emitted
# destroy both
ok 21 read destroyed
ok 22 write destroyed
ok 23 close emitted
ok 24 read destroyed
not ok 25 plan != count
  ---
    operator: fail
    expected: 3
    actual:   4
    at: Transform.read.destroy (/Users/matteo/Repositories/duplexify/test.js:149:7)
  ...
ok 26 write destroyed
ok 27 close emitted
# bubble read errors
ok 28 received read error
ok 29 close emitted
not ok 30 received read error
  ---
    operator: deepEqual
    expected: 'read-error'
    actual:   'write-error'
    at: Duplexify.<anonymous> (/Users/matteo/Repositories/duplexify/test.js:168:7)
  ...
not ok 31 plan != count
  ---
    operator: fail
    expected: 2
    actual:   3
    at: Duplexify.<anonymous> (/Users/matteo/Repositories/duplexify/test.js:168:7)
  ...
ok 32 close emitted
# bubble write errors
ok 33 received write error
ok 34 close emitted
not ok 35 received write error
  ---
    operator: deepEqual
    expected: 'write-error'
    actual:   'read-error'
    at: Duplexify.<anonymous> (/Users/matteo/Repositories/duplexify/test.js:186:7)
  ...
not ok 36 plan != count
  ---
    operator: fail
    expected: 2
    actual:   3
    at: Duplexify.<anonymous> (/Users/matteo/Repositories/duplexify/test.js:186:7)
  ...
ok 37 close emitted
# reset writable / readable
ok 38 should be equivalent
ok 39 should be equivalent
ok 40 should be equivalent
# cork
ok 41 (unnamed assert)
# prefinish not twice
ok 42 only prefinish once
# close
ok 43 should forward close
ok 44 should forward close
not ok 45 .end() called twice
  ---
    operator: fail
    at: Duplexify.<anonymous> (/Users/matteo/Repositories/duplexify/test.js:268:7)
  ...
# works with node native streams (net)
ok 46 should be equivalent

1..46
# tests 46
# pass  39
# fail  7
@mcollina mcollina force-pushed the mcollina:destroy branch May 11, 2017
@calvinmetcalf
Copy link
Contributor

calvinmetcalf commented May 11, 2017

what exactly is the issue with destory? subtly different mechanics ?

@mcollina mcollina force-pushed the mcollina:destroy branch May 11, 2017
@mcollina
Copy link
Member Author

mcollina commented May 11, 2017

what exactly is the issue with destory? subtly different mechanics ?

@calvinmetcalf me breaking things. destroyed  has no setter, and it's used in the ecosystem.
I should have fixed that, let's see.

CITGM (disabling readable-stream): https://ci.nodejs.org/view/Node.js-citgm/job/citgm-smoker/774/
CI: https://ci.nodejs.org/job/node-test-pull-request/8016/

@mcollina
Copy link
Member Author

mcollina commented May 15, 2017

@mcollina mcollina force-pushed the mcollina:destroy branch May 15, 2017
@mcollina
Copy link
Member Author

mcollina commented May 15, 2017

doc/api/stream.md Outdated
@@ -499,6 +499,16 @@ write('hello', () => {

A Writable stream in object mode will always ignore the `encoding` argument.

##### writable.destroy([error])
<!-- YAML
added: TBD

This comment has been minimized.

Copy link
@jasnell

jasnell May 15, 2017

Member

s/TBD/REPLACEME

@refack refack mentioned this pull request May 22, 2017
mcollina added a commit to mcollina/node that referenced this pull request May 22, 2017
Fixed a regression that caused the callback passed to destroy()
to not be called if the stream was already destroyed.
This caused a regression on the ws module in CITGM introduced by
nodejs#12925.

Fixes: websockets/ws#1118
@MylesBorins
Copy link
Member

MylesBorins commented May 22, 2017

this technically landed after the semver major cutoff @nodejs/ctc does anyone have an issue with this landing in the 8.0.0 release?

The fact that it may be breaking ws has me slightly concerned

@mcollina
Copy link
Member Author

mcollina commented May 22, 2017

#13156 needs to land as well to fix the ws regression.

@jasnell
Copy link
Member

jasnell commented May 23, 2017

I'm definitely +1 on this landing in 8.0.0

mcollina added a commit that referenced this pull request May 24, 2017
Fixed a regression that caused the callback passed to destroy()
to not be called if the stream was already destroyed.
This caused a regression on the ws module in CITGM introduced by
#12925.

PR-URL: #13156
Fixes: websockets/ws#1118
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
jasnell added a commit that referenced this pull request May 24, 2017
Adds destroy() and _destroy() methods to Readable, Writable, Duplex
and Transform. It also standardizes the behavior and the implementation
of destroy(), which has been inconsistent in userland and core.
This PR also updates all the subsystems of core to use the new
destroy().

PR-URL: #12925
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
jasnell added a commit that referenced this pull request May 24, 2017
Fixed a regression that caused the callback passed to destroy()
to not be called if the stream was already destroyed.
This caused a regression on the ws module in CITGM introduced by
#12925.

PR-URL: #13156
Fixes: websockets/ws#1118
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
jasnell added a commit that referenced this pull request May 28, 2017
Adds destroy() and _destroy() methods to Readable, Writable, Duplex
and Transform. It also standardizes the behavior and the implementation
of destroy(), which has been inconsistent in userland and core.
This PR also updates all the subsystems of core to use the new
destroy().

PR-URL: #12925
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
jasnell added a commit that referenced this pull request May 28, 2017
Fixed a regression that caused the callback passed to destroy()
to not be called if the stream was already destroyed.
This caused a regression on the ws module in CITGM introduced by
#12925.

PR-URL: #13156
Fixes: websockets/ws#1118
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
@jasnell jasnell mentioned this pull request May 28, 2017
jasnell added a commit to jasnell/node that referenced this pull request May 29, 2017
* **Async Hooks**
  * The `async_hooks` module has landed in core
    [[`4a7233c178`](nodejs@4a7233c)]
    [nodejs#12892](nodejs#12892).

* **Buffer**
  * Using the `--pending-deprecation` flag will cause Node.js to emit a
    deprecation warning when using `new Buffer(num)` or `Buffer(num)`.
    [[`d2d32ea5a2`](nodejs@d2d32ea)]
    [nodejs#11968](nodejs#11968).
  * `new Buffer(num)` and `Buffer(num)` will zero-fill new `Buffer` instances
    [[`7eb1b4658e`](nodejs@7eb1b46)]
    [nodejs#12141](nodejs#12141).
  * Many `Buffer` methods now accept `Uint8Array` as input
    [[`beca3244e2`](nodejs@beca324)]
    [nodejs#10236](nodejs#10236).

* **Child Process**
  * Argument and kill signal validations have been improved
    [[`97a77288ce`](nodejs@97a7728)]
    [nodejs#12348](nodejs#12348),
    [[`d75fdd96aa`](nodejs@d75fdd9)]
    [nodejs#10423](nodejs#10423).
  * Child Process methods accept `Uint8Array` as input
    [[`627ecee9ed`](nodejs@627ecee)]
    [nodejs#10653](nodejs#10653).

* **Console**
  * Error events emitted when using `console` methods are now supressed.
    [[`f18e08d820`](nodejs@f18e08d)]
    [nodejs#9744](nodejs#9744).

* **Dependencies**
  * The npm client has been updated to 5.0.0
    [[`3c3b36af0f`](nodejs@3c3b36a)]
    [nodejs#12936](nodejs#12936).
  * V8 has been updated to 5.8 with forward ABI stability to 6.0
    [[`60d1aac8d2`](nodejs@60d1aac)]
    [nodejs#12784](nodejs#12784).

* **Domains**
  * Native `Promise` instances are now `Domain` aware
    [[`84dabe8373`](nodejs@84dabe8)]
    [nodejs#12489](nodejs#12489).

* **Errors**
  * We have started assigning static error codes to errors generated by Node.js.
    This has been done through multiple commits and is still a work in
    progress.

* **File System**
  * The utility class `fs.SyncWriteStream` has been deprecated
    [[`7a55e34ef4`](nodejs@7a55e34)]
    [nodejs#10467](nodejs#10467).
  * The deprecated `fs.read()` string interface has been removed
    [[`3c2a9361ff`](nodejs@3c2a936)]
    [nodejs#9683](nodejs#9683).

* **HTTP**
  * Improved support for userland implemented Agents
    [[`90403dd1d0`](nodejs@90403dd)]
    [nodejs#11567](nodejs#11567).
  * Outgoing Cookie headers are concatenated into a single string
    [[`d3480776c7`](nodejs@d348077)]
    [nodejs#11259](nodejs#11259).
  * The `httpResponse.writeHeader()` method has been deprecated
    [[`fb71ba4921`](nodejs@fb71ba4)]
    [nodejs#11355](nodejs#11355).
  * New methods for accessing HTTP headers have been added to `OutgoingMessage`
    [[`3e6f1032a4`](nodejs@3e6f103)]
    [nodejs#10805](nodejs#10805).

* **Lib**
  * All deprecation messages have been assigned static identifiers
    [[`5de3cf099c`](nodejs@5de3cf0)]
    [nodejs#10116](nodejs#10116).
  * The legacy `linkedlist` module has been removed
    [[`84a23391f6`](nodejs@84a2339)]
    [nodejs#12113](nodejs#12113).

* **N-API**
  * Experimental support for the new N-API API has been added
    [[`56e881d0b0`](nodejs@56e881d)]
    [nodejs#11975](nodejs#11975).

* **Process**
  * Process warning output can be redirected to a file using the
    `--redirect-warnings` command-line argument
    [[`03e89b3ff2`](nodejs@03e89b3)]
    [nodejs#10116](nodejs#10116).
  * Process warnings may now include additional detail
    [[`dd20e68b0f`](nodejs@dd20e68)]
    [nodejs#12725](nodejs#12725).

* **REPL**
  * REPL magic mode has been deprecated
    [[`3f27f02da0`](nodejs@3f27f02)]
    [nodejs#11599](nodejs#11599).

* **Src**
  * `NODE_MODULE_VERSION` has been updated to 57
    (nodejs@ec7cbaf)]
    [nodejs#12995](nodejs#12995).
  * Add `--pending-deprecation` command-line argument and
    `NODE_PENDING_DEPRECATION` environment variable
    [[`a16b570f8c`](nodejs@a16b570)]
    [nodejs#11968](nodejs#11968).
  * The `--debug` command-line argument has been deprecated. Note that
    using `--debug` will enable the *new* Inspector-based debug protocol
    as the legacy Debugger protocol previously used by Node.js has been
    removed. [[`010f864426`](nodejs@010f864)]
    [nodejs#12949](nodejs#12949).
  * Throw when the `-c` and `-e` command-line arguments are used at the same
    time [[`a5f91ab230`](nodejs@a5f91ab)]
    [nodejs#11689](nodejs#11689).
  * Throw when the `--use-bundled-ca` and `--use-openssl-ca` command-line
    arguments are used at the same time.
    [[`8a7db9d4b5`](nodejs@8a7db9d)]
    [nodejs#12087](nodejs#12087).

* **Stream**
  * `Stream` now supports `destroy()` and `_destroy()` APIs
    [[`b6e1d22fa6`](nodejs@b6e1d22)]
    [nodejs#12925](nodejs#12925).
  * `Stream` now supports the `_final()` API
    [[`07c7f198db`](nodejs@07c7f19)]
    [nodejs#12828](nodejs#12828).

* **TLS**
  * The `rejectUnauthorized` option now defaults to `true`
    [[`348cc80a3c`](nodejs@348cc80)]
    [nodejs#5923](nodejs#5923).
  * The `tls.createSecurePair()` API now emits a runtime deprecation
    [[`a2ae08999b`](nodejs@a2ae089)]
    [nodejs#11349](nodejs#11349).
  * A runtime deprecation will now be emitted when `dhparam` is less than
    2048 bits [[`d523eb9c40`](nodejs@d523eb9)]
    [nodejs#11447](nodejs#11447).

* **URL**
  * The WHATWG URL implementation is now a fully-supported Node.js API
    [[`d080ead0f9`](nodejs@d080ead)]
    [nodejs#12710](nodejs#12710).

* **Util**
  * `Symbol` keys are now displayed by default when using `util.inspect()`
    [[`5bfd13b81e`](nodejs@5bfd13b)]
    [nodejs#9726](nodejs#9726).
  * `toJSON` errors will be thrown when formatting `%j`
    [[`455e6f1dd8`](nodejs@455e6f1)]
    [nodejs#11708](nodejs#11708).
  * Convert `inspect.styles` and `inspect.colors` to prototype-less objects
    [[`aab0d202f8`](nodejs@aab0d20)]
    [nodejs#11624](nodejs#11624).
  * The new `util.promisify()` API has been added
    [[`99da8e8e02`](nodejs@99da8e8)]
    [nodejs#12442](nodejs#12442).

* **Zlib**
  * Support `Uint8Array` in Zlib convenience methods
    [[`91383e47fd`](nodejs@91383e4)]
    [nodejs#12001](nodejs#12001).
  * Zlib errors now use `RangeError` and `TypeError` consistently
    [[`b514bd231e`](nodejs@b514bd2)]
    [nodejs#11391](nodejs#11391).
jasnell added a commit that referenced this pull request May 30, 2017
* **Async Hooks**
  * The `async_hooks` module has landed in core
    [[`4a7233c178`](4a7233c)]
    [#12892](#12892).

* **Buffer**
  * Using the `--pending-deprecation` flag will cause Node.js to emit a
    deprecation warning when using `new Buffer(num)` or `Buffer(num)`.
    [[`d2d32ea5a2`](d2d32ea)]
    [#11968](#11968).
  * `new Buffer(num)` and `Buffer(num)` will zero-fill new `Buffer` instances
    [[`7eb1b4658e`](7eb1b46)]
    [#12141](#12141).
  * Many `Buffer` methods now accept `Uint8Array` as input
    [[`beca3244e2`](beca324)]
    [#10236](#10236).

* **Child Process**
  * Argument and kill signal validations have been improved
    [[`97a77288ce`](97a7728)]
    [#12348](#12348),
    [[`d75fdd96aa`](d75fdd9)]
    [#10423](#10423).
  * Child Process methods accept `Uint8Array` as input
    [[`627ecee9ed`](627ecee)]
    [#10653](#10653).

* **Console**
  * Error events emitted when using `console` methods are now supressed.
    [[`f18e08d820`](f18e08d)]
    [#9744](#9744).

* **Dependencies**
  * The npm client has been updated to 5.0.0
    [[`3c3b36af0f`](3c3b36a)]
    [#12936](#12936).
  * V8 has been updated to 5.8 with forward ABI stability to 6.0
    [[`60d1aac8d2`](60d1aac)]
    [#12784](#12784).

* **Domains**
  * Native `Promise` instances are now `Domain` aware
    [[`84dabe8373`](84dabe8)]
    [#12489](#12489).

* **Errors**
  * We have started assigning static error codes to errors generated by Node.js.
    This has been done through multiple commits and is still a work in
    progress.

* **File System**
  * The utility class `fs.SyncWriteStream` has been deprecated
    [[`7a55e34ef4`](7a55e34)]
    [#10467](#10467).
  * The deprecated `fs.read()` string interface has been removed
    [[`3c2a9361ff`](3c2a936)]
    [#9683](#9683).

* **HTTP**
  * Improved support for userland implemented Agents
    [[`90403dd1d0`](90403dd)]
    [#11567](#11567).
  * Outgoing Cookie headers are concatenated into a single string
    [[`d3480776c7`](d348077)]
    [#11259](#11259).
  * The `httpResponse.writeHeader()` method has been deprecated
    [[`fb71ba4921`](fb71ba4)]
    [#11355](#11355).
  * New methods for accessing HTTP headers have been added to `OutgoingMessage`
    [[`3e6f1032a4`](3e6f103)]
    [#10805](#10805).

* **Lib**
  * All deprecation messages have been assigned static identifiers
    [[`5de3cf099c`](5de3cf0)]
    [#10116](#10116).
  * The legacy `linkedlist` module has been removed
    [[`84a23391f6`](84a2339)]
    [#12113](#12113).

* **N-API**
  * Experimental support for the new N-API API has been added
    [[`56e881d0b0`](56e881d)]
    [#11975](#11975).

* **Process**
  * Process warning output can be redirected to a file using the
    `--redirect-warnings` command-line argument
    [[`03e89b3ff2`](03e89b3)]
    [#10116](#10116).
  * Process warnings may now include additional detail
    [[`dd20e68b0f`](dd20e68)]
    [#12725](#12725).

* **REPL**
  * REPL magic mode has been deprecated
    [[`3f27f02da0`](3f27f02)]
    [#11599](#11599).

* **Src**
  * `NODE_MODULE_VERSION` has been updated to 57
    (ec7cbaf)]
    [#12995](#12995).
  * Add `--pending-deprecation` command-line argument and
    `NODE_PENDING_DEPRECATION` environment variable
    [[`a16b570f8c`](a16b570)]
    [#11968](#11968).
  * The `--debug` command-line argument has been deprecated. Note that
    using `--debug` will enable the *new* Inspector-based debug protocol
    as the legacy Debugger protocol previously used by Node.js has been
    removed. [[`010f864426`](010f864)]
    [#12949](#12949).
  * Throw when the `-c` and `-e` command-line arguments are used at the same
    time [[`a5f91ab230`](a5f91ab)]
    [#11689](#11689).
  * Throw when the `--use-bundled-ca` and `--use-openssl-ca` command-line
    arguments are used at the same time.
    [[`8a7db9d4b5`](8a7db9d)]
    [#12087](#12087).

* **Stream**
  * `Stream` now supports `destroy()` and `_destroy()` APIs
    [[`b6e1d22fa6`](b6e1d22)]
    [#12925](#12925).
  * `Stream` now supports the `_final()` API
    [[`07c7f198db`](07c7f19)]
    [#12828](#12828).

* **TLS**
  * The `rejectUnauthorized` option now defaults to `true`
    [[`348cc80a3c`](348cc80)]
    [#5923](#5923).
  * The `tls.createSecurePair()` API now emits a runtime deprecation
    [[`a2ae08999b`](a2ae089)]
    [#11349](#11349).
  * A runtime deprecation will now be emitted when `dhparam` is less than
    2048 bits [[`d523eb9c40`](d523eb9)]
    [#11447](#11447).

* **URL**
  * The WHATWG URL implementation is now a fully-supported Node.js API
    [[`d080ead0f9`](d080ead)]
    [#12710](#12710).

* **Util**
  * `Symbol` keys are now displayed by default when using `util.inspect()`
    [[`5bfd13b81e`](5bfd13b)]
    [#9726](#9726).
  * `toJSON` errors will be thrown when formatting `%j`
    [[`455e6f1dd8`](455e6f1)]
    [#11708](#11708).
  * Convert `inspect.styles` and `inspect.colors` to prototype-less objects
    [[`aab0d202f8`](aab0d20)]
    [#11624](#11624).
  * The new `util.promisify()` API has been added
    [[`99da8e8e02`](99da8e8)]
    [#12442](#12442).

* **Zlib**
  * Support `Uint8Array` in Zlib convenience methods
    [[`91383e47fd`](91383e4)]
    [#12001](#12001).
  * Zlib errors now use `RangeError` and `TypeError` consistently
    [[`b514bd231e`](b514bd2)]
    [#11391](#11391).
jasnell added a commit that referenced this pull request May 30, 2017
* **Async Hooks**
  * The `async_hooks` module has landed in core
    [[`4a7233c178`](4a7233c)]
    [#12892](#12892).

* **Buffer**
  * Using the `--pending-deprecation` flag will cause Node.js to emit a
    deprecation warning when using `new Buffer(num)` or `Buffer(num)`.
    [[`d2d32ea5a2`](d2d32ea)]
    [#11968](#11968).
  * `new Buffer(num)` and `Buffer(num)` will zero-fill new `Buffer` instances
    [[`7eb1b4658e`](7eb1b46)]
    [#12141](#12141).
  * Many `Buffer` methods now accept `Uint8Array` as input
    [[`beca3244e2`](beca324)]
    [#10236](#10236).

* **Child Process**
  * Argument and kill signal validations have been improved
    [[`97a77288ce`](97a7728)]
    [#12348](#12348),
    [[`d75fdd96aa`](d75fdd9)]
    [#10423](#10423).
  * Child Process methods accept `Uint8Array` as input
    [[`627ecee9ed`](627ecee)]
    [#10653](#10653).

* **Console**
  * Error events emitted when using `console` methods are now supressed.
    [[`f18e08d820`](f18e08d)]
    [#9744](#9744).

* **Dependencies**
  * The npm client has been updated to 5.0.0
    [[`3c3b36af0f`](3c3b36a)]
    [#12936](#12936).
  * V8 has been updated to 5.8 with forward ABI stability to 6.0
    [[`60d1aac8d2`](60d1aac)]
    [#12784](#12784).

* **Domains**
  * Native `Promise` instances are now `Domain` aware
    [[`84dabe8373`](84dabe8)]
    [#12489](#12489).

* **Errors**
  * We have started assigning static error codes to errors generated by Node.js.
    This has been done through multiple commits and is still a work in
    progress.

* **File System**
  * The utility class `fs.SyncWriteStream` has been deprecated
    [[`7a55e34ef4`](7a55e34)]
    [#10467](#10467).
  * The deprecated `fs.read()` string interface has been removed
    [[`3c2a9361ff`](3c2a936)]
    [#9683](#9683).

* **HTTP**
  * Improved support for userland implemented Agents
    [[`90403dd1d0`](90403dd)]
    [#11567](#11567).
  * Outgoing Cookie headers are concatenated into a single string
    [[`d3480776c7`](d348077)]
    [#11259](#11259).
  * The `httpResponse.writeHeader()` method has been deprecated
    [[`fb71ba4921`](fb71ba4)]
    [#11355](#11355).
  * New methods for accessing HTTP headers have been added to `OutgoingMessage`
    [[`3e6f1032a4`](3e6f103)]
    [#10805](#10805).

* **Lib**
  * All deprecation messages have been assigned static identifiers
    [[`5de3cf099c`](5de3cf0)]
    [#10116](#10116).
  * The legacy `linkedlist` module has been removed
    [[`84a23391f6`](84a2339)]
    [#12113](#12113).

* **N-API**
  * Experimental support for the new N-API API has been added
    [[`56e881d0b0`](56e881d)]
    [#11975](#11975).

* **Process**
  * Process warning output can be redirected to a file using the
    `--redirect-warnings` command-line argument
    [[`03e89b3ff2`](03e89b3)]
    [#10116](#10116).
  * Process warnings may now include additional detail
    [[`dd20e68b0f`](dd20e68)]
    [#12725](#12725).

* **REPL**
  * REPL magic mode has been deprecated
    [[`3f27f02da0`](3f27f02)]
    [#11599](#11599).

* **Src**
  * `NODE_MODULE_VERSION` has been updated to 57
    (ec7cbaf)]
    [#12995](#12995).
  * Add `--pending-deprecation` command-line argument and
    `NODE_PENDING_DEPRECATION` environment variable
    [[`a16b570f8c`](a16b570)]
    [#11968](#11968).
  * The `--debug` command-line argument has been deprecated. Note that
    using `--debug` will enable the *new* Inspector-based debug protocol
    as the legacy Debugger protocol previously used by Node.js has been
    removed. [[`010f864426`](010f864)]
    [#12949](#12949).
  * Throw when the `-c` and `-e` command-line arguments are used at the same
    time [[`a5f91ab230`](a5f91ab)]
    [#11689](#11689).
  * Throw when the `--use-bundled-ca` and `--use-openssl-ca` command-line
    arguments are used at the same time.
    [[`8a7db9d4b5`](8a7db9d)]
    [#12087](#12087).

* **Stream**
  * `Stream` now supports `destroy()` and `_destroy()` APIs
    [[`b6e1d22fa6`](b6e1d22)]
    [#12925](#12925).
  * `Stream` now supports the `_final()` API
    [[`07c7f198db`](07c7f19)]
    [#12828](#12828).

* **TLS**
  * The `rejectUnauthorized` option now defaults to `true`
    [[`348cc80a3c`](348cc80)]
    [#5923](#5923).
  * The `tls.createSecurePair()` API now emits a runtime deprecation
    [[`a2ae08999b`](a2ae089)]
    [#11349](#11349).
  * A runtime deprecation will now be emitted when `dhparam` is less than
    2048 bits [[`d523eb9c40`](d523eb9)]
    [#11447](#11447).

* **URL**
  * The WHATWG URL implementation is now a fully-supported Node.js API
    [[`d080ead0f9`](d080ead)]
    [#12710](#12710).

* **Util**
  * `Symbol` keys are now displayed by default when using `util.inspect()`
    [[`5bfd13b81e`](5bfd13b)]
    [#9726](#9726).
  * `toJSON` errors will be thrown when formatting `%j`
    [[`455e6f1dd8`](455e6f1)]
    [#11708](#11708).
  * Convert `inspect.styles` and `inspect.colors` to prototype-less objects
    [[`aab0d202f8`](aab0d20)]
    [#11624](#11624).
  * The new `util.promisify()` API has been added
    [[`99da8e8e02`](99da8e8)]
    [#12442](#12442).

* **Zlib**
  * Support `Uint8Array` in Zlib convenience methods
    [[`91383e47fd`](91383e4)]
    [#12001](#12001).
  * Zlib errors now use `RangeError` and `TypeError` consistently
    [[`b514bd231e`](b514bd2)]
    [#11391](#11391).
@Rob--W Rob--W mentioned this pull request Jun 21, 2017
2 of 2 tasks complete
@mcollina mcollina mentioned this pull request Aug 16, 2017
3 of 3 tasks complete
@trivikr trivikr mentioned this pull request Jul 23, 2019
3 of 3 tasks complete
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

You can’t perform that action at this time.