diff --git a/CHANGELOG.md b/CHANGELOG.md index e6ad62703bb..f6cbbcad095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,8 @@ release. -9.2.1
+9.3.0
+9.2.1
9.2.0
9.1.0
9.0.0
diff --git a/doc/api/console.md b/doc/api/console.md index 6dac2a8a5e7..5722f362841 100644 --- a/doc/api/console.md +++ b/doc/api/console.md @@ -241,7 +241,7 @@ undefined @@ -280,7 +280,7 @@ Defaults to `false`. Colors are customizable; see diff --git a/doc/api/crypto.md b/doc/api/crypto.md index b0e1d19963b..1f11f443a9e 100644 --- a/doc/api/crypto.md +++ b/doc/api/crypto.md @@ -1622,7 +1622,7 @@ higher the number of iterations, the more secure the derived key will be, but will take a longer amount of time to complete. The `salt` should also be as unique as possible. It is recommended that the -salts are random and their lengths are greater than 16 bytes. See +salts are random and their lengths are at least 16 bytes. See [NIST SP 800-132][] for details. Example: @@ -1686,7 +1686,7 @@ higher the number of iterations, the more secure the derived key will be, but will take a longer amount of time to complete. The `salt` should also be as unique as possible. It is recommended that the -salts are random and their lengths are greater than 16 bytes. See +salts are random and their lengths are at least 16 bytes. See [NIST SP 800-132][] for details. Example: @@ -1792,6 +1792,11 @@ be passed instead of a public key. ### crypto.randomBytes(size[, callback]) - `size` {number} - `callback` {Function} @@ -1847,10 +1852,10 @@ added: v7.10.0 changes: - version: v9.0.0 pr-url: https://github.com/nodejs/node/pull/15231 - description: The `buffer` argument may be any ArrayBufferView + description: The `buffer` argument may be any `TypedArray` or `DataView`. --> -* `buffer` {Buffer|Uint8Array|ArrayBufferView} Must be supplied. +* `buffer` {Buffer|TypedArray|DataView} Must be supplied. * `offset` {number} Defaults to `0`. * `size` {number} Defaults to `buffer.length - offset`. @@ -1889,10 +1894,10 @@ added: v7.10.0 changes: - version: v9.0.0 pr-url: https://github.com/nodejs/node/pull/15231 - description: The `buffer` argument may be any ArrayBufferView + description: The `buffer` argument may be any `TypedArray` or `DataView`. --> -* `buffer` {Buffer|Uint8Array|ArrayBufferView} Must be supplied. +* `buffer` {Buffer|TypedArray|DataView} Must be supplied. * `offset` {number} Defaults to `0`. * `size` {number} Defaults to `buffer.length - offset`. * `callback` {Function} `function(err, buf) {}`. diff --git a/doc/api/esm.md b/doc/api/esm.md index b812d7cb76d..ef9adbdc73f 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -33,15 +33,14 @@ node --experimental-modules my-app.mjs ### Supported Only the CLI argument for the main entry point to the program can be an entry -point into an ESM graph. In the future `import()` can be used to create entry -points into ESM graphs at run time. +point into an ESM graph. Dynamic import can also be used with the flag +`--harmony-dynamic-import` to create entry points into ESM graphs at run time. ### Unsupported | Feature | Reason | | --- | --- | -| `require('./foo.mjs')` | ES Modules have differing resolution and timing, use language standard `import()` | -| `import()` | pending newer V8 release used in Node.js | +| `require('./foo.mjs')` | ES Modules have differing resolution and timing, use dynamic import | | `import.meta` | pending V8 implementation | ## Notable differences between `import` and `require` diff --git a/doc/api/https.md b/doc/api/https.md index 96ba80f29fa..cb22873a01e 100644 --- a/doc/api/https.md +++ b/doc/api/https.md @@ -150,8 +150,8 @@ Global instance of [`https.Agent`][] for all HTTPS client requests. * {string[]} diff --git a/doc/api/n-api.md b/doc/api/n-api.md index 0843165f075..ad6e3c7eeab 100644 --- a/doc/api/n-api.md +++ b/doc/api/n-api.md @@ -3695,7 +3695,7 @@ a specific `napi_env`. ### napi_get_uv_event_loop ```C NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env, diff --git a/doc/api/process.md b/doc/api/process.md index 8c91a6c9d7c..60545ff0628 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -1137,7 +1137,7 @@ or Android). ## process.hasUncaughtExceptionCaptureCallback() * Returns: {boolean} @@ -1647,7 +1647,7 @@ or Android). ## process.setUncaughtExceptionCaptureCallback(fn) * `fn` {Function|null} diff --git a/doc/api/stream.md b/doc/api/stream.md index dec38202221..f3780ee4c49 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -439,7 +439,7 @@ See also: [`writable.cork()`][]. ##### writable.writableHighWaterMark Return the value of `highWaterMark` passed when constructing this @@ -889,7 +889,7 @@ options. ##### readable.readableHighWaterMark Return the value of `highWaterMark` passed when constructing this diff --git a/doc/api/tls.md b/doc/api/tls.md index 13af0b2aa2a..50535150c2f 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -961,8 +961,8 @@ port or host argument. -All of these take a [`Buffer`][], [`TypedArray`][], [`DataView`][], or string as -the first argument, an optional second argument to supply options to the `zlib` -classes and will call the supplied callback with `callback(error, result)`. +All of these take a [`Buffer`][], [`TypedArray`][], [`DataView`][], +[`ArrayBuffer`][] or string as the first argument, an optional second argument +to supply options to the `zlib` classes and will call the supplied callback +with `callback(error, result)`. Every method has a `*Sync` counterpart, which accept the same arguments, but without a callback. @@ -522,6 +526,9 @@ without a callback. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Compress a chunk of data with [Deflate][]. @@ -560,6 +570,9 @@ changes: -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Compress a chunk of data with [DeflateRaw][]. @@ -576,6 +589,9 @@ Compress a chunk of data with [DeflateRaw][]. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Decompress a chunk of data with [Gunzip][]. @@ -603,6 +622,9 @@ Decompress a chunk of data with [Gunzip][]. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Compress a chunk of data with [Gzip][]. @@ -630,6 +655,9 @@ Compress a chunk of data with [Gzip][]. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Decompress a chunk of data with [Inflate][]. @@ -657,6 +688,9 @@ Decompress a chunk of data with [Inflate][]. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Decompress a chunk of data with [InflateRaw][]. @@ -684,6 +721,9 @@ Decompress a chunk of data with [InflateRaw][]. -- `buffer` {Buffer|TypedArray|DataView|string} +- `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} Decompress a chunk of data with [Unzip][]. [`.flush()`]: #zlib_zlib_flush_kind_callback [`Accept-Encoding`]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 +[`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer [`Buffer`]: buffer.html#buffer_class_buffer [`Content-Encoding`]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11 [`DataView`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView diff --git a/doc/changelogs/CHANGELOG_V9.md b/doc/changelogs/CHANGELOG_V9.md index be756c2d1f9..9660e68b429 100644 --- a/doc/changelogs/CHANGELOG_V9.md +++ b/doc/changelogs/CHANGELOG_V9.md @@ -8,6 +8,7 @@ +9.3.0
9.2.1
9.2.0
9.1.0
@@ -27,6 +28,416 @@ * [io.js](CHANGELOG_IOJS.md) * [Archive](CHANGELOG_ARCHIVE.md) + +## 2017-12-12, Version 9.3.0 (Current), @MylesBorins + +### Notable Changes + +* **async\_hooks**: + - add trace events to async_hooks (Andreas Madsen) [#15538](https://github.com/nodejs/node/pull/15538) + - add provider types for net server (Andreas Madsen) [#17157](https://github.com/nodejs/node/pull/17157) +* **console**: + - console.debug can now be used outside of the inspector (Benjamin Zaslavsky) [#17033](https://github.com/nodejs/node/pull/17033) +* **deps**: + - upgrade libuv to 1.18.0 (cjihrig) [#17282](https://github.com/nodejs/node/pull/17282) + - patch V8 to 6.2.414.46 (Myles Borins) [#17206](https://github.com/nodejs/node/pull/17206) +* **module**: + - module.builtinModules will return a list of built in modules (Jon Moss) [#16386](https://github.com/nodejs/node/pull/16386) +* **n-api**: + - add helper for addons to get the event loop (Anna Henningsen) [#17109](https://github.com/nodejs/node/pull/17109) +* **process**: + - process.setUncaughtExceptionCaptureCallback can now be used to customize behavior for `--abort-on-uncaught-exception` (Anna Henningsen) [#17159](https://github.com/nodejs/node/pull/17159) + - A signal handler is now able to receive the signal code that triggered the handler. (Robert Rossmann) [#15606](https://github.com/nodejs/node/pull/15606) +* **src**: + - embedders can now use Node::CreatePlatform to create an instance of NodePlatform (Cheng Zhao) [#16981](https://github.com/nodejs/node/pull/16981) +* **stream**: + - writable.writableHighWaterMark and readable.readableHighWaterMark will return the values the stream object was instantiated with (Calvin Metcalf) [#12860](https://github.com/nodejs/node/pull/12860) +* **Added new collaborators** + * [maclover7](https://github.com/maclover7) Jon Moss + * [guybedford](https://github.com/guybedford) Guy Bedford + * [hashseed](https://github.com/hashseed) Yang Guo + +### Commits + +* [[`623b589921`](https://github.com/nodejs/node/commit/623b589921)] - tools/doc: add tools/remark-* to eslintignore (Ivan Wei) [#17240](https://github.com/nodejs/node/pull/17240) +* [[`cf0d7cfc46`](https://github.com/nodejs/node/commit/cf0d7cfc46)] - **async_hooks**: add destroy event for gced AsyncResources (Sebastian Mayr) [#16998](https://github.com/nodejs/node/pull/16998) +* [[`cf7e15cf78`](https://github.com/nodejs/node/commit/cf7e15cf78)] - **(SEMVER-MINOR)** **async_hooks**: add trace events to async_hooks (Andreas Madsen) [#15538](https://github.com/nodejs/node/pull/15538) +* [[`e0ce7cf1e9`](https://github.com/nodejs/node/commit/e0ce7cf1e9)] - **(SEMVER-MINOR)** **async_wrap**: add provider types for net server (Andreas Madsen) [#17157](https://github.com/nodejs/node/pull/17157) +* [[`cbd0be59f0`](https://github.com/nodejs/node/commit/cbd0be59f0)] - **benchmark**: fix http/simple.js benchmark (Anatoli Papirovski) [#17583](https://github.com/nodejs/node/pull/17583) +* [[`120d756e47`](https://github.com/nodejs/node/commit/120d756e47)] - **benchmark**: refactor to use template string (Antonio V) [#17313](https://github.com/nodejs/node/pull/17313) +* [[`b16d570395`](https://github.com/nodejs/node/commit/b16d570395)] - **benchmark**: set maxHeaderListPairs in h2 headers.js (Anatoli Papirovski) [#17194](https://github.com/nodejs/node/pull/17194) +* [[`9ffdee811d`](https://github.com/nodejs/node/commit/9ffdee811d)] - **benchmark**: use unique filenames in fs benchmarks (Rich Trott) [#16776](https://github.com/nodejs/node/pull/16776) +* [[`ee84fc333d`](https://github.com/nodejs/node/commit/ee84fc333d)] - **benchmark,path**: remove unused variables (薛定谔的猫) [#15789](https://github.com/nodejs/node/pull/15789) +* [[`883281bca9`](https://github.com/nodejs/node/commit/883281bca9)] - **buffer**: don't predefine error (buji) [#17021](https://github.com/nodejs/node/pull/17021) +* [[`dcb53c10e2`](https://github.com/nodejs/node/commit/dcb53c10e2)] - **build**: allow running configure from any directory (Gibson Fahnestock) [#17321](https://github.com/nodejs/node/pull/17321) +* [[`5d1463a0bc`](https://github.com/nodejs/node/commit/5d1463a0bc)] - **build**: define HAVE_OPENSSL macro for cctest (Matheus Marchini) [#17461](https://github.com/nodejs/node/pull/17461) +* [[`4bb27a2db3`](https://github.com/nodejs/node/commit/4bb27a2db3)] - **build**: add a `make help` option for common targets (Gibson Fahnestock) [#17323](https://github.com/nodejs/node/pull/17323) +* [[`5e0f39323f`](https://github.com/nodejs/node/commit/5e0f39323f)] - **build**: add serial commas to messages in configure script (Rich Trott) [#17464](https://github.com/nodejs/node/pull/17464) +* [[`742a4566ee`](https://github.com/nodejs/node/commit/742a4566ee)] - **build**: fix test-v8 target (Michaël Zasso) [#17269](https://github.com/nodejs/node/pull/17269) +* [[`46c1d999d9`](https://github.com/nodejs/node/commit/46c1d999d9)] - **build**: add make lint-js-fix (Joyee Cheung) [#17283](https://github.com/nodejs/node/pull/17283) +* [[`0a40a1133d`](https://github.com/nodejs/node/commit/0a40a1133d)] - **build**: fix bsd build with gcc (Matheus Marchini) [#16737](https://github.com/nodejs/node/pull/16737) +* [[`0f727c07b9`](https://github.com/nodejs/node/commit/0f727c07b9)] - **build**: remove empty VCLibrarianTool entry (Daniel Bevenius) [#17191](https://github.com/nodejs/node/pull/17191) +* [[`09bd797711`](https://github.com/nodejs/node/commit/09bd797711)] - **build**: Allow linking against an external copy of nghttp2. (Ed Schouten) [#16788](https://github.com/nodejs/node/pull/16788) +* [[`9093392954`](https://github.com/nodejs/node/commit/9093392954)] - **build**: do not build doc in source tarball (Joyee Cheung) [#17100](https://github.com/nodejs/node/pull/17100) +* [[`9a4abe47d5`](https://github.com/nodejs/node/commit/9a4abe47d5)] - **build**: minor corrections to configure descriptions (Daniel Bevenius) [#17094](https://github.com/nodejs/node/pull/17094) +* [[`035a24e619`](https://github.com/nodejs/node/commit/035a24e619)] - **build**: enforce order of dependency when building addons (Joyee Cheung) [#17048](https://github.com/nodejs/node/pull/17048) +* [[`91385be239`](https://github.com/nodejs/node/commit/91385be239)] - **build**: fix cctest target --with-dtrace (Daniel Bevenius) [#17039](https://github.com/nodejs/node/pull/17039) +* [[`2eec94489d`](https://github.com/nodejs/node/commit/2eec94489d)] - ***Revert*** "**build**: for --enable-static, run only cctest" (Daniel Bevenius) [#14986](https://github.com/nodejs/node/pull/14986) +* [[`578d80b59b`](https://github.com/nodejs/node/commit/578d80b59b)] - **build**: prevent echoing of recipes for test target (Daniel Bevenius) [#17010](https://github.com/nodejs/node/pull/17010) +* [[`5fc1e27e98`](https://github.com/nodejs/node/commit/5fc1e27e98)] - **build, win**: faster Release rebuilds (Bartosz Sosnowski) [#17393](https://github.com/nodejs/node/pull/17393) +* [[`90a5e9f19b`](https://github.com/nodejs/node/commit/90a5e9f19b)] - **build,win**: vcbuild refactoring call configure (Refael Ackermann) [#17299](https://github.com/nodejs/node/pull/17299) +* [[`87c885bd44`](https://github.com/nodejs/node/commit/87c885bd44)] - **build,win,msi**: support WiX with VS2017 (João Reis) [#17101](https://github.com/nodejs/node/pull/17101) +* [[`23967b2713`](https://github.com/nodejs/node/commit/23967b2713)] - **console**: make dirxml an alias for console.log (Benjamin Zaslavsky) [#17152](https://github.com/nodejs/node/pull/17152) +* [[`40d4fee8d7`](https://github.com/nodejs/node/commit/40d4fee8d7)] - **console**: add support for console.debug (Benjamin Zaslavsky) [#17033](https://github.com/nodejs/node/pull/17033) +* [[`4a5e32206a`](https://github.com/nodejs/node/commit/4a5e32206a)] - **crypto**: remove BIO_set_shutdown (Daniel Bevenius) [#17542](https://github.com/nodejs/node/pull/17542) +* [[`c951e2c7d4`](https://github.com/nodejs/node/commit/c951e2c7d4)] - **crypto**: remove explicit qualifiers in Initialize (Daniel Bevenius) [#17490](https://github.com/nodejs/node/pull/17490) +* [[`8c2143091d`](https://github.com/nodejs/node/commit/8c2143091d)] - **crypto**: do not reach into OpenSSL internals for ThrowCryptoError (David Benjamin) [#16701](https://github.com/nodejs/node/pull/16701) +* [[`49402b12d0`](https://github.com/nodejs/node/commit/49402b12d0)] - **crypto**: declare int return type for set_field (Daniel Bevenius) [#17468](https://github.com/nodejs/node/pull/17468) +* [[`9e50f1721e`](https://github.com/nodejs/node/commit/9e50f1721e)] - **crypto**: use SetNull instead of Set (Daniel Bevenius) [#17521](https://github.com/nodejs/node/pull/17521) +* [[`e3df569d1c`](https://github.com/nodejs/node/commit/e3df569d1c)] - **deps**: upgrade libuv to 1.18.0 (cjihrig) [#17282](https://github.com/nodejs/node/pull/17282) +* [[`9f282ddaf7`](https://github.com/nodejs/node/commit/9f282ddaf7)] - **deps**: cherry-pick 1420e44db0 from upstream V8 (Timothy Gu) [#17344](https://github.com/nodejs/node/pull/17344) +* [[`47cd49a8cb`](https://github.com/nodejs/node/commit/47cd49a8cb)] - **deps**: backport 3c8195d from V8 upstream (Myles Borins) [#17383](https://github.com/nodejs/node/pull/17383) +* [[`465a32a087`](https://github.com/nodejs/node/commit/465a32a087)] - ***Revert*** "**deps**: cherry-pick 3c8195d from V8 upstream" (Myles Borins) [#17383](https://github.com/nodejs/node/pull/17383) +* [[`49d23a3021`](https://github.com/nodejs/node/commit/49d23a3021)] - **deps**: V8: backport 14ac02c from upstream (Ali Ijaz Sheikh) [#17512](https://github.com/nodejs/node/pull/17512) +* [[`7c2a9bba64`](https://github.com/nodejs/node/commit/7c2a9bba64)] - **deps**: patch V8 to 6.2.414.46 (Myles Borins) [#17206](https://github.com/nodejs/node/pull/17206) +* [[`04115724dc`](https://github.com/nodejs/node/commit/04115724dc)] - **deps**: cherry-pick 98c40a4bae915 from V8 upstream (Anna Henningsen) [#17134](https://github.com/nodejs/node/pull/17134) +* [[`7812c93a41`](https://github.com/nodejs/node/commit/7812c93a41)] - **deps**: cherry-pick c690f54d95802 from V8 upstream (Anna Henningsen) [#17134](https://github.com/nodejs/node/pull/17134) +* [[`24bb99a808`](https://github.com/nodejs/node/commit/24bb99a808)] - **deps**: cherry-pick upstream ICU fix (Mathias Bynens) [#16931](https://github.com/nodejs/node/pull/16931) +* [[`026f76024b`](https://github.com/nodejs/node/commit/026f76024b)] - **dns**: fix crash while setting server during query (XadillaX) [#14891](https://github.com/nodejs/node/pull/14891) +* [[`ccffbd96d1`](https://github.com/nodejs/node/commit/ccffbd96d1)] - **doc**: fix modules.md export example (Anatoli Papirovski) [#17579](https://github.com/nodejs/node/pull/17579) +* [[`7e2fa5a2d6`](https://github.com/nodejs/node/commit/7e2fa5a2d6)] - **doc**: add link to debugger in process.md (Delapouite) [#17522](https://github.com/nodejs/node/pull/17522) +* [[`a965dda849`](https://github.com/nodejs/node/commit/a965dda849)] - **doc**: simplify and clarify FIPS text in BUILDING.md (Rich Trott) [#17538](https://github.com/nodejs/node/pull/17538) +* [[`b015747156`](https://github.com/nodejs/node/commit/b015747156)] - **doc**: esm loader example with module.builtinModules (Guy Bedford) [#17385](https://github.com/nodejs/node/pull/17385) +* [[`1eff647fd3`](https://github.com/nodejs/node/commit/1eff647fd3)] - **doc**: 'constructor' implies use of new keyword (Cameron Moorehead) [#17364](https://github.com/nodejs/node/pull/17364) +* [[`8a17b7b6f3`](https://github.com/nodejs/node/commit/8a17b7b6f3)] - **doc**: use correct and consistent typography for products (Rich Trott) [#17492](https://github.com/nodejs/node/pull/17492) +* [[`0a0a56aa34`](https://github.com/nodejs/node/commit/0a0a56aa34)] - **doc**: add "Hello world" example for N-API (Franziska Hinkelmann) [#17425](https://github.com/nodejs/node/pull/17425) +* [[`865c4520b6`](https://github.com/nodejs/node/commit/865c4520b6)] - **doc**: immprove inode text in fs.md (Rich Trott) [#17519](https://github.com/nodejs/node/pull/17519) +* [[`18d6dab19d`](https://github.com/nodejs/node/commit/18d6dab19d)] - **doc**: improve text for Console constructor (Rich Trott) [#17519](https://github.com/nodejs/node/pull/17519) +* [[`cb09959e8f`](https://github.com/nodejs/node/commit/cb09959e8f)] - **doc**: improve readability of README.md (Rich Trott) [#17519](https://github.com/nodejs/node/pull/17519) +* [[`0948238aa2`](https://github.com/nodejs/node/commit/0948238aa2)] - **doc**: improve readability of COLLABORATOR_GUIDE.md (Rich Trott) [#17519](https://github.com/nodejs/node/pull/17519) +* [[`7f2764debb`](https://github.com/nodejs/node/commit/7f2764debb)] - **doc**: add info on post-publishing ARM6 builds (Michael Dawson) [#17455](https://github.com/nodejs/node/pull/17455) +* [[`6aa6d418e2`](https://github.com/nodejs/node/commit/6aa6d418e2)] - **doc**: mention node-test-pull-request-lite job (Jon Moss) [#17513](https://github.com/nodejs/node/pull/17513) +* [[`b8141a42d0`](https://github.com/nodejs/node/commit/b8141a42d0)] - **doc**: fix typo in repl.md (Rich Trott) [#17502](https://github.com/nodejs/node/pull/17502) +* [[`232a486c0c`](https://github.com/nodejs/node/commit/232a486c0c)] - **doc**: fix common typo involving one-time listeners (Rich Trott) [#17502](https://github.com/nodejs/node/pull/17502) +* [[`07df234ea2`](https://github.com/nodejs/node/commit/07df234ea2)] - **doc**: fix typo in dns.md (Rich Trott) [#17502](https://github.com/nodejs/node/pull/17502) +* [[`6c97f7fed5`](https://github.com/nodejs/node/commit/6c97f7fed5)] - **doc**: use American spellings per style guide (Rich Trott) [#17471](https://github.com/nodejs/node/pull/17471) +* [[`35d492c428`](https://github.com/nodejs/node/commit/35d492c428)] - **doc**: remove unused link reference (Anatoli Papirovski) [#17510](https://github.com/nodejs/node/pull/17510) +* [[`e9ee168a3d`](https://github.com/nodejs/node/commit/e9ee168a3d)] - **doc**: remove IPC channel implementation details (Bartosz Sosnowski) [#17460](https://github.com/nodejs/node/pull/17460) +* [[`7e38821df2`](https://github.com/nodejs/node/commit/7e38821df2)] - **doc**: use arrow functions in util.md sample code (Mithun Sasidharan) [#17459](https://github.com/nodejs/node/pull/17459) +* [[`53ed05582a`](https://github.com/nodejs/node/commit/53ed05582a)] - **doc**: update AUTHORS list (Michaël Zasso) [#17452](https://github.com/nodejs/node/pull/17452) +* [[`f7b0054b2b`](https://github.com/nodejs/node/commit/f7b0054b2b)] - **doc**: use serial comma in tls.md (Rich Trott) [#17464](https://github.com/nodejs/node/pull/17464) +* [[`20dcbfce89`](https://github.com/nodejs/node/commit/20dcbfce89)] - **doc**: add serial comma in CPP_STYLE_GUIDE.md (Rich Trott) [#17464](https://github.com/nodejs/node/pull/17464) +* [[`01be9462d5`](https://github.com/nodejs/node/commit/01be9462d5)] - **doc**: edit module introduction (Rich Trott) [#17463](https://github.com/nodejs/node/pull/17463) +* [[`4fff2ab7ca`](https://github.com/nodejs/node/commit/4fff2ab7ca)] - **doc**: standardize preposition usage in fs.md (Rich Trott) [#17463](https://github.com/nodejs/node/pull/17463) +* [[`f3ec355123`](https://github.com/nodejs/node/commit/f3ec355123)] - **doc**: improve punctuation in fs.open() text (Rich Trott) [#17463](https://github.com/nodejs/node/pull/17463) +* [[`ef7444cc94`](https://github.com/nodejs/node/commit/ef7444cc94)] - **doc**: use colon consistently in assert.md (Rich Trott) [#17463](https://github.com/nodejs/node/pull/17463) +* [[`cd7cee57e9`](https://github.com/nodejs/node/commit/cd7cee57e9)] - **doc**: update example in module registration (Franziska Hinkelmann) [#17424](https://github.com/nodejs/node/pull/17424) +* [[`d3e76e78ff`](https://github.com/nodejs/node/commit/d3e76e78ff)] - **doc**: introduce categories to Cpp style guide (Franziska Hinkelmann) [#17095](https://github.com/nodejs/node/pull/17095) +* [[`e00923bf5e`](https://github.com/nodejs/node/commit/e00923bf5e)] - **doc**: add missing serial commas (Rich Trott) [#17384](https://github.com/nodejs/node/pull/17384) +* [[`9df52dd115`](https://github.com/nodejs/node/commit/9df52dd115)] - **doc**: be concise about serial commas (Rich Trott) [#17384](https://github.com/nodejs/node/pull/17384) +* [[`7849d53158`](https://github.com/nodejs/node/commit/7849d53158)] - **doc**: document tls.checkServerIdentity (Hannes Magnusson) [#17203](https://github.com/nodejs/node/pull/17203) +* [[`a596577a31`](https://github.com/nodejs/node/commit/a596577a31)] - **doc**: improve checkServerIdentity docs (Hannes Magnusson) [#17203](https://github.com/nodejs/node/pull/17203) +* [[`2a4f4f8125`](https://github.com/nodejs/node/commit/2a4f4f8125)] - **doc**: add guide to maintaining npm (Myles Borins) [#16541](https://github.com/nodejs/node/pull/16541) +* [[`3807c6887a`](https://github.com/nodejs/node/commit/3807c6887a)] - **doc**: fix doc example for cctest (Matheus Marchini) [#17355](https://github.com/nodejs/node/pull/17355) +* [[`bd55a79422`](https://github.com/nodejs/node/commit/bd55a79422)] - **doc**: clarify fast-track of reversions (Refael Ackermann) [#17332](https://github.com/nodejs/node/pull/17332) +* [[`dcd87acb7b`](https://github.com/nodejs/node/commit/dcd87acb7b)] - **doc**: make error descriptions more concise (Rich Trott) [#16954](https://github.com/nodejs/node/pull/16954) +* [[`cc91a00af6`](https://github.com/nodejs/node/commit/cc91a00af6)] - **doc**: fix typo in stream.md (Matthew Leon) [#17357](https://github.com/nodejs/node/pull/17357) +* [[`048878288b`](https://github.com/nodejs/node/commit/048878288b)] - **doc**: non-partitioned async crypto operations (Jamie Davis) [#17250](https://github.com/nodejs/node/pull/17250) +* [[`0443909848`](https://github.com/nodejs/node/commit/0443909848)] - **doc**: move Code of Conduct to admin repo (Myles Borins) [#17301](https://github.com/nodejs/node/pull/17301) +* [[`5756d67f95`](https://github.com/nodejs/node/commit/5756d67f95)] - **doc**: fix typo occuring -\> occurring (Leko) [#17350](https://github.com/nodejs/node/pull/17350) +* [[`94be7fdfec`](https://github.com/nodejs/node/commit/94be7fdfec)] - **doc**: Add link for ECMAScript 2015 (smatsu-hl) [#17317](https://github.com/nodejs/node/pull/17317) +* [[`a0acd91470`](https://github.com/nodejs/node/commit/a0acd91470)] - **doc**: caution against removing pseudoheaders (James M Snell) [#17329](https://github.com/nodejs/node/pull/17329) +* [[`2bd241e974`](https://github.com/nodejs/node/commit/2bd241e974)] - **doc**: replace string with template string (Leko) [#17316](https://github.com/nodejs/node/pull/17316) +* [[`0b1448897d`](https://github.com/nodejs/node/commit/0b1448897d)] - **doc**: replace function with arrow function in vm.md (narirou) [#17307](https://github.com/nodejs/node/pull/17307) +* [[`078b4a625b`](https://github.com/nodejs/node/commit/078b4a625b)] - **doc**: replace function with arrow function (Leko) [#17304](https://github.com/nodejs/node/pull/17304) +* [[`4fafeae4a2`](https://github.com/nodejs/node/commit/4fafeae4a2)] - **doc**: update maintainting V8 guide (Michaël Zasso) [#17260](https://github.com/nodejs/node/pull/17260) +* [[`524db29844`](https://github.com/nodejs/node/commit/524db29844)] - **doc**: fix typo in api doc of url.format(urlObject) (pkovacs) [#17295](https://github.com/nodejs/node/pull/17295) +* [[`c901ccec40`](https://github.com/nodejs/node/commit/c901ccec40)] - **doc**: add ES Modules entry to who-to-cc (Rich Trott) [#17205](https://github.com/nodejs/node/pull/17205) +* [[`e45c9c651a`](https://github.com/nodejs/node/commit/e45c9c651a)] - **doc**: add maclover7 to collaborators (Jon Moss) [#17289](https://github.com/nodejs/node/pull/17289) +* [[`f13667221b`](https://github.com/nodejs/node/commit/f13667221b)] - **doc**: update http URLs to https in README.md (Ronald Eddy Jr) [#17264](https://github.com/nodejs/node/pull/17264) +* [[`c67612963c`](https://github.com/nodejs/node/commit/c67612963c)] - **doc**: update http URLs to https in doc/api (Ronald Eddy Jr) [#17263](https://github.com/nodejs/node/pull/17263) +* [[`c345a107a6`](https://github.com/nodejs/node/commit/c345a107a6)] - **doc**: update http URLs to https in GOVERNANCE.md (Ronald Eddy Jr) [#17262](https://github.com/nodejs/node/pull/17262) +* [[`f3c5f76fe8`](https://github.com/nodejs/node/commit/f3c5f76fe8)] - **doc**: update http URLs to https in CONTRIBUTING.md (Ronald Eddy Jr) [#17261](https://github.com/nodejs/node/pull/17261) +* [[`df5436cee1`](https://github.com/nodejs/node/commit/df5436cee1)] - **doc**: add SharedArrayBuffer to Buffer documentation (Thomas den Hollander) [#15489](https://github.com/nodejs/node/pull/15489) +* [[`821951e2a9`](https://github.com/nodejs/node/commit/821951e2a9)] - **doc**: document resolve hook formats (Lucas Azzola) [#16375](https://github.com/nodejs/node/pull/16375) +* [[`04c4c1f260`](https://github.com/nodejs/node/commit/04c4c1f260)] - **doc**: fs.readFile is async but not partitioned (Jamie Davis) [#17154](https://github.com/nodejs/node/pull/17154) +* [[`74506f72e6`](https://github.com/nodejs/node/commit/74506f72e6)] - **doc**: add description for inspector-only console methods. (Benjamin Zaslavsky) [#17004](https://github.com/nodejs/node/pull/17004) +* [[`1a3aadb2e9`](https://github.com/nodejs/node/commit/1a3aadb2e9)] - **doc**: use better terminology for build machines (Anna Henningsen) [#17142](https://github.com/nodejs/node/pull/17142) +* [[`2fccf84015`](https://github.com/nodejs/node/commit/2fccf84015)] - **doc**: use "JavaScript" instead of "Javascript" (Rich Trott) [#17163](https://github.com/nodejs/node/pull/17163) +* [[`9dcf748000`](https://github.com/nodejs/node/commit/9dcf748000)] - **doc**: prepare for v8/V8 linting in doc text (Rich Trott) [#17163](https://github.com/nodejs/node/pull/17163) +* [[`bd1dbcef85`](https://github.com/nodejs/node/commit/bd1dbcef85)] - **doc**: add capitalization styling to STYLE_GUIDE (Rich Trott) [#17163](https://github.com/nodejs/node/pull/17163) +* [[`68870161cc`](https://github.com/nodejs/node/commit/68870161cc)] - **doc**: update mgol in AUTHORS.txt, add to .mailmap (Michał Gołębiowski-Owczarek) [#17239](https://github.com/nodejs/node/pull/17239) +* [[`ef4c909335`](https://github.com/nodejs/node/commit/ef4c909335)] - **doc**: update release table in V8 guide (Ali Ijaz Sheikh) [#17136](https://github.com/nodejs/node/pull/17136) +* [[`3f363d3cda`](https://github.com/nodejs/node/commit/3f363d3cda)] - **doc**: add guybedford to collaborators (Guy Bedford) [#17197](https://github.com/nodejs/node/pull/17197) +* [[`7b5a05bc0f`](https://github.com/nodejs/node/commit/7b5a05bc0f)] - **doc**: update AUTHORS list (Michaël Zasso) [#16571](https://github.com/nodejs/node/pull/16571) +* [[`4c23e6a8c7`](https://github.com/nodejs/node/commit/4c23e6a8c7)] - **doc**: normalize ToC indentation with heading levels in README (Rich Trott) [#17106](https://github.com/nodejs/node/pull/17106) +* [[`f1d19d5eb9`](https://github.com/nodejs/node/commit/f1d19d5eb9)] - **doc**: add Contributing to Node.js to the README ToC (Rich Trott) [#17106](https://github.com/nodejs/node/pull/17106) +* [[`fa82f3a5c4`](https://github.com/nodejs/node/commit/fa82f3a5c4)] - **doc**: merge Working Groups with Contributing to Node.js in README (Rich Trott) [#17106](https://github.com/nodejs/node/pull/17106) +* [[`39cfecd568`](https://github.com/nodejs/node/commit/39cfecd568)] - **doc**: remove IRC node-dev link from README (Rich Trott) [#17106](https://github.com/nodejs/node/pull/17106) +* [[`976ed7507b`](https://github.com/nodejs/node/commit/976ed7507b)] - **doc**: add missing introduced_in comments (Luigi Pinca) [#16741](https://github.com/nodejs/node/pull/16741) +* [[`39cb687ee5`](https://github.com/nodejs/node/commit/39cb687ee5)] - **doc**: change v8 to V8 (Rich Trott) [#17089](https://github.com/nodejs/node/pull/17089) +* [[`4b35dfbb31`](https://github.com/nodejs/node/commit/4b35dfbb31)] - **doc**: avoid mentioning 'uncaughtException' (Luigi Pinca) [#16905](https://github.com/nodejs/node/pull/16905) +* [[`18b08f082a`](https://github.com/nodejs/node/commit/18b08f082a)] - **doc**: add note about using cluster without networking (pimlie) [#17031](https://github.com/nodejs/node/pull/17031) +* [[`2f34d35b0a`](https://github.com/nodejs/node/commit/2f34d35b0a)] - **doc**: explicitly document highWaterMark option (Sebastian Silbermann) [#17049](https://github.com/nodejs/node/pull/17049) +* [[`c917cd6fdd`](https://github.com/nodejs/node/commit/c917cd6fdd)] - **doc**: fix a link in dgram.md (Vse Mozhet Byt) [#17107](https://github.com/nodejs/node/pull/17107) +* [[`a12bc2df0e`](https://github.com/nodejs/node/commit/a12bc2df0e)] - **doc**: reorganize collaborator guide (Joyee Cheung) [#17056](https://github.com/nodejs/node/pull/17056) +* [[`4a9c75a279`](https://github.com/nodejs/node/commit/4a9c75a279)] - **doc**: delete unused definition in README.md (Vse Mozhet Byt) [#17108](https://github.com/nodejs/node/pull/17108) +* [[`378439e2cb`](https://github.com/nodejs/node/commit/378439e2cb)] - **doc**: add Support section in README (Rich Trott) [#16533](https://github.com/nodejs/node/pull/16533) +* [[`8dc05e4630`](https://github.com/nodejs/node/commit/8dc05e4630)] - **doc**: document common pattern for instanceof checks (Michael Dawson) [#16699](https://github.com/nodejs/node/pull/16699) +* [[`03803ee505`](https://github.com/nodejs/node/commit/03803ee505)] - **doc**: mention smart pointers in Cpp style guide (Franziska Hinkelmann) [#17055](https://github.com/nodejs/node/pull/17055) +* [[`b87030c5cf`](https://github.com/nodejs/node/commit/b87030c5cf)] - **doc**: correct the wrong added meta data (Gaara) [#17072](https://github.com/nodejs/node/pull/17072) +* [[`73295370cc`](https://github.com/nodejs/node/commit/73295370cc)] - **doc**: document fs.realpath.native() (Ben Noordhuis) [#17059](https://github.com/nodejs/node/pull/17059) +* [[`4bdd05dd84`](https://github.com/nodejs/node/commit/4bdd05dd84)] - **doc**: add Table of Contents to Cpp style guide (Franziska Hinkelmann) [#17052](https://github.com/nodejs/node/pull/17052) +* [[`7d49bd0045`](https://github.com/nodejs/node/commit/7d49bd0045)] - **doc**: add `clientCertEngine` to docs (Rich Trott) +* [[`7594032fac`](https://github.com/nodejs/node/commit/7594032fac)] - **doc**: add hashseed to collaborators (Yang Guo) +* [[`a256482318`](https://github.com/nodejs/node/commit/a256482318)] - **doc,test**: remove unnecessary await with return instances (Rich Trott) [#17265](https://github.com/nodejs/node/pull/17265) +* [[`bccdea623d`](https://github.com/nodejs/node/commit/bccdea623d)] - **doc,win**: clarify WSL support (João Reis) [#17008](https://github.com/nodejs/node/pull/17008) +* [[`9b16e15f44`](https://github.com/nodejs/node/commit/9b16e15f44)] - **domain**: re-implement domain over async_hook (vladimir) [#16222](https://github.com/nodejs/node/pull/16222) +* [[`9c2f24e288`](https://github.com/nodejs/node/commit/9c2f24e288)] - **errors**: fix typo in TLS_SESSION_ATTACK message (Tom Hallam) [#17388](https://github.com/nodejs/node/pull/17388) +* [[`a333e71342`](https://github.com/nodejs/node/commit/a333e71342)] - **errors**: consistent format for error message (Anatoli Papirovski) [#16904](https://github.com/nodejs/node/pull/16904) +* [[`715baf8214`](https://github.com/nodejs/node/commit/715baf8214)] - **fs**: use rest param & Reflect.apply in makeCallback (Mithun Sasidharan) [#17486](https://github.com/nodejs/node/pull/17486) +* [[`7ebaf83602`](https://github.com/nodejs/node/commit/7ebaf83602)] - **fs**: use arrow functions instead of `.bind` and `self` (Weijia Wang) [#17137](https://github.com/nodejs/node/pull/17137) +* [[`24dc57bc71`](https://github.com/nodejs/node/commit/24dc57bc71)] - **http**: simplify checkIsHttpToken() (Rich Trott) [#17399](https://github.com/nodejs/node/pull/17399) +* [[`5a4b6c4bc0`](https://github.com/nodejs/node/commit/5a4b6c4bc0)] - **http**: do not assign intermediate variable (Jon Moss) [#17335](https://github.com/nodejs/node/pull/17335) +* [[`a6b6acb68c`](https://github.com/nodejs/node/commit/a6b6acb68c)] - **http, stream**: writeHWM -\> writableHighWaterMark (Matteo Collina) [#17050](https://github.com/nodejs/node/pull/17050) +* [[`658338e317`](https://github.com/nodejs/node/commit/658338e317)] - **http2**: use more descriptive names (James M Snell) [#17328](https://github.com/nodejs/node/pull/17328) +* [[`4994d57890`](https://github.com/nodejs/node/commit/4994d57890)] - **http2**: remove unnecessary event handlers (James M Snell) [#17328](https://github.com/nodejs/node/pull/17328) +* [[`67abc1e697`](https://github.com/nodejs/node/commit/67abc1e697)] - **http2**: reduce code duplication in settings (James M Snell) [#17328](https://github.com/nodejs/node/pull/17328) +* [[`e5f92cda7e`](https://github.com/nodejs/node/commit/e5f92cda7e)] - **http2**: general cleanups (James M Snell) [#17328](https://github.com/nodejs/node/pull/17328) +* [[`54cd7dfd88`](https://github.com/nodejs/node/commit/54cd7dfd88)] - **inspector**: Fix crash for WS connection (Eugene Ostroukhov) [#17085](https://github.com/nodejs/node/pull/17085) +* [[`94e0488a33`](https://github.com/nodejs/node/commit/94e0488a33)] - **inspector**: no async tracking for promises (Anna Henningsen) [#17118](https://github.com/nodejs/node/pull/17118) +* [[`8fd316f63b`](https://github.com/nodejs/node/commit/8fd316f63b)] - **internal**: add emitExperimentalWarning function (Cody Deckard) [#16497](https://github.com/nodejs/node/pull/16497) +* [[`1a8b0e9fa5`](https://github.com/nodejs/node/commit/1a8b0e9fa5)] - **lib**: replace string concatenation with template (Vijayalakshmi Kannan) [#16923](https://github.com/nodejs/node/pull/16923) +* [[`b719b77215`](https://github.com/nodejs/node/commit/b719b77215)] - **module**: print better message on esm syntax error (Ben Noordhuis) [#17281](https://github.com/nodejs/node/pull/17281) +* [[`5736dc4ab9`](https://github.com/nodejs/node/commit/5736dc4ab9)] - **module**: fix for #17130 shared loader cjs dep (Guy Bedford) [#17131](https://github.com/nodejs/node/pull/17131) +* [[`06da8a7f16`](https://github.com/nodejs/node/commit/06da8a7f16)] - **module**: be lazy when creating CJS facades (Bradley Farias) [#17153](https://github.com/nodejs/node/pull/17153) +* [[`7ae7124039`](https://github.com/nodejs/node/commit/7ae7124039)] - **(SEMVER-MINOR)** **module**: add builtinModules (Jon Moss) [#16386](https://github.com/nodejs/node/pull/16386) +* [[`caff930d47`](https://github.com/nodejs/node/commit/caff930d47)] - **module**: replace default paths in require.resolve() (cjihrig) [#17113](https://github.com/nodejs/node/pull/17113) +* [[`b833a5989c`](https://github.com/nodejs/node/commit/b833a5989c)] - **n-api**: use nullptr instead of NULL in node_api.cc (Daniel Bevenius) [#17276](https://github.com/nodejs/node/pull/17276) +* [[`8d222d42ab`](https://github.com/nodejs/node/commit/8d222d42ab)] - **(SEMVER-MINOR)** **n-api**: add helper for addons to get the event loop (Anna Henningsen) [#17109](https://github.com/nodejs/node/pull/17109) +* [[`8366a74bbf`](https://github.com/nodejs/node/commit/8366a74bbf)] - **path**: remove obsolete comment (Rich Trott) [#17023](https://github.com/nodejs/node/pull/17023) +* [[`a159a2c6ac`](https://github.com/nodejs/node/commit/a159a2c6ac)] - **process**: slight refinements to nextTick (Anatoli Papirovski) [#17421](https://github.com/nodejs/node/pull/17421) +* [[`347164a703`](https://github.com/nodejs/node/commit/347164a703)] - **(SEMVER-MINOR)** **process**: add flag for uncaught exception abort (Anna Henningsen) [#17159](https://github.com/nodejs/node/pull/17159) +* [[`9d657247df`](https://github.com/nodejs/node/commit/9d657247df)] - **process**: slightly simplify next tick execution (Anatoli Papirovski) [#16888](https://github.com/nodejs/node/pull/16888) +* [[`8d90db5120`](https://github.com/nodejs/node/commit/8d90db5120)] - **(SEMVER-MINOR)** **process**: Send signal name to signal handlers (Robert Rossmann) [#15606](https://github.com/nodejs/node/pull/15606) +* [[`9a9aa88797`](https://github.com/nodejs/node/commit/9a9aa88797)] - **process**: improve unhandled rejection message (Madara Uchiha) [#17158](https://github.com/nodejs/node/pull/17158) +* [[`8dcc40a84f`](https://github.com/nodejs/node/commit/8dcc40a84f)] - **src**: remove unused include node_crypto_clienthello (Daniel Bevenius) [#17546](https://github.com/nodejs/node/pull/17546) +* [[`fb3ea4c4dc`](https://github.com/nodejs/node/commit/fb3ea4c4dc)] - **src**: fix missing handlescope bug in inspector (Ben Noordhuis) [#17539](https://github.com/nodejs/node/pull/17539) +* [[`40acda2e6b`](https://github.com/nodejs/node/commit/40acda2e6b)] - **src**: use uv_os_getpid() to get process id (cjihrig) [#17415](https://github.com/nodejs/node/pull/17415) +* [[`9b41c0b021`](https://github.com/nodejs/node/commit/9b41c0b021)] - **src**: node_http2_state.h should not be executable (Jon Moss) [#17408](https://github.com/nodejs/node/pull/17408) +* [[`419cde79b1`](https://github.com/nodejs/node/commit/419cde79b1)] - **src**: use non-deprecated versions of `-\>To*()` utils (Leko) [#17343](https://github.com/nodejs/node/pull/17343) +* [[`ceda8c57aa`](https://github.com/nodejs/node/commit/ceda8c57aa)] - **src**: use nullptr instead of NULL (Daniel Bevenius) [#17373](https://github.com/nodejs/node/pull/17373) +* [[`7f55f98a84`](https://github.com/nodejs/node/commit/7f55f98a84)] - **src**: fix typo in NODE_OPTIONS whitelist (Evan Lucas) [#17369](https://github.com/nodejs/node/pull/17369) +* [[`9b27bc85ae`](https://github.com/nodejs/node/commit/9b27bc85ae)] - **src**: introduce USE() for silencing compiler warnings (Anna Henningsen) [#17333](https://github.com/nodejs/node/pull/17333) +* [[`0db1f87825`](https://github.com/nodejs/node/commit/0db1f87825)] - **src**: use NODE_BUILTIN_MODULE_CONTEXT_AWARE() macro (Ben Noordhuis) [#17071](https://github.com/nodejs/node/pull/17071) +* [[`6a7a59a8c1`](https://github.com/nodejs/node/commit/6a7a59a8c1)] - **src**: remove `ClearFatalExceptionHandlers()` (Anna Henningsen) [#17333](https://github.com/nodejs/node/pull/17333) +* [[`9c7a42a2e4`](https://github.com/nodejs/node/commit/9c7a42a2e4)] - **src**: explicitly register built-in modules (Yihong Wang) [#16565](https://github.com/nodejs/node/pull/16565) +* [[`4667c5e720`](https://github.com/nodejs/node/commit/4667c5e720)] - **src**: start heap object tracking after platform is initialized (Hannes Payer) [#17249](https://github.com/nodejs/node/pull/17249) +* [[`63f6947a41`](https://github.com/nodejs/node/commit/63f6947a41)] - **src**: make base64.h self-contained (Daniel Bevenius) [#17177](https://github.com/nodejs/node/pull/17177) +* [[`14ebda5218`](https://github.com/nodejs/node/commit/14ebda5218)] - **(SEMVER-MINOR)** **src**: add public API for managing NodePlatform (Cheng Zhao) [#16981](https://github.com/nodejs/node/pull/16981) +* [[`9832b8e206`](https://github.com/nodejs/node/commit/9832b8e206)] - **src**: add napi_handle_scope_mismatch to msg list (neta) [#17161](https://github.com/nodejs/node/pull/17161) +* [[`0b128842f6`](https://github.com/nodejs/node/commit/0b128842f6)] - **src**: fix compiler warning (cjihrig) [#17195](https://github.com/nodejs/node/pull/17195) +* [[`9c0c33625a`](https://github.com/nodejs/node/commit/9c0c33625a)] - **src**: remove unprofessional slang in assertions (Alexey Orlenko) [#17166](https://github.com/nodejs/node/pull/17166) +* [[`936c0b2b83`](https://github.com/nodejs/node/commit/936c0b2b83)] - **src**: implement v8::TaskRunner API in NodePlatform (Anna Henningsen) [#17134](https://github.com/nodejs/node/pull/17134) +* [[`a9be7bf35b`](https://github.com/nodejs/node/commit/a9be7bf35b)] - **src**: remove unused variable (cjihrig) [#17150](https://github.com/nodejs/node/pull/17150) +* [[`84b707089e`](https://github.com/nodejs/node/commit/84b707089e)] - **(SEMVER-MINOR)** **src**: add helper for addons to get the event loop (Anna Henningsen) [#17109](https://github.com/nodejs/node/pull/17109) +* [[`362b8c7d5d`](https://github.com/nodejs/node/commit/362b8c7d5d)] - **src**: inspector context name = program title + pid (Ben Noordhuis) [#17087](https://github.com/nodejs/node/pull/17087) +* [[`7ecec6704f`](https://github.com/nodejs/node/commit/7ecec6704f)] - **src**: abstract getpid() operation (Ben Noordhuis) [#17087](https://github.com/nodejs/node/pull/17087) +* [[`e7db034571`](https://github.com/nodejs/node/commit/e7db034571)] - **src**: add NODE_VERSION_IS_LTS to node_version.h (Gibson Fahnestock) [#16697](https://github.com/nodejs/node/pull/16697) +* [[`60423f5845`](https://github.com/nodejs/node/commit/60423f5845)] - **src**: use unique_ptr for http2_state (Franziska Hinkelmann) [#17078](https://github.com/nodejs/node/pull/17078) +* [[`e9000901ca`](https://github.com/nodejs/node/commit/e9000901ca)] - **src**: add missing include in node_platform.h (Anna Henningsen) [#17133](https://github.com/nodejs/node/pull/17133) +* [[`1b76cfe3c2`](https://github.com/nodejs/node/commit/1b76cfe3c2)] - **src**: use unique_ptr for scheduled delayed tasks (Franziska Hinkelmann) [#17083](https://github.com/nodejs/node/pull/17083) +* [[`af63df80b4`](https://github.com/nodejs/node/commit/af63df80b4)] - **src**: use std::unique_ptr in base-object-inl.h (Franziska Hinkelmann) [#17079](https://github.com/nodejs/node/pull/17079) +* [[`4387a73514`](https://github.com/nodejs/node/commit/4387a73514)] - **src**: remove superfluous check in backtrace_posix.cc (Anna Henningsen) [#16950](https://github.com/nodejs/node/pull/16950) +* [[`3ab3b0d4e2`](https://github.com/nodejs/node/commit/3ab3b0d4e2)] - **src**: fix size of CounterSet (Witthawat Piwawatthanapanit) [#16984](https://github.com/nodejs/node/pull/16984) +* [[`d74c7c5461`](https://github.com/nodejs/node/commit/d74c7c5461)] - **src**: rename req-wrap -\> req_wrap (Daniel Bevenius) [#17022](https://github.com/nodejs/node/pull/17022) +* [[`5119bb1a6d`](https://github.com/nodejs/node/commit/5119bb1a6d)] - **src**: rename base-object -\> base_object (Daniel Bevenius) [#17022](https://github.com/nodejs/node/pull/17022) +* [[`8ba513ee2e`](https://github.com/nodejs/node/commit/8ba513ee2e)] - **src**: rename async-wrap -\> async_wrap (Daniel Bevenius) [#17022](https://github.com/nodejs/node/pull/17022) +* [[`da8414e09a`](https://github.com/nodejs/node/commit/da8414e09a)] - **src**: use smart pointer instead of new and delete (Franziska Hinkelmann) [#17020](https://github.com/nodejs/node/pull/17020) +* [[`17e31dc66a`](https://github.com/nodejs/node/commit/17e31dc66a)] - **src**: perf_hooks: fix wrong sized delete (Ali Ijaz Sheikh) [#16898](https://github.com/nodejs/node/pull/16898) +* [[`a1a99570aa`](https://github.com/nodejs/node/commit/a1a99570aa)] - **src**: make ownership of stdio_pipes explicit (Franziska Hinkelmann) [#17030](https://github.com/nodejs/node/pull/17030) +* [[`98a07709f4`](https://github.com/nodejs/node/commit/98a07709f4)] - **src**: use unique pointer for tracing_agent (Franziska Hinkelmann) [#17012](https://github.com/nodejs/node/pull/17012) +* [[`a05c49c48d`](https://github.com/nodejs/node/commit/a05c49c48d)] - **src**: use unique_ptr for requests in crypto (Franziska Hinkelmann) [#17000](https://github.com/nodejs/node/pull/17000) +* [[`6f805c6967`](https://github.com/nodejs/node/commit/6f805c6967)] - **src**: implement backtrace-on-abort for windows (Anna Henningsen) [#16951](https://github.com/nodejs/node/pull/16951) +* [[`7ac760b603`](https://github.com/nodejs/node/commit/7ac760b603)] - **src**: fix SetClientCertEngine() nullptr dereference (Ben Noordhuis) [#16965](https://github.com/nodejs/node/pull/16965) +* [[`f6ec5fa4e8`](https://github.com/nodejs/node/commit/f6ec5fa4e8)] - **src**: fix bad sizeof expression (Ben Noordhuis) [#17014](https://github.com/nodejs/node/pull/17014) +* [[`8522e2420d`](https://github.com/nodejs/node/commit/8522e2420d)] - **src**: use unique_ptr in platform implementation (Franziska Hinkelmann) [#16970](https://github.com/nodejs/node/pull/16970) +* [[`c2431d553b`](https://github.com/nodejs/node/commit/c2431d553b)] - **src**: cancel pending delayed platform tasks on exit (Anna Henningsen) [#16700](https://github.com/nodejs/node/pull/16700) +* [[`37a60a8c3c`](https://github.com/nodejs/node/commit/37a60a8c3c)] - **src**: prepare v8 platform for multi-isolate support (Anna Henningsen) [#16700](https://github.com/nodejs/node/pull/16700) +* [[`b36c726206`](https://github.com/nodejs/node/commit/b36c726206)] - **stream**: improve the error message of `ERR_INVALID_ARG_TYPE` (Weijia Wang) [#17145](https://github.com/nodejs/node/pull/17145) +* [[`78b82b03c5`](https://github.com/nodejs/node/commit/78b82b03c5)] - **stream**: use arrow fns for 'this' in readable (Vipin Menon) [#16927](https://github.com/nodejs/node/pull/16927) +* [[`edb9846884`](https://github.com/nodejs/node/commit/edb9846884)] - **(SEMVER-MINOR)** **stream**: remove usage of *State.highWaterMark (Calvin Metcalf) [#12860](https://github.com/nodejs/node/pull/12860) +* [[`e7ae8eb457`](https://github.com/nodejs/node/commit/e7ae8eb457)] - **test**: refactor test-child-process-pass-fd (Rich Trott) [#17596](https://github.com/nodejs/node/pull/17596) +* [[`5a9172fe06`](https://github.com/nodejs/node/commit/5a9172fe06)] - **test**: remove unnecessary use of common.PORT in addons test (Rich Trott) [#17563](https://github.com/nodejs/node/pull/17563) +* [[`39e2fb6ad4`](https://github.com/nodejs/node/commit/39e2fb6ad4)] - **test**: simplify common.PORT code (Rich Trott) [#17559](https://github.com/nodejs/node/pull/17559) +* [[`f45ef442bb`](https://github.com/nodejs/node/commit/f45ef442bb)] - **test**: refactor test-http-default-port (Anna Henningsen) [#17562](https://github.com/nodejs/node/pull/17562) +* [[`49d662846e`](https://github.com/nodejs/node/commit/49d662846e)] - **test**: replace assert.throws w/ common.expectsError (Anatoli Papirovski) [#17557](https://github.com/nodejs/node/pull/17557) +* [[`f7e5ab082d`](https://github.com/nodejs/node/commit/f7e5ab082d)] - **test**: refactored to remove unnecessary variables (Mithun Sasidharan) [#17553](https://github.com/nodejs/node/pull/17553) +* [[`bb780d2d84`](https://github.com/nodejs/node/commit/bb780d2d84)] - **test**: use Countdown in http-agent test (Federico Kauffman) [#17537](https://github.com/nodejs/node/pull/17537) +* [[`510116ebe6`](https://github.com/nodejs/node/commit/510116ebe6)] - **test**: update http test to use common.mustCall (Collins Abitekaniza) [#17528](https://github.com/nodejs/node/pull/17528) +* [[`39d8e4413a`](https://github.com/nodejs/node/commit/39d8e4413a)] - **test**: improve assert messages in repl-reset-event (Adri Van Houdt) [#16836](https://github.com/nodejs/node/pull/16836) +* [[`6576382eaa`](https://github.com/nodejs/node/commit/6576382eaa)] - **test**: update test-http-should-keep-alive to use countdown (TomerOmri) [#17505](https://github.com/nodejs/node/pull/17505) +* [[`f3d619882e`](https://github.com/nodejs/node/commit/f3d619882e)] - **test**: fix flaky test-benchmark-es (Rich Trott) [#17516](https://github.com/nodejs/node/pull/17516) +* [[`ff59d3a30e`](https://github.com/nodejs/node/commit/ff59d3a30e)] - **test**: replace assert.throws w/ common.expectsError (Mithun Sasidharan) [#17483](https://github.com/nodejs/node/pull/17483) +* [[`28b2d8ac20`](https://github.com/nodejs/node/commit/28b2d8ac20)] - **test**: use common.expectsError in tests (Mithun Sasidharan) [#17484](https://github.com/nodejs/node/pull/17484) +* [[`d15cdc6fdb`](https://github.com/nodejs/node/commit/d15cdc6fdb)] - **test**: replace assert.throws w/ common.expectsError (Mithun Sasidharan) [#17498](https://github.com/nodejs/node/pull/17498) +* [[`993b1cbc6d`](https://github.com/nodejs/node/commit/993b1cbc6d)] - **test**: use Countdown in http test (idandagan1) [#17506](https://github.com/nodejs/node/pull/17506) +* [[`1aae28b7c9`](https://github.com/nodejs/node/commit/1aae28b7c9)] - **test**: use Number.isNaN instead of global isNaN (Mithun Sasidharan) [#17515](https://github.com/nodejs/node/pull/17515) +* [[`2a5da9c2c9`](https://github.com/nodejs/node/commit/2a5da9c2c9)] - **test**: use Countdown in http-response-statuscode (Mandeep Singh) [#17327](https://github.com/nodejs/node/pull/17327) +* [[`919625bd6a`](https://github.com/nodejs/node/commit/919625bd6a)] - **test**: use Countdown in test-http-set-cookies (Shilo Mangam) [#17504](https://github.com/nodejs/node/pull/17504) +* [[`f399667784`](https://github.com/nodejs/node/commit/f399667784)] - **test**: replace assert.throws w/ common.expectsError (Mithun Sasidharan) [#17497](https://github.com/nodejs/node/pull/17497) +* [[`c2ff36ed7f`](https://github.com/nodejs/node/commit/c2ff36ed7f)] - **test**: replace assert.throws w/ common.expectsError (Mithun Sasidharan) [#17494](https://github.com/nodejs/node/pull/17494) +* [[`af8e27d10e`](https://github.com/nodejs/node/commit/af8e27d10e)] - **test**: Use common.mustCall in http test (sreepurnajasti) [#17487](https://github.com/nodejs/node/pull/17487) +* [[`7b8622f946`](https://github.com/nodejs/node/commit/7b8622f946)] - **test**: update http test to use Countdown (Francisco Gerardo Neri Andriano) [#17477](https://github.com/nodejs/node/pull/17477) +* [[`fb553b5b59`](https://github.com/nodejs/node/commit/fb553b5b59)] - **test**: improve crypto test coverage (Leko) [#17426](https://github.com/nodejs/node/pull/17426) +* [[`928aecc92c`](https://github.com/nodejs/node/commit/928aecc92c)] - **test**: replace fs.accessSync with fs.existsSync (Leko) [#17446](https://github.com/nodejs/node/pull/17446) +* [[`7d3a84388d`](https://github.com/nodejs/node/commit/7d3a84388d)] - **test**: fix flaky test-benchmark-querystring (Rich Trott) [#17517](https://github.com/nodejs/node/pull/17517) +* [[`50f120eaac`](https://github.com/nodejs/node/commit/50f120eaac)] - **test**: fix flaky test-benchmark-util (Rich Trott) [#17473](https://github.com/nodejs/node/pull/17473) +* [[`a407a48bdf`](https://github.com/nodejs/node/commit/a407a48bdf)] - **test**: expand coverage for crypto (Leko) [#17447](https://github.com/nodejs/node/pull/17447) +* [[`07547346a8`](https://github.com/nodejs/node/commit/07547346a8)] - **test**: add common.crashOnUnhandledRejection() (IHsuan) [#17247](https://github.com/nodejs/node/pull/17247) +* [[`8c32b4a37a`](https://github.com/nodejs/node/commit/8c32b4a37a)] - **test**: refactor code to use common.mustCall (Mithun Sasidharan) [#17437](https://github.com/nodejs/node/pull/17437) +* [[`fe9d9f732b`](https://github.com/nodejs/node/commit/fe9d9f732b)] - **test**: remove hidden use of common.PORT in parallel tests (Rich Trott) [#17466](https://github.com/nodejs/node/pull/17466) +* [[`cca3526faf`](https://github.com/nodejs/node/commit/cca3526faf)] - **test**: add more settings to test-benchmark-dgram (Rich Trott) [#17462](https://github.com/nodejs/node/pull/17462) +* [[`562007ce2a`](https://github.com/nodejs/node/commit/562007ce2a)] - **test**: add dgram benchmark test (jopann) [#17462](https://github.com/nodejs/node/pull/17462) +* [[`619cbc4364`](https://github.com/nodejs/node/commit/619cbc4364)] - **test**: fix flaky test-benchmark-events (Rich Trott) [#17472](https://github.com/nodejs/node/pull/17472) +* [[`d8018bc91d`](https://github.com/nodejs/node/commit/d8018bc91d)] - **test**: update test-http-request-dont-override-options to use common.mustCall (Mithun Sasidharan) [#17438](https://github.com/nodejs/node/pull/17438) +* [[`0ac87c2525`](https://github.com/nodejs/node/commit/0ac87c2525)] - **test**: replace assert.throws with common.expectsError (Leko) [#17445](https://github.com/nodejs/node/pull/17445) +* [[`07fd4cfbe0`](https://github.com/nodejs/node/commit/07fd4cfbe0)] - **test**: use common.mustCall in test-http-malformed-request (Mithun Sasidharan) [#17439](https://github.com/nodejs/node/pull/17439) +* [[`0ade4888f2`](https://github.com/nodejs/node/commit/0ade4888f2)] - **test**: forbid `common.mustCall*()` in process exit handlers (Rich Trott) [#17453](https://github.com/nodejs/node/pull/17453) +* [[`85e6271995`](https://github.com/nodejs/node/commit/85e6271995)] - **test**: use Countdown in http test (Mithun Sasidharan) [#17436](https://github.com/nodejs/node/pull/17436) +* [[`8c81ba0b1c`](https://github.com/nodejs/node/commit/8c81ba0b1c)] - **test**: remove common.PORT from parallel tests (Rich Trott) [#17410](https://github.com/nodejs/node/pull/17410) +* [[`5fecdbaca9`](https://github.com/nodejs/node/commit/5fecdbaca9)] - **test**: update test-http-response-multiheaders to use countdown (hmammedzadeh) [#17419](https://github.com/nodejs/node/pull/17419) +* [[`69e775d454`](https://github.com/nodejs/node/commit/69e775d454)] - **test**: update test-http-timeout to use countdown (Mithun Sasidharan) [#17341](https://github.com/nodejs/node/pull/17341) +* [[`9cbb0dadc0`](https://github.com/nodejs/node/commit/9cbb0dadc0)] - **test**: make common.mustNotCall show file:linenumber (Lance Ball) [#17257](https://github.com/nodejs/node/pull/17257) +* [[`259f2d331d`](https://github.com/nodejs/node/commit/259f2d331d)] - **test**: remove fixturesDir from common module (Rich Trott) [#17400](https://github.com/nodejs/node/pull/17400) +* [[`92b29cd659`](https://github.com/nodejs/node/commit/92b29cd659)] - **test**: remove common.fixturesDir from tests (Rich Trott) [#17400](https://github.com/nodejs/node/pull/17400) +* [[`0afcea280e`](https://github.com/nodejs/node/commit/0afcea280e)] - **test**: add test case for missing branch (Leko) [#17418](https://github.com/nodejs/node/pull/17418) +* [[`c9a4f4f8f1`](https://github.com/nodejs/node/commit/c9a4f4f8f1)] - **test**: update test-http-upgrade-client to use countdown (Mithun Sasidharan) [#17339](https://github.com/nodejs/node/pull/17339) +* [[`91d541627e`](https://github.com/nodejs/node/commit/91d541627e)] - **test**: update test-http-status-reason-invalid-chars to use countdown (Mithun Sasidharan) [#17342](https://github.com/nodejs/node/pull/17342) +* [[`4fb070873e`](https://github.com/nodejs/node/commit/4fb070873e)] - **test**: refactored test-http-allow-req-after-204-res to countdown (Mithun Sasidharan) [#17211](https://github.com/nodejs/node/pull/17211) +* [[`ef25de7493`](https://github.com/nodejs/node/commit/ef25de7493)] - **test**: update test/parallel/test-http-pipe-fs.js to use countdown (ChungNgoops) [#17346](https://github.com/nodejs/node/pull/17346) +* [[`1866b05042`](https://github.com/nodejs/node/commit/1866b05042)] - **test**: refactored test-http-response-splitting to use countdown (Mithun Sasidharan) [#17348](https://github.com/nodejs/node/pull/17348) +* [[`ee1c95f992`](https://github.com/nodejs/node/commit/ee1c95f992)] - **test**: expanded assertions for console.timeEnd() output (NiveditN) [#17368](https://github.com/nodejs/node/pull/17368) +* [[`8336e4f88e`](https://github.com/nodejs/node/commit/8336e4f88e)] - **test**: add test case for process.dlopen with undefined (Leko) [#17343](https://github.com/nodejs/node/pull/17343) +* [[`f0608814af`](https://github.com/nodejs/node/commit/f0608814af)] - **test**: add test case for throwing an exception with vm.Script (Leko) [#17343](https://github.com/nodejs/node/pull/17343) +* [[`78592a34c6`](https://github.com/nodejs/node/commit/78592a34c6)] - **test**: make CreateParams stack-allocated (Daniel Bevenius) [#17366](https://github.com/nodejs/node/pull/17366) +* [[`ca81d4bb3f`](https://github.com/nodejs/node/commit/ca81d4bb3f)] - **test**: use v8 Default Allocator in cctest fixture (Daniel Bevenius) [#17366](https://github.com/nodejs/node/pull/17366) +* [[`6e3a8be43a`](https://github.com/nodejs/node/commit/6e3a8be43a)] - **test**: replace function with arrow function (Leko) [#17345](https://github.com/nodejs/node/pull/17345) +* [[`f5a1e6cbc4`](https://github.com/nodejs/node/commit/f5a1e6cbc4)] - **test**: fix flaky async-hooks/test-graph.signal (Rich Trott) [#17509](https://github.com/nodejs/node/pull/17509) +* [[`f1b26be684`](https://github.com/nodejs/node/commit/f1b26be684)] - **test**: remove common.tmpDirName (Rich Trott) [#17266](https://github.com/nodejs/node/pull/17266) +* [[`047bac2475`](https://github.com/nodejs/node/commit/047bac2475)] - **test**: fixup test-http2-create-client-secure-session (James M Snell) [#17328](https://github.com/nodejs/node/pull/17328) +* [[`3d45a94b56`](https://github.com/nodejs/node/commit/3d45a94b56)] - **test**: mock the lookup function in parallel tests (Joyee Cheung) [#17296](https://github.com/nodejs/node/pull/17296) +* [[`4e789a3bf8`](https://github.com/nodejs/node/commit/4e789a3bf8)] - **test**: add common.dns.errorLookupMock (Joyee Cheung) [#17296](https://github.com/nodejs/node/pull/17296) +* [[`71eb186572`](https://github.com/nodejs/node/commit/71eb186572)] - **test**: replace function with ES6 arrow function (Junichi Kajiwara) [#17306](https://github.com/nodejs/node/pull/17306) +* [[`36e2643d7b`](https://github.com/nodejs/node/commit/36e2643d7b)] - **test**: add es6 module global leakage tests (WhoMeNope) [#16341](https://github.com/nodejs/node/pull/16341) +* [[`afdfc4de8f`](https://github.com/nodejs/node/commit/afdfc4de8f)] - **test**: Enable specifying flaky tests on fips (Nikhil Komawar) [#16329](https://github.com/nodejs/node/pull/16329) +* [[`24d08fee45`](https://github.com/nodejs/node/commit/24d08fee45)] - **test**: refactored http test to use countdown (Mithun Sasidharan) [#17241](https://github.com/nodejs/node/pull/17241) +* [[`b033d38022`](https://github.com/nodejs/node/commit/b033d38022)] - **test**: Update test-http-parser-free to use countdown timer (Mandeep Singh) [#17322](https://github.com/nodejs/node/pull/17322) +* [[`4a749c3a70`](https://github.com/nodejs/node/commit/4a749c3a70)] - **test**: Update test-http-client-agent to use countdown timer (Mandeep Singh) [#17325](https://github.com/nodejs/node/pull/17325) +* [[`1e3aed0be3`](https://github.com/nodejs/node/commit/1e3aed0be3)] - **test**: fix flaky parallel/test-http2-client-upload (Anna Henningsen) [#17361](https://github.com/nodejs/node/pull/17361) +* [[`1adccc6a6a`](https://github.com/nodejs/node/commit/1adccc6a6a)] - **test**: fix isNAN-\>Number.isNAN (yuza yuko) [#17309](https://github.com/nodejs/node/pull/17309) +* [[`91e21171c7`](https://github.com/nodejs/node/commit/91e21171c7)] - **test**: make use of Number.isNaN to test-readfloat.js (Hiromu Yoshiwara) [#17310](https://github.com/nodejs/node/pull/17310) +* [[`97a279e375`](https://github.com/nodejs/node/commit/97a279e375)] - **test**: replace function with arrow function (spring_raining) [#17312](https://github.com/nodejs/node/pull/17312) +* [[`e35acedca5`](https://github.com/nodejs/node/commit/e35acedca5)] - **test**: refactor using template string (Yoshiya Hinosawa) [#17314](https://github.com/nodejs/node/pull/17314) +* [[`f51cb1c0cd`](https://github.com/nodejs/node/commit/f51cb1c0cd)] - **test**: replace function with arrow function (Hiroaki KARASAWA) [#17308](https://github.com/nodejs/node/pull/17308) +* [[`3f4d0fc76b`](https://github.com/nodejs/node/commit/3f4d0fc76b)] - **test**: replace function with arrow function (kou-hin) [#17305](https://github.com/nodejs/node/pull/17305) +* [[`d8e4d9593b`](https://github.com/nodejs/node/commit/d8e4d9593b)] - **test**: use arrow function (koooge) [#17318](https://github.com/nodejs/node/pull/17318) +* [[`b420209fc6`](https://github.com/nodejs/node/commit/b420209fc6)] - **test**: use common.hasIntl instead of typeof Intl (Aqui Tsuchida) [#17311](https://github.com/nodejs/node/pull/17311) +* [[`284dad7468`](https://github.com/nodejs/node/commit/284dad7468)] - **test**: use Number.isNaN() (MURAKAMI Masahiko) [#17319](https://github.com/nodejs/node/pull/17319) +* [[`94abefba93`](https://github.com/nodejs/node/commit/94abefba93)] - **test**: add test of stream Transform (Yoshiya Hinosawa) [#17303](https://github.com/nodejs/node/pull/17303) +* [[`e026132726`](https://github.com/nodejs/node/commit/e026132726)] - **test**: refactor concat string to template string (jimmy) [#17252](https://github.com/nodejs/node/pull/17252) +* [[`0e5ff6f44b`](https://github.com/nodejs/node/commit/0e5ff6f44b)] - **test**: use common.crashOnUnhandledRejection (yozian) [#17242](https://github.com/nodejs/node/pull/17242) +* [[`24b1839aed`](https://github.com/nodejs/node/commit/24b1839aed)] - **test**: use common.crashOnUnhandledRejection (Kcin1993) [#17235](https://github.com/nodejs/node/pull/17235) +* [[`497195a1a3`](https://github.com/nodejs/node/commit/497195a1a3)] - **test**: add common.crashOnUnhandledRejection() (Andy Chen) [#17234](https://github.com/nodejs/node/pull/17234) +* [[`c375816667`](https://github.com/nodejs/node/commit/c375816667)] - **test**: use common.crashOnUnhandledRejection (zhengyuanjie) [#17215](https://github.com/nodejs/node/pull/17215) +* [[`cb3348715b`](https://github.com/nodejs/node/commit/cb3348715b)] - **test**: use common.crashOnUnhandledRejection (Jason Chung) [#17233](https://github.com/nodejs/node/pull/17233) +* [[`8d1ec5d24a`](https://github.com/nodejs/node/commit/8d1ec5d24a)] - **test**: use common.crashOnUnhandledRejection() (sorarize@gmail.com) [#17232](https://github.com/nodejs/node/pull/17232) +* [[`e3db509b47`](https://github.com/nodejs/node/commit/e3db509b47)] - **test**: use common.crashOnUnhandledRejection (Kurt Hsu) [#17229](https://github.com/nodejs/node/pull/17229) +* [[`017379e89b`](https://github.com/nodejs/node/commit/017379e89b)] - **test**: add common.crashOnHandleRejection (jackyen) [#17225](https://github.com/nodejs/node/pull/17225) +* [[`ce284fcb5d`](https://github.com/nodejs/node/commit/ce284fcb5d)] - **test**: add crashonUnhandledRejection (danielLin) [#17237](https://github.com/nodejs/node/pull/17237) +* [[`5cbe0f2420`](https://github.com/nodejs/node/commit/5cbe0f2420)] - **test**: keep coverage reports after coverage-clean (Anatoli Papirovski) [#15470](https://github.com/nodejs/node/pull/15470) +* [[`2d2e7803b2`](https://github.com/nodejs/node/commit/2d2e7803b2)] - **test**: add test on unhandled rejection (Larry Lu) [#17228](https://github.com/nodejs/node/pull/17228) +* [[`a536b031d8`](https://github.com/nodejs/node/commit/a536b031d8)] - **test**: use common.crashOnUnhandledRejection (aryung chen) [#17221](https://github.com/nodejs/node/pull/17221) +* [[`2010b800b8`](https://github.com/nodejs/node/commit/2010b800b8)] - **test**: use common.crashOnUnhandledRejection (Zack Yang) [#17217](https://github.com/nodejs/node/pull/17217) +* [[`d50671b061`](https://github.com/nodejs/node/commit/d50671b061)] - **test**: add common.crashOnUnhandledRejection() (Scya597) [#17212](https://github.com/nodejs/node/pull/17212) +* [[`42a8f03a8b`](https://github.com/nodejs/node/commit/42a8f03a8b)] - **test**: remove unlink function which is needless (buji) [#17119](https://github.com/nodejs/node/pull/17119) +* [[`5c70cef403`](https://github.com/nodejs/node/commit/5c70cef403)] - **test**: dont need to remove nonexistent directory (buji) [#17119](https://github.com/nodejs/node/pull/17119) +* [[`696c962bf3`](https://github.com/nodejs/node/commit/696c962bf3)] - **test**: use common.crashOnUnhandledRejection() (Ivan Wei) [#17227](https://github.com/nodejs/node/pull/17227) +* [[`caa59b9a47`](https://github.com/nodejs/node/commit/caa59b9a47)] - **test**: add common.crashOnUnhandledRejection() (Kyle Yu) [#17236](https://github.com/nodejs/node/pull/17236) +* [[`c232542494`](https://github.com/nodejs/node/commit/c232542494)] - **test**: use crashOnUnhandledRejection (YuLun Shih) [#17220](https://github.com/nodejs/node/pull/17220) +* [[`63f9a13299`](https://github.com/nodejs/node/commit/63f9a13299)] - **test**: fix linting error (James M Snell) [#17251](https://github.com/nodejs/node/pull/17251) +* [[`dc4aa89224`](https://github.com/nodejs/node/commit/dc4aa89224)] - **test**: use common.crashOnUnhandledRejection (jimliu7434) [#17231](https://github.com/nodejs/node/pull/17231) +* [[`9bf2da3429`](https://github.com/nodejs/node/commit/9bf2da3429)] - **test**: use crashOnUnhandledRejection (Roth Peng) [#17226](https://github.com/nodejs/node/pull/17226) +* [[`582f1f01f8`](https://github.com/nodejs/node/commit/582f1f01f8)] - **test**: use common.crashOnUnhandledRejection (esbb48) [#17218](https://github.com/nodejs/node/pull/17218) +* [[`5cfd4ea3ed`](https://github.com/nodejs/node/commit/5cfd4ea3ed)] - **test**: use arrow function instead of bind (Lance Ball) [#17202](https://github.com/nodejs/node/pull/17202) +* [[`25ff8bef18`](https://github.com/nodejs/node/commit/25ff8bef18)] - **test**: use crashOnUnhandledRejection (Chiahao Lin) [#17219](https://github.com/nodejs/node/pull/17219) +* [[`965051dc14`](https://github.com/nodejs/node/commit/965051dc14)] - **test**: use common.crashOnUnhandledRejection (Whien) [#17214](https://github.com/nodejs/node/pull/17214) +* [[`72e480d85e`](https://github.com/nodejs/node/commit/72e480d85e)] - **test**: clean up inappropriate language (Gus Caplan) [#17170](https://github.com/nodejs/node/pull/17170) +* [[`c2bb4b211e`](https://github.com/nodejs/node/commit/c2bb4b211e)] - **test**: bypass dns for IPv6 net tests (Refael Ackermann) [#16976](https://github.com/nodejs/node/pull/16976) +* [[`417e7d1ac2`](https://github.com/nodejs/node/commit/417e7d1ac2)] - **test**: wrap callback in common.mustCall (suman-mitra) [#17173](https://github.com/nodejs/node/pull/17173) +* [[`b2c10cad51`](https://github.com/nodejs/node/commit/b2c10cad51)] - **test**: remove unused parameter in test-next-tick-error-spin.js (Francois KY) [#17185](https://github.com/nodejs/node/pull/17185) +* [[`2bbc1f070d`](https://github.com/nodejs/node/commit/2bbc1f070d)] - **test**: remove unused parameter (Fran Herrero) [#17193](https://github.com/nodejs/node/pull/17193) +* [[`c2b30a99b7`](https://github.com/nodejs/node/commit/c2b30a99b7)] - **test**: remove unused variable (Pierre-Loic Doulcet) [#17186](https://github.com/nodejs/node/pull/17186) +* [[`2e311266f7`](https://github.com/nodejs/node/commit/2e311266f7)] - **test**: remove unused variable (Guillaume Flandre) [#17187](https://github.com/nodejs/node/pull/17187) +* [[`a08bcaeca9`](https://github.com/nodejs/node/commit/a08bcaeca9)] - **test**: remove unused parameter (François Descamps) [#17184](https://github.com/nodejs/node/pull/17184) +* [[`36281f4003`](https://github.com/nodejs/node/commit/36281f4003)] - **test**: remove unused parameter (Xavier Balloy) [#17188](https://github.com/nodejs/node/pull/17188) +* [[`15b6bcf68b`](https://github.com/nodejs/node/commit/15b6bcf68b)] - **test**: make debugging of inspector-port-zero easier (Gibson Fahnestock) [#16685](https://github.com/nodejs/node/pull/16685) +* [[`9914bcaae9`](https://github.com/nodejs/node/commit/9914bcaae9)] - **test**: replace assert.throws w/ common.expectsError (sgreylyn) [#17091](https://github.com/nodejs/node/pull/17091) +* [[`e16d833076`](https://github.com/nodejs/node/commit/e16d833076)] - **test**: reduce benchmark cases in test-benchmark-buffer (Rich Trott) [#17111](https://github.com/nodejs/node/pull/17111) +* [[`79ba8637d0`](https://github.com/nodejs/node/commit/79ba8637d0)] - **test**: fs.write() if 3rd argument is a callback, not offset (Patrick Heneise) [#17045](https://github.com/nodejs/node/pull/17045) +* [[`23c98fa796`](https://github.com/nodejs/node/commit/23c98fa796)] - **test**: utilize common.mustCall() on child exit (sreepurnajasti) [#16996](https://github.com/nodejs/node/pull/16996) +* [[`2776816945`](https://github.com/nodejs/node/commit/2776816945)] - **test**: use arrow functions instead of bind (Tobias Nießen) [#17070](https://github.com/nodejs/node/pull/17070) +* [[`b9311697db`](https://github.com/nodejs/node/commit/b9311697db)] - **test**: move timing-sensitive test to sequential (Rich Trott) [#16775](https://github.com/nodejs/node/pull/16775) +* [[`acf6f24ef2`](https://github.com/nodejs/node/commit/acf6f24ef2)] - **test**: make REPL test pass in coverage mode (Anna Henningsen) [#17082](https://github.com/nodejs/node/pull/17082) +* [[`70060eef65`](https://github.com/nodejs/node/commit/70060eef65)] - **test**: --enable-static linked executable (Daniel Bevenius) [#14986](https://github.com/nodejs/node/pull/14986) +* [[`113dd2b573`](https://github.com/nodejs/node/commit/113dd2b573)] - **test**: add basic WebAssembly test (Steve Kinney) [#16760](https://github.com/nodejs/node/pull/16760) +* [[`f80cf5a33d`](https://github.com/nodejs/node/commit/f80cf5a33d)] - **test**: add coverage to tty module (cjihrig) [#16959](https://github.com/nodejs/node/pull/16959) +* [[`121245f25f`](https://github.com/nodejs/node/commit/121245f25f)] - **test**: add tls clientcertengine tests (Rich Trott) +* [[`3b1db7f54b`](https://github.com/nodejs/node/commit/3b1db7f54b)] - **test**: flag known flake (Refael Ackermann) +* [[`0093840044`](https://github.com/nodejs/node/commit/0093840044)] - **test,doc**: do not indicate that non-functions "return" values (Rich Trott) [#17267](https://github.com/nodejs/node/pull/17267) +* [[`b6929e2aa9`](https://github.com/nodejs/node/commit/b6929e2aa9)] - **test,doc**: document where common modules go (Gibson Fahnestock) [#16089](https://github.com/nodejs/node/pull/16089) +* [[`89d31ee048`](https://github.com/nodejs/node/commit/89d31ee048)] - **timers**: improvements to TimersList management (Anatoli Papirovski) [#17429](https://github.com/nodejs/node/pull/17429) +* [[`bd79c3788b`](https://github.com/nodejs/node/commit/bd79c3788b)] - **timers**: clean up for readability (Anatoli Papirovski) [#17279](https://github.com/nodejs/node/pull/17279) +* [[`fd501b31c6`](https://github.com/nodejs/node/commit/fd501b31c6)] - **timers**: cross JS/C++ border less frequently (Anna Henningsen) [#17064](https://github.com/nodejs/node/pull/17064) +* [[`33c1e8b3d5`](https://github.com/nodejs/node/commit/33c1e8b3d5)] - **tls**: implement clientCertEngine option (joelostrowski) +* [[`f7a1e39139`](https://github.com/nodejs/node/commit/f7a1e39139)] - **tools**: simplify no-let-in-for-declaration rule (cjihrig) [#17572](https://github.com/nodejs/node/pull/17572) +* [[`e157e1c922`](https://github.com/nodejs/node/commit/e157e1c922)] - **tools**: simplify buffer-constructor rule (cjihrig) [#17572](https://github.com/nodejs/node/pull/17572) +* [[`01e7b446d1`](https://github.com/nodejs/node/commit/01e7b446d1)] - **tools**: simplify prefer-assert-methods rule (cjihrig) [#17572](https://github.com/nodejs/node/pull/17572) +* [[`d59b0a7c73`](https://github.com/nodejs/node/commit/d59b0a7c73)] - **tools**: simplify prefer-common-mustnotcall rule (cjihrig) [#17572](https://github.com/nodejs/node/pull/17572) +* [[`aa32bd08a8`](https://github.com/nodejs/node/commit/aa32bd08a8)] - **tools**: prefer common.expectsError in tests (Anatoli Papirovski) [#17557](https://github.com/nodejs/node/pull/17557) +* [[`89964183c0`](https://github.com/nodejs/node/commit/89964183c0)] - **tools**: don't lint-md as part of main lint target (Refael Ackermann) [#17587](https://github.com/nodejs/node/pull/17587) +* [[`70cfe687ca`](https://github.com/nodejs/node/commit/70cfe687ca)] - **tools**: replace space with \b in regex (Diego Rodríguez Baquero) [#17479](https://github.com/nodejs/node/pull/17479) +* [[`e57af5aada`](https://github.com/nodejs/node/commit/e57af5aada)] - **tools**: lint for additional strings in docs (Rich Trott) [#17492](https://github.com/nodejs/node/pull/17492) +* [[`0e5dc8f925`](https://github.com/nodejs/node/commit/0e5dc8f925)] - **tools**: update markdown lint presets (Rich Trott) [#17382](https://github.com/nodejs/node/pull/17382) +* [[`6c65e04231`](https://github.com/nodejs/node/commit/6c65e04231)] - **tools**: enable no-return-await lint rule (Rich Trott) [#17265](https://github.com/nodejs/node/pull/17265) +* [[`1e34a0e9a8`](https://github.com/nodejs/node/commit/1e34a0e9a8)] - **tools**: add cpplint rule for NULL usage (Daniel Bevenius) [#17373](https://github.com/nodejs/node/pull/17373) +* [[`e41344f1b8`](https://github.com/nodejs/node/commit/e41344f1b8)] - **tools**: add docs for prefer-util-format-errors rule (Jon Moss) [#17376](https://github.com/nodejs/node/pull/17376) +* [[`1cc6df29a7`](https://github.com/nodejs/node/commit/1cc6df29a7)] - **tools**: add Boxstarter script (Bartosz Sosnowski) [#17046](https://github.com/nodejs/node/pull/17046) +* [[`6624ac3131`](https://github.com/nodejs/node/commit/6624ac3131)] - **tools**: update to ESLint 4.12.0 (cjihrig) [#16948](https://github.com/nodejs/node/pull/16948) +* [[`8e5b7117bc`](https://github.com/nodejs/node/commit/8e5b7117bc)] - **tools**: prohibit notDeepEqual usage (Ruben Bridgewater) [#16325](https://github.com/nodejs/node/pull/16325) +* [[`b7f81ae266`](https://github.com/nodejs/node/commit/b7f81ae266)] - **tools**: add lint fixer for `require-buffer` (Bamieh) [#17144](https://github.com/nodejs/node/pull/17144) +* [[`f0f32dccfe`](https://github.com/nodejs/node/commit/f0f32dccfe)] - **tools**: fix gitignore for tools/doc/ (Richard Littauer) [#17224](https://github.com/nodejs/node/pull/17224) +* [[`5247ab3792`](https://github.com/nodejs/node/commit/5247ab3792)] - **tools**: make doc tool a bit more readable (Tobias Nießen) [#17125](https://github.com/nodejs/node/pull/17125) +* [[`c8247a7c7d`](https://github.com/nodejs/node/commit/c8247a7c7d)] - **tools**: remove useless function declaration (Tobias Nießen) [#17125](https://github.com/nodejs/node/pull/17125) +* [[`34bfbfece4`](https://github.com/nodejs/node/commit/34bfbfece4)] - **tools**: avoid using process.cwd in tools/lint-js (Tobias Nießen) [#17121](https://github.com/nodejs/node/pull/17121) +* [[`c4eb683020`](https://github.com/nodejs/node/commit/c4eb683020)] - **tools**: use built-in padStart instead of padString (Tobias Nießen) [#17120](https://github.com/nodejs/node/pull/17120) +* [[`4954eef481`](https://github.com/nodejs/node/commit/4954eef481)] - **tools**: allow running test.py without configuring (Gibson Fahnestock) [#16621](https://github.com/nodejs/node/pull/16621) +* [[`16f181e3b9`](https://github.com/nodejs/node/commit/16f181e3b9)] - **tools**: bump remark-cli to 4.0 (Refael Ackermann) [#17028](https://github.com/nodejs/node/pull/17028) +* [[`4f518a4780`](https://github.com/nodejs/node/commit/4f518a4780)] - **tools**: fail tests if malformed status file (Rich Trott) [#16703](https://github.com/nodejs/node/pull/16703) +* [[`7fe6a8f5d5`](https://github.com/nodejs/node/commit/7fe6a8f5d5)] - **tools**: try installing js-yaml only once (Joyee Cheung) [#16661](https://github.com/nodejs/node/pull/16661) +* [[`4d0c70a6f6`](https://github.com/nodejs/node/commit/4d0c70a6f6)] - **tools**: speed up lint-md-build (Refael Ackermann) [#16945](https://github.com/nodejs/node/pull/16945) +* [[`03d2514b46`](https://github.com/nodejs/node/commit/03d2514b46)] - **tools,test**: throw if common.PORT used in parallel tests (Rich Trott) [#17559](https://github.com/nodejs/node/pull/17559) +* [[`8bd74c4061`](https://github.com/nodejs/node/commit/8bd74c4061)] - **tools,test**: use Execute instead of check_output (Refael Ackermann) [#17381](https://github.com/nodejs/node/pull/17381) +* [[`855bb8d486`](https://github.com/nodejs/node/commit/855bb8d486)] - **trace_events**: add executionAsyncId to init events (Andreas Madsen) [#17196](https://github.com/nodejs/node/pull/17196) +* [[`f321921573`](https://github.com/nodejs/node/commit/f321921573)] - **tty**: fix 'resize' event regression (Ben Noordhuis) [#16225](https://github.com/nodejs/node/pull/16225) +* [[`4e3aa9a899`](https://github.com/nodejs/node/commit/4e3aa9a899)] - **tty**: refactor exports (cjihrig) [#16959](https://github.com/nodejs/node/pull/16959) +* [[`8383c348b8`](https://github.com/nodejs/node/commit/8383c348b8)] - **util**: fix negative 0 check in inspect (Gus Caplan) [#17507](https://github.com/nodejs/node/pull/17507) +* [[`c5d20b36e1`](https://github.com/nodejs/node/commit/c5d20b36e1)] - **util**: remove check for global.process (Gus Caplan) [#17435](https://github.com/nodejs/node/pull/17435) +* [[`a37eb32c32`](https://github.com/nodejs/node/commit/a37eb32c32)] - **util**: escaping object keys in util.inspect() (buji) [#16986](https://github.com/nodejs/node/pull/16986) +* [[`57ee0dd5e3`](https://github.com/nodejs/node/commit/57ee0dd5e3)] - **zlib**: remove unnecessary else branch (john) [#17057](https://github.com/nodejs/node/pull/17057) +* [[`45ca714005`](https://github.com/nodejs/node/commit/45ca714005)] - **zlib**: fix assert fail for bad write in object mode (Kevin Locke) [#16960](https://github.com/nodejs/node/pull/16960) +* [[`fa01fe6819`](https://github.com/nodejs/node/commit/fa01fe6819)] - **zlib**: fix decompression of empty data streams (Anna Henningsen) [#17042](https://github.com/nodejs/node/pull/17042) + ## 2017-12-08, Version 9.2.1 (Current), @evanlucas diff --git a/lib/.eslintrc.yaml b/lib/.eslintrc.yaml index 24f54e68263..aaebadca125 100644 --- a/lib/.eslintrc.yaml +++ b/lib/.eslintrc.yaml @@ -3,3 +3,4 @@ rules: require-buffer: error buffer-constructor: error no-let-in-for-declaration: error + lowercase-name-for-primitive: error diff --git a/lib/domain.js b/lib/domain.js index b68e642c490..9670a53629e 100644 --- a/lib/domain.js +++ b/lib/domain.js @@ -399,32 +399,35 @@ EventEmitter.init = function() { const eventEmit = EventEmitter.prototype.emit; EventEmitter.prototype.emit = function emit(...args) { const domain = this.domain; - if (domain === null || domain === undefined || this === process) { - return Reflect.apply(eventEmit, this, args); - } const type = args[0]; - // edge case: if there is a domain and an existing non error object is given, - // it should not be errorized - // see test/parallel/test-event-emitter-no-error-provided-to-error-event.js - if (type === 'error' && args.length > 1 && args[1] && - !(args[1] instanceof Error)) { - domain.emit('error', args[1]); - return false; - } + const shouldEmitError = type === 'error' && + this.listenerCount(type) > 0; - domain.enter(); - try { + // Just call original `emit` if current EE instance has `error` + // handler, there's no active domain or this is process + if (shouldEmitError || domain === null || domain === undefined || + this === process) { return Reflect.apply(eventEmit, this, args); - } catch (er) { - if (typeof er === 'object' && er !== null) { + } + + if (type === 'error') { + const er = args.length > 1 && args[1] ? + args[1] : new errors.Error('ERR_UNHANDLED_ERROR'); + + if (typeof er === 'object') { er.domainEmitter = this; er.domain = domain; er.domainThrown = false; } + domain.emit('error', er); return false; - } finally { - domain.exit(); } + + domain.enter(); + const ret = Reflect.apply(eventEmit, this, args); + domain.exit(); + + return ret; }; diff --git a/lib/internal/url.js b/lib/internal/url.js index 89087b750d1..caa4c3d0283 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1198,7 +1198,7 @@ function createSearchParamsIterator(target, kind) { // https://heycam.github.io/webidl/#dfn-iterator-prototype-object const URLSearchParamsIteratorPrototype = Object.create(IteratorPrototype); -defineIDLClass(URLSearchParamsIteratorPrototype, 'URLSearchParamsIterator', { +defineIDLClass(URLSearchParamsIteratorPrototype, 'URLSearchParams Iterator', { next() { if (!this || Object.getPrototypeOf(this) !== URLSearchParamsIteratorPrototype) { diff --git a/lib/zlib.js b/lib/zlib.js index 7580288102a..8446f3a03a0 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -24,6 +24,7 @@ const errors = require('internal/errors'); const Transform = require('_stream_transform'); const { _extend } = require('util'); +const { isAnyArrayBuffer } = process.binding('util'); const { isArrayBufferView } = require('internal/util/types'); const binding = process.binding('zlib'); const assert = require('assert').ok; @@ -67,6 +68,8 @@ function zlibBuffer(engine, buffer, callback) { if (isArrayBufferView(buffer) && Object.getPrototypeOf(buffer) !== Buffer.prototype) { buffer = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } else if (isAnyArrayBuffer(buffer)) { + buffer = Buffer.from(buffer); } engine.buffers = null; engine.nread = 0; @@ -114,9 +117,14 @@ function zlibBufferSync(engine, buffer) { if (typeof buffer === 'string') { buffer = Buffer.from(buffer); } else if (!isArrayBufferView(buffer)) { - throw new errors.TypeError('ERR_INVALID_ARG_TYPE', - 'buffer', - ['string', 'Buffer', 'TypedArray', 'DataView']); + if (isAnyArrayBuffer(buffer)) { + buffer = Buffer.from(buffer); + } else { + throw new errors.TypeError('ERR_INVALID_ARG_TYPE', + 'buffer', + ['string', 'Buffer', 'TypedArray', 'DataView', + 'ArrayBuffer']); + } } buffer = processChunkSync(engine, buffer, engine._finishFlushFlag); if (engine._info) @@ -245,9 +253,13 @@ function Zlib(opts, mode) { dictionary = opts.dictionary; if (dictionary !== undefined && !isArrayBufferView(dictionary)) { - throw new errors.TypeError('ERR_INVALID_OPT_VALUE', - 'dictionary', - dictionary); + if (isAnyArrayBuffer(dictionary)) { + dictionary = Buffer.from(dictionary); + } else { + throw new errors.TypeError('ERR_INVALID_OPT_VALUE', + 'dictionary', + dictionary); + } } if (opts.encoding || opts.objectMode || opts.writableObjectMode) { diff --git a/src/env.h b/src/env.h index 5c6ce62ae6d..84aa3560fbf 100644 --- a/src/env.h +++ b/src/env.h @@ -133,6 +133,7 @@ class ModuleWrap; V(dns_txt_string, "TXT") \ V(domain_string, "domain") \ V(emit_string, "emit") \ + V(emit_warning_string, "emitWarning") \ V(exchange_string, "exchange") \ V(enumerable_string, "enumerable") \ V(idle_string, "idle") \ diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index 934b9d545c6..85a09060a11 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -111,7 +111,8 @@ void FSEventWrap::Start(const FunctionCallbackInfo& args) { FSEventWrap* wrap; ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder()); - CHECK_EQ(wrap->initialized_, false); + if (wrap->initialized_) + return args.GetReturnValue().Set(0); static const char kErrMsg[] = "filename must be a string or Buffer"; if (args.Length() < 1) diff --git a/src/js_stream.cc b/src/js_stream.cc index 186fea6d3dc..3c969ef37d1 100644 --- a/src/js_stream.cc +++ b/src/js_stream.cc @@ -74,11 +74,6 @@ void JSStream::OnReadImpl(ssize_t nread, } -void* JSStream::Cast() { - return static_cast(this); -} - - AsyncWrap* JSStream::GetAsyncWrap() { return static_cast(this); } @@ -181,7 +176,7 @@ void JSStream::DoAfterWrite(const FunctionCallbackInfo& args) { ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder()); ASSIGN_OR_RETURN_UNWRAP(&w, args[0].As()); - wrap->OnAfterWrite(w); + w->Done(0); } diff --git a/src/js_stream.h b/src/js_stream.h index 44bf7a06df7..c7caf79374d 100644 --- a/src/js_stream.h +++ b/src/js_stream.h @@ -18,7 +18,6 @@ class JSStream : public AsyncWrap, public StreamBase { ~JSStream(); - void* Cast() override; bool IsAlive() override; bool IsClosing() override; int ReadStart() override; diff --git a/src/node.cc b/src/node.cc index 1feee0fc192..bf4e3963dc2 100644 --- a/src/node.cc +++ b/src/node.cc @@ -158,12 +158,15 @@ using v8::HandleScope; using v8::HeapStatistics; using v8::Integer; using v8::Isolate; +using v8::Just; using v8::Local; using v8::Locker; +using v8::Maybe; using v8::MaybeLocal; using v8::Message; using v8::Name; using v8::NamedPropertyHandlerConfiguration; +using v8::Nothing; using v8::Null; using v8::Number; using v8::Object; @@ -2311,8 +2314,11 @@ static void DLOpen(const FunctionCallbackInfo& args) { } if (mp->nm_version == -1) { if (env->EmitNapiWarning()) { - ProcessEmitWarning(env, "N-API is an experimental feature and could " - "change at any time."); + if (ProcessEmitWarning(env, "N-API is an experimental feature and could " + "change at any time.").IsNothing()) { + dlib.Close(); + return; + } } } else if (mp->nm_version != NODE_MODULE_VERSION) { char errmsg[1024]; @@ -2459,8 +2465,62 @@ static void OnMessage(Local message, Local error) { FatalException(Isolate::GetCurrent(), error, message); } +static Maybe ProcessEmitWarningGeneric(Environment* env, + const char* warning, + const char* type = nullptr, + const char* code = nullptr) { + HandleScope handle_scope(env->isolate()); + Context::Scope context_scope(env->context()); + + Local process = env->process_object(); + Local emit_warning; + if (!process->Get(env->context(), + env->emit_warning_string()).ToLocal(&emit_warning)) { + return Nothing(); + } + + if (!emit_warning->IsFunction()) return Just(false); + + int argc = 0; + Local args[3]; // warning, type, code + + // The caller has to be able to handle a failure anyway, so we might as well + // do proper error checking for string creation. + if (!String::NewFromUtf8(env->isolate(), + warning, + v8::NewStringType::kNormal).ToLocal(&args[argc++])) { + return Nothing(); + } + if (type != nullptr) { + if (!String::NewFromOneByte(env->isolate(), + reinterpret_cast(type), + v8::NewStringType::kNormal) + .ToLocal(&args[argc++])) { + return Nothing(); + } + if (code != nullptr && + !String::NewFromOneByte(env->isolate(), + reinterpret_cast(code), + v8::NewStringType::kNormal) + .ToLocal(&args[argc++])) { + return Nothing(); + } + } + + // MakeCallback() unneeded because emitWarning is internal code, it calls + // process.emit('warning', ...), but does so on the nextTick. + if (emit_warning.As()->Call(env->context(), + process, + argc, + args).IsEmpty()) { + return Nothing(); + } + return Just(true); +} + + // Call process.emitWarning(str), fmt is a snprintf() format string -void ProcessEmitWarning(Environment* env, const char* fmt, ...) { +Maybe ProcessEmitWarning(Environment* env, const char* fmt, ...) { char warning[1024]; va_list ap; @@ -2468,24 +2528,20 @@ void ProcessEmitWarning(Environment* env, const char* fmt, ...) { vsnprintf(warning, sizeof(warning), fmt, ap); va_end(ap); - HandleScope handle_scope(env->isolate()); - Context::Scope context_scope(env->context()); - - Local process = env->process_object(); - MaybeLocal emit_warning = process->Get(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "emitWarning")); - Local arg = node::OneByteString(env->isolate(), warning); - - Local f; + return ProcessEmitWarningGeneric(env, warning); +} - if (!emit_warning.ToLocal(&f)) return; - if (!f->IsFunction()) return; - // MakeCallback() unneeded, because emitWarning is internal code, it calls - // process.emit('warning', ..), but does so on the nextTick. - f.As()->Call(process, 1, &arg); +Maybe ProcessEmitDeprecationWarning(Environment* env, + const char* warning, + const char* deprecation_code) { + return ProcessEmitWarningGeneric(env, + warning, + "DeprecationWarning", + deprecation_code); } + static bool PullFromCache(Environment* env, const FunctionCallbackInfo& args, Local module, diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 6e9d2255cdd..614c1067c6c 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -25,6 +25,7 @@ #include "node_crypto.h" #include "node_crypto_bio.h" #include "node_crypto_groups.h" +#include "node_crypto_clienthello-inl.h" #include "node_mutex.h" #include "tls_wrap.h" // TLSWrap @@ -1062,8 +1063,12 @@ void SecureContext::AddRootCerts(const FunctionCallbackInfo& args) { root_cert_store, extra_root_certs_file.c_str()); if (err) { + // We do not call back into JS after this line anyway, so ignoring + // the return value of ProcessEmitWarning does not affect how a + // possible exception would be propagated. ProcessEmitWarning(sc->env(), - "Ignoring extra certs from `%s`, load failed: %s\n", + "Ignoring extra certs from `%s`, " + "load failed: %s\n", extra_root_certs_file.c_str(), ERR_error_string(err, nullptr)); } @@ -3618,7 +3623,10 @@ void CipherBase::Init(const char* cipher_type, int mode = EVP_CIPHER_CTX_mode(ctx_); if (encrypt && (mode == EVP_CIPH_CTR_MODE || mode == EVP_CIPH_GCM_MODE || mode == EVP_CIPH_CCM_MODE)) { - ProcessEmitWarning(env(), "Use Cipheriv for counter mode of %s", + // Ignore the return value (i.e. possible exception) because we are + // not calling back into JS anyway. + ProcessEmitWarning(env(), + "Use Cipheriv for counter mode of %s", cipher_type); } diff --git a/src/node_crypto.h b/src/node_crypto.h index 7d8c9032c65..636cbb99d4d 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -26,7 +26,7 @@ #include "node.h" // ClientHelloParser -#include "node_crypto_clienthello-inl.h" +#include "node_crypto_clienthello.h" #include "node_buffer.h" diff --git a/src/node_http2.cc b/src/node_http2.cc index 05e8d611f12..a0886205fde 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -995,9 +995,6 @@ inline void Http2Session::SetChunksSinceLastWrite(size_t n) { WriteWrap* Http2Session::AllocateSend() { HandleScope scope(env()->isolate()); - auto AfterWrite = [](WriteWrap* req, int status) { - req->Dispose(); - }; Local obj = env()->write_wrap_constructor_function() ->NewInstance(env()->context()).ToLocalChecked(); @@ -1007,7 +1004,7 @@ WriteWrap* Http2Session::AllocateSend() { session(), NGHTTP2_SETTINGS_MAX_FRAME_SIZE); // Max frame size + 9 bytes for the header - return WriteWrap::New(env(), obj, stream_, AfterWrite, size + 9); + return WriteWrap::New(env(), obj, stream_, size + 9); } void Http2Session::Send(WriteWrap* req, char* buf, size_t length) { diff --git a/src/node_http2.h b/src/node_http2.h index c869d9a5954..5a61e465a40 100644 --- a/src/node_http2.h +++ b/src/node_http2.h @@ -672,8 +672,7 @@ class Http2Stream : public AsyncWrap, return false; } - AsyncWrap* GetAsyncWrap() override { return static_cast(this); } - void* Cast() override { return reinterpret_cast(this); } + AsyncWrap* GetAsyncWrap() override { return this; } int DoWrite(WriteWrap* w, uv_buf_t* bufs, size_t count, uv_stream_t* send_handle) override; diff --git a/src/node_internals.h b/src/node_internals.h index 957df3b5192..a4e5af0d3c4 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -291,7 +291,10 @@ class FatalTryCatch : public v8::TryCatch { Environment* env_; }; -void ProcessEmitWarning(Environment* env, const char* fmt, ...); +v8::Maybe ProcessEmitWarning(Environment* env, const char* fmt, ...); +v8::Maybe ProcessEmitDeprecationWarning(Environment* env, + const char* warning, + const char* deprecation_code); void FillStatsArray(v8::Local fields_array, const uv_stat_t* s, diff --git a/src/node_stat_watcher.cc b/src/node_stat_watcher.cc index b8ef4281f67..00b43f6eb7c 100644 --- a/src/node_stat_watcher.cc +++ b/src/node_stat_watcher.cc @@ -111,9 +111,15 @@ void StatWatcher::Start(const FunctionCallbackInfo& args) { const bool persistent = args[1]->BooleanValue(); const uint32_t interval = args[2]->Uint32Value(); - if (!persistent) + if (uv_is_active(reinterpret_cast(wrap->watcher_))) + return; + // Safe, uv_ref/uv_unref are idempotent. + if (persistent) + uv_ref(reinterpret_cast(wrap->watcher_)); + else uv_unref(reinterpret_cast(wrap->watcher_)); uv_fs_poll_start(wrap->watcher_, Callback, *path, interval); + wrap->ClearWeak(); } diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h index 807e138ef7b..29739011c6a 100644 --- a/src/stream_base-inl.h +++ b/src/stream_base-inl.h @@ -143,15 +143,19 @@ void StreamBase::JSMethod(const FunctionCallbackInfo& args) { } +inline void ShutdownWrap::OnDone(int status) { + stream()->AfterShutdown(this, status); +} + + WriteWrap* WriteWrap::New(Environment* env, Local obj, StreamBase* wrap, - DoneCb cb, size_t extra) { size_t storage_size = ROUND_UP(sizeof(WriteWrap), kAlignSize) + extra; char* storage = new char[storage_size]; - return new(storage) WriteWrap(env, obj, wrap, cb, storage_size); + return new(storage) WriteWrap(env, obj, wrap, storage_size); } @@ -171,6 +175,10 @@ size_t WriteWrap::ExtraSize() const { return storage_size_ - ROUND_UP(sizeof(*this), kAlignSize); } +inline void WriteWrap::OnDone(int status) { + stream()->AfterWrite(this, status); +} + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/stream_base.cc b/src/stream_base.cc index 922b277c583..46d2ff5faf0 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -55,8 +55,7 @@ int StreamBase::Shutdown(const FunctionCallbackInfo& args) { env->set_init_trigger_async_id(wrap->get_async_id()); ShutdownWrap* req_wrap = new ShutdownWrap(env, req_wrap_obj, - this, - AfterShutdown); + this); int err = DoShutdown(req_wrap); if (err) @@ -66,7 +65,6 @@ int StreamBase::Shutdown(const FunctionCallbackInfo& args) { void StreamBase::AfterShutdown(ShutdownWrap* req_wrap, int status) { - StreamBase* wrap = req_wrap->wrap(); Environment* env = req_wrap->env(); // The wrap and request objects should still be there. @@ -78,7 +76,7 @@ void StreamBase::AfterShutdown(ShutdownWrap* req_wrap, int status) { Local req_wrap_obj = req_wrap->object(); Local argv[3] = { Integer::New(env->isolate(), status), - wrap->GetObject(), + GetObject(), req_wrap_obj }; @@ -158,7 +156,7 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { wrap = GetAsyncWrap(); CHECK_NE(wrap, nullptr); env->set_init_trigger_async_id(wrap->get_async_id()); - req_wrap = WriteWrap::New(env, req_wrap_obj, this, AfterWrite, storage_size); + req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size); offset = 0; if (!all_buffers) { @@ -248,7 +246,7 @@ int StreamBase::WriteBuffer(const FunctionCallbackInfo& args) { if (wrap != nullptr) env->set_init_trigger_async_id(wrap->get_async_id()); // Allocate, or write rest - req_wrap = WriteWrap::New(env, req_wrap_obj, this, AfterWrite); + req_wrap = WriteWrap::New(env, req_wrap_obj, this); err = DoWrite(req_wrap, bufs, count, nullptr); req_wrap_obj->Set(env->async(), True(env->isolate())); @@ -332,7 +330,7 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { wrap = GetAsyncWrap(); if (wrap != nullptr) env->set_init_trigger_async_id(wrap->get_async_id()); - req_wrap = WriteWrap::New(env, req_wrap_obj, this, AfterWrite, storage_size); + req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size); data = req_wrap->Extra(); @@ -393,7 +391,6 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { void StreamBase::AfterWrite(WriteWrap* req_wrap, int status) { - StreamBase* wrap = req_wrap->wrap(); Environment* env = req_wrap->env(); HandleScope handle_scope(env->isolate()); @@ -405,19 +402,19 @@ void StreamBase::AfterWrite(WriteWrap* req_wrap, int status) { // Unref handle property Local req_wrap_obj = req_wrap->object(); req_wrap_obj->Delete(env->context(), env->handle_string()).FromJust(); - wrap->OnAfterWrite(req_wrap); + OnAfterWrite(req_wrap, status); Local argv[] = { Integer::New(env->isolate(), status), - wrap->GetObject(), + GetObject(), req_wrap_obj, Undefined(env->isolate()) }; - const char* msg = wrap->Error(); + const char* msg = Error(); if (msg != nullptr) { argv[3] = OneByteString(env->isolate(), msg); - wrap->ClearError(); + ClearError(); } if (req_wrap_obj->Has(env->context(), env->oncomplete_string()).FromJust()) diff --git a/src/stream_base.h b/src/stream_base.h index 87c7b0bc63e..5bf5f013947 100644 --- a/src/stream_base.h +++ b/src/stream_base.h @@ -16,27 +16,27 @@ namespace node { // Forward declarations class StreamBase; -template +template class StreamReq { public: - typedef void (*DoneCb)(Req* req, int status); - - explicit StreamReq(DoneCb cb) : cb_(cb) { + explicit StreamReq(StreamBase* stream) : stream_(stream) { } inline void Done(int status, const char* error_str = nullptr) { - Req* req = static_cast(this); + Base* req = static_cast(this); Environment* env = req->env(); if (error_str != nullptr) { req->object()->Set(env->error_string(), OneByteString(env->isolate(), error_str)); } - cb_(req, status); + req->OnDone(status); } + inline StreamBase* stream() const { return stream_; } + private: - DoneCb cb_; + StreamBase* const stream_; }; class ShutdownWrap : public ReqWrap, @@ -44,11 +44,9 @@ class ShutdownWrap : public ReqWrap, public: ShutdownWrap(Environment* env, v8::Local req_wrap_obj, - StreamBase* wrap, - DoneCb cb) + StreamBase* stream) : ReqWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_SHUTDOWNWRAP), - StreamReq(cb), - wrap_(wrap) { + StreamReq(stream) { Wrap(req_wrap_obj, this); } @@ -60,27 +58,22 @@ class ShutdownWrap : public ReqWrap, return ContainerOf(&ShutdownWrap::req_, req); } - inline StreamBase* wrap() const { return wrap_; } size_t self_size() const override { return sizeof(*this); } - private: - StreamBase* const wrap_; + inline void OnDone(int status); // Just calls stream()->AfterShutdown() }; -class WriteWrap: public ReqWrap, - public StreamReq { +class WriteWrap : public ReqWrap, + public StreamReq { public: static inline WriteWrap* New(Environment* env, v8::Local obj, - StreamBase* wrap, - DoneCb cb, + StreamBase* stream, size_t extra = 0); inline void Dispose(); inline char* Extra(size_t offset = 0); inline size_t ExtraSize() const; - inline StreamBase* wrap() const { return wrap_; } - size_t self_size() const override { return storage_size_; } static WriteWrap* from_req(uv_write_t* req) { @@ -91,24 +84,22 @@ class WriteWrap: public ReqWrap, WriteWrap(Environment* env, v8::Local obj, - StreamBase* wrap, - DoneCb cb) + StreamBase* stream) : ReqWrap(env, obj, AsyncWrap::PROVIDER_WRITEWRAP), - StreamReq(cb), - wrap_(wrap), + StreamReq(stream), storage_size_(0) { Wrap(obj, this); } + inline void OnDone(int status); // Just calls stream()->AfterWrite() + protected: WriteWrap(Environment* env, v8::Local obj, - StreamBase* wrap, - DoneCb cb, + StreamBase* stream, size_t storage_size) : ReqWrap(env, obj, AsyncWrap::PROVIDER_WRITEWRAP), - StreamReq(cb), - wrap_(wrap), + StreamReq(stream), storage_size_(storage_size) { Wrap(obj, this); } @@ -129,7 +120,6 @@ class WriteWrap: public ReqWrap, // WriteWrap. Ensure this never happens. void operator delete(void* ptr) { UNREACHABLE(); } - StreamBase* const wrap_; const size_t storage_size_; }; @@ -151,7 +141,7 @@ class StreamResource { void* ctx; }; - typedef void (*AfterWriteCb)(WriteWrap* w, void* ctx); + typedef void (*AfterWriteCb)(WriteWrap* w, int status, void* ctx); typedef void (*AllocCb)(size_t size, uv_buf_t* buf, void* ctx); typedef void (*ReadCb)(ssize_t nread, const uv_buf_t* buf, @@ -176,9 +166,9 @@ class StreamResource { virtual void ClearError(); // Events - inline void OnAfterWrite(WriteWrap* w) { + inline void OnAfterWrite(WriteWrap* w, int status) { if (!after_write_cb_.is_empty()) - after_write_cb_.fn(w, after_write_cb_.ctx); + after_write_cb_.fn(w, status, after_write_cb_.ctx); } inline void OnAlloc(size_t size, uv_buf_t* buf) { @@ -208,14 +198,12 @@ class StreamResource { inline Callback read_cb() { return read_cb_; } inline Callback destruct_cb() { return destruct_cb_; } - private: + protected: Callback after_write_cb_; Callback alloc_cb_; Callback read_cb_; Callback destruct_cb_; uint64_t bytes_read_; - - friend class StreamBase; }; class StreamBase : public StreamResource { @@ -231,7 +219,6 @@ class StreamBase : public StreamResource { v8::Local target, int flags = kFlagNone); - virtual void* Cast() = 0; virtual bool IsAlive() = 0; virtual bool IsClosing() = 0; virtual bool IsIPCPipe(); @@ -250,13 +237,14 @@ class StreamBase : public StreamResource { consumed_ = false; } - template - inline Outer* Cast() { return static_cast(Cast()); } - void EmitData(ssize_t nread, v8::Local buf, v8::Local handle); + // These are called by the respective {Write,Shutdown}Wrap class. + virtual void AfterShutdown(ShutdownWrap* req, int status); + virtual void AfterWrite(WriteWrap* req, int status); + protected: explicit StreamBase(Environment* env) : env_(env), consumed_(false) { } @@ -267,10 +255,6 @@ class StreamBase : public StreamResource { virtual AsyncWrap* GetAsyncWrap() = 0; virtual v8::Local GetObject(); - // Libuv callbacks - static void AfterShutdown(ShutdownWrap* req, int status); - static void AfterWrite(WriteWrap* req, int status); - // JS Methods int ReadStart(const v8::FunctionCallbackInfo& args); int ReadStop(const v8::FunctionCallbackInfo& args); diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index a737ed67b02..3cce3b151cf 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -91,7 +91,6 @@ LibuvStreamWrap::LibuvStreamWrap(Environment* env, provider), StreamBase(env), stream_(stream) { - set_after_write_cb({ OnAfterWriteImpl, this }); set_alloc_cb({ OnAllocImpl, this }); set_read_cb({ OnReadImpl, this }); } @@ -126,11 +125,6 @@ bool LibuvStreamWrap::IsClosing() { } -void* LibuvStreamWrap::Cast() { - return reinterpret_cast(this); -} - - AsyncWrap* LibuvStreamWrap::GetAsyncWrap() { return static_cast(this); } @@ -298,13 +292,13 @@ void LibuvStreamWrap::SetBlocking(const FunctionCallbackInfo& args) { int LibuvStreamWrap::DoShutdown(ShutdownWrap* req_wrap) { int err; - err = uv_shutdown(req_wrap->req(), stream(), AfterShutdown); + err = uv_shutdown(req_wrap->req(), stream(), AfterUvShutdown); req_wrap->Dispatched(); return err; } -void LibuvStreamWrap::AfterShutdown(uv_shutdown_t* req, int status) { +void LibuvStreamWrap::AfterUvShutdown(uv_shutdown_t* req, int status) { ShutdownWrap* req_wrap = ShutdownWrap::from_req(req); CHECK_NE(req_wrap, nullptr); HandleScope scope(req_wrap->env()->isolate()); @@ -359,9 +353,9 @@ int LibuvStreamWrap::DoWrite(WriteWrap* w, uv_stream_t* send_handle) { int r; if (send_handle == nullptr) { - r = uv_write(w->req(), stream(), bufs, count, AfterWrite); + r = uv_write(w->req(), stream(), bufs, count, AfterUvWrite); } else { - r = uv_write2(w->req(), stream(), bufs, count, send_handle, AfterWrite); + r = uv_write2(w->req(), stream(), bufs, count, send_handle, AfterUvWrite); } if (!r) { @@ -382,7 +376,7 @@ int LibuvStreamWrap::DoWrite(WriteWrap* w, } -void LibuvStreamWrap::AfterWrite(uv_write_t* req, int status) { +void LibuvStreamWrap::AfterUvWrite(uv_write_t* req, int status) { WriteWrap* req_wrap = WriteWrap::from_req(req); CHECK_NE(req_wrap, nullptr); HandleScope scope(req_wrap->env()->isolate()); @@ -391,9 +385,9 @@ void LibuvStreamWrap::AfterWrite(uv_write_t* req, int status) { } -void LibuvStreamWrap::OnAfterWriteImpl(WriteWrap* w, void* ctx) { - LibuvStreamWrap* wrap = static_cast(ctx); - wrap->UpdateWriteQueueSize(); +void LibuvStreamWrap::AfterWrite(WriteWrap* w, int status) { + StreamBase::AfterWrite(w, status); + UpdateWriteQueueSize(); } } // namespace node diff --git a/src/stream_wrap.h b/src/stream_wrap.h index 43df504e81b..414bad393fa 100644 --- a/src/stream_wrap.h +++ b/src/stream_wrap.h @@ -40,7 +40,6 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase { v8::Local context); int GetFD() override; - void* Cast() override; bool IsAlive() override; bool IsClosing() override; bool IsIPCPipe() override; @@ -103,17 +102,18 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase { static void OnRead(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf); - static void AfterWrite(uv_write_t* req, int status); - static void AfterShutdown(uv_shutdown_t* req, int status); + static void AfterUvWrite(uv_write_t* req, int status); + static void AfterUvShutdown(uv_shutdown_t* req, int status); // Resource interface implementation - static void OnAfterWriteImpl(WriteWrap* w, void* ctx); static void OnAllocImpl(size_t size, uv_buf_t* buf, void* ctx); static void OnReadImpl(ssize_t nread, const uv_buf_t* buf, uv_handle_type pending, void* ctx); + void AfterWrite(WriteWrap* req_wrap, int status) override; + uv_stream_t* const stream_; }; diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index 3b899ea12d5..616771b389c 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -101,6 +101,19 @@ TLSWrap::~TLSWrap() { #ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB sni_context_.Reset(); #endif // SSL_CTRL_SET_TLSEXT_SERVERNAME_CB + + // See test/parallel/test-tls-transport-destroy-after-own-gc.js: + // If this TLSWrap is garbage collected, we cannot allow callbacks to be + // called on this stream. + + if (stream_ == nullptr) + return; + stream_->set_destruct_cb({ nullptr, nullptr }); + stream_->set_after_write_cb({ nullptr, nullptr }); + stream_->set_alloc_cb({ nullptr, nullptr }); + stream_->set_read_cb({ nullptr, nullptr }); + stream_->set_destruct_cb({ nullptr, nullptr }); + stream_->Unconsume(); } @@ -315,8 +328,7 @@ void TLSWrap::EncOut() { ->NewInstance(env()->context()).ToLocalChecked(); WriteWrap* write_req = WriteWrap::New(env(), req_wrap_obj, - this, - EncOutCb); + stream_); uv_buf_t buf[arraysize(data)]; for (size_t i = 0; i < count; i++) @@ -333,34 +345,31 @@ void TLSWrap::EncOut() { } -void TLSWrap::EncOutCb(WriteWrap* req_wrap, int status) { - TLSWrap* wrap = req_wrap->wrap()->Cast(); - req_wrap->Dispose(); - +void TLSWrap::EncOutAfterWrite(WriteWrap* req_wrap, int status) { // We should not be getting here after `DestroySSL`, because all queued writes // must be invoked with UV_ECANCELED - CHECK_NE(wrap->ssl_, nullptr); + CHECK_NE(ssl_, nullptr); // Handle error if (status) { // Ignore errors after shutdown - if (wrap->shutdown_) + if (shutdown_) return; // Notify about error - wrap->InvokeQueued(status); + InvokeQueued(status); return; } // Commit - crypto::NodeBIO::FromBIO(wrap->enc_out_)->Read(nullptr, wrap->write_size_); + crypto::NodeBIO::FromBIO(enc_out_)->Read(nullptr, write_size_); // Ensure that the progress will be made and `InvokeQueued` will be called. - wrap->ClearIn(); + ClearIn(); // Try writing more data - wrap->write_size_ = 0; - wrap->EncOut(); + write_size_ = 0; + EncOut(); } @@ -521,11 +530,6 @@ bool TLSWrap::ClearIn() { } -void* TLSWrap::Cast() { - return reinterpret_cast(this); -} - - AsyncWrap* TLSWrap::GetAsyncWrap() { return static_cast(this); } @@ -564,12 +568,16 @@ uint32_t TLSWrap::UpdateWriteQueueSize(uint32_t write_queue_size) { int TLSWrap::ReadStart() { - return stream_->ReadStart(); + if (stream_ != nullptr) + return stream_->ReadStart(); + return 0; } int TLSWrap::ReadStop() { - return stream_->ReadStop(); + if (stream_ != nullptr) + return stream_->ReadStop(); + return 0; } @@ -664,9 +672,9 @@ int TLSWrap::DoWrite(WriteWrap* w, } -void TLSWrap::OnAfterWriteImpl(WriteWrap* w, void* ctx) { +void TLSWrap::OnAfterWriteImpl(WriteWrap* w, int status, void* ctx) { TLSWrap* wrap = static_cast(ctx); - wrap->UpdateWriteQueueSize(); + wrap->EncOutAfterWrite(w, status); } diff --git a/src/tls_wrap.h b/src/tls_wrap.h index b782e7c3c23..87eac757793 100644 --- a/src/tls_wrap.h +++ b/src/tls_wrap.h @@ -56,7 +56,6 @@ class TLSWrap : public AsyncWrap, v8::Local unused, v8::Local context); - void* Cast() override; int GetFD() override; bool IsAlive() override; bool IsClosing() override; @@ -112,7 +111,7 @@ class TLSWrap : public AsyncWrap, static void SSLInfoCallback(const SSL* ssl_, int where, int ret); void InitSSL(); void EncOut(); - static void EncOutCb(WriteWrap* req_wrap, int status); + void EncOutAfterWrite(WriteWrap* req_wrap, int status); bool ClearIn(); void ClearOut(); void MakePending(); @@ -135,7 +134,7 @@ class TLSWrap : public AsyncWrap, uint32_t UpdateWriteQueueSize(uint32_t write_queue_size = 0); // Resource implementation - static void OnAfterWriteImpl(WriteWrap* w, void* ctx); + static void OnAfterWriteImpl(WriteWrap* w, int status, void* ctx); static void OnAllocImpl(size_t size, uv_buf_t* buf, void* ctx); static void OnReadImpl(ssize_t nread, const uv_buf_t* buf, diff --git a/test/addons-napi/test_promise/test.js b/test/addons-napi/test_promise/test.js index b43ecd87363..6dc51b3fa55 100644 --- a/test/addons-napi/test_promise/test.js +++ b/test/addons-napi/test_promise/test.js @@ -7,6 +7,8 @@ const common = require('../../common'); const assert = require('assert'); const test_promise = require(`./build/${common.buildType}/test_promise`); +common.crashOnUnhandledRejection(); + // A resolution { const expected_result = 42; @@ -44,7 +46,14 @@ const test_promise = require(`./build/${common.buildType}/test_promise`); } assert.strictEqual(test_promise.isPromise(test_promise.createPromise()), true); -assert.strictEqual(test_promise.isPromise(Promise.reject(-1)), true); + +const rejectPromise = Promise.reject(-1); +const expected_reason = -1; +assert.strictEqual(test_promise.isPromise(rejectPromise), true); +rejectPromise.catch((reason) => { + assert.strictEqual(reason, expected_reason); +}); + assert.strictEqual(test_promise.isPromise(2.4), false); assert.strictEqual(test_promise.isPromise('I promise!'), false); assert.strictEqual(test_promise.isPromise(undefined), false); diff --git a/test/common/README.md b/test/common/README.md index 52e8e2e59c4..b87976f1243 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -124,6 +124,13 @@ Checks if `pathname` exists Returns an instance of all possible `ArrayBufferView`s of the provided Buffer. +### getBufferSources(buf) +* `buf` [<Buffer>] +* return [<BufferSource[]>] + +Returns an instance of all possible `BufferSource`s of the provided Buffer, +consisting of all `ArrayBufferView` and an `ArrayBuffer`. + ### getCallSite(func) * `func` [<Function>] * return [<String>] diff --git a/test/common/index.js b/test/common/index.js index 680ca3ca714..32eeb7ff825 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -840,6 +840,10 @@ exports.getArrayBufferViews = function getArrayBufferViews(buf) { return out; }; +exports.getBufferSources = function getBufferSources(buf) { + return [...exports.getArrayBufferViews(buf), new Uint8Array(buf).buffer]; +}; + // Crash the process on unhandled rejections. exports.crashOnUnhandledRejection = function() { process.on('unhandledRejection', diff --git a/test/parallel/test-domain-ee-error-listener.js b/test/parallel/test-domain-ee-error-listener.js new file mode 100644 index 00000000000..69041c7523b --- /dev/null +++ b/test/parallel/test-domain-ee-error-listener.js @@ -0,0 +1,20 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const domain = require('domain').create(); +const EventEmitter = require('events'); + +domain.on('error', common.mustNotCall()); + +const ee = new EventEmitter(); + +const plainObject = { justAn: 'object' }; +ee.once('error', common.mustCall((err) => { + assert.deepStrictEqual(err, plainObject); +})); +ee.emit('error', plainObject); + +const err = new Error('test error'); +ee.once('error', common.expectsError(err)); +ee.emit('error', err); diff --git a/test/parallel/test-eslint-lowercase-name-for-primitive.js b/test/parallel/test-eslint-lowercase-name-for-primitive.js new file mode 100644 index 00000000000..f4a2ac7c3b8 --- /dev/null +++ b/test/parallel/test-eslint-lowercase-name-for-primitive.js @@ -0,0 +1,41 @@ +'use strict'; + +require('../common'); + +const RuleTester = require('../../tools/eslint').RuleTester; +const rule = require('../../tools/eslint-rules/lowercase-name-for-primitive'); + +const valid = [ + 'string', + 'number', + 'boolean', + 'null', + 'undefined' +]; + +new RuleTester().run('lowercase-name-for-primitive', rule, { + valid: [ + 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", ["string", "number"])', + ...valid.map((name) => + `new errors.TypeError("ERR_INVALID_ARG_TYPE", "name", "${name}")` + ) + ], + invalid: [ + { + code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "Number")', + errors: [{ message: 'primitive should use lowercase: Number' }] + }, + { + code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "STRING")', + errors: [{ message: 'primitive should use lowercase: STRING' }] + }, + { + code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a",' + + '["String", "Number"])', + errors: [ + { message: 'primitive should use lowercase: String' }, + { message: 'primitive should use lowercase: Number' } + ] + } + ] +}); diff --git a/test/parallel/test-fs-watch.js b/test/parallel/test-fs-watch.js index bf5fc9a8e1e..a82535d5378 100644 --- a/test/parallel/test-fs-watch.js +++ b/test/parallel/test-fs-watch.js @@ -64,6 +64,8 @@ for (const testCase of cases) { assert.strictEqual(eventType, 'change'); assert.strictEqual(argFilename, testCase.fileName); + watcher.start(); // should not crash + // end of test case watcher.close(); })); diff --git a/test/parallel/test-fs-watchfile.js b/test/parallel/test-fs-watchfile.js index fe0d89c42e0..163eac5ae90 100644 --- a/test/parallel/test-fs-watchfile.js +++ b/test/parallel/test-fs-watchfile.js @@ -52,27 +52,30 @@ common.refreshTmpDir(); // time, the callback should be invoked again with proper values in stat object let fileExists = false; -fs.watchFile(enoentFile, { interval: 0 }, common.mustCall(function(curr, prev) { - if (!fileExists) { - // If the file does not exist, all the fields should be zero and the date - // fields should be UNIX EPOCH time - assert.deepStrictEqual(curr, expectedStatObject); - assert.deepStrictEqual(prev, expectedStatObject); - // Create the file now, so that the callback will be called back once the - // event loop notices it. - fs.closeSync(fs.openSync(enoentFile, 'w')); - fileExists = true; - } else { - // If the ino (inode) value is greater than zero, it means that the file is - // present in the filesystem and it has a valid inode number. - assert(curr.ino > 0); - // As the file just got created, previous ino value should be lesser than - // or equal to zero (non-existent file). - assert(prev.ino <= 0); - // Stop watching the file - fs.unwatchFile(enoentFile); - } -}, 2)); +const watcher = + fs.watchFile(enoentFile, { interval: 0 }, common.mustCall((curr, prev) => { + if (!fileExists) { + // If the file does not exist, all the fields should be zero and the date + // fields should be UNIX EPOCH time + assert.deepStrictEqual(curr, expectedStatObject); + assert.deepStrictEqual(prev, expectedStatObject); + // Create the file now, so that the callback will be called back once the + // event loop notices it. + fs.closeSync(fs.openSync(enoentFile, 'w')); + fileExists = true; + } else { + // If the ino (inode) value is greater than zero, it means that the file + // is present in the filesystem and it has a valid inode number. + assert(curr.ino > 0); + // As the file just got created, previous ino value should be lesser than + // or equal to zero (non-existent file). + assert(prev.ino <= 0); + // Stop watching the file + fs.unwatchFile(enoentFile); + } + }, 2)); + +watcher.start(); // should not crash // Watch events should callback with a filename on supported systems. // Omitting AIX. It works but not reliably. diff --git a/test/parallel/test-process-emit-warning-from-native.js b/test/parallel/test-process-emit-warning-from-native.js new file mode 100644 index 00000000000..d50ea3962bd --- /dev/null +++ b/test/parallel/test-process-emit-warning-from-native.js @@ -0,0 +1,46 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +if (!common.hasCrypto) + common.skip('missing crypto'); +if (common.hasFipsCrypto) + common.skip('crypto.createCipher() is not supported in FIPS mode'); + +const crypto = require('crypto'); +const key = '0123456789'; + +{ + common.expectWarning('Warning', + 'Use Cipheriv for counter mode of aes-256-gcm'); + + // Emits regular warning expected by expectWarning() + crypto.createCipher('aes-256-gcm', key); +} + +const realEmitWarning = process.emitWarning; + +{ + // It's a good idea to make this overridable from userland. + process.emitWarning = () => { throw new Error('foo'); }; + assert.throws(() => { + crypto.createCipher('aes-256-gcm', key); + }, /^Error: foo$/); +} + +{ + Object.defineProperty(process, 'emitWarning', { + get() { throw new Error('bar'); }, + configurable: true + }); + assert.throws(() => { + crypto.createCipher('aes-256-gcm', key); + }, /^Error: bar$/); +} + +// Reset back to default after the test. +Object.defineProperty(process, 'emitWarning', { + value: realEmitWarning, + configurable: true, + writable: true +}); diff --git a/test/parallel/test-tls-env-bad-extra-ca.js b/test/parallel/test-tls-env-bad-extra-ca.js index f7e9341ad00..e141de34a9f 100644 --- a/test/parallel/test-tls-env-bad-extra-ca.js +++ b/test/parallel/test-tls-env-bad-extra-ca.js @@ -18,7 +18,7 @@ if (process.env.CHILD) { const env = Object.assign({}, process.env, { CHILD: 'yes', - NODE_EXTRA_CA_CERTS: `${fixtures.fixturesDir}/no-such-file-exists`, + NODE_EXTRA_CA_CERTS: `${fixtures.fixturesDir}/no-such-file-exists-🐢`, }); const opts = { @@ -32,8 +32,12 @@ fork(__filename, opts) assert.strictEqual(status, 0, 'client did not succeed in connecting'); })) .on('close', common.mustCall(function() { - const re = /Warning: Ignoring extra certs from.*no-such-file-exists.* load failed:.*No such file or directory/; - assert(re.test(stderr), stderr); + // TODO(addaleax): Make `SafeGetenv` work like `process.env` + // encoding-wise + if (!common.isWindows) { + const re = /Warning: Ignoring extra certs from.*no-such-file-exists-🐢.* load failed:.*No such file or directory/; + assert(re.test(stderr), stderr); + } })) .stderr.setEncoding('utf8').on('data', function(str) { stderr += str; diff --git a/test/parallel/test-tls-transport-destroy-after-own-gc.js b/test/parallel/test-tls-transport-destroy-after-own-gc.js new file mode 100644 index 00000000000..46f630982af --- /dev/null +++ b/test/parallel/test-tls-transport-destroy-after-own-gc.js @@ -0,0 +1,30 @@ +// Flags: --expose-gc +'use strict'; + +// Regression test for https://github.com/nodejs/node/issues/17475 +// Unfortunately, this tests only "works" reliably when checked with valgrind or +// a similar tool. + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const { TLSSocket } = require('tls'); +const makeDuplexPair = require('../common/duplexpair'); + +let { clientSide } = makeDuplexPair(); + +let clientTLS = new TLSSocket(clientSide, { isServer: false }); +// eslint-disable-next-line no-unused-vars +let clientTLSHandle = clientTLS._handle; + +setImmediate(() => { + clientTLS = null; + global.gc(); + clientTLSHandle = null; + global.gc(); + setImmediate(() => { + clientSide = null; + global.gc(); + }); +}); diff --git a/test/parallel/test-whatwg-url-searchparams-inspect.js b/test/parallel/test-whatwg-url-searchparams-inspect.js index 163fa185ede..f2493cc6cff 100644 --- a/test/parallel/test-whatwg-url-searchparams-inspect.js +++ b/test/parallel/test-whatwg-url-searchparams-inspect.js @@ -10,20 +10,20 @@ const sp = new URLSearchParams('?a=a&b=b&b=c'); assert.strictEqual(util.inspect(sp), "URLSearchParams { 'a' => 'a', 'b' => 'b', 'b' => 'c' }"); assert.strictEqual(util.inspect(sp.keys()), - "URLSearchParamsIterator { 'a', 'b', 'b' }"); + "URLSearchParams Iterator { 'a', 'b', 'b' }"); assert.strictEqual(util.inspect(sp.values()), - "URLSearchParamsIterator { 'a', 'b', 'c' }"); + "URLSearchParams Iterator { 'a', 'b', 'c' }"); assert.strictEqual(util.inspect(sp.keys(), { breakLength: 1 }), - "URLSearchParamsIterator {\n 'a',\n 'b',\n 'b' }"); + "URLSearchParams Iterator {\n 'a',\n 'b',\n 'b' }"); const iterator = sp.entries(); assert.strictEqual(util.inspect(iterator), - "URLSearchParamsIterator { [ 'a', 'a' ], [ 'b', 'b' ], " + + "URLSearchParams Iterator { [ 'a', 'a' ], [ 'b', 'b' ], " + "[ 'b', 'c' ] }"); iterator.next(); assert.strictEqual(util.inspect(iterator), - "URLSearchParamsIterator { [ 'b', 'b' ], [ 'b', 'c' ] }"); + "URLSearchParams Iterator { [ 'b', 'b' ], [ 'b', 'c' ] }"); iterator.next(); iterator.next(); assert.strictEqual(util.inspect(iterator), - 'URLSearchParamsIterator { }'); + 'URLSearchParams Iterator { }'); diff --git a/test/parallel/test-whatwg-url-tostringtag.js b/test/parallel/test-whatwg-url-tostringtag.js index 689056fd238..c352503fa09 100644 --- a/test/parallel/test-whatwg-url-tostringtag.js +++ b/test/parallel/test-whatwg-url-tostringtag.js @@ -14,13 +14,13 @@ const spIterator = sp.entries(); const test = [ [url, 'URL'], [sp, 'URLSearchParams'], - [spIterator, 'URLSearchParamsIterator'], + [spIterator, 'URLSearchParams Iterator'], // Web IDL spec says we have to return 'URLPrototype', but it is too // expensive to implement; therefore, use Chrome's behavior for now, until // spec is changed. [Object.getPrototypeOf(url), 'URL'], [Object.getPrototypeOf(sp), 'URLSearchParams'], - [Object.getPrototypeOf(spIterator), 'URLSearchParamsIterator'], + [Object.getPrototypeOf(spIterator), 'URLSearchParams Iterator'], ]; test.forEach(([obj, expected]) => { diff --git a/test/parallel/test-zlib-convenience-methods.js b/test/parallel/test-zlib-convenience-methods.js index 5c1f7395062..1cc393914a9 100644 --- a/test/parallel/test-zlib-convenience-methods.js +++ b/test/parallel/test-zlib-convenience-methods.js @@ -43,7 +43,7 @@ const optsInfo = { for (const [type, expect] of [ ['string', expectStr], ['Buffer', expectBuf], - ...common.getArrayBufferViews(expectBuf).map((obj) => + ...common.getBufferSources(expectBuf).map((obj) => [obj[Symbol.toStringTag], obj] ) ]) { diff --git a/test/parallel/test-zlib-dictionary.js b/test/parallel/test-zlib-dictionary.js index 1662e63bca1..b7f6a138555 100644 --- a/test/parallel/test-zlib-dictionary.js +++ b/test/parallel/test-zlib-dictionary.js @@ -167,7 +167,7 @@ function deflateRawResetDictionaryTest(spdyDict) { }); } -for (const dict of [spdyDict, ...common.getArrayBufferViews(spdyDict)]) { +for (const dict of [spdyDict, ...common.getBufferSources(spdyDict)]) { basicDictionaryTest(dict); deflateResetDictionaryTest(dict); rawDictionaryTest(dict); diff --git a/test/parallel/test-zlib-not-string-or-buffer.js b/test/parallel/test-zlib-not-string-or-buffer.js index 94db59d77f0..489bc07f5d0 100644 --- a/test/parallel/test-zlib-not-string-or-buffer.js +++ b/test/parallel/test-zlib-not-string-or-buffer.js @@ -13,7 +13,7 @@ const zlib = require('zlib'); code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "buffer" argument must be one of type string, Buffer, ' + - 'TypedArray, or DataView' + 'TypedArray, DataView, or ArrayBuffer' } ); }); diff --git a/test/sequential/test-child-process-pass-fd.js b/test/sequential/test-child-process-pass-fd.js index 73e469cdede..98832c57a3d 100644 --- a/test/sequential/test-child-process-pass-fd.js +++ b/test/sequential/test-child-process-pass-fd.js @@ -18,26 +18,42 @@ const { fork } = require('child_process'); const net = require('net'); const N = 80; +let messageCallbackCount = 0; -if (process.argv[2] !== 'child') { - for (let i = 0; i < N; ++i) { - const worker = fork(__filename, ['child']); - worker.once('message', common.mustCall((msg, handle) => { - assert.strictEqual(msg, 'handle'); - assert.ok(handle); - worker.send('got'); - - let recvData = ''; - handle.on('data', common.mustCall((data) => { - recvData += data; - })); +function forkWorker() { + const messageCallback = (msg, handle) => { + messageCallbackCount++; + assert.strictEqual(msg, 'handle'); + assert.ok(handle); + worker.send('got'); - handle.on('end', () => { - assert.strictEqual(recvData, 'hello'); - worker.kill(); - }); + let recvData = ''; + handle.on('data', common.mustCall((data) => { + recvData += data; })); + + handle.on('end', () => { + assert.strictEqual(recvData, 'hello'); + worker.kill(); + }); + }; + + const worker = fork(__filename, ['child']); + worker.on('error', (err) => { + if (/\bEAGAIN\b/.test(err.message)) { + forkWorker(); + return; + } + throw err; + }); + worker.once('message', messageCallback); +} + +if (process.argv[2] !== 'child') { + for (let i = 0; i < N; ++i) { + forkWorker(); } + process.on('exit', () => { assert.strictEqual(messageCallbackCount, N); }); } else { let socket; let cbcalls = 0; diff --git a/test/sequential/test-https-keep-alive-large-write.js b/test/sequential/test-https-keep-alive-large-write.js index 88468dc03fc..5048f4f9519 100644 --- a/test/sequential/test-https-keep-alive-large-write.js +++ b/test/sequential/test-https-keep-alive-large-write.js @@ -41,7 +41,9 @@ const server = https.createServer({ }); serverConnectionHandle = res.socket._handle; - res.write(content); + res.write(content, () => { + assert.strictEqual(serverConnectionHandle.writeQueueSize, 0); + }); res.end(); })); server.setTimeout(serverTimeout); diff --git a/tools/eslint-rules/lowercase-name-for-primitive.js b/tools/eslint-rules/lowercase-name-for-primitive.js new file mode 100644 index 00000000000..bdf10328f3f --- /dev/null +++ b/tools/eslint-rules/lowercase-name-for-primitive.js @@ -0,0 +1,49 @@ +/** + * @fileoverview Check that TypeError[ERR_INVALID_ARG_TYPE] uses + * lowercase for primitive types + * @author Weijia Wang + */ +'use strict'; + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +const primitives = [ + 'number', 'string', 'boolean', 'null', 'undefined' +]; + +module.exports = function(context) { + return { + NewExpression(node) { + if ( + node.callee.property && + node.callee.property.name === 'TypeError' && + node.arguments[0].value === 'ERR_INVALID_ARG_TYPE' + ) { + checkNamesArgument(node.arguments[2]); + } + + function checkNamesArgument(names) { + switch (names.type) { + case 'Literal': + checkName(names.value); + break; + case 'ArrayExpression': + names.elements.forEach((name) => { + checkName(name.value); + }); + break; + } + } + + function checkName(name) { + const lowercaseName = name.toLowerCase(); + if (primitives.includes(lowercaseName) && !primitives.includes(name)) { + const msg = `primitive should use lowercase: ${name}`; + context.report(node, msg); + } + } + } + }; +}; diff --git a/vcbuild.bat b/vcbuild.bat index 91f9da69db4..49a2c00ee92 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -65,9 +65,6 @@ if /i "%1"=="ia32" set target_arch=x86&goto arg-ok if /i "%1"=="x86" set target_arch=x86&goto arg-ok if /i "%1"=="x64" set target_arch=x64&goto arg-ok if /i "%1"=="arm" set target_arch=arm&goto arg-ok -@rem args should be vs2017 and vs2015. keeping vc2015 for backward compatibility (undocumented) -if /i "%1"=="vc2015" set target_env=vs2015&goto arg-ok -if /i "%1"=="vs2015" set target_env=vs2015&goto arg-ok if /i "%1"=="vs2017" set target_env=vs2017&goto arg-ok if /i "%1"=="noprojgen" set noprojgen=1&goto arg-ok if /i "%1"=="nobuild" set nobuild=1&goto arg-ok @@ -152,7 +149,6 @@ if defined build_release ( set "node_exe=%~dp0%config%\node.exe" if not defined native_node_exe set "native_node_exe=%node_exe%" set "node_gyp_exe="%node_exe%" deps\npm\node_modules\node-gyp\bin\node-gyp" -if "%target_env%"=="vs2015" set "node_gyp_exe=%node_gyp_exe% --msvs_version=2015" if "%target_env%"=="vs2017" set "node_gyp_exe=%node_gyp_exe% --msvs_version=2017" if "%config%"=="Debug" set configure_flags=%configure_flags% --debug @@ -208,20 +204,20 @@ if %target_arch%==x64 if %msvs_host_arch%==amd64 set vcvarsall_arg=amd64 @rem Look for Visual Studio 2017 :vs-set-2017 -if defined target_env if "%target_env%" NEQ "vs2017" goto vs-set-2015 +if defined target_env if "%target_env%" NEQ "vs2017" goto msbuild-not-found echo Looking for Visual Studio 2017 call tools\msvs\vswhere_usability_wrapper.cmd -if "_%VCINSTALLDIR%_" == "__" goto vs-set-2015 +if "_%VCINSTALLDIR%_" == "__" goto msbuild-not-found if defined msi ( echo Looking for WiX installation for Visual Studio 2017... if not exist "%WIX%\SDK\VS2017" ( echo Failed to find WiX install for Visual Studio 2017 echo VS2017 support for WiX is only present starting at version 3.11 - goto vs-set-2015 + goto msbuild-not-found ) if not exist "%VCINSTALLDIR%\..\MSBuild\Microsoft\WiX" ( echo Failed to find the Wix Toolset Visual Studio 2017 Extension - goto vs-set-2015 + goto msbuild-not-found ) ) @rem check if VS2017 is already setup, and for the requested arch @@ -233,40 +229,13 @@ set "VSCMD_START_DIR=%CD%" set vcvars_call="%VCINSTALLDIR%\Auxiliary\Build\vcvarsall.bat" %vcvarsall_arg% echo calling: %vcvars_call% call %vcvars_call% -if errorlevel 1 goto vs-set-2015 +if errorlevel 1 goto msbuild-not-found :found_vs2017 echo Found MSVS version %VisualStudioVersion% set GYP_MSVS_VERSION=2017 set PLATFORM_TOOLSET=v141 goto msbuild-found -@rem Look for Visual Studio 2015 -:vs-set-2015 -if defined target_env if "%target_env%" NEQ "vs2015" goto msbuild-not-found -echo Looking for Visual Studio 2015 -if not defined VS140COMNTOOLS goto msbuild-not-found -if not exist "%VS140COMNTOOLS%\..\..\vc\vcvarsall.bat" goto msbuild-not-found -if defined msi ( - echo Looking for WiX installation for Visual Studio 2015... - if not exist "%WIX%\SDK\VS2015" ( - echo Failed to find WiX install for Visual Studio 2015 - echo VS2015 support for WiX is only present starting at version 3.10 - goto wix-not-found - ) -) - -@rem check if VS2015 is already setup -if "_%VisualStudioVersion%_" == "_14.0_" if "_%VCVARS_VER%_" == "_140_" goto found_vs2015 -call "%VS140COMNTOOLS%\..\..\vc\vcvarsall.bat" -SET VCVARS_VER=140 -:found_vs2015 -if not defined VCINSTALLDIR goto msbuild-not-found -@rem Visual C++ Build Tools 2015 does not define VisualStudioVersion -echo Found MSVS version 14.0 -set GYP_MSVS_VERSION=2015 -set PLATFORM_TOOLSET=v140 -goto msbuild-found - :msbuild-not-found echo Failed to find a suitable Visual Studio installation. echo Try to run in a "Developer Command Prompt" or consult @@ -588,7 +557,7 @@ echo Failed to create vc project files. goto exit :help -echo vcbuild.bat [debug/release] [msi] [test/test-ci/test-all/test-addons/test-addons-napi/test-internet/test-pummel/test-simple/test-message/test-gc/test-tick-processor/test-known-issues/test-node-inspect/test-check-deopts/test-npm/test-async-hooks/test-v8/test-v8-intl/test-v8-benchmarks/test-v8-all] [ignore-flaky] [static/dll] [noprojgen] [small-icu/full-icu/without-intl] [nobuild] [nosnapshot] [noetw] [noperfctr] [licensetf] [sign] [ia32/x86/x64] [vs2015/vs2017] [download-all] [enable-vtune] [lint/lint-ci/lint-js/lint-js-ci] [package] [build-release] [upload] [no-NODE-OPTIONS] [link-module path-to-module] [debug-http2] [debug-nghttp2] [clean] [no-cctest] +echo vcbuild.bat [debug/release] [msi] [test/test-ci/test-all/test-addons/test-addons-napi/test-internet/test-pummel/test-simple/test-message/test-gc/test-tick-processor/test-known-issues/test-node-inspect/test-check-deopts/test-npm/test-async-hooks/test-v8/test-v8-intl/test-v8-benchmarks/test-v8-all] [ignore-flaky] [static/dll] [noprojgen] [small-icu/full-icu/without-intl] [nobuild] [nosnapshot] [noetw] [noperfctr] [licensetf] [sign] [ia32/x86/x64] [vs2017] [download-all] [enable-vtune] [lint/lint-ci/lint-js/lint-js-ci] [package] [build-release] [upload] [no-NODE-OPTIONS] [link-module path-to-module] [debug-http2] [debug-nghttp2] [clean] [no-cctest] echo Examples: echo vcbuild.bat : builds release build echo vcbuild.bat debug : builds debug build