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: fix writable.end callback behavior #34101

Closed
wants to merge 2 commits into from

Conversation

ronag
Copy link
Member

@ronag ronag commented Jun 28, 2020

Changes so that the end() callback behaves the same way in relation to _final as write() does to _write/_writev.

Also avoids the listen to 'error' hack. Which was also inconsistent/confusing with the documentation which said the callback is attached to 'error' but it would still cause unhandled exceptions.

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

@nodejs-github-bot nodejs-github-bot added the stream Issues and PRs related to the stream subsystem. label Jun 28, 2020
@ronag ronag force-pushed the writable-end-cb branch 2 times, most recently from 0ca8d16 to bf6828a Compare June 28, 2020 15:48
Changes so that the end() callback behaves the same way in relation
to _final as write() does to _write/_writev.
@ronag ronag force-pushed the writable-end-cb branch from bf6828a to c563977 Compare June 28, 2020 15:48
@ronag ronag requested a review from mcollina June 28, 2020 15:51
@@ -185,6 +187,8 @@ function WritableState(options, stream, isDuplex) {
// True if close has been emitted or would have been emitted
// depending on emitClose.
this.closeEmitted = false;

this[kOnFinished] = [];
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possible optimization to start this as null.

@ronag ronag mentioned this pull request Jun 28, 2020
25 tasks
@nodejs-github-bot
Copy link
Collaborator

@mcollina mcollina added the semver-major PRs that contain breaking changes and should be released in the next major version. label Jun 28, 2020
Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@ronag
Copy link
Member Author

ronag commented Jun 29, 2020

@nodejs/streams

@ronag
Copy link
Member Author

ronag commented Jun 29, 2020

@nodejs/tsc

@nodejs-github-bot
Copy link
Collaborator

Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@nodejs-github-bot
Copy link
Collaborator

nodejs-github-bot commented Jun 29, 2020

@ronag ronag added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Jun 29, 2020
doc/api/stream.md Show resolved Hide resolved
@ronag
Copy link
Member Author

ronag commented Jun 29, 2020

@Trott Can you help me with the CITGM? It's hard to tell whether this PR is introducing new failures or not. :/

@ronag
Copy link
Member Author

ronag commented Jul 1, 2020

Landed in c7e55c6

@ronag ronag closed this Jul 1, 2020
ronag added a commit that referenced this pull request Jul 1, 2020
Changes so that the end() callback behaves the same way in relation
to _final as write() does to _write/_writev.

PR-URL: #34101
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
@Trott
Copy link
Member

Trott commented Jul 1, 2020

@Trott Can you help me with the CITGM? It's hard to tell whether this PR is introducing new failures or not. :/

Sorry, I'm only catching up to this now. I take it that since this landed, I don't need to do anything. Let me know if I'm wrong!

BethGriggs added a commit that referenced this pull request Oct 19, 2020
Notable changes:

Deprecations and Removals:

- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)

npm 7 (#35631):

Node.js 15 comes with a new major release of npm, npm 7. npm 7 comes
with many new features - including npm workspaces and a new
package-lock.json format. npm 7 also includes yarn.lock file support.
One of the big changes in npm 7 is that peer dependencies are now
installed by default.

Throw On Unhandled Rejections
(#33021):

As of Node.js 15, the default mode for `unhandledRejection` is changed
to `throw` (from `warn`). In `throw` mode, if an `unhandledRejection`
hook is not set, the `unhandledRejection` is raised as an uncaught
exception. Users that have an `unhandledRejection` hook should see no
change in behavior, and it’s still possible to switch modes using the
`--unhandled-rejections=mode` process flag.

QUIC (#32379):

Node.js 15 comes with experimental support QUIC, which can be enabled
by compiling Node.js with the `--experimental-quic` configuration flag.
The Node.js QUIC implementation is exposed by the core `net` module.

V8 8.6 (#35415):

The V8 JavaScript engine has been updated to V8 8.6 (V8 8.4 is the
latest available in Node.js 14). Along with performance tweaks and
improvements the V8 update also brings the following language features:
* `Promise.any()` (from V8 8.5)
* `AggregateError` (from V8 8.5)
* `String.prototype.replaceAll()` (from V8 8.5)
* Logical assignment operators `&&=`, `||=`, and `??=` (from V8 8.5)

Other Notable Changes:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **stream**: construct (Robert Nagy)
(#29656)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)

Semver-Major Commits:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **build**: reset embedder string to "-node.0" (Michaël Zasso)
(#35415)
- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **crypto**: refactoring internals, add WebCrypto (James M Snell)
(#35093)
- **crypto**: move node\_crypto files to src/crypto (James M Snell)
(#35093)
- **deps**: V8: cherry-pick d76abfed3512 (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 717543bbf0ef (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 6be2f6e26e8d (Michaël Zasso)
(#35415)
- **deps**: fix V8 build issue with inline methods (Jiawen Geng)
(#35415)
- **deps**: fix platform-embedded-file-writer-win for ARM64 (Michaël
Zasso) (#35415)
- **deps**: update V8 postmortem metadata script (Colin Ihrig)
(#35415)
- **deps**: update V8 to 8.6.395 (Michaël Zasso)
(#35415)
- **deps**: upgrade npm to 7.0.0 (Myles Borins)
(#35631)
- **deps**: update npm to 7.0.0-rc.3 (Myles Borins)
(#35474)
- **deps**: V8: cherry-pick 0d6debcc5f08 (Gus Caplan)
(#33600)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **doc**: update support macos version for 15.x (Ash Cripps)
(#35022)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http**: fixed socket.setEncoding fatal error (iskore)
(#33405)
- **http**: emit 'error' on aborted server request (Robert Nagy)
(#33172)
- **http**: cleanup end argument handling (Robert Nagy)
(#31818)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **http2**: add `invalidheaders` test (Pranshu Srivastava)
(#33161)
- **http2**: refactor state code validation for the http2Stream class
(rickyes) (#33535)
- **http2**: header field valid checks (Pranshu Srivastava)
(#33193)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: remove ERR\_INVALID\_OPT\_VALUE and
ERR\_INVALID\_OPT\_VALUE\_ENCODING (Denys Otrishko)
(#34682)
- **lib**: handle one of args case in ERR\_MISSING\_ARGS (Denys
Otrishko) (#34022)
- **lib**: remove NodeError from the prototype of errors with code
(Michaël Zasso) (#33857)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: check args in net.connect() and socket.connect() calls
(Denys Otrishko) (#34022)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **process**: update v8 fast api calls usage (Maya Lekova)
(#35415)
- **process**: change default --unhandled-rejections=throw (Dan
Fabulich) (#33021)
- **process**: use v8 fast api calls for hrtime (Gus Caplan)
(#33600)
- **process**: delay throwing an error using `throwDeprecation` (Ruben
Bridgewater) (#32312)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: implement NodePlatform::PostJob (Clemens Backes)
(#35415)
- **src**: update NODE\_MODULE\_VERSION to 88 (Michaël Zasso)
(#35415)
- **src**: error reporting on CPUUsage (Yash Ladha)
(#34762)
- **src**: use node:moduleName as builtin module filename (Michaël
Zasso) (#35498)
- **src**: enable wasm trap handler on windows (Gus Caplan)
(#35033)
- **src**: update NODE\_MODULE\_VERSION to 86 (Michaël Zasso)
(#33579)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **src**: remove \_third\_party\_main support (Anna Henningsen)
(#33971)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **src**: remove unused CancelPendingDelayedTasks (Anna Henningsen)
(#32859)
- **stream**: try to wait for flush to complete before 'finish' (Robert
Nagy) (#34314)
- **stream**: cleanup and fix Readable.wrap (Robert Nagy)
(#34204)
- **stream**: add promises version to utility functions (rickyes)
(#33991)
- **stream**: fix writable.end callback behavior (Robert Nagy)
(#34101)
- **stream**: construct (Robert Nagy)
(#29656)
- **stream**: write should throw on unknown encoding (Robert Nagy)
(#33075)
- **stream**: fix \_final and 'prefinish' timing (Robert Nagy)
(#32780)
- **stream**: simplify Transform stream implementation (Robert Nagy)
(#32763)
- **stream**: use callback to properly propagate error (Robert Nagy)
(#29179)
- **test**: update tests after increasing typed array size to 4GB
(Kim-Anh Tran) (#35415)
- **test**: fix tests for npm 7.0.0 (Myles Borins)
(#35631)
- **test**: fix test suite to work with npm 7 (Myles Borins)
(#35474)
- **test**: update WPT harness and tests (Michaël Zasso)
(#33770)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **tools**: disable x86 safe exception handlers in V8 (Michaël Zasso)
(#35415)
- **tools**: update V8 gypfiles for 8.6 (Ujjwal Sharma)
(#35415)
- **tools**: update V8 gypfiles for 8.5 (Ujjwal Sharma)
(#35415)
- **url**: file URL path normalization (Daijiro Wachi)
(#35477)
- **url**: verify domain is not empty after "ToASCII" (Michaël Zasso)
(#33770)
- **url**: remove U+0000 case in the fragment state (Michaël Zasso)
(#33770)
- **url**: remove gopher from special schemes (Michaël Zasso)
(#33325)
- **url**: forbid lt and gt in url host code point (Yash Ladha)
(#33328)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)
- **win, child_process**: sanitize env variables (Bartosz Sosnowski)
(#35210)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)
- **worker**: set trackUnmanagedFds to true by default (Anna
Henningsen) (#34394)
- **worker**: rename error code to be more accurate (Anna Henningsen)
(#33872)

PR-URL: #35014
BethGriggs added a commit that referenced this pull request Oct 20, 2020
Notable changes:

Deprecations and Removals:

- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)

npm 7 (#35631):

Node.js 15 comes with a new major release of npm, npm 7. npm 7 comes
with many new features - including npm workspaces and a new
package-lock.json format. npm 7 also includes yarn.lock file support.
One of the big changes in npm 7 is that peer dependencies are now
installed by default.

Throw On Unhandled Rejections
(#33021):

As of Node.js 15, the default mode for `unhandledRejection` is changed
to `throw` (from `warn`). In `throw` mode, if an `unhandledRejection`
hook is not set, the `unhandledRejection` is raised as an uncaught
exception. Users that have an `unhandledRejection` hook should see no
change in behavior, and it’s still possible to switch modes using the
`--unhandled-rejections=mode` process flag.

QUIC (#32379):

Node.js 15 comes with experimental support QUIC, which can be enabled
by compiling Node.js with the `--experimental-quic` configuration flag.
The Node.js QUIC implementation is exposed by the core `net` module.

V8 8.6 (#35415):

The V8 JavaScript engine has been updated to V8 8.6 (V8 8.4 is the
latest available in Node.js 14). Along with performance tweaks and
improvements the V8 update also brings the following language features:
* `Promise.any()` (from V8 8.5)
* `AggregateError` (from V8 8.5)
* `String.prototype.replaceAll()` (from V8 8.5)
* Logical assignment operators `&&=`, `||=`, and `??=` (from V8 8.5)

Other Notable Changes:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **stream**: construct (Robert Nagy)
(#29656)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)

Semver-Major Commits:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **build**: reset embedder string to "-node.0" (Michaël Zasso)
(#35415)
- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **crypto**: refactoring internals, add WebCrypto (James M Snell)
(#35093)
- **crypto**: move node\_crypto files to src/crypto (James M Snell)
(#35093)
- **deps**: V8: cherry-pick d76abfed3512 (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 717543bbf0ef (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 6be2f6e26e8d (Michaël Zasso)
(#35415)
- **deps**: fix V8 build issue with inline methods (Jiawen Geng)
(#35415)
- **deps**: fix platform-embedded-file-writer-win for ARM64 (Michaël
Zasso) (#35415)
- **deps**: update V8 postmortem metadata script (Colin Ihrig)
(#35415)
- **deps**: update V8 to 8.6.395 (Michaël Zasso)
(#35415)
- **deps**: upgrade npm to 7.0.0 (Myles Borins)
(#35631)
- **deps**: update npm to 7.0.0-rc.3 (Myles Borins)
(#35474)
- **deps**: V8: cherry-pick 0d6debcc5f08 (Gus Caplan)
(#33600)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **doc**: update support macos version for 15.x (Ash Cripps)
(#35022)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http**: fixed socket.setEncoding fatal error (iskore)
(#33405)
- **http**: emit 'error' on aborted server request (Robert Nagy)
(#33172)
- **http**: cleanup end argument handling (Robert Nagy)
(#31818)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **http2**: add `invalidheaders` test (Pranshu Srivastava)
(#33161)
- **http2**: refactor state code validation for the http2Stream class
(rickyes) (#33535)
- **http2**: header field valid checks (Pranshu Srivastava)
(#33193)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: remove ERR\_INVALID\_OPT\_VALUE and
ERR\_INVALID\_OPT\_VALUE\_ENCODING (Denys Otrishko)
(#34682)
- **lib**: handle one of args case in ERR\_MISSING\_ARGS (Denys
Otrishko) (#34022)
- **lib**: remove NodeError from the prototype of errors with code
(Michaël Zasso) (#33857)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: check args in net.connect() and socket.connect() calls
(Denys Otrishko) (#34022)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **process**: update v8 fast api calls usage (Maya Lekova)
(#35415)
- **process**: change default --unhandled-rejections=throw (Dan
Fabulich) (#33021)
- **process**: use v8 fast api calls for hrtime (Gus Caplan)
(#33600)
- **process**: delay throwing an error using `throwDeprecation` (Ruben
Bridgewater) (#32312)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: implement NodePlatform::PostJob (Clemens Backes)
(#35415)
- **src**: update NODE\_MODULE\_VERSION to 88 (Michaël Zasso)
(#35415)
- **src**: error reporting on CPUUsage (Yash Ladha)
(#34762)
- **src**: use node:moduleName as builtin module filename (Michaël
Zasso) (#35498)
- **src**: enable wasm trap handler on windows (Gus Caplan)
(#35033)
- **src**: update NODE\_MODULE\_VERSION to 86 (Michaël Zasso)
(#33579)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **src**: remove \_third\_party\_main support (Anna Henningsen)
(#33971)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **src**: remove unused CancelPendingDelayedTasks (Anna Henningsen)
(#32859)
- **stream**: try to wait for flush to complete before 'finish' (Robert
Nagy) (#34314)
- **stream**: cleanup and fix Readable.wrap (Robert Nagy)
(#34204)
- **stream**: add promises version to utility functions (rickyes)
(#33991)
- **stream**: fix writable.end callback behavior (Robert Nagy)
(#34101)
- **stream**: construct (Robert Nagy)
(#29656)
- **stream**: write should throw on unknown encoding (Robert Nagy)
(#33075)
- **stream**: fix \_final and 'prefinish' timing (Robert Nagy)
(#32780)
- **stream**: simplify Transform stream implementation (Robert Nagy)
(#32763)
- **stream**: use callback to properly propagate error (Robert Nagy)
(#29179)
- **test**: update tests after increasing typed array size to 4GB
(Kim-Anh Tran) (#35415)
- **test**: fix tests for npm 7.0.0 (Myles Borins)
(#35631)
- **test**: fix test suite to work with npm 7 (Myles Borins)
(#35474)
- **test**: update WPT harness and tests (Michaël Zasso)
(#33770)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **tools**: disable x86 safe exception handlers in V8 (Michaël Zasso)
(#35415)
- **tools**: update V8 gypfiles for 8.6 (Ujjwal Sharma)
(#35415)
- **tools**: update V8 gypfiles for 8.5 (Ujjwal Sharma)
(#35415)
- **url**: file URL path normalization (Daijiro Wachi)
(#35477)
- **url**: verify domain is not empty after "ToASCII" (Michaël Zasso)
(#33770)
- **url**: remove U+0000 case in the fragment state (Michaël Zasso)
(#33770)
- **url**: remove gopher from special schemes (Michaël Zasso)
(#33325)
- **url**: forbid lt and gt in url host code point (Yash Ladha)
(#33328)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)
- **win, child_process**: sanitize env variables (Bartosz Sosnowski)
(#35210)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)
- **worker**: set trackUnmanagedFds to true by default (Anna
Henningsen) (#34394)
- **worker**: rename error code to be more accurate (Anna Henningsen)
(#33872)

PR-URL: #35014
BethGriggs added a commit that referenced this pull request Oct 20, 2020
Notable changes:

Deprecations and Removals:

- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)

npm 7 (#35631):

Node.js 15 comes with a new major release of npm, npm 7. npm 7 comes
with many new features - including npm workspaces and a new
package-lock.json format. npm 7 also includes yarn.lock file support.
One of the big changes in npm 7 is that peer dependencies are now
installed by default.

Throw On Unhandled Rejections
(#33021):

As of Node.js 15, the default mode for `unhandledRejection` is changed
to `throw` (from `warn`). In `throw` mode, if an `unhandledRejection`
hook is not set, the `unhandledRejection` is raised as an uncaught
exception. Users that have an `unhandledRejection` hook should see no
change in behavior, and it’s still possible to switch modes using the
`--unhandled-rejections=mode` process flag.

QUIC (#32379):

Node.js 15 comes with experimental support QUIC, which can be enabled
by compiling Node.js with the `--experimental-quic` configuration flag.
The Node.js QUIC implementation is exposed by the core `net` module.

V8 8.6 (#35415):

The V8 JavaScript engine has been updated to V8 8.6 (V8 8.4 is the
latest available in Node.js 14). Along with performance tweaks and
improvements the V8 update also brings the following language features:
* `Promise.any()` (from V8 8.5)
* `AggregateError` (from V8 8.5)
* `String.prototype.replaceAll()` (from V8 8.5)
* Logical assignment operators `&&=`, `||=`, and `??=` (from V8 8.5)

Other Notable Changes:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **stream**: construct (Robert Nagy)
(#29656)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)

Semver-Major Commits:

- **assert**: add `assert/strict` alias module (ExE Boss)
(#34001)
- **build**: reset embedder string to "-node.0" (Michaël Zasso)
(#35415)
- **build**: remove --build-v8-with-gn configure option (Yang Guo)
(#27576)
- **build**: drop support for VS2017 (Michaël Zasso)
(#33694)
- **crypto**: refactoring internals, add WebCrypto (James M Snell)
(#35093)
- **crypto**: move node\_crypto files to src/crypto (James M Snell)
(#35093)
- **deps**: V8: cherry-pick d76abfed3512 (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 717543bbf0ef (Michaël Zasso)
(#35415)
- **deps**: V8: cherry-pick 6be2f6e26e8d (Michaël Zasso)
(#35415)
- **deps**: fix V8 build issue with inline methods (Jiawen Geng)
(#35415)
- **deps**: fix platform-embedded-file-writer-win for ARM64 (Michaël
Zasso) (#35415)
- **deps**: update V8 postmortem metadata script (Colin Ihrig)
(#35415)
- **deps**: update V8 to 8.6.395 (Michaël Zasso)
(#35415)
- **deps**: upgrade npm to 7.0.0 (Myles Borins)
(#35631)
- **deps**: update npm to 7.0.0-rc.3 (Myles Borins)
(#35474)
- **deps**: V8: cherry-pick 0d6debcc5f08 (Gus Caplan)
(#33600)
- **dns**: add dns/promises alias (shisama)
(#32953)
- **doc**: move DEP0018 to End-of-Life (Rich Trott)
(#35316)
- **doc**: update support macos version for 15.x (Ash Cripps)
(#35022)
- **fs**: deprecation warning on recursive rmdir (Ian Sutherland)
(#35562)
- **fs**: reimplement read and write streams using stream.construct
(Robert Nagy) (#29656)
- **http**: fixed socket.setEncoding fatal error (iskore)
(#33405)
- **http**: emit 'error' on aborted server request (Robert Nagy)
(#33172)
- **http**: cleanup end argument handling (Robert Nagy)
(#31818)
- **http2**: allow Host in HTTP/2 requests (Alba Mendez)
(#34664)
- **http2**: add `invalidheaders` test (Pranshu Srivastava)
(#33161)
- **http2**: refactor state code validation for the http2Stream class
(rickyes) (#33535)
- **http2**: header field valid checks (Pranshu Srivastava)
(#33193)
- **lib**: add EventTarget-related browser globals (Anna Henningsen)
(#35496)
- **lib**: remove ERR\_INVALID\_OPT\_VALUE and
ERR\_INVALID\_OPT\_VALUE\_ENCODING (Denys Otrishko)
(#34682)
- **lib**: handle one of args case in ERR\_MISSING\_ARGS (Denys
Otrishko) (#34022)
- **lib**: remove NodeError from the prototype of errors with code
(Michaël Zasso) (#33857)
- **lib**: unflag AbortController (James M Snell)
(#33527)
- **lib**: initial experimental AbortController implementation (James M
Snell) (#33527)
- **net**: check args in net.connect() and socket.connect() calls
(Denys Otrishko) (#34022)
- **net**: remove long deprecated server.connections property (James M
Snell) (#33647)
- **net**: autoDestroy Socket (Robert Nagy)
(#31806)
- **process**: update v8 fast api calls usage (Maya Lekova)
(#35415)
- **process**: change default --unhandled-rejections=throw (Dan
Fabulich) (#33021)
- **process**: use v8 fast api calls for hrtime (Gus Caplan)
(#33600)
- **process**: delay throwing an error using `throwDeprecation` (Ruben
Bridgewater) (#32312)
- **repl**: remove deprecated repl.memory function (Ruben Bridgewater)
(#33286)
- **repl**: remove deprecated repl.turnOffEditorMode() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated repl.parseREPLKeyword() function (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated bufferedCommand property (Ruben
Bridgewater) (#33286)
- **repl**: remove deprecated .rli (Ruben Bridgewater)
(#33286)
- **src**: implement NodePlatform::PostJob (Clemens Backes)
(#35415)
- **src**: update NODE\_MODULE\_VERSION to 88 (Michaël Zasso)
(#35415)
- **src**: error reporting on CPUUsage (Yash Ladha)
(#34762)
- **src**: use node:moduleName as builtin module filename (Michaël
Zasso) (#35498)
- **src**: enable wasm trap handler on windows (Gus Caplan)
(#35033)
- **src**: update NODE\_MODULE\_VERSION to 86 (Michaël Zasso)
(#33579)
- **src**: disallow JS execution inside FreeEnvironment (Anna
Henningsen) (#33874)
- **src**: remove \_third\_party\_main support (Anna Henningsen)
(#33971)
- **src**: remove deprecated node debug command (James M Snell)
(#33648)
- **src**: remove unused CancelPendingDelayedTasks (Anna Henningsen)
(#32859)
- **stream**: try to wait for flush to complete before 'finish' (Robert
Nagy) (#34314)
- **stream**: cleanup and fix Readable.wrap (Robert Nagy)
(#34204)
- **stream**: add promises version to utility functions (rickyes)
(#33991)
- **stream**: fix writable.end callback behavior (Robert Nagy)
(#34101)
- **stream**: construct (Robert Nagy)
(#29656)
- **stream**: write should throw on unknown encoding (Robert Nagy)
(#33075)
- **stream**: fix \_final and 'prefinish' timing (Robert Nagy)
(#32780)
- **stream**: simplify Transform stream implementation (Robert Nagy)
(#32763)
- **stream**: use callback to properly propagate error (Robert Nagy)
(#29179)
- **test**: update tests after increasing typed array size to 4GB
(Kim-Anh Tran) (#35415)
- **test**: fix tests for npm 7.0.0 (Myles Borins)
(#35631)
- **test**: fix test suite to work with npm 7 (Myles Borins)
(#35474)
- **test**: update WPT harness and tests (Michaël Zasso)
(#33770)
- **timers**: introduce timers/promises (James M Snell)
(#33950)
- **tools**: disable x86 safe exception handlers in V8 (Michaël Zasso)
(#35415)
- **tools**: update V8 gypfiles for 8.6 (Ujjwal Sharma)
(#35415)
- **tools**: update V8 gypfiles for 8.5 (Ujjwal Sharma)
(#35415)
- **url**: file URL path normalization (Daijiro Wachi)
(#35477)
- **url**: verify domain is not empty after "ToASCII" (Michaël Zasso)
(#33770)
- **url**: remove U+0000 case in the fragment state (Michaël Zasso)
(#33770)
- **url**: remove gopher from special schemes (Michaël Zasso)
(#33325)
- **url**: forbid lt and gt in url host code point (Yash Ladha)
(#33328)
- **util**: change default value of `maxStringLength` to 10000
(unknown) (#32744)
- **wasi**: drop --experimental-wasm-bigint requirement (Colin Ihrig)
(#35415)
- **win, child_process**: sanitize env variables (Bartosz Sosnowski)
(#35210)
- **worker**: make MessageEvent class more Web-compatible (Anna
Henningsen) (#35496)
- **worker**: set trackUnmanagedFds to true by default (Anna
Henningsen) (#34394)
- **worker**: rename error code to be more accurate (Anna Henningsen)
(#33872)

PR-URL: #35014
kevinoid added a commit to kevinoid/inflate-auto that referenced this pull request Oct 27, 2020
On Node.js 15, as a result of nodejs/node#34101
the callback passed to #end() is not called if an error occurs in
that the InflateAuto behavior matches the stream.Transform behavior.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. semver-major PRs that contain breaking changes and should be released in the next major version. stream Issues and PRs related to the stream subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants