Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

fs: support BigInt in fs.*stat and fs.watchFile #20220

Closed
wants to merge 4 commits into from

Conversation

joyeecheung
Copy link
Member

@joyeecheung joyeecheung commented Apr 23, 2018

  • fs: support BigInt in fs.*stat and fs.watchFile
    Add the bigint: true option to all the fs.*stat methods and
    fs.watchFile.
  • doc: document BigInt support in fs.Stats

I chose to expose the BigInt variant via bigint: true in the option object because right now there are no support of a Date class with higher precision - the old Date is Number-based and can lose precision when being constructed out of a 64bit ms value. The plan is that when JS does get a better Date e.g. Temporal (see tc39/proposal-bigint#136), we will be able to support temporal: true.

The --harmony-bigint flag is necessary until v8 6.7 lands.

Fixes: #12115

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines
@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. labels Apr 23, 2018
@mscdex mscdex added the wip Issues and PRs that are still a work in progress. label Apr 23, 2018
Copy link
Contributor

@vsemozhetbyt vsemozhetbyt left a comment

Choose a reason for hiding this comment

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

Sorry for many repetitive nits, they are guards to not be missed. I will delete them if they will be rejected or not folded when addressed.

doc/api/fs.md Outdated
@@ -413,6 +413,8 @@ A `fs.Stats` object provides information about a file.

Objects returned from [`fs.stat()`][], [`fs.lstat()`][] and [`fs.fstat()`][] and
their synchronous counterparts are of this type.
If `bigint` in the `options` passed to those methods is true, the numeric values
will be `BigInt` instead of `Number`.
Copy link
Contributor

Choose a reason for hiding this comment

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

If we mean primitives and not the classes/object wrappers, should these be bigint and number?

doc/api/fs.md Outdated
@@ -436,6 +438,30 @@ Stats {
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
```

`BigInt` version:
Copy link
Contributor

@vsemozhetbyt vsemozhetbyt Apr 23, 2018

Choose a reason for hiding this comment

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

Ditto, `bigint`?

@@ -4,6 +4,7 @@ const jsDocPrefix = 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/';

const jsDataStructuresUrl = `${jsDocPrefix}Data_structures`;
const jsPrimitives = {
bigint: 'BigInt',
Copy link
Contributor

Choose a reason for hiding this comment

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

Unfortunately, this will generate:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#BigInt_type

due to this end point, and there is no such section in the MDN. Unless this section is created by our collaborators, we need temporarily place this type along with something like AsyncIterator in customTypesMap, before Node.js types (as 'bigint' after 'AsyncIterator') with a link to the proposal.

doc/api/fs.md Outdated
@@ -1636,9 +1662,16 @@ changes:
pr-url: https://github.com/nodejs/node/pull/7897
description: The `callback` parameter is no longer optional. Not passing
it will emit a deprecation warning with id DEP0013.
- version: REPLACEME
pr-url: REPLACEME
description: Accepts an additional options object to specify whether
Copy link
Contributor

Choose a reason for hiding this comment

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

options -> `options`?

doc/api/fs.md Outdated
-->

* `fd` {integer}
* `options` {Object}
* `bigint` {boolean} **Default:** `false` Whether the numeric values in
Copy link
Contributor

Choose a reason for hiding this comment

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

Default values usually go at the end, with a period if preceded by a full sentence or if constructed as a full sentence. So this should be:

...should be `BigInt`. **Default:** `false`.
doc/api/fs.md Outdated
-->

* `path` {string|Buffer|URL}
* `options` {Object}
* `bigint` {boolean} **Default:** `false` Whether the numeric values in
Copy link
Contributor

Choose a reason for hiding this comment

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

Ditto re default value place and format.

doc/api/fs.md Outdated
-->

* `path` {string|Buffer|URL}
* `options` {Object}
* `bigint` {boolean} **Default:** `false` Whether the numeric values in
the returned [`fs.Stats`][] object should be `BigInt`.
Copy link
Contributor

Choose a reason for hiding this comment

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

`bigint` as a primitive type?

doc/api/fs.md Outdated
changes:
- version: REPLACEME
pr-url: REPLACEME
description: Accepts an additional options object to specify whether
Copy link
Contributor

Choose a reason for hiding this comment

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

options -> `options`?

doc/api/fs.md Outdated
-->

* `path` {string|Buffer|URL}
* `options` {Object}
* `bigint` {boolean} **Default:** `false` Whether the numeric values in
Copy link
Contributor

Choose a reason for hiding this comment

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

Ditto re default value place and format.

doc/api/fs.md Outdated
-->

* `path` {string|Buffer|URL}
* `options` {Object}
* `bigint` {boolean} **Default:** `false` Whether the numeric values in
the returned [`fs.Stats`][] object should be `BigInt`.
Copy link
Contributor

Choose a reason for hiding this comment

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

`bigint` as a primitive type?

const numStats = await handle.stat();
verifyStats(bigintStats, numStats);
await handle.close();
})();
Copy link
Member

Choose a reason for hiding this comment

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

These tests would all pass in case e.g. const handle = await promiseFs.open(fn, 'r'); rejects. In that case it would log an unhandled rejection and that would currently not end the process, so we would not notice anything wrong.

Instead, it would be good to write something like:

async function foo() {
}

Promise.all([
  foo(),
  bar(),
  ...
]).then(common.mustCall());
Copy link
Member

Choose a reason for hiding this comment

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

There is also a common function to throw in case of unhandled rejections.

Copy link
Member Author

Choose a reason for hiding this comment

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

I went with common.crashOnUnhandledRejection() because it's simple

@joyeecheung joyeecheung changed the title WIP: fs: support BigInt in fs.*stat and fs.watchFile Jun 4, 2018
@joyeecheung
Copy link
Member Author

I think I've addressed all the comments from @vsemozhetbyt and @BridgeAR . This should be ready now that v8 6.7 has landed on master. PTAL @nodejs/fs

CI: https://ci.nodejs.org/job/node-test-pull-request/15249/

@bnoordhuis
Copy link
Member

Looks like lib/internal/fs/promises.js is missing this:

diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js
index 43956dae3f..a1670fc65b 100644
--- a/lib/internal/fs/promises.js
+++ b/lib/internal/fs/promises.js
@@ -476,6 +476,7 @@ module.exports = {
   symlink,
   lstat,
   stat,
+  fstat,
   link,
   unlink,
   chmod,
@joyeecheung
Copy link
Member Author

@bnoordhuis fsPromises.fstat should already be removed by #20559 , I forgot to update the tests. I'll update it.

@joyeecheung joyeecheung removed the wip Issues and PRs that are still a work in progress. label Jun 5, 2018
@bnoordhuis
Copy link
Member

Still saying TypeError: promiseFs.fstat is not a function.

Add the `bigint: true` option to all the `fs.*stat` methods and
`fs.watchFile`.
@joyeecheung
Copy link
Member Author

@joyeecheung
Copy link
Member Author

joyeecheung commented Jun 5, 2018

Green on my Windows laptop now. @bnoordhuis Would you mind taking a look at the last commit? I think it should be OK to special case for Windows like that.

Another CI: https://ci.nodejs.org/job/node-test-pull-request/15266/

@@ -155,6 +155,10 @@ function Stats(
}

Stats.prototype._checkModeProperty = function(property) {
if (isWindows && (property === S_IFIFO || property === S_IFBLK ||
property === S_IFSOCK)) {
Copy link
Member Author

Choose a reason for hiding this comment

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

These three are in fact all undefined on Windows, but I figured it looks more readable if I list them like that.

return node::FillStatsArray(env->fs_stats_field_array(), s, offset);
const uv_stat_t* s,
bool use_bigint = false,
int offset = 0) {
Copy link
Member

Choose a reason for hiding this comment

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

Alignment is off.

@@ -57,6 +57,7 @@ class StatWatcher : public AsyncWrap {
bool IsActive();

uv_fs_poll_t* watcher_;
bool use_bigint_;
Copy link
Member

Choose a reason for hiding this comment

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

const bool?

@joyeecheung
Copy link
Member Author

Test failures seem to be unrelated:

Failures in job https://ci.nodejs.org/job/node-test-commit/18998/

alpine-latest-x64

See failures
not ok 2193 sequential/test-inspector-port-zero-cluster
  ---
  duration_ms: 0.413
  severity: fail
  exitcode: 1
  stack: |-
    Debugger listening on ws://127.0.0.1:39191/3e6681d2-89d9-4b27-989b-baed7a6a650b
    For help, see: https://nodejs.org/en/docs/inspector
    Starting inspector on 127.0.0.1:39192 failed: address already in use
    Assertion failed: !uv__is_closing(handle) (../deps/uv/src/unix/core.c: uv_close: 117)
    Debugger listening on ws://127.0.0.1:39193/708697be-39f0-4229-96b0-354e4b76ccca
    For help, see: https://nodejs.org/en/docs/inspector
    Starting inspector on 127.0.0.1:39194 failed: address already in use
    Assertion failed: !uv__is_closing(handle) (../deps/uv/src/unix/core.c: uv_close: 117)
    assert.js:80
      throw new AssertionError(obj);
      ^
    
    AssertionError [ERR_ASSERTION]: code: null, signal: SIGABRT
        at Worker.worker.on.common.mustCall (/home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/sequential/test-inspector-port-zero-cluster.js:20:16)
        at Worker.<anonymous> (/home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/common/index.js:443:15)
        at Worker.emit (events.js:182:13)
        at ChildProcess.worker.process.once (internal/cluster/master.js:193:12)
        at Object.onceWrapper (events.js:273:13)
        at ChildProcess.emit (events.js:182:13)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
  ...

fedora-latest-x64

See failures
error: argument --input/-i: can't open 'test.tap': [Errno 2] No such file or directory: 'test.tap'
POST BUILD TASK : FAILURE
END OF POST BUILD TASK : 0
Recording test results
Notifying upstream projects of job completion
Finished: FAILURE

centos7-arm64-gcc6

See failures
not ok 2246 sequential/test-inspector-port-zero-cluster
  ---
  duration_ms: 0.332
  severity: fail
  exitcode: 1
  stack: |-
    Debugger listening on ws://127.0.0.1:34395/ed174642-2254-4d6e-83e7-e18fceb7ae24
    For help, see: https://nodejs.org/en/docs/inspector
    Starting inspector on 127.0.0.1:34396 failed: address already in use
    node: ../deps/uv/src/unix/core.c:117: uv_close: Assertion `!(((handle)->flags & (UV_CLOSING | UV_CLOSED)) != 0)' failed.
    Debugger listening on ws://127.0.0.1:34397/8f93d94c-ae7b-4067-806f-f145561dcf5c
    For help, see: https://nodejs.org/en/docs/inspector
    Debugger listening on ws://127.0.0.1:34398/a6c6b38b-7b83-4a86-9897-279ca8d6d6e3
    For help, see: https://nodejs.org/en/docs/inspector
    assert.js:80
      throw new AssertionError(obj);
      ^
    
    AssertionError [ERR_ASSERTION]: code: null, signal: SIGABRT
        at Worker.worker.on.common.mustCall (/home/iojs/build/workspace/node-test-commit-arm/nodes/centos7-arm64-gcc6/test/sequential/test-inspector-port-zero-cluster.js:20:16)
        at Worker.<anonymous> (/home/iojs/build/workspace/node-test-commit-arm/nodes/centos7-arm64-gcc6/test/common/index.js:443:15)
        at Worker.emit (events.js:182:13)
        at ChildProcess.worker.process.once (internal/cluster/master.js:193:12)
        at Object.onceWrapper (events.js:273:13)
        at ChildProcess.emit (events.js:182:13)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
  ...

debian7-docker-armv7: Unknown

@joyeecheung
Copy link
Member Author

@joyeecheung
Copy link
Member Author

CI is green. Pinging @nodejs/fs again for more reviews.

@joyeecheung
Copy link
Member Author

I plan to land this later today and try backporting it after #21172 lands.

@joyeecheung
Copy link
Member Author

joyeecheung commented Jun 7, 2018

Failures seem to be unrelated:

Failures in job https://ci.nodejs.org/job/node-test-commit/19053/

centos7-64-gcc6

See failures
not ok 2179 sequential/test-inspector-port-zero-cluster
  ---
  duration_ms: 0.280
  severity: fail
  exitcode: 1
  stack: |-
    Debugger listening on ws://127.0.0.1:37752/8c04df0a-cdec-4543-b2fa-2ec22a3495df
    For help, see: https://nodejs.org/en/docs/inspector
    Debugger listening on ws://127.0.0.1:37753/fcae2cf6-2517-4b80-8c02-1341177bc72b
    For help, see: https://nodejs.org/en/docs/inspector
    Starting inspector on 127.0.0.1:37754 failed: address already in use
    node: ../deps/uv/src/unix/core.c:117: uv_close: Assertion `!(((handle)->flags & (UV_CLOSING | UV_CLOSED)) != 0)' failed.
    assert.js:80
      throw new AssertionError(obj);
      ^
    
    AssertionError [ERR_ASSERTION]: code: null, signal: SIGABRT
        at Worker.worker.on.common.mustCall (/home/iojs/build/workspace/node-test-commit-linux/nodes/centos7-64-gcc6/test/sequential/test-inspector-port-zero-cluster.js:20:16)
        at Worker.<anonymous> (/home/iojs/build/workspace/node-test-commit-linux/nodes/centos7-64-gcc6/test/common/index.js:451:15)
        at Worker.emit (events.js:182:13)
        at ChildProcess.worker.process.once (internal/cluster/master.js:193:12)
        at Object.onceWrapper (events.js:273:13)
        at ChildProcess.emit (events.js:182:13)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
    Debugger listening on ws://127.0.0.1:37755/61ef8c5b-1ab7-41d2-a76e-e0aa9ec6194e
    For help, see: https://nodejs.org/en/docs/inspector
  ...

ubuntu1604_sharedlibs_openssl110_x64

See failures
not ok 1961 parallel/test-worker-dns-terminate
  ---
  duration_ms: 0.985
  severity: crashed
  exitcode: -11
  stack: |-
  ...

@seishun seishun mentioned this pull request Jun 9, 2018
2 tasks
targos pushed a commit that referenced this pull request Jun 13, 2018
Add the `bigint: true` option to all the `fs.*stat` methods and
`fs.watchFile`.

PR-URL: #20220
Fixes: #12115
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
targos pushed a commit that referenced this pull request Jun 13, 2018
PR-URL: #20220
Fixes: #12115
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@targos targos mentioned this pull request Jun 19, 2018
targos added a commit that referenced this pull request Jun 20, 2018
Notable changes:

* **crypto**:
  * Support for `crypto.scrypt()` has been added.
    [#20816](#20816)
* **fs**:
  * BigInt support has been added to `fs.stat` and `fs.watchFile`.
    [#20220](#20220)
  * APIs that take `mode` as arguments no longer throw on values larger
    than `0o777`. [#20636](#20636)
    [#20975](#20975)
    (Fixes: [#20498](#20498))
  * Fix crashes in closed event watchers.
    [#20985](#20985)
    (Fixes: [#20297](#20297))
* **Worker Threads**:
  * Support for multi-threading has been added behind the
    `--experimental-worker` flag in the `worker_threads` module.
    This feature is *experimental* and may receive breaking changes at
    any time. [#20876](#20876)

PR-URL: #21400
targos added a commit that referenced this pull request Jun 20, 2018
Notable changes:

* **crypto**:
  * Support for `crypto.scrypt()` has been added.
    [#20816](#20816)
* **fs**:
  * BigInt support has been added to `fs.stat` and `fs.watchFile`.
    [#20220](#20220)
  * APIs that take `mode` as arguments no longer throw on values larger
    than `0o777`. [#20636](#20636)
    [#20975](#20975)
    (Fixes: [#20498](#20498))
  * Fix crashes in closed event watchers.
    [#20985](#20985)
    (Fixes: [#20297](#20297))
* **Worker Threads**:
  * Support for multi-threading has been added behind the
    `--experimental-worker` flag in the `worker_threads` module.
    This feature is *experimental* and may receive breaking changes at
    any time. [#20876](#20876)

PR-URL: #21400
calebeby pushed a commit to Pigmice2733/scouting-frontend that referenced this pull request Jun 20, 2018
This Pull Request updates dependency [node](https://github.com/nodejs/node) from `v10.4.1` to `v10.5.0`



<details>
<summary>Release Notes</summary>

### [`v10.5.0`](https://github.com/nodejs/node/releases/v10.5.0)
[Compare Source](nodejs/node@v10.4.1...v10.5.0)
##### Notable Changes
 
* **crypto**:
  * Support for `crypto.scrypt()` has been added. [#&#8203;20816](`nodejs/node#20816)
* **fs**:
  * BigInt support has been added to `fs.stat` and `fs.watchFile`. [#&#8203;20220](`nodejs/node#20220)
  * APIs that take `mode` as arguments no longer throw on values larger than
    `0o777`. [#&#8203;20636](`nodejs/node#20636) [#&#8203;20975](`nodejs/node#20975) (Fixes: [#&#8203;20498](`nodejs/node#20498))
  * Fix crashes in closed event watchers. [#&#8203;20985](`nodejs/node#20985) (Fixes: [#&#8203;20297](`nodejs/node#20297))
* **Worker Threads**:
  * Support for multi-threading has been added behind the
    `--experimental-worker` flag in the `worker_threads` module. This feature
    is *experimental* and may receive breaking changes at any time. [#&#8203;20876](`nodejs/node#20876)
##### Commits
 
* [[`a6986fe8b6`](nodejs/node@a6986fe8b6)] - **async_hooks**: remove deprecated example (Mathias Buus) [#&#8203;20998](`nodejs/node#20998)
* [[`4b9817bf1e`](nodejs/node@4b9817bf1e)] - **benchmark**: disable only the ESLint rule needing it (Rich Trott) [#&#8203;21133](`nodejs/node#21133)
* [[`ecba1c57b1`](nodejs/node@ecba1c57b1)] - **(SEMVER-MINOR)** **benchmark**: port cluster/echo to worker (Timothy Gu) [#&#8203;20876](`nodejs/node#20876)
* [[`02adb2d62c`](nodejs/node@02adb2d62c)] - **(SEMVER-MINOR)** **build**: expose openssl scrypt functions to addons (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`c3fbac432f`](nodejs/node@c3fbac432f)] - **build**: install markdown linter for travis (Richard Lau) [#&#8203;21215](`nodejs/node#21215)
* [[`896017b134`](nodejs/node@896017b134)] - **build**: build addon tests in parallel (Anna Henningsen) [#&#8203;21155](`nodejs/node#21155)
* [[`76927fc734`](nodejs/node@76927fc734)] - **build**: stop distclean from deleting v8 files (Ujjwal Sharma) [#&#8203;21164](`nodejs/node#21164)
* [[`b044256f2a`](nodejs/node@b044256f2a)] - **build**: use LC\_ALL of C for maximum compatibility (Rich Trott) [#&#8203;21222](`nodejs/node#21222)
* [[`78c7d666fb`](nodejs/node@78c7d666fb)] - **build**: don't change locale on smartos (Refael Ackermann) [#&#8203;21220](`nodejs/node#21220)
* [[`c688a00a6d`](nodejs/node@c688a00a6d)] - **build**: fix 'gas\_version' check on localized environments (Evandro Oliveira) [#&#8203;20394](`nodejs/node#20394)
* [[`79b3423fb5`](nodejs/node@79b3423fb5)] - **build**: initial .travis.yml implementation (Anna Henningsen) [#&#8203;21059](`nodejs/node#21059)
* [[`ea4be72f22`](nodejs/node@ea4be72f22)] - **child_process**: swallow errors in internal communication (Anatoli Papirovski) [#&#8203;21108](`nodejs/node#21108)
* [[`9981220e2a`](nodejs/node@9981220e2a)] - **crypto**: fix behavior of createCipher in wrap mode (Tobias Nießen) [#&#8203;21287](`nodejs/node#21287)
* [[`d0cb9cbb35`](nodejs/node@d0cb9cbb35)] - **(SEMVER-MINOR)** **crypto**: drop Math.pow(), use static exponentation (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`2d9c3cc89d`](nodejs/node@2d9c3cc89d)] - **(SEMVER-MINOR)** **crypto**: refactor randomBytes() (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`6262fa44d6`](nodejs/node@6262fa44d6)] - **(SEMVER-MINOR)** **crypto**: refactor pbkdf2() and pbkdf2Sync() methods (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`c9b4592dbf`](nodejs/node@c9b4592dbf)] - **(SEMVER-MINOR)** **crypto**: add scrypt() and scryptSync() methods (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`495756264a`](nodejs/node@495756264a)] - **(SEMVER-MINOR)** **crypto**: DRY type checking (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`e4a7e0d28b`](nodejs/node@e4a7e0d28b)] - **deps**: float ea7abee from openssl / CVE-2018-0732 (Rod Vagg) [#&#8203;21282](`nodejs/node#21282)
* [[`0b90b071c4`](nodejs/node@0b90b071c4)] - **deps**: Upgrade node-inspect to 1.11.5 (Jan Krems) [#&#8203;21055](`nodejs/node#21055)
* [[`ffc29c12da`](nodejs/node@ffc29c12da)] - **deps**: patch V8 to 6.7.288.46 (Myles Borins) [#&#8203;21260](`nodejs/node#21260)
* [[`14bb905d18`](nodejs/node@14bb905d18)] - **deps**: V8: cherry-pick a440efb27f from upstream (Yang Guo) [#&#8203;21022](`nodejs/node#21022)
* [[`65b9c427ac`](nodejs/node@65b9c427ac)] - **dns**: improve setServers() errors and performance (Jamie Davis) [#&#8203;20445](`nodejs/node#20445)
* [[`bc20ec0c0f`](nodejs/node@bc20ec0c0f)] - **doc**: eliminate \_you\_ from N-API doc (Rich Trott) [#&#8203;21382](`nodejs/node#21382)
* [[`318d6831bf`](nodejs/node@318d6831bf)] - **doc**: use imperative in COLLABORATOR\_GUIDE (Rich Trott) [#&#8203;21340](`nodejs/node#21340)
* [[`177a7c06a8`](nodejs/node@177a7c06a8)] - **doc**: remove obsolete wiki references from BUILDING (Rich Trott) [#&#8203;21369](`nodejs/node#21369)
* [[`15023df050`](nodejs/node@15023df050)] - **doc**: add davisjam to collaborators (Jamie Davis) [#&#8203;21273](`nodejs/node#21273)
* [[`17c21b67ac`](nodejs/node@17c21b67ac)] - **doc**: fix indentation in console.md (Vse Mozhet Byt) [#&#8203;21367](`nodejs/node#21367)
* [[`ef74368416`](nodejs/node@ef74368416)] - **doc**: fix heading of optional console method args (Michaël Zasso) [#&#8203;21311](`nodejs/node#21311)
* [[`4f17841c20`](nodejs/node@4f17841c20)] - **doc**: use Class Method label consistently (Rich Trott) [#&#8203;21357](`nodejs/node#21357)
* [[`4566ebacf4`](nodejs/node@4566ebacf4)] - **doc**: wrap style guide at 80 characters (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`6c41f33571`](nodejs/node@6c41f33571)] - **doc**: wrap pull-requests.md at 80 characters (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`b8213f17cc`](nodejs/node@b8213f17cc)] - **doc**: remove linking of url text to url (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`3f78220c2b`](nodejs/node@3f78220c2b)] - **doc**: correct styling of \_GitHub\_ in onboarding doc (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`9e994cb119`](nodejs/node@9e994cb119)] - **doc**: wrap releases.md at 80 chars (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`e00e5e6d5d`](nodejs/node@e00e5e6d5d)] - **doc**: switch the order of Writable and Readable (Joseph Gordon) [#&#8203;21333](`nodejs/node#21333)
* [[`e1b571d6b7`](nodejs/node@e1b571d6b7)] - **doc**: make Deprecation cycle explanation more brief (Rich Trott) [#&#8203;21303](`nodejs/node#21303)
* [[`df0f7a3b4d`](nodejs/node@df0f7a3b4d)] - **doc**: clarify async execute callback usage (Michael Dawson) [#&#8203;21217](`nodejs/node#21217)
* [[`c5a65594ef`](nodejs/node@c5a65594ef)] - **doc**: move 5 collaborators to emeritus status (Rich Trott) [#&#8203;21272](`nodejs/node#21272)
* [[`c1d53f86f8`](nodejs/node@c1d53f86f8)] - **doc**: update NODE\_OPTIONS section in cli.md (Vse Mozhet Byt) [#&#8203;21229](`nodejs/node#21229)
* [[`13fd09bfa7`](nodejs/node@13fd09bfa7)] - **doc**: add build wg info to releases.md (Jon Moss) [#&#8203;21275](`nodejs/node#21275)
* [[`0da910f9a5`](nodejs/node@0da910f9a5)] - **doc**: move Italo A. Casas to Release Emeritus (Myles Borins) [#&#8203;21315](`nodejs/node#21315)
* [[`6f7de0b8d9`](nodejs/node@6f7de0b8d9)] - **doc**: trim deprecation level definition text (Rich Trott) [#&#8203;21241](`nodejs/node#21241)
* [[`dd2fc90dcf`](nodejs/node@dd2fc90dcf)] - **doc**: fix reference to workerData in worker\_threads (Jeremiah Senkpiel) [#&#8203;21180](`nodejs/node#21180)
* [[`5e46c16371`](nodejs/node@5e46c16371)] - **doc**: fix type in stream doc (Aliaksei Tuzik) [#&#8203;21178](`nodejs/node#21178)
* [[`85dc9ac418`](nodejs/node@85dc9ac418)] - **doc**: add Michaël Zasso to Release team (Michaël Zasso) [#&#8203;21114](`nodejs/node#21114)
* [[`5fa5ab6c48`](nodejs/node@5fa5ab6c48)] - **doc**: naming function as suggested in addon docs (Tommaso Allevi) [#&#8203;21067](`nodejs/node#21067)
* [[`fe5d35123b`](nodejs/node@fe5d35123b)] - **(SEMVER-MINOR)** **doc**: document BigInt support in fs.Stats (Joyee Cheung) [#&#8203;20220](`nodejs/node#20220)
* [[`2c4f80ffba`](nodejs/node@2c4f80ffba)] - **doc**: remove spaces around slashes (Rich Trott) [#&#8203;21140](`nodejs/node#21140)
* [[`72e7e1da2d`](nodejs/node@72e7e1da2d)] - **doc**: alphabetize tls options (Rich Trott) [#&#8203;21139](`nodejs/node#21139)
* [[`06ac81e786`](nodejs/node@06ac81e786)] - **doc**: streamline errors.md introductory material (Rich Trott) [#&#8203;21138](`nodejs/node#21138)
* [[`73b8975b41`](nodejs/node@73b8975b41)] - **doc**: simplify deprecation language (Rich Trott) [#&#8203;21136](`nodejs/node#21136)
* [[`6caa354377`](nodejs/node@6caa354377)] - **(SEMVER-MINOR)** **doc**: explain Worker semantics in async\_hooks.md (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`9f9355d6d2`](nodejs/node@9f9355d6d2)] - **doc**: fix inconsistent documentation (host vs hostname) (Davis Okoth) [#&#8203;20933](`nodejs/node#20933)
* [[`a5c571424a`](nodejs/node@a5c571424a)] - **doc**: document file mode caveats on Windows (Joyee Cheung) [#&#8203;20636](`nodejs/node#20636)
* [[`a75e44d135`](nodejs/node@a75e44d135)] - **esm**: ensure require.main for CJS top-level loads (Guy Bedford) [#&#8203;21150](`nodejs/node#21150)
* [[`04e8f0749e`](nodejs/node@04e8f0749e)] - **(SEMVER-MINOR)** **fs**: support BigInt in fs.\*stat and fs.watchFile (Joyee Cheung) [#&#8203;20220](`nodejs/node#20220)
* [[`c09bfd81b7`](nodejs/node@c09bfd81b7)] - **fs**: do not crash when using a closed fs event watcher (Joyee Cheung) [#&#8203;20985](`nodejs/node#20985)
* [[`bacb2cb550`](nodejs/node@bacb2cb550)] - **fs**: refactor fs module (James M Snell) [#&#8203;20764](`nodejs/node#20764)
* [[`db0bb5214a`](nodejs/node@db0bb5214a)] - **fs**: improve fchmod{Sync} validation (cjihrig) [#&#8203;20588](`nodejs/node#20588)
* [[`2ffb9d6b5c`](nodejs/node@2ffb9d6b5c)] - **fs**: drop duplicate API in promises mode (Сковорода Никита Андреевич) [#&#8203;20559](`nodejs/node#20559)
* [[`fc0b3610e2`](nodejs/node@fc0b3610e2)] - **fs**: don't limit ftruncate() length to 32 bits (cjihrig) [#&#8203;20851](`nodejs/node#20851)
* [[`469baa062e`](nodejs/node@469baa062e)] - **fs**: add length validation to fs.truncate() (cjihrig) [#&#8203;20851](`nodejs/node#20851)
* [[`6aade4a765`](nodejs/node@6aade4a765)] - **http**: remove a pair of outdated comments (Mark S. Everitt) [#&#8203;21214](`nodejs/node#21214)
* [[`bcaf59c739`](nodejs/node@bcaf59c739)] - **http2**: fix memory leak for uncommon headers (Anna Henningsen) [#&#8203;21336](`nodejs/node#21336)
* [[`dee250fd77`](nodejs/node@dee250fd77)] - **http2**: safer Http2Session destructor (Anatoli Papirovski) [#&#8203;21194](`nodejs/node#21194)
* [[`296fd57324`](nodejs/node@296fd57324)] - **inspector**: stop dragging platform pointer (Eugene Ostroukhov) 
* [[`fb71337bdf`](nodejs/node@fb71337bdf)] - **(SEMVER-MINOR)** **lib**: rename checkIsArrayBufferView() (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`f3570f201b`](nodejs/node@f3570f201b)] - **(SEMVER-MINOR)** **lib**: replace checkUint() with validateInt32() (Ben Noordhuis) [#&#8203;20816](`nodejs/node#20816)
* [[`b4b7d368be`](nodejs/node@b4b7d368be)] - **lib**: unmask mode\_t values with 0o777 (Joyee Cheung) [#&#8203;20975](`nodejs/node#20975)
* [[`36e5100a39`](nodejs/node@36e5100a39)] - **lib**: support ranges in validateInt32() (cjihrig) [#&#8203;20588](`nodejs/node#20588)
* [[`2fe88d2218`](nodejs/node@2fe88d2218)] - **lib**: mask mode\_t type of arguments with 0o777 (Joyee Cheung) [#&#8203;20636](`nodejs/node#20636)
* [[`a0cfb0c9d4`](nodejs/node@a0cfb0c9d4)] - **lib**: add validateInteger() validator (cjihrig) [#&#8203;20851](`nodejs/node#20851)
* [[`740d9f1a0e`](nodejs/node@740d9f1a0e)] - **lib,src**: make `StatWatcher` a `HandleWrap` (Anna Henningsen) [#&#8203;21244](`nodejs/node#21244)
* [[`a657984109`](nodejs/node@a657984109)] - **lib,src**: remove openssl feature conditionals (Ben Noordhuis) [#&#8203;21094](`nodejs/node#21094)
* [[`653b20b26d`](nodejs/node@653b20b26d)] - **loader**: remove unused error code in module\_job (Gus Caplan) [#&#8203;21354](`nodejs/node#21354)
* [[`5d3dfedca2`](nodejs/node@5d3dfedca2)] - **meta**: remove CODEOWNERS (Rich Trott) [#&#8203;21161](`nodejs/node#21161)
* [[`169bff3e9e`](nodejs/node@169bff3e9e)] - **n-api**: name CallbackBundle function fields (Anna Henningsen) [#&#8203;21240](`nodejs/node#21240)
* [[`1dc9330b3a`](nodejs/node@1dc9330b3a)] - **n-api**: improve runtime perf of n-api func call (Kenny Yuan) [#&#8203;21072](`nodejs/node#21072)
* [[`9047c8182c`](nodejs/node@9047c8182c)] - **n-api**: remove unused napi\_env member (Gabriel Schulhof) [#&#8203;21127](`nodejs/node#21127)
* [[`18c057ab26`](nodejs/node@18c057ab26)] - **net**: emit 'close' when socket ends before connect (Brett Kiefer) [#&#8203;21290](`nodejs/node#21290)
* [[`a3fd1cd8ea`](nodejs/node@a3fd1cd8ea)] - **perf_hooks**: remove less useful bootstrap marks (James M Snell) [#&#8203;21247](`nodejs/node#21247)
* [[`8fddf591c5`](nodejs/node@8fddf591c5)] - **perf_hooks**: set bootstrap complete in only one place (James M Snell) [#&#8203;21247](`nodejs/node#21247)
* [[`fc2956d37a`](nodejs/node@fc2956d37a)] - **process**: backport process/methods file (Michaël Zasso) [#&#8203;21172](`nodejs/node#21172)
* [[`78ad4e9dde`](nodejs/node@78ad4e9dde)] - **src**: remove unused argc var in node\_stat\_watcher (Daniel Bevenius) [#&#8203;21337](`nodejs/node#21337)
* [[`7fa1344143`](nodejs/node@7fa1344143)] - **src**: use `%zx` in printf for size\_t (Anna Henningsen) [#&#8203;21323](`nodejs/node#21323)
* [[`671346ee8f`](nodejs/node@671346ee8f)] - **src**: do proper error checking in `AsyncWrap::MakeCallback` (Anna Henningsen) [#&#8203;21189](`nodejs/node#21189)
* [[`aa468abc4c`](nodejs/node@aa468abc4c)] - **src**: unify native symbol inspection code (Anna Henningsen) [#&#8203;21238](`nodejs/node#21238)
* [[`e92b89a75d`](nodejs/node@e92b89a75d)] - **src**: fix http2 typos (Anatoli Papirovski) [#&#8203;21194](`nodejs/node#21194)
* [[`4f01168414`](nodejs/node@4f01168414)] - **src**: do not persist fs\_poll handle in stat\_watcher (Anatoli Papirovski) [#&#8203;21093](`nodejs/node#21093)
* [[`685b9b2a6a`](nodejs/node@685b9b2a6a)] - **src**: do not persist timer handle in cares\_wrap (Anatoli Papirovski) [#&#8203;21093](`nodejs/node#21093)
* [[`4757771db3`](nodejs/node@4757771db3)] - **src**: add consistency check to node\_platform.cc (Anna Henningsen) [#&#8203;21156](`nodejs/node#21156)
* [[`8e2e16721b`](nodejs/node@8e2e16721b)] - **src**: add node\_encoding.cc (James M Snell) [#&#8203;21112](`nodejs/node#21112)
* [[`39b38754eb`](nodejs/node@39b38754eb)] - **src**: cleanup beforeExit for consistency (James M Snell) [#&#8203;21113](`nodejs/node#21113)
* [[`314b47d1cf`](nodejs/node@314b47d1cf)] - **(SEMVER-MINOR)** **src**: add Env::profiler\_idle\_notifier\_started() (Timothy Gu) [#&#8203;20876](`nodejs/node#20876)
* [[`5209ff9562`](nodejs/node@5209ff9562)] - **(SEMVER-MINOR)** **src**: remove unused fields msg\_ and env\_ (Daniel Bevenius) [#&#8203;20876](`nodejs/node#20876)
* [[`9a734132f9`](nodejs/node@9a734132f9)] - **(SEMVER-MINOR)** **src**: make handle onclose property a Symbol (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`e6f06807b1`](nodejs/node@e6f06807b1)] - **(SEMVER-MINOR)** **src**: simplify handle closing (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`65924c70e8`](nodejs/node@65924c70e8)] - **(SEMVER-MINOR)** **src**: remove unused fields isolate\_ (Daniel Bevenius) [#&#8203;20876](`nodejs/node#20876)
* [[`de7403f813`](nodejs/node@de7403f813)] - **(SEMVER-MINOR)** **src**: cleanup per-isolate state on platform on isolate unregister (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`ba17c9e46b`](nodejs/node@ba17c9e46b)] - **src**: refactor bootstrap to use bootstrap object (James M Snell) [#&#8203;20917](`nodejs/node#20917)
* [[`cbdc1fdf44`](nodejs/node@cbdc1fdf44)] - **src, tools**: add check for left leaning pointers (Daniel Bevenius) [#&#8203;21010](`nodejs/node#21010)
* [[`935309325b`](nodejs/node@935309325b)] - **test**: fix deprecation warning due to util.print (Tobias Nießen) [#&#8203;21265](`nodejs/node#21265)
* [[`d7ba75f8aa`](nodejs/node@d7ba75f8aa)] - **test**: add test to check colorMode type of Console (Masashi Hirano) [#&#8203;21248](`nodejs/node#21248)
* [[`0b00172df8`](nodejs/node@0b00172df8)] - **test**: removing unnecessary parameter from assert call (djmgit) [#&#8203;21307](`nodejs/node#21307)
* [[`dea3ac7bff`](nodejs/node@dea3ac7bff)] - **test**: improve statwatcher async\_hooks test (Anna Henningsen) [#&#8203;21244](`nodejs/node#21244)
* [[`792335f712`](nodejs/node@792335f712)] - **test**: add workerdata-sharedarraybuffer test (Jeremiah Senkpiel) [#&#8203;21180](`nodejs/node#21180)
* [[`e8d15cb149`](nodejs/node@e8d15cb149)] - **test**: mark test-inspector-port-zero-cluster flaky (Rich Trott) [#&#8203;21251](`nodejs/node#21251)
* [[`688bdfef7f`](nodejs/node@688bdfef7f)] - **test**: add crypto check to test-http2-debug (Daniel Bevenius) [#&#8203;21205](`nodejs/node#21205)
* [[`2270ab2a12`](nodejs/node@2270ab2a12)] - **test**: remove string literals from assert.strictEqual() calls (James Kylstra) [#&#8203;21211](`nodejs/node#21211)
* [[`187951c0fc`](nodejs/node@187951c0fc)] - **test**: move inspector-stress-http to sequential (Rich Trott) [#&#8203;21227](`nodejs/node#21227)
* [[`bda34ea203`](nodejs/node@bda34ea203)] - **test**: check gc does not resurrect the loop (Anatoli Papirovski) [#&#8203;21093](`nodejs/node#21093)
* [[`4d782c4720`](nodejs/node@4d782c4720)] - **test**: improve assert error messages (Hristijan Gjorgjievski) [#&#8203;21160](`nodejs/node#21160)
* [[`2655c7b194`](nodejs/node@2655c7b194)] - **test**: mark fs-readfile-tostring-fail flaky for all (Rich Trott) [#&#8203;21177](`nodejs/node#21177)
* [[`17954c2b01`](nodejs/node@17954c2b01)] - **test**: improve internal/buffer.js test coverage (Masashi Hirano) [#&#8203;21061](`nodejs/node#21061)
* [[`2ff4704447`](nodejs/node@2ff4704447)] - **test**: move test-readuint to test-buffer-readuint (Michaël Zasso) [#&#8203;21170](`nodejs/node#21170)
* [[`9c3a7bf076`](nodejs/node@9c3a7bf076)] - **test**: make url-util-format engine agnostic (Rich Trott) [#&#8203;21141](`nodejs/node#21141)
* [[`3d8ec8f85c`](nodejs/node@3d8ec8f85c)] - **test**: make url-parse-invalid-input engine agnostic (Rich Trott) [#&#8203;21132](`nodejs/node#21132)
* [[`0b0370f884`](nodejs/node@0b0370f884)] - **test**: remove unref in http2 test (Anatoli Papirovski) [#&#8203;21145](`nodejs/node#21145)
* [[`14a017cf8d`](nodejs/node@14a017cf8d)] - **test**: apply promises API to fourth appendFile test (Rich Trott) [#&#8203;21131](`nodejs/node#21131)
* [[`aa9dbf666b`](nodejs/node@aa9dbf666b)] - **test**: apply promises API to fourth appendFile test (Rich Trott) [#&#8203;21131](`nodejs/node#21131)
* [[`185b9e45d3`](nodejs/node@185b9e45d3)] - **test**: apply promises API to third appendFile test (Rich Trott) [#&#8203;21131](`nodejs/node#21131)
* [[`c400448e85`](nodejs/node@c400448e85)] - **test**: improve debug output in trace-events test (Rich Trott) [#&#8203;21120](`nodejs/node#21120)
* [[`a4ad9891e3`](nodejs/node@a4ad9891e3)] - **test**: add test for Linux perf (Matheus Marchini) [#&#8203;20783](`nodejs/node#20783)
* [[`e16036c462`](nodejs/node@e16036c462)] - **test**: create new directory v8-updates (Matheus Marchini) [#&#8203;20783](`nodejs/node#20783)
* [[`93ce63c89f`](nodejs/node@93ce63c89f)] - **(SEMVER-MINOR)** **test**: add test against unsupported worker features (Timothy Gu) [#&#8203;20876](`nodejs/node#20876)
* [[`94dcdfb898`](nodejs/node@94dcdfb898)] - **test**: increase coverage for fs.promises.truncate (Masashi Hirano) [#&#8203;20638](`nodejs/node#20638)
* [[`c9cee63179`](nodejs/node@c9cee63179)] - **test,tools**: refactor custom ESLint for readability (Rich Trott) [#&#8203;21134](`nodejs/node#21134)
* [[`ed05d9a821`](nodejs/node@ed05d9a821)] - **(SEMVER-MINOR)** **test,tools**: enable running tests under workers (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`6285fe94f6`](nodejs/node@6285fe94f6)] - **tools**: do not disable `quotes` rule in .eslintrc.js (Rich Trott) [#&#8203;21338](`nodejs/node#21338)
* [[`98346de08c`](nodejs/node@98346de08c)] - **tools**: lint doc/\*.md files (Rich Trott) [#&#8203;21361](`nodejs/node#21361)
* [[`521f8f1d95`](nodejs/node@521f8f1d95)] - **tools**: add BigInt64Array and BigUint64Array to globals (Joyee Cheung) [#&#8203;21255](`nodejs/node#21255)
* [[`a5c386d1ba`](nodejs/node@a5c386d1ba)] - **tools**: add option to use custom template with js2c.py (Shelley Vohr) [#&#8203;21187](`nodejs/node#21187)
* [[`7f70fe83ef`](nodejs/node@7f70fe83ef)] - **tools**: add BigInt to globals (Nikolai Vavilov) [#&#8203;21237](`nodejs/node#21237)
* [[`4e742e379b`](nodejs/node@4e742e379b)] - **tools**: update tooling to work with new macOS CLI … (Rich Trott) [#&#8203;21173](`nodejs/node#21173)
* [[`ed2b57bcd5`](nodejs/node@ed2b57bcd5)] - **tools**: remove unused global types from type-parser (Rich Trott) [#&#8203;21135](`nodejs/node#21135)
* [[`d46446afc5`](nodejs/node@d46446afc5)] - **v8**: replace Buffer with FastBuffer in deserialize (Ujjwal Sharma) [#&#8203;21196](`nodejs/node#21196)
* [[`917960e0a1`](nodejs/node@917960e0a1)] - **win, build**: add documentation support to vcbuild (Bartosz Sosnowski) [#&#8203;19663](`nodejs/node#19663)
* [[`03fbc9e749`](nodejs/node@03fbc9e749)] - **(SEMVER-MINOR)** **worker**: rename to worker\_threads (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`9ad42b766e`](nodejs/node@9ad42b766e)] - **(SEMVER-MINOR)** **worker**: improve error (de)serialization (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`6b1a887aa2`](nodejs/node@6b1a887aa2)] - **(SEMVER-MINOR)** **worker**: enable stdio (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`c97fb91e55`](nodejs/node@c97fb91e55)] - **(SEMVER-MINOR)** **worker**: restrict supported extensions (Timothy Gu) [#&#8203;20876](`nodejs/node#20876)
* [[`109c92e8fa`](nodejs/node@109c92e8fa)] - **(SEMVER-MINOR)** **worker**: initial implementation (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`d1f372f052`](nodejs/node@d1f372f052)] - **(SEMVER-MINOR)** **worker**: add `SharedArrayBuffer` sharing (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`f447acd87b`](nodejs/node@f447acd87b)] - **(SEMVER-MINOR)** **worker**: support MessagePort passing in messages (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`337be58ee6`](nodejs/node@337be58ee6)] - **(SEMVER-MINOR)** **worker**: implement `MessagePort` and `MessageChannel` (Anna Henningsen) [#&#8203;20876](`nodejs/node#20876)
* [[`4a54ebc3bd`](nodejs/node@4a54ebc3bd)] - **worker,src**: display remaining handles if `uv\_loop\_close` fails (Anna Henningsen) [#&#8203;21238](`nodejs/node#21238)
* [[`529d24e3e8`](nodejs/node@529d24e3e8)] - ***Revert*** "**workers,trace_events**: set thread name for workers" (James M Snell) [#&#8203;21363](`nodejs/node#21363)
* [[`dfb5cf6963`](nodejs/node@dfb5cf6963)] - **workers,trace_events**: set thread name for workers (James M Snell) [#&#8203;21246](`nodejs/node#21246)

---

</details>




---

This PR has been generated by [Renovate Bot](https://renovatebot.com).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. semver-minor PRs that contain new features and should be released in the next minor version.
9 participants