diff --git a/.eslintrc.yaml b/.eslintrc.yaml
index 4f691caefd3a78..feb944f40bf774 100644
--- a/.eslintrc.yaml
+++ b/.eslintrc.yaml
@@ -3,7 +3,7 @@ env:
es6: true
parserOptions:
- ecmaVersion: 2016
+ ecmaVersion: 2017
rules:
# Possible Errors
@@ -40,6 +40,7 @@ rules:
no-octal: 2
no-redeclare: 2
no-self-assign: 2
+ no-throw-literal: 2
no-unused-labels: 2
no-useless-call: 2
no-useless-escape: 2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f02748767dad7..a61ac7d8cdcec3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,7 +28,8 @@ release.
- 7.5.0
+ 7.6.0
+ 7.5.0
7.4.0
7.3.0
7.2.1
diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md
index 7ac8f49ee09ff0..4ce11257b707f2 100644
--- a/COLLABORATOR_GUIDE.md
+++ b/COLLABORATOR_GUIDE.md
@@ -4,6 +4,9 @@
* [Issues and Pull Requests](#issues-and-pull-requests)
* [Accepting Modifications](#accepting-modifications)
+ - [Internal vs. Public API](#internal-vs-public-api)
+ - [Breaking Changes](#breaking-changes)
+ - [Deprecations](#deprecations)
- [Involving the CTC](#involving-the-ctc)
* [Landing Pull Requests](#landing-pull-requests)
- [Technical HOWTO](#technical-howto)
@@ -84,6 +87,206 @@ All pull requests that modify executable code should be subjected to
continuous integration tests on the
[project CI server](https://ci.nodejs.org/).
+### Internal vs. Public API
+
+Due to the nature of the JavaScript language, it can often be difficult to
+establish a clear distinction between which parts of the Node.js implementation
+represent the "public" API Node.js users should assume to be stable and which
+are considered part of the "internal" implementation detail of Node.js itself.
+A general rule of thumb has been to base the determination off what
+functionality is actually *documented* in the official Node.js API
+documentation. However, it has been repeatedly demonstrated that either the
+documentation does not completely cover implemented behavior or that Node.js
+users have come to rely heavily on undocumented aspects of the Node.js
+implementation.
+
+While there are numerous exceptions, the following general rules should be
+followed to determine which aspects of the Node.js API are considered
+"internal":
+
+- Any and all functionality exposed via `process.binding(...)` is considered to
+ be internal and *not* part of the Node.js Public API.
+- Any and all functionality implemented in `lib/internal/**/*.js` that is not
+ re-exported by code in `lib/*.js`, or is not documented as part of the
+ Node.js Public API, is considered to be internal.
+- Any object property or method whose key is a non-exported `Symbol` is
+ considered to be an internal property.
+- Any object property or method whose key begins with the underscore `_` prefix,
+ and is not documented as part of the Node.js Public API, is considered to be
+ an internal property.
+- Any object, property, method, argument, behavior, or event not documented in
+ the Node.js documentation is considered to be internal.
+- Any native C/C++ APIs/ABIs exported by the Node.js `*.h` header files that
+ are hidden behind the `NODE_WANT_INTERNALS` flag are considered to be
+ internal.
+
+Exception to each of these points can be made if use or behavior of a given
+internal API can be demonstrated to be sufficiently relied upon by the Node.js
+ecosystem such that any changes would cause too much breakage. The threshold
+for what qualifies as "too much breakage" is to be decided on a case-by-case
+basis by the CTC.
+
+If it is determined that a currently undocumented object, property, method,
+argument, or event *should* be documented, then a pull request adding the
+documentation is required in order for it to be considered part of the "public"
+API.
+
+Making a determination about whether something *should* be documented can be
+difficult and will need to be handled on a case-by-case basis. For instance, if
+one documented API cannot be used successfully without the use of a second
+*currently undocumented* API, then the second API *should* be documented. If
+using an API in a manner currently undocumented achieves a particular useful
+result, a decision will need to be made whether or not that falls within the
+supported scope of that API; and if it does, it should be documented.
+
+Breaking changes to internal elements are permitted in semver-patch or
+semver-minor commits but Collaborators should take significant care when
+making and reviewing such changes. Before landing such commits, an effort
+must be made to determine the potential impact of the change in the ecosystem
+by analyzing current use and by validating such changes through ecosystem
+testing using the [Canary in the Goldmine](https://github.com/nodejs/citgm)
+tool. If a change cannot be made without ecosystem breakage, then CTC review is
+required before landing the change as anything less than semver-major.
+
+If a determination is made that a particular internal API (for instance, an
+underscore `_` prefixed property) is sufficiently relied upon by the ecosystem
+such that any changes may break user code, then serious consideration should be
+given to providing an alternative Public API for that functionality before any
+breaking changes are made.
+
+### Breaking Changes
+
+Backwards-incompatible changes may land on the master branch at any time after
+sufficient review by collaborators and approval of at least two CTC members.
+
+Examples of breaking changes include, but are not necessarily limited to,
+removal or redefinition of existing API arguments, changing return values
+(except when return values do not currently exist), removing or modifying
+existing properties on an options argument, adding or removing errors,
+changing error messages in any way, altering expected timing of an event (e.g.
+moving from sync to async responses or vice versa), and changing the
+non-internal side effects of using a particular API.
+
+With a few notable exceptions outlined below, when backwards incompatible
+changes to a *Public* API are necessary, the existing API *must* be deprecated
+*first* and the new API either introduced in parallel or added after the next
+major Node.js version following the deprecation as a replacement for the
+deprecated API. In other words, as a general rule, existing *Public* APIs
+*must not* change (in a backwards incompatible way) without a deprecation.
+
+Exception to this rule is given in the following cases:
+
+* Adding or removing errors thrown or reported by a Public API;
+* Changing error messages;
+* Altering the timing and non-internal side effects of the Public API.
+
+Such changes *must* be handled as semver-major changes but MAY be landed
+without a [Deprecation cycle](#deprecation-cycle).
+
+From time-to-time, in particularly exceptional cases, the CTC may be asked to
+consider and approve additional exceptions to this rule.
+
+Purely additive changes (e.g. adding new events to EventEmitter
+implementations, adding new arguments to a method in a way that allows
+existing code to continue working without modification, or adding new
+properties to an options argument) are handled as semver-minor changes.
+
+Note that errors thrown, along with behaviors and APIs implemented by
+dependencies of Node.js (e.g. those originating from V8) are generally not
+under the control of Node.js and therefore *are not directly subject to this
+policy*. However, care should still be taken when landing updates to
+dependencies when it is known or expected that breaking changes to error
+handling may have been made. Additional CI testing may be required.
+
+#### When breaking changes actually break things
+
+Breaking changes are difficult primarily because they change the fundamental
+assumptions a user of Node.js has when writing their code and can cause
+existing code to stop functioning as expected -- costing developers and users
+time and energy to fix.
+
+Because breaking (semver-major) changes are permitted to land in master at any
+time, it should be *understood and expected* that at least some subset of the
+user ecosystem *may* be adversely affected *in the short term* when attempting
+to build and use Node.js directly from master. This potential instability is
+precisely why Node.js offers distinct Current and LTS release streams that
+offer explicit stability guarantees.
+
+Specifically:
+
+* Breaking changes should *never* land in Current or LTS except when:
+ * Resolving critical security issues.
+ * Fixing a critical bug (e.g. fixing a memory leak) requires a breaking
+ change.
+ * There is CTC consensus that the change is required.
+* If a breaking commit does accidentally land in a Current or LTS branch, an
+ attempt to fix the issue will be made before the next release; If no fix is
+ provided then the commit will be reverted.
+
+When any change is landed in master, and it is determined that the such
+changes *do* break existing code, a decision may be made to revert those
+changes either temporarily or permanently. However, the decision to revert or
+not can often be based on many complex factors that are not easily codified. It
+is also possible that the breaking commit can be labeled retroactively as a
+semver-major change that will not be backported to Current or LTS branches.
+
+### Deprecations
+
+Deprecation refers to the identification of Public APIs that should no longer
+be used and that may be removed or modified in non-backwards compatible ways in
+a future major release of Node.js. Deprecation *may* be used with internal APIs
+if there is expected impact on the user community.
+
+Node.js uses three fundamental Deprecation levels:
+
+* *Documentation-Only Deprecation* refers to elements of the Public API that are
+ being staged for deprecation in a future Node.js major release. An explicit
+ notice indicating the deprecated status is added to the API documentation
+ *but no functional changes are implemented in the code*. There will be no
+ runtime deprecation warning emitted for such deprecations.
+
+* *Runtime Deprecation* refers to the use of process warnings emitted at
+ runtime the first time that a deprecated API is used. A command-line
+ switch can be used to escalate such warnings into runtime errors that will
+ cause the Node.js process to exit. As with Documentation-Only Deprecation,
+ the documentation for the API must be updated to clearly indicate the
+ deprecated status.
+
+* *End-of-life* refers to APIs that have gone through Runtime Deprecation and
+ are ready to be removed from Node.js entirely.
+
+Documentation-Only Deprecations *may* be handled as semver-minor or
+semver-major changes. Such deprecations have no impact on the successful
+operation of running code and therefore should not be viewed as breaking
+changes.
+
+Runtime Deprecations and End-of-life APIs (internal or public) *must* be
+handled as semver-major changes unless there is CTC consensus to land the
+deprecation as a semver-minor.
+
+All Documentation-Only and Runtime deprecations will be assigned a unique
+identifier that can be used to persistently refer to the deprecation in
+documentation, emitted process warnings, or errors thrown. Documentation for
+these identifiers will be included in the Node.js API documentation and will
+be immutable once assigned. Even if End-of-Life code is removed from Node.js,
+the documentation for the assigned deprecation identifier must remain in the
+Node.js API documentation.
+
+
+A "Deprecation cycle" is one full Node.js major release during which an API
+has been in one of the three Deprecation levels. (Note that Documentation-Only
+Deprecations may land in a Node.js minor release but must not be upgraded to
+a Runtime Deprecation until the next major release.)
+
+No API can be moved to End-of-life without first having gone through a
+Runtime Deprecation cycle.
+
+A best effort will be made to communicate pending deprecations and associated
+mitigations with the ecosystem as soon as possible (preferably *before* the pull
+request adding the deprecation lands in master). All deprecations included in
+a Node.js release should be listed prominently in the "Notable Changes" section
+of the release notes.
+
### Involving the CTC
Collaborators may opt to elevate pull requests or issues to the CTC for
@@ -291,7 +494,7 @@ You can find more information [in the full LTS plan](https://github.com/nodejs/l
#### How does LTS work?
-Once a stable branch enters LTS, changes in that branch are limited to bug
+Once a Current branch enters LTS, changes in that branch are limited to bug
fixes, security updates, possible npm updates, documentation updates, and
certain performance improvements that can be demonstrated to not break existing
applications. Semver-minor changes are only permitted if required for bug fixes
@@ -299,7 +502,7 @@ and then only on a case-by-case basis with LTS WG and possibly Core Technical
Committee (CTC) review. Semver-major changes are permitted only if required for
security related fixes.
-Once a stable branch moves into Maintenance mode, only **critical** bugs,
+Once a Current branch moves into Maintenance mode, only **critical** bugs,
**critical** security fixes, and documentation updates will be permitted.
#### Landing semver-minor commits in LTS
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 736a9542c42baf..6965f78b4d3e21 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -16,7 +16,7 @@ For general help using Node.js, please file an issue at the
[Node.js help repository](https://github.com/nodejs/help/issues).
Discussion of non-technical topics including subjects like intellectual
-property, trademark and high level project questions should move to the
+property, trademark, and high level project questions should move to the
[Technical Steering Committee (TSC)](https://github.com/nodejs/TSC/issues)
instead.
@@ -109,8 +109,8 @@ changed and why. Follow these guidelines when writing one:
lowercase with the exception of proper nouns, acronyms, and the ones that
refer to code, like function/variable names. The description should
be prefixed with the name of the changed subsystem and start with an
- imperative verb, for example, "net: add localAddress and localPort
- to Socket".
+ imperative verb. Example: "net: add localAddress and localPort
+ to Socket"
2. Keep the second line blank.
3. Wrap all other lines at 72 columns.
@@ -121,11 +121,11 @@ subsystem: explain the commit in one line
Body of commit message is a few lines of text, explaining things
in more detail, possibly giving some background about the issue
-being fixed, etc. etc.
+being fixed, etc.
The body of the commit message can be several paragraphs, and
please do proper word-wrap and keep columns shorter than about
-72 characters or so. That way `git log` will show things
+72 characters or so. That way, `git log` will show things
nicely even when it is indented.
```
@@ -170,19 +170,21 @@ $ ./configure && make -j4 test
Windows:
```text
- .\vcbuild nosign test
+> vcbuild test
```
(See the [BUILDING.md](./BUILDING.md) for more details.)
-Make sure the linter is happy and that all tests pass. Please, do not submit
-patches that fail either check.
+Make sure the linter does not report any issues and that all tests pass. Please
+do not submit patches that fail either check.
-Running `make test`/`.\vcbuild nosign test` will run the linter as well unless one or
+Running `make test`/`vcbuild test` will run the linter as well unless one or
more tests fail.
If you want to run the linter without running tests, use
-`make lint`/`.\vcbuild nosign jslint`.
+`make lint`/`vcbuild jslint`. At this time, only JavaScript linting is
+available on Windows. `make lint` on POSIX will run both JavaScript linting and
+C++ linting.
If you are updating tests and just want to run a single test to check it, you
can use this syntax to run it exactly as the test harness would:
@@ -214,7 +216,7 @@ Pull requests are usually reviewed within a few days.
### Step 7: Discuss and update
You will probably get feedback or requests for changes to your Pull Request.
-This is a big part of the submission process, so don't be disheartened!
+This is a big part of the submission process so don't be disheartened!
To make changes to an existing Pull Request, make the changes to your branch.
When you push that branch to your fork, GitHub will automatically update the
@@ -252,7 +254,7 @@ If in doubt, you can always ask for guidance in the Pull Request or on
Feel free to post a comment in the Pull Request to ping reviewers if you are
awaiting an answer on something. If you encounter words or acronyms that
-seem unfamiliar, check out this
+seem unfamiliar, refer to this
[glossary](https://sites.google.com/a/chromium.org/dev/glossary).
Note that multiple commits often get squashed when they are landed (see the
@@ -260,7 +262,7 @@ notes about [commit squashing](#commit-squashing)).
### Step 8: Landing
-In order to get landed, a Pull Request needs to be reviewed and
+In order to land, a Pull Request needs to be reviewed and
[approved](#getting-approvals-for-your-pull-request) by
at least one Node.js Collaborator and pass a
[CI (Continuous Integration) test run](#ci-testing).
@@ -280,8 +282,8 @@ your name on it. Congratulations and thanks for your contribution!
### Commit Squashing
-When the commits in your Pull Request get landed, they will be squashed
-into one commit per logical change, with metadata added to the commit
+When the commits in your Pull Request land, they will be squashed
+into one commit per logical change. Metadata will be added to the commit
message (including links to the Pull Request, links to relevant issues,
and the names of the reviewers). The commit history of your Pull Request,
however, will stay intact on the Pull Request page.
@@ -311,9 +313,9 @@ Every Pull Request needs to be tested
to make sure that it works on the platforms that Node.js
supports. This is done by running the code through the CI system.
-Only a Collaborator can request a CI run. Usually one of them will do it
+Only a Collaborator can start a CI run. Usually one of them will do it
for you as approvals for the Pull Request come in.
-If not, you can ask a Collaborator to request a CI run.
+If not, you can ask a Collaborator to start a CI run.
### Waiting Until the Pull Request Gets Landed
diff --git a/LICENSE b/LICENSE
index 4ffd4869b2360a..f87654b61c3dbf 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1071,23 +1071,6 @@ The externally maintained libraries used by Node.js are:
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
-- node-weak, located at test/gc/node_modules/weak, is licensed as follows:
- """
- Copyright (c) 2011, Ben Noordhuis
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- """
-
- v8_inspector, located at deps/v8_inspector/third_party/v8_inspector, is licensed as follows:
"""
// Copyright 2015 The Chromium Authors. All rights reserved.
diff --git a/Makefile b/Makefile
index 7cd85983708fbd..2aac5c2f6a26e0 100644
--- a/Makefile
+++ b/Makefile
@@ -133,10 +133,11 @@ test-parallel: all
test-valgrind: all
$(PYTHON) tools/test.py --mode=release --valgrind sequential parallel message
-test/gc/node_modules/weak/build/Release/weakref.node: $(NODE_EXE)
+test/gc/build/Release/binding.node: \
+ $(NODE_EXE) test/gc/binding.cc test/gc/binding.gyp
$(NODE) deps/npm/node_modules/node-gyp/bin/node-gyp rebuild \
--python="$(PYTHON)" \
- --directory="$(shell pwd)/test/gc/node_modules/weak" \
+ --directory="$(shell pwd)/test/gc" \
--nodedir="$(shell pwd)"
# Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
@@ -188,12 +189,21 @@ test/addons/.buildstamp: config.gypi \
# TODO(bnoordhuis) Force rebuild after gyp update.
build-addons: $(NODE_EXE) test/addons/.buildstamp
-test-gc: all test/gc/node_modules/weak/build/Release/weakref.node
+ifeq ($(OSTYPE),$(filter $(OSTYPE),darwin aix))
+ XARGS = xargs
+else
+ XARGS = xargs -r
+endif
+clear-stalled:
+ ps awwx | grep Release/node | grep -v grep | cat
+ ps awwx | grep Release/node | grep -v grep | awk '{print $$1}' | $(XARGS) kill
+
+test-gc: all test/gc/build/Release/binding.node
$(PYTHON) tools/test.py --mode=release gc
test-build: | all build-addons
-test-all: test-build test/gc/node_modules/weak/build/Release/weakref.node
+test-all: test-build test/gc/build/Release/binding.node
$(PYTHON) tools/test.py --mode=debug,release
test-all-valgrind: test-build
@@ -210,13 +220,13 @@ test-ci-native: | test/addons/.buildstamp
$(TEST_CI_ARGS) $(CI_NATIVE_SUITES)
# This target should not use a native compiler at all
-test-ci-js:
+test-ci-js: | clear-stalled
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
$(TEST_CI_ARGS) $(CI_JS_SUITES)
test-ci: LOGLEVEL := info
-test-ci: | build-addons
+test-ci: | clear-stalled build-addons
out/Release/cctest --gtest_output=tap:cctest.tap
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
@@ -246,6 +256,10 @@ test-debugger: all
test-inspector: all
$(PYTHON) tools/test.py inspector
+test-node-inspect: $(NODE_EXE)
+ USE_EMBEDDED_NODE_INSPECT=1 $(NODE) tools/test-npm-package \
+ --install deps/node-inspect test
+
test-tick-processor: all
$(PYTHON) tools/test.py tick-processor
@@ -504,7 +518,7 @@ PKGDIR=out/dist-osx
release-only:
@if [ "$(DISTTYPE)" != "nightly" ] && [ "$(DISTTYPE)" != "next-nightly" ] && \
`grep -q REPLACEME doc/api/*.md`; then \
- echo 'Please update Added: tags in the documentation first.' ; \
+ echo 'Please update REPLACEME in Added: tags in doc/api/*.md (See doc/releases.md)' ; \
exit 1 ; \
fi
@if [ "$(shell git status --porcelain | egrep -v '^\?\? ')" = "" ]; then \
@@ -728,6 +742,7 @@ CPPLINT_FILES = $(filter-out $(CPPLINT_EXCLUDE), $(wildcard \
test/addons/*/*.h \
test/cctest/*.cc \
test/cctest/*.h \
+ test/gc/binding.cc \
tools/icu/*.cc \
tools/icu/*.h \
))
@@ -764,4 +779,4 @@ endif
bench-all bench bench-misc bench-array bench-buffer bench-net \
bench-http bench-fs bench-tls cctest run-ci test-v8 test-v8-intl \
test-v8-benchmarks test-v8-all v8 lint-ci bench-ci jslint-ci doc-only \
- $(TARBALL)-headers test-ci test-ci-native test-ci-js build-ci
+ $(TARBALL)-headers test-ci test-ci-native test-ci-js build-ci clear-stalled
diff --git a/README.md b/README.md
index 0ff8e13791a96a..7fe05e05e27ad0 100644
--- a/README.md
+++ b/README.md
@@ -155,58 +155,56 @@ more information about the governance of the Node.js project, see
### CTC (Core Technical Committee)
* [addaleax](https://github.com/addaleax) -
-**Anna Henningsen** <anna@addaleax.net>
+**Anna Henningsen** <anna@addaleax.net> (she/her)
* [bnoordhuis](https://github.com/bnoordhuis) -
**Ben Noordhuis** <info@bnoordhuis.nl>
* [ChALkeR](https://github.com/ChALkeR) -
-**Сковорода Никита Андреевич** <chalkerx@gmail.com>
-* [chrisdickinson](https://github.com/chrisdickinson) -
-**Chris Dickinson** <christopher.s.dickinson@gmail.com>
+**Сковорода Никита Андреевич** <chalkerx@gmail.com> (he/him)
* [cjihrig](https://github.com/cjihrig) -
**Colin Ihrig** <cjihrig@gmail.com>
* [evanlucas](https://github.com/evanlucas) -
-**Evan Lucas** <evanlucas@me.com>
+**Evan Lucas** <evanlucas@me.com> (he/him)
* [fishrock123](https://github.com/fishrock123) -
**Jeremiah Senkpiel** <fishrock123@rocketmail.com>
* [indutny](https://github.com/indutny) -
**Fedor Indutny** <fedor.indutny@gmail.com>
* [jasnell](https://github.com/jasnell) -
-**James M Snell** <jasnell@gmail.com>
+**James M Snell** <jasnell@gmail.com> (he/him)
* [mhdawson](https://github.com/mhdawson) -
-**Michael Dawson** <michael_dawson@ca.ibm.com>
+**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him)
* [misterdjules](https://github.com/misterdjules) -
**Julien Gilli** <jgilli@nodejs.org>
* [mscdex](https://github.com/mscdex) -
**Brian White** <mscdex@mscdex.net>
* [MylesBorins](https://github.com/MylesBorins) -
-**Myles Borins** <myles.borins@gmail.com>
+**Myles Borins** <myles.borins@gmail.com> (he/him)
* [ofrobots](https://github.com/ofrobots) -
**Ali Ijaz Sheikh** <ofrobots@google.com>
* [rvagg](https://github.com/rvagg) -
**Rod Vagg** <rod@vagg.org>
* [shigeki](https://github.com/shigeki) -
-**Shigeki Ohtsu** <ohtsu@iij.ad.jp>
+**Shigeki Ohtsu** <ohtsu@iij.ad.jp> (he/him)
* [targos](https://github.com/targos) -
-**Michaël Zasso** <targos@protonmail.com>
+**Michaël Zasso** <targos@protonmail.com> (he/him)
* [thefourtheye](https://github.com/thefourtheye) -
-**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com>
+**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him)
* [trevnorris](https://github.com/trevnorris) -
**Trevor Norris** <trev.norris@gmail.com>
* [Trott](https://github.com/Trott) -
-**Rich Trott** <rtrott@gmail.com>
+**Rich Trott** <rtrott@gmail.com> (he/him)
### Collaborators
* [abouthiroppy](https://github.com/abouthiroppy) -
-**Yuta Hiroto** <hello@about-hiroppy.com>
+**Yuta Hiroto** <hello@about-hiroppy.com> (he/him)
* [ak239](https://github.com/ak239) -
**Aleksei Koziatinskii** <ak239spb@gmail.com>
* [andrasq](https://github.com/andrasq) -
**Andras** <andras@kinvey.com>
* [AndreasMadsen](https://github.com/AndreasMadsen) -
-**Andreas Madsen** <amwebdk@gmail.com>
+**Andreas Madsen** <amwebdk@gmail.com> (he/him)
* [bengl](https://github.com/bengl) -
-**Bryan English** <bryan@bryanenglish.com>
+**Bryan English** <bryan@bryanenglish.com> (he/him)
* [benjamingr](https://github.com/benjamingr) -
**Benjamin Gruenbaum** <benjamingr@gmail.com>
* [bmeck](https://github.com/bmeck) -
@@ -217,12 +215,14 @@ more information about the governance of the Node.js project, see
**Bartosz Sosnowski** <bartosz@janeasystems.com>
* [calvinmetcalf](https://github.com/calvinmetcalf) -
**Calvin Metcalf** <calvin.metcalf@gmail.com>
+* [chrisdickinson](https://github.com/chrisdickinson) -
+**Chris Dickinson** <christopher.s.dickinson@gmail.com>
* [claudiorodriguez](https://github.com/claudiorodriguez) -
**Claudio Rodriguez** <cjrodr@yahoo.com>
* [danbev](https://github.com/danbev) -
**Daniel Bevenius** <daniel.bevenius@gmail.com>
* [edsadr](https://github.com/edsadr) -
-**Adrian Estrada** <edsadr@gmail.com>
+**Adrian Estrada** <edsadr@gmail.com> (he/him)
* [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) -
**Robert Jefe Lindstaedt** <robert.lindstaedt@gmail.com>
* [estliberitas](https://github.com/estliberitas) -
@@ -236,7 +236,7 @@ more information about the governance of the Node.js project, see
* [geek](https://github.com/geek) -
**Wyatt Preul** <wpreul@gmail.com>
* [gibfahn](https://github.com/gibfahn) -
-**Gibson Fahnestock** <gibfahn@gmail.com>
+**Gibson Fahnestock** <gibfahn@gmail.com> (he/him)
* [iarna](https://github.com/iarna) -
**Rebecca Turner** <me@re-becca.org>
* [imyller](https://github.com/imyller) -
@@ -244,7 +244,7 @@ more information about the governance of the Node.js project, see
* [isaacs](https://github.com/isaacs) -
**Isaac Z. Schlueter** <i@izs.me>
* [italoacasas](https://github.com/italoacasas) -
-**Italo A. Casas** <me@italoacasas.com>
+**Italo A. Casas** <me@italoacasas.com> (he/him)
* [iWuzHere](https://github.com/iWuzHere) -
**Imran Iqbal** <imran@imraniqbal.org>
* [JacksonTian](https://github.com/JacksonTian) -
@@ -258,23 +258,23 @@ more information about the governance of the Node.js project, see
* [joshgav](https://github.com/joshgav) -
**Josh Gavant** <josh.gavant@outlook.com>
* [joyeecheung](https://github.com/joyeecheung) -
-**Joyee Cheung** <joyeec9h3@gmail.com>
+**Joyee Cheung** <joyeec9h3@gmail.com> (she/her)
* [julianduque](https://github.com/julianduque) -
-**Julian Duque** <julianduquej@gmail.com>
+**Julian Duque** <julianduquej@gmail.com> (he/him)
* [JungMinu](https://github.com/JungMinu) -
-**Minwoo Jung** <jmwsoft@gmail.com>
+**Minwoo Jung** <minwoo@nodesource.com> (he/him)
* [lance](https://github.com/lance) -
**Lance Ball** <lball@redhat.com>
* [lpinca](https://github.com/lpinca) -
-**Luigi Pinca** <luigipinca@gmail.com>
+**Luigi Pinca** <luigipinca@gmail.com> (he/him)
* [lxe](https://github.com/lxe) -
**Aleksey Smolenchuk** <lxe@lxe.co>
* [matthewloring](https://github.com/matthewloring) -
**Matthew Loring** <mattloring@google.com>
* [mcollina](https://github.com/mcollina) -
-**Matteo Collina** <matteo.collina@gmail.com>
+**Matteo Collina** <matteo.collina@gmail.com> (he/him)
* [micnic](https://github.com/micnic) -
-**Nicu Micleușanu** <micnic90@gmail.com>
+**Nicu Micleușanu** <micnic90@gmail.com> (he/him)
* [mikeal](https://github.com/mikeal) -
**Mikeal Rogers** <mikeal.rogers@gmail.com>
* [monsanto](https://github.com/monsanto) -
@@ -286,7 +286,7 @@ more information about the governance of the Node.js project, see
* [orangemocha](https://github.com/orangemocha) -
**Alexis Campailla** <orangemocha@nodejs.org>
* [othiym23](https://github.com/othiym23) -
-**Forrest L Norvell** <ogd@aoaioxxysz.net>
+**Forrest L Norvell** <ogd@aoaioxxysz.net> (he/him)
* [petkaantonov](https://github.com/petkaantonov) -
**Petka Antonov** <petka_antonov@hotmail.com>
* [phillipj](https://github.com/phillipj) -
@@ -298,7 +298,7 @@ more information about the governance of the Node.js project, see
* [princejwesley](https://github.com/princejwesley) -
**Prince John Wesley** <princejohnwesley@gmail.com>
* [qard](https://github.com/qard) -
-**Stephen Belanger** <admin@stephenbelanger.com>
+**Stephen Belanger** <admin@stephenbelanger.com> (he/him)
* [rlidwka](https://github.com/rlidwka) -
**Alex Kocharin** <alex@kocharin.ru>
* [rmg](https://github.com/rmg) -
@@ -328,11 +328,11 @@ more information about the governance of the Node.js project, see
* [tellnes](https://github.com/tellnes) -
**Christian Tellnes** <christian@tellnes.no>
* [thekemkid](https://github.com/thekemkid) -
-**Glen Keane** <glenkeane.94@gmail.com>
+**Glen Keane** <glenkeane.94@gmail.com> (he/him)
* [thlorenz](https://github.com/thlorenz) -
**Thorsten Lorenz** <thlorenz@gmx.de>
* [TimothyGu](https://github.com/TimothyGu) -
-**Timothy Gu** <timothygu99@gmail.com>
+**Timothy Gu** <timothygu99@gmail.com> (he/him)
* [tunniclm](https://github.com/tunniclm) -
**Mike Tunnicliffe** <m.j.tunnicliffe@gmail.com>
* [vkurchatkin](https://github.com/vkurchatkin) -
@@ -350,12 +350,14 @@ project.
### Release Team
-Releases of Node.js and io.js will be signed with one of the following GPG keys:
+Node.js releases are signed with one of the following GPG keys:
* **Colin Ihrig** <cjihrig@gmail.com>
`94AE36675C464D64BAFA68DD7434390BDBE9B9C5`
* **Evan Lucas** <evanlucas@me.com>
`B9AE9905FFD7803F25714661B63B535A4C206CA9`
+* **Italo A. Casas** <me@italoacasas.com>
+`56730D5401028683275BD23C23EFEFE93C4CFFFE`
* **James M Snell** <jasnell@keybase.io>
`71DCFD284A79C3B38668286BC97EC7A07EDE3FC1`
* **Jeremiah Senkpiel** <fishrock@keybase.io>
@@ -374,13 +376,13 @@ gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97E
gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D
gpg --keyserver pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8
gpg --keyserver pool.sks-keyservers.net --recv-keys B9AE9905FFD7803F25714661B63B535A4C206CA9
+gpg --keyserver pool.sks-keyservers.net --recv-keys 56730D5401028683275BD23C23EFEFE93C4CFFFE
```
See the section above on [Verifying Binaries](#verifying-binaries) for details
on what to do with these keys to verify that a downloaded file is official.
-Previous releases of Node.js have been signed with one of the following GPG
-keys:
+Previous releases may also have been signed with one of the following GPG keys:
* **Chris Dickinson** <christopher.s.dickinson@gmail.com>
`9554F04D7259F04124DE6B476D5A82AC7E37093B`
diff --git a/benchmark/README.md b/benchmark/README.md
index 8796e1e7b6ad38..d1233470757f20 100644
--- a/benchmark/README.md
+++ b/benchmark/README.md
@@ -22,7 +22,7 @@ either [`wrk`][wrk] or [`autocannon`][autocannon].
path, hence if you want to compare two HTTP benchmark runs make sure that the
Node version in the path is not altered.
-`wrk` may be available through your preferred package manger. If not, you can
+`wrk` may be available through your preferred package manager. If not, you can
easily build it [from source][wrk] via `make`.
By default `wrk` will be used as benchmarker. If it is not available
@@ -55,8 +55,8 @@ In the event you get a message that you need to select a CRAN mirror first.
You can specify a mirror by adding in the repo parameter.
-If we used the "http://cran.us.r-project.org" mirror, it could look somehting like
-this:
+If we used the "http://cran.us.r-project.org" mirror, it could look something
+like this:
```R
install.packages("ggplot2", repo="http://cran.us.r-project.org")
@@ -180,7 +180,7 @@ to be no improvements, then there shouldn't be any stars.
**A word of caution:** Statistics is not a foolproof tool. If a benchmark shows
a statistical significant difference, there is a 5% risk that this
-difference doesn't actually exists. For a single benchmark this is not an
+difference doesn't actually exist. For a single benchmark this is not an
issue. But when considering 20 benchmarks it's normal that one of them
will show significance, when it shouldn't. A possible solution is to instead
consider at least two stars (`**`) as the threshold, in that case the risk
diff --git a/benchmark/assert/deepequal-buffer.js b/benchmark/assert/deepequal-buffer.js
new file mode 100644
index 00000000000000..2a7d9e3bed7c38
--- /dev/null
+++ b/benchmark/assert/deepequal-buffer.js
@@ -0,0 +1,40 @@
+'use strict';
+const common = require('../common.js');
+const assert = require('assert');
+const bench = common.createBenchmark(main, {
+ n: [1e3],
+ len: [1e2],
+ method: ['strict', 'nonstrict']
+});
+
+function main(conf) {
+ const n = +conf.n;
+ const len = +conf.len;
+ var i;
+
+ const data = Buffer.allocUnsafe(len);
+ const actual = Buffer.alloc(len);
+ const expected = Buffer.alloc(len);
+ data.copy(actual);
+ data.copy(expected);
+
+ switch (conf.method) {
+ case 'strict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'nonstrict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
+ }
+}
diff --git a/benchmark/assert/deepequal-prims-and-objs-big-array.js b/benchmark/assert/deepequal-prims-and-objs-big-array.js
index 1b4802c8ff4ac2..69eda8af087dfa 100644
--- a/benchmark/assert/deepequal-prims-and-objs-big-array.js
+++ b/benchmark/assert/deepequal-prims-and-objs-big-array.js
@@ -1,6 +1,6 @@
'use strict';
-var common = require('../common.js');
-var assert = require('assert');
+const common = require('../common.js');
+const assert = require('assert');
const primValues = {
'null': null,
@@ -13,29 +13,43 @@ const primValues = {
'new-array': new Array([1, 2, 3])
};
-var bench = common.createBenchmark(main, {
+const bench = common.createBenchmark(main, {
prim: Object.keys(primValues),
- n: [25]
+ n: [25],
+ len: [1e5],
+ method: ['strict', 'nonstrict']
});
function main(conf) {
- var prim = primValues[conf.prim];
- var n = +conf.n;
- var primArray;
- var primArrayCompare;
- var x;
+ const prim = primValues[conf.prim];
+ const n = +conf.n;
+ const len = +conf.len;
+ const actual = [];
+ const expected = [];
+ var i;
- primArray = new Array();
- primArrayCompare = new Array();
- for (x = 0; x < (1e5); x++) {
- primArray.push(prim);
- primArrayCompare.push(prim);
+ for (var x = 0; x < len; x++) {
+ actual.push(prim);
+ expected.push(prim);
}
- bench.start();
- for (x = 0; x < n; x++) {
- // eslint-disable-next-line no-restricted-properties
- assert.deepEqual(primArray, primArrayCompare);
+ switch (conf.method) {
+ case 'strict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'nonstrict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
}
- bench.end(n);
}
diff --git a/benchmark/assert/deepequal-prims-and-objs-big-loop.js b/benchmark/assert/deepequal-prims-and-objs-big-loop.js
index dea084bc984126..781c5ad754e723 100644
--- a/benchmark/assert/deepequal-prims-and-objs-big-loop.js
+++ b/benchmark/assert/deepequal-prims-and-objs-big-loop.js
@@ -1,6 +1,6 @@
'use strict';
-var common = require('../common.js');
-var assert = require('assert');
+const common = require('../common.js');
+const assert = require('assert');
const primValues = {
'null': null,
@@ -13,22 +13,37 @@ const primValues = {
'new-array': new Array([1, 2, 3])
};
-var bench = common.createBenchmark(main, {
+const bench = common.createBenchmark(main, {
prim: Object.keys(primValues),
- n: [1e5]
+ n: [1e6],
+ method: ['strict', 'nonstrict']
});
function main(conf) {
- var prim = primValues[conf.prim];
- var n = +conf.n;
- var x;
+ const prim = primValues[conf.prim];
+ const n = +conf.n;
+ const actual = prim;
+ const expected = prim;
+ var i;
- bench.start();
-
- for (x = 0; x < n; x++) {
- // eslint-disable-next-line no-restricted-properties
- assert.deepEqual(new Array([prim]), new Array([prim]));
+ // Creates new array to avoid loop invariant code motion
+ switch (conf.method) {
+ case 'strict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual([actual], [expected]);
+ }
+ bench.end(n);
+ break;
+ case 'nonstrict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual([actual], [expected]);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
}
-
- bench.end(n);
}
diff --git a/benchmark/assert/deepequal-typedarrays.js b/benchmark/assert/deepequal-typedarrays.js
index 1954c57ee59eeb..037cfb2cf1ec3c 100644
--- a/benchmark/assert/deepequal-typedarrays.js
+++ b/benchmark/assert/deepequal-typedarrays.js
@@ -1,23 +1,41 @@
'use strict';
-var common = require('../common.js');
-var assert = require('assert');
-var bench = common.createBenchmark(main, {
+const common = require('../common.js');
+const assert = require('assert');
+const bench = common.createBenchmark(main, {
type: ('Int8Array Uint8Array Int16Array Uint16Array Int32Array Uint32Array ' +
'Float32Array Float64Array Uint8ClampedArray').split(' '),
- n: [1]
+ n: [1],
+ method: ['strict', 'nonstrict'],
+ len: [1e6]
});
function main(conf) {
- var type = conf.type;
- var clazz = global[type];
- var n = +conf.n;
+ const type = conf.type;
+ const clazz = global[type];
+ const n = +conf.n;
+ const len = +conf.len;
- bench.start();
- var actual = new clazz(n * 1e6);
- var expected = new clazz(n * 1e6);
+ const actual = new clazz(len);
+ const expected = new clazz(len);
+ var i;
- // eslint-disable-next-line no-restricted-properties
- assert.deepEqual(actual, expected);
-
- bench.end(n);
+ switch (conf.method) {
+ case 'strict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'nonstrict':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
+ }
}
diff --git a/benchmark/es/spread-bench.js b/benchmark/es/spread-bench.js
new file mode 100644
index 00000000000000..a9416ad90ef4b3
--- /dev/null
+++ b/benchmark/es/spread-bench.js
@@ -0,0 +1,59 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ method: ['apply', 'spread', 'call-spread'],
+ count: [5, 10, 20],
+ context: ['context', 'null'],
+ rest: [0, 1],
+ millions: [5]
+});
+
+function makeTest(count, rest) {
+ if (rest) {
+ return function test(...args) {
+ assert.strictEqual(count, args.length);
+ };
+ } else {
+ return function test() {
+ assert.strictEqual(count, arguments.length);
+ };
+ }
+}
+
+function main(conf) {
+ const n = +conf.millions * 1e6;
+ const ctx = conf.context === 'context' ? {} : null;
+ var fn = makeTest(conf.count, conf.rest);
+ const args = new Array(conf.count);
+ var i;
+ for (i = 0; i < conf.count; i++)
+ args[i] = i;
+
+ switch (conf.method) {
+ case 'apply':
+ bench.start();
+ for (i = 0; i < n; i++)
+ fn.apply(ctx, args);
+ bench.end(n / 1e6);
+ break;
+ case 'spread':
+ if (ctx !== null)
+ fn = fn.bind(ctx);
+ bench.start();
+ for (i = 0; i < n; i++)
+ fn(...args);
+ bench.end(n / 1e6);
+ break;
+ case 'call-spread':
+ bench.start();
+ for (i = 0; i < n; i++)
+ fn.call(ctx, ...args);
+ bench.end(n / 1e6);
+ break;
+ default:
+ throw new Error('Unexpected method');
+ }
+}
diff --git a/benchmark/url/legacy-vs-whatwg-url-parse.js b/benchmark/url/legacy-vs-whatwg-url-parse.js
index ca7a48466c7dc3..64533e67e4a46a 100644
--- a/benchmark/url/legacy-vs-whatwg-url-parse.js
+++ b/benchmark/url/legacy-vs-whatwg-url-parse.js
@@ -34,7 +34,7 @@ function useLegacy(n, input) {
}
function useWHATWG(n, input) {
- var noDead = url.parse(input);
+ var noDead = new URL(input);
bench.start();
for (var i = 0; i < n; i += 1) {
noDead = new URL(input);
diff --git a/benchmark/url/legacy-vs-whatwg-url-searchparams-parse.js b/benchmark/url/legacy-vs-whatwg-url-searchparams-parse.js
new file mode 100644
index 00000000000000..e76f2dd837bb97
--- /dev/null
+++ b/benchmark/url/legacy-vs-whatwg-url-searchparams-parse.js
@@ -0,0 +1,62 @@
+'use strict';
+const common = require('../common.js');
+const { URLSearchParams } = require('url');
+const querystring = require('querystring');
+
+const inputs = {
+ noencode: 'foo=bar&baz=quux&xyzzy=thud',
+ encodemany: '%66%6F%6F=bar&%62%61%7A=quux&xyzzy=%74h%75d',
+ encodefake: 'foo=%©ar&baz=%A©uux&xyzzy=%©ud',
+ encodelast: 'foo=bar&baz=quux&xyzzy=thu%64',
+ multicharsep: 'foo=bar&&&&&&&&&&baz=quux&&&&&&&&&&xyzzy=thud',
+ multivalue: 'foo=bar&foo=baz&foo=quux&quuy=quuz',
+ multivaluemany: 'foo=bar&foo=baz&foo=quux&quuy=quuz&foo=abc&foo=def&' +
+ 'foo=ghi&foo=jkl&foo=mno&foo=pqr&foo=stu&foo=vwxyz',
+ manypairs: 'a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z'
+};
+
+const bench = common.createBenchmark(main, {
+ type: Object.keys(inputs),
+ method: ['legacy', 'whatwg'],
+ n: [1e5]
+});
+
+function useLegacy(n, input) {
+ querystring.parse(input);
+ bench.start();
+ for (var i = 0; i < n; i += 1) {
+ querystring.parse(input);
+ }
+ bench.end(n);
+}
+
+function useWHATWG(n, input) {
+ new URLSearchParams(input);
+ bench.start();
+ for (var i = 0; i < n; i += 1) {
+ new URLSearchParams(input);
+ }
+ bench.end(n);
+}
+
+function main(conf) {
+ const type = conf.type;
+ const n = conf.n | 0;
+ const method = conf.method;
+
+ const input = inputs[type];
+ if (!input) {
+ throw new Error('Unknown input type');
+ }
+
+ switch (method) {
+ case 'legacy':
+ useLegacy(n, input);
+ break;
+ case 'whatwg':
+ useWHATWG(n, input);
+ break;
+ default:
+ throw new Error('Unknown method');
+ }
+}
diff --git a/benchmark/url/legacy-vs-whatwg-url-searchparams-serialize.js b/benchmark/url/legacy-vs-whatwg-url-searchparams-serialize.js
new file mode 100644
index 00000000000000..ef3160eccd49e6
--- /dev/null
+++ b/benchmark/url/legacy-vs-whatwg-url-searchparams-serialize.js
@@ -0,0 +1,64 @@
+'use strict';
+const common = require('../common.js');
+const { URLSearchParams } = require('url');
+const querystring = require('querystring');
+
+const inputs = {
+ noencode: 'foo=bar&baz=quux&xyzzy=thud',
+ encodemany: '%66%6F%6F=bar&%62%61%7A=quux&xyzzy=%74h%75d',
+ encodefake: 'foo=%©ar&baz=%A©uux&xyzzy=%©ud',
+ encodelast: 'foo=bar&baz=quux&xyzzy=thu%64',
+ multicharsep: 'foo=bar&&&&&&&&&&baz=quux&&&&&&&&&&xyzzy=thud',
+ multivalue: 'foo=bar&foo=baz&foo=quux&quuy=quuz',
+ multivaluemany: 'foo=bar&foo=baz&foo=quux&quuy=quuz&foo=abc&foo=def&' +
+ 'foo=ghi&foo=jkl&foo=mno&foo=pqr&foo=stu&foo=vwxyz',
+ manypairs: 'a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z'
+};
+
+const bench = common.createBenchmark(main, {
+ type: Object.keys(inputs),
+ method: ['legacy', 'whatwg'],
+ n: [1e5]
+});
+
+function useLegacy(n, input, prop) {
+ const obj = querystring.parse(input);
+ querystring.stringify(obj);
+ bench.start();
+ for (var i = 0; i < n; i += 1) {
+ querystring.stringify(obj);
+ }
+ bench.end(n);
+}
+
+function useWHATWG(n, input, prop) {
+ const obj = new URLSearchParams(input);
+ obj.toString();
+ bench.start();
+ for (var i = 0; i < n; i += 1) {
+ obj.toString();
+ }
+ bench.end(n);
+}
+
+function main(conf) {
+ const type = conf.type;
+ const n = conf.n | 0;
+ const method = conf.method;
+
+ const input = inputs[type];
+ if (!input) {
+ throw new Error('Unknown input type');
+ }
+
+ switch (method) {
+ case 'legacy':
+ useLegacy(n, input);
+ break;
+ case 'whatwg':
+ useWHATWG(n, input);
+ break;
+ default:
+ throw new Error('Unknown method');
+ }
+}
diff --git a/benchmark/url/url-searchparams-iteration.js b/benchmark/url/url-searchparams-iteration.js
index caa4e45c41247e..833271ef306309 100644
--- a/benchmark/url/url-searchparams-iteration.js
+++ b/benchmark/url/url-searchparams-iteration.js
@@ -1,7 +1,7 @@
'use strict';
const common = require('../common.js');
const assert = require('assert');
-const URLSearchParams = new (require('url').URL)('a:').searchParams.constructor;
+const { URLSearchParams } = require('url');
const bench = common.createBenchmark(main, {
method: ['forEach', 'iterator'],
diff --git a/benchmark/url/url-searchparams-parse.js b/benchmark/url/url-searchparams-parse.js
deleted file mode 100644
index 61796a7d327bd4..00000000000000
--- a/benchmark/url/url-searchparams-parse.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-const common = require('../common.js');
-const URLSearchParams = new (require('url').URL)('a:').searchParams.constructor;
-
-const inputs = {
- noencode: 'foo=bar&baz=quux&xyzzy=thud',
- // multicharsep: 'foo=bar&&&&&&&&&&baz=quux&&&&&&&&&&xyzzy=thud',
- multicharsep: '&&&&&&&&&&&&&&&&&&&&&&&&&&&&',
- encodemany: '%66%6F%6F=bar&%62%61%7A=quux&xyzzy=%74h%75d',
- encodelast: 'foo=bar&baz=quux&xyzzy=thu%64',
- multivalue: 'foo=bar&foo=baz&foo=quux&quuy=quuz',
- multivaluemany: 'foo=bar&foo=baz&foo=quux&quuy=quuz&foo=abc&foo=def&' +
- 'foo=ghi&foo=jkl&foo=mno&foo=pqr&foo=stu&foo=vwxyz',
- manypairs: 'a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z'
-};
-
-const bench = common.createBenchmark(main, {
- type: Object.keys(inputs),
- n: [1e5]
-});
-
-function main(conf) {
- const input = inputs[conf.type];
- const n = conf.n | 0;
-
- var i;
- bench.start();
- for (i = 0; i < n; i++)
- new URLSearchParams(input);
- bench.end(n);
-}
diff --git a/benchmark/url/url-searchparams-read.js b/benchmark/url/url-searchparams-read.js
index 4cee49c74d2baa..94ddaf1cfa4072 100644
--- a/benchmark/url/url-searchparams-read.js
+++ b/benchmark/url/url-searchparams-read.js
@@ -1,6 +1,6 @@
'use strict';
const common = require('../common.js');
-const URLSearchParams = new (require('url').URL)('a:').searchParams.constructor;
+const { URLSearchParams } = require('url');
const bench = common.createBenchmark(main, {
method: ['get', 'getAll', 'has'],
diff --git a/benchmark/url/url-searchparams-stringifier.js b/benchmark/url/url-searchparams-stringifier.js
deleted file mode 100644
index 2979064b322592..00000000000000
--- a/benchmark/url/url-searchparams-stringifier.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-const common = require('../common.js');
-const Buffer = require('buffer').Buffer;
-const URLSearchParams = new (require('url').URL)('a:').searchParams.constructor;
-
-const inputs = {
- noencode: 'foo=bar&baz=quux&xyzzy=thud',
- // multicharsep: 'foo=bar&&&&&&&&&&baz=quux&&&&&&&&&&xyzzy=thud',
- multicharsep: '&&&&&&&&&&&&&&&&&&&&&&&&&&&&',
- encodemany: '%66%6F%6F=bar&%62%61%7A=quux&xyzzy=%74h%75d',
- encodelast: 'foo=bar&baz=quux&xyzzy=thu%64',
- multivalue: 'foo=bar&foo=baz&foo=quux&quuy=quuz',
- multivaluemany: 'foo=bar&foo=baz&foo=quux&quuy=quuz&foo=abc&foo=def&' +
- 'foo=ghi&foo=jkl&foo=mno&foo=pqr&foo=stu&foo=vwxyz',
- manypairs: 'a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z'
-};
-
-const bench = common.createBenchmark(main, {
- type: Object.keys(inputs),
- n: [1e5]
-});
-
-function main(conf) {
- const input = inputs[conf.type];
- const n = conf.n | 0;
-
- const params = new URLSearchParams(input);
-
- bench.start();
- // Using Buffer.from to prevent JS version from cheating with ropes instead
- // of strings
- for (var i = 0; i < n; i += 1)
- Buffer.from(params.toString());
- bench.end(n);
-}
diff --git a/common.gypi b/common.gypi
index d87205e5c320cf..0fa36197be97a9 100644
--- a/common.gypi
+++ b/common.gypi
@@ -188,6 +188,10 @@
'BufferSecurityCheck': 'true',
'ExceptionHandling': 0, # /EHsc
'SuppressStartupBanner': 'true',
+ # Disable "warning C4267: conversion from 'size_t' to 'int',
+ # possible loss of data". Many originate from our dependencies
+ # and their sheer number drowns out other, more legitimate warnings.
+ 'DisableSpecificWarnings': ['4267'],
'WarnAsError': 'false',
},
'VCLibrarianTool': {
diff --git a/configure b/configure
index e12a5382a1960f..d0b50f80f9f07d 100755
--- a/configure
+++ b/configure
@@ -474,6 +474,12 @@ parser.add_option('--without-bundled-v8',
help='do not use V8 includes from the bundled deps folder. ' +
'(This mode is not officially supported for regular applications)')
+# Create compile_commands.json in out/Debug and out/Release.
+parser.add_option('-C',
+ action='store_true',
+ dest='compile_commands_json',
+ help=optparse.SUPPRESS_HELP)
+
(options, args) = parser.parse_args()
# Expand ~ in the install prefix now, it gets written to multiple files.
@@ -711,6 +717,9 @@ def host_arch_cc():
if rtn != 's390':
break
+ if rtn == 'mipsel' and '_LP64' in k:
+ rtn = 'mips64el'
+
return rtn
@@ -792,7 +801,7 @@ def configure_node(o):
if target_arch == 'arm':
configure_arm(o)
- elif target_arch in ('mips', 'mipsel'):
+ elif target_arch in ('mips', 'mipsel', 'mips64el'):
configure_mips(o)
if flavor == 'aix':
@@ -1357,6 +1366,9 @@ elif flavor == 'win' and sys.platform != 'msys':
else:
gyp_args += ['-f', 'make-' + flavor]
+if options.compile_commands_json:
+ gyp_args += ['-f', 'compile_commands_json']
+
gyp_args += args
if warn.warned:
diff --git a/deps/node-inspect/.editorconfig b/deps/node-inspect/.editorconfig
new file mode 100644
index 00000000000000..beffa3084e7a69
--- /dev/null
+++ b/deps/node-inspect/.editorconfig
@@ -0,0 +1,11 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/deps/node-inspect/.eslintrc b/deps/node-inspect/.eslintrc
new file mode 100644
index 00000000000000..c731203df64fd7
--- /dev/null
+++ b/deps/node-inspect/.eslintrc
@@ -0,0 +1,147 @@
+root: true
+
+env:
+ node: true
+ es6: true
+
+parserOptions:
+ ecmaVersion: 2016
+
+rules:
+ # Possible Errors
+ # http://eslint.org/docs/rules/#possible-errors
+ comma-dangle: [2, only-multiline]
+ no-control-regex: 2
+ no-debugger: 2
+ no-dupe-args: 2
+ no-dupe-keys: 2
+ no-duplicate-case: 2
+ no-empty-character-class: 2
+ no-ex-assign: 2
+ no-extra-boolean-cast: 2
+ no-extra-parens: [2, functions]
+ no-extra-semi: 2
+ no-func-assign: 2
+ no-invalid-regexp: 2
+ no-irregular-whitespace: 2
+ no-obj-calls: 2
+ no-proto: 2
+ no-template-curly-in-string: 2
+ no-unexpected-multiline: 2
+ no-unreachable: 2
+ no-unsafe-negation: 2
+ use-isnan: 2
+ valid-typeof: 2
+
+ # Best Practices
+ # http://eslint.org/docs/rules/#best-practices
+ dot-location: [2, property]
+ no-fallthrough: 2
+ no-global-assign: 2
+ no-multi-spaces: 2
+ no-octal: 2
+ no-redeclare: 2
+ no-self-assign: 2
+ no-unused-labels: 2
+ no-useless-call: 2
+ no-useless-escape: 2
+ no-void: 2
+ no-with: 2
+
+ # Strict Mode
+ # http://eslint.org/docs/rules/#strict-mode
+ strict: [2, global]
+
+ # Variables
+ # http://eslint.org/docs/rules/#variables
+ no-delete-var: 2
+ no-undef: 2
+ no-unused-vars: [2, {args: none}]
+
+ # Node.js and CommonJS
+ # http://eslint.org/docs/rules/#nodejs-and-commonjs
+ no-mixed-requires: 2
+ no-new-require: 2
+ no-path-concat: 2
+ no-restricted-modules: [2, sys, _linklist]
+ no-restricted-properties: [2, {
+ object: assert,
+ property: deepEqual,
+ message: Please use assert.deepStrictEqual().
+ }, {
+ property: __defineGetter__,
+ message: __defineGetter__ is deprecated.
+ }, {
+ property: __defineSetter__,
+ message: __defineSetter__ is deprecated.
+ }]
+
+ # Stylistic Issues
+ # http://eslint.org/docs/rules/#stylistic-issues
+ brace-style: [2, 1tbs, {allowSingleLine: true}]
+ comma-spacing: 2
+ comma-style: 2
+ computed-property-spacing: 2
+ eol-last: 2
+ func-call-spacing: 2
+ func-name-matching: 2
+ indent: [2, 2, {SwitchCase: 1, MemberExpression: 1}]
+ key-spacing: [2, {mode: minimum}]
+ keyword-spacing: 2
+ linebreak-style: [2, unix]
+ max-len: [2, 80, 2]
+ new-parens: 2
+ no-mixed-spaces-and-tabs: 2
+ no-multiple-empty-lines: [2, {max: 2, maxEOF: 0, maxBOF: 0}]
+ no-tabs: 2
+ no-trailing-spaces: 2
+ quotes: [2, single, avoid-escape]
+ semi: 2
+ semi-spacing: 2
+ space-before-blocks: [2, always]
+ space-before-function-paren: [2, never]
+ space-in-parens: [2, never]
+ space-infix-ops: 2
+ space-unary-ops: 2
+
+ # ECMAScript 6
+ # http://eslint.org/docs/rules/#ecmascript-6
+ arrow-parens: [2, always]
+ arrow-spacing: [2, {before: true, after: true}]
+ constructor-super: 2
+ no-class-assign: 2
+ no-confusing-arrow: 2
+ no-const-assign: 2
+ no-dupe-class-members: 2
+ no-new-symbol: 2
+ no-this-before-super: 2
+ prefer-const: [2, {ignoreReadBeforeAssign: true}]
+ rest-spread-spacing: 2
+ template-curly-spacing: 2
+
+ # Custom rules in tools/eslint-rules
+ align-function-arguments: 2
+ align-multiline-assignment: 2
+ assert-fail-single-argument: 2
+ new-with-error: [2, Error, RangeError, TypeError, SyntaxError, ReferenceError]
+
+# Global scoped method and vars
+globals:
+ COUNTER_HTTP_CLIENT_REQUEST: false
+ COUNTER_HTTP_CLIENT_RESPONSE: false
+ COUNTER_HTTP_SERVER_REQUEST: false
+ COUNTER_HTTP_SERVER_RESPONSE: false
+ COUNTER_NET_SERVER_CONNECTION: false
+ COUNTER_NET_SERVER_CONNECTION_CLOSE: false
+ DTRACE_HTTP_CLIENT_REQUEST: false
+ DTRACE_HTTP_CLIENT_RESPONSE: false
+ DTRACE_HTTP_SERVER_REQUEST: false
+ DTRACE_HTTP_SERVER_RESPONSE: false
+ DTRACE_NET_SERVER_CONNECTION: false
+ DTRACE_NET_STREAM_END: false
+ LTTNG_HTTP_CLIENT_REQUEST: false
+ LTTNG_HTTP_CLIENT_RESPONSE: false
+ LTTNG_HTTP_SERVER_REQUEST: false
+ LTTNG_HTTP_SERVER_RESPONSE: false
+ LTTNG_NET_SERVER_CONNECTION: false
+ LTTNG_NET_STREAM_END: false
diff --git a/deps/node-inspect/.gitignore b/deps/node-inspect/.gitignore
new file mode 100644
index 00000000000000..72e2c8c18012a8
--- /dev/null
+++ b/deps/node-inspect/.gitignore
@@ -0,0 +1,4 @@
+node_modules/
+npm-debug.log
+/tmp
+/.vs
diff --git a/deps/node-inspect/.npmrc b/deps/node-inspect/.npmrc
new file mode 100644
index 00000000000000..38f11c645a0019
--- /dev/null
+++ b/deps/node-inspect/.npmrc
@@ -0,0 +1 @@
+registry=https://registry.npmjs.org
diff --git a/deps/node-inspect/.travis.yml b/deps/node-inspect/.travis.yml
new file mode 100644
index 00000000000000..07418a91eb7986
--- /dev/null
+++ b/deps/node-inspect/.travis.yml
@@ -0,0 +1,13 @@
+language: node_js
+node_js:
+ - '6.8'
+before_deploy:
+ - git config --global user.email "jan.krems@gmail.com"
+ - git config --global user.name "Jan Krems"
+deploy:
+ provider: script
+ script: ./node_modules/.bin/nlm release
+ skip_cleanup: true
+ 'on':
+ branch: master
+ node: '6.8'
diff --git a/deps/node-inspect/CHANGELOG.md b/deps/node-inspect/CHANGELOG.md
new file mode 100644
index 00000000000000..0a7ba1be94fb50
--- /dev/null
+++ b/deps/node-inspect/CHANGELOG.md
@@ -0,0 +1,212 @@
+### 1.10.4
+
+* [`1c31bf7`](https://github.com/buggerjs/node-inspect/commit/1c31bf7d1b3ea1b424ae0662526596670cb506c9) **chore:** Support embedded mode
+
+
+### 1.10.3
+
+* [`7b20379`](https://github.com/buggerjs/node-inspect/commit/7b20379069af692a9038a31a4465f72db9eb532f) **chore:** Mark .eslintrc as root
+
+
+### 1.10.2
+
+* Run tests on windows - **[@jkrems](https://github.com/jkrems)** [#16](https://github.com/buggerjs/node-inspect/pull/16)
+ - [`5a57f98`](https://github.com/buggerjs/node-inspect/commit/5a57f9865e02eef0763c2a7f26236c34a632ccdd) **chore:** Run tests on windows
+ - [`0a04b50`](https://github.com/buggerjs/node-inspect/commit/0a04b50cc8b4dc6ce868927c635c479d75ce71f4) **chore:** Bump nlm to get rid of postinstall
+ - [`4a8b27c`](https://github.com/buggerjs/node-inspect/commit/4a8b27cea814a37895effd2a0c1b85dbfee3a7f4) **test:** Remove unix path assumptions
+
+
+### 1.10.1
+
+* [`4ba3c72`](https://github.com/buggerjs/node-inspect/commit/4ba3c72270fae9a71343ddca11aa27980678a67c) **refactor:** Undo weird bundling into one file
+
+
+### 1.10.0
+
+* [`3e1a66a`](https://github.com/buggerjs/node-inspect/commit/3e1a66a489bef19beaa5f859e99e027274ff43cb) **feat:** Support CPU & heap profiles
+
+
+### 1.9.3
+
+* Move back to single file - **[@jkrems](https://github.com/jkrems)** [#15](https://github.com/buggerjs/node-inspect/pull/15)
+ - [`9877660`](https://github.com/buggerjs/node-inspect/commit/9877660a73ff0ec0885ad7f939ba62020a46b4b6) **refactor:** Wrap client in IIFE
+ - [`7795c53`](https://github.com/buggerjs/node-inspect/commit/7795c533f0605eb128db610a5874b27e555251ef) **refactor:** Move more code in createRepl scope
+ - [`be34a39`](https://github.com/buggerjs/node-inspect/commit/be34a398e823612bdf5ac90bad5222af27035a00) **refactor:** Move back to single file
+ - [`ab45b62`](https://github.com/buggerjs/node-inspect/commit/ab45b6273dc0d3a49d3cf46a80cb48ab79d1caf8) **refactor:** Remove single-use functions
+ - [`37a711e`](https://github.com/buggerjs/node-inspect/commit/37a711ed5334c06ed4d85f995e567a9f176a68d5) **style:** Stop using `new Buffer`
+ - [`d669dc5`](https://github.com/buggerjs/node-inspect/commit/d669dc593f5ad5ca7a48f19f0905ef66ec0e540d) **chore:** Switch to node eslint rules
+ - [`15e7917`](https://github.com/buggerjs/node-inspect/commit/15e79177918d96dcffd2384715faf0308e97a26c) **style:** Use var in classical for loops
+
+
+### 1.9.2
+
+* [`c9dc4be`](https://github.com/buggerjs/node-inspect/commit/c9dc4beb08236e33d64f19417682cf5b3f5aeed6) **doc:** Link directly to GOVERNANCE file
+
+
+### 1.9.1
+
+* Handle big ws frames correctly - **[@jkrems](https://github.com/jkrems)** [#14](https://github.com/buggerjs/node-inspect/pull/14)
+ - [`f80100e`](https://github.com/buggerjs/node-inspect/commit/f80100e932710d232d074b239cbf8fefa564c789) **fix:** Handle big ws frames correctly - see: [#10](https://github.com/buggerjs/node-inspect/issues/10)
+
+
+### 1.9.0
+
+* Support for low-level agent access - **[@jkrems](https://github.com/jkrems)** [#13](https://github.com/buggerjs/node-inspect/pull/13)
+ - [`90ed431`](https://github.com/buggerjs/node-inspect/commit/90ed4310c62d130637c12f8ecdb752075c43ac36) **feat:** Support for low-level agent access
+
+
+### 1.8.4
+
+* Use proper path for websocket - **[@jkrems](https://github.com/jkrems)** [#12](https://github.com/buggerjs/node-inspect/pull/12)
+ - [`3405225`](https://github.com/buggerjs/node-inspect/commit/3405225979dfc2058bcc6d1b90f41c060dbd1f92) **fix:** Use proper path for websocket - see: [#11](https://github.com/buggerjs/node-inspect/issues/11)
+
+
+### 1.8.3
+
+* [`6f9883d`](https://github.com/buggerjs/node-inspect/commit/6f9883d4b29419831133988981b83e891b19739a) **fix:** Breakpoints & scripts work when not paused
+* [`ecb1362`](https://github.com/buggerjs/node-inspect/commit/ecb1362c842e6ed5bc28c091a32bfd540742db75) **chore:** Pin node to 6.8
+
+
+### 1.8.2
+
+* [`4219a98`](https://github.com/buggerjs/node-inspect/commit/4219a98d6514f1068feabce2945c21a0d5ba6561) **refactor:** Decouple source snippet from repl
+
+
+### 1.8.1
+
+* [`95402ee`](https://github.com/buggerjs/node-inspect/commit/95402ee5dff04057f074677d39db2f61ec74c151) **refactor:** Move `list` into CallFrame
+
+
+### 1.8.0
+
+* [`d0e6499`](https://github.com/buggerjs/node-inspect/commit/d0e6499084f5d656ef0c5fd470d3ab21f2e9a6b4) **feat:** `exec .scope`
+
+
+### 1.7.0
+
+* `breakOn{Exception,Uncaught,None}` - **[@jkrems](https://github.com/jkrems)** [#8](https://github.com/buggerjs/node-inspect/pull/8)
+ - [`fa8c4c7`](https://github.com/buggerjs/node-inspect/commit/fa8c4c7d7bb6972733c92da4d04fdd62c02b0e3b) **feat:** `breakOn{Exception,Uncaught,None}` - see: [#6](https://github.com/buggerjs/node-inspect/issues/6)
+
+
+### 1.6.0
+
+* Add `help` command - **[@jkrems](https://github.com/jkrems)** [#7](https://github.com/buggerjs/node-inspect/pull/7)
+ - [`09b37a0`](https://github.com/buggerjs/node-inspect/commit/09b37a02e04e16a38ce27f69538d3b098548b47c) **feat:** Add `help` command - see: [#5](https://github.com/buggerjs/node-inspect/issues/5)
+
+
+### 1.5.0
+
+* [`7e0fd99`](https://github.com/buggerjs/node-inspect/commit/7e0fd99fcfc65d8b647a2259df78f4cabf1d3d63) **feat:** Add `r` shortcut for `run`
+
+
+### 1.4.1
+
+* [`484d098`](https://github.com/buggerjs/node-inspect/commit/484d0983f06d6ff9639ab5197ba0a58313f532df) **chore:** Remove old implementation
+
+
+### 1.4.0
+
+* Properly tested implementation - **[@jkrems](https://github.com/jkrems)** [#4](https://github.com/buggerjs/node-inspect/pull/4)
+ - [`ba060d3`](https://github.com/buggerjs/node-inspect/commit/ba060d3ef65ae84df2a3a9b9f16d563f3c4b29be) **feat:** Error handling w/o args
+ - [`b39b3bc`](https://github.com/buggerjs/node-inspect/commit/b39b3bc07c13adc48fc8bb720889285c51e62548) **feat:** Launch child
+ - [`481693f`](https://github.com/buggerjs/node-inspect/commit/481693f676ee099b7787cd2426b980858e973602) **feat:** Connect debug client
+ - [`3bba0f2`](https://github.com/buggerjs/node-inspect/commit/3bba0f2416b2e3b4e6010de675003fcc328b16e8) **chore:** Disable lint for inactive code
+ - [`cc7bdfc`](https://github.com/buggerjs/node-inspect/commit/cc7bdfcf7f21ef5cd5c32c7800407238b0d4f100) **feat:** Properly fail with invalid host:port
+ - [`73f34f9`](https://github.com/buggerjs/node-inspect/commit/73f34f902634e9778597e129f46895aa8b643d72) **refactor:** Remove unused field
+ - [`6a23e0c`](https://github.com/buggerjs/node-inspect/commit/6a23e0cf3179f43ca6fc5a0fa2b1dd18ebc044b5) **refactor:** Better debug output & support node 6.6
+ - [`63b0f9b`](https://github.com/buggerjs/node-inspect/commit/63b0f9b6ef8bd9af0f7cb14a5938a45838731fc9) **test:** Add timeout to waitFor(pattern)
+ - [`cfa197b`](https://github.com/buggerjs/node-inspect/commit/cfa197bf8325a1a4ca1b296f8d6971d368bfbfbb) **refactor:** Move REPL setup into own file
+ - [`3f46c2c`](https://github.com/buggerjs/node-inspect/commit/3f46c2c43f836e1135b66871087aa74969f6b330) **feat:** Working repl eval
+ - [`6911eb1`](https://github.com/buggerjs/node-inspect/commit/6911eb1a00b964bc5683506d433fa4f665f5a82c) **feat:** Enter repeats last command
+ - [`7d20b7d`](https://github.com/buggerjs/node-inspect/commit/7d20b7deadf1b251ea8cf2cc9167c175624932c4) **chore:** Add missing license header
+ - [`23c62f8`](https://github.com/buggerjs/node-inspect/commit/23c62f8375ca7c8b71d032047e728dace02f4efa) **feat:** Print break context
+ - [`5dbc83d`](https://github.com/buggerjs/node-inspect/commit/5dbc83df31171f9c38a974c99340bde26f2e24ec) **feat:** Stepping and breakpoints
+ - [`8deb8cc`](https://github.com/buggerjs/node-inspect/commit/8deb8cc36b9fca432ab8df63a82e9de7ab5adaf0) **feat:** list for printing source
+ - [`1ed2ec9`](https://github.com/buggerjs/node-inspect/commit/1ed2ec9937070652be611dbb6b11dfb42cb840f8) **chore:** Disable verbose output on CI
+ - [`625a435`](https://github.com/buggerjs/node-inspect/commit/625a435925dd8fd980bed2dc9e3fd73dd27df4ef) **fix:** Gracefully handle delayed scriptParsed
+ - [`8823c60`](https://github.com/buggerjs/node-inspect/commit/8823c60d347600b2313cfdd8cb5e96fe02419a8a) **chore:** Run all the tests
+ - [`00506f7`](https://github.com/buggerjs/node-inspect/commit/00506f763928cc440505a81030167a11b9a84e00) **feat:** backtrace/bt
+ - [`e1ee02d`](https://github.com/buggerjs/node-inspect/commit/e1ee02d5cc389916489d387d07d5dd161230427a) **refactor:** Leverage util.inspect.custom
+ - [`5dcc319`](https://github.com/buggerjs/node-inspect/commit/5dcc31922d40f56c7435319d1538390a442e8e4b) **feat:** scripts and scripts(true)
+ - [`085cd5a`](https://github.com/buggerjs/node-inspect/commit/085cd5a76a961edfcaa342fff5eb09bf2f9c8983) **refactor:** Consistent import style
+ - [`1c60f91`](https://github.com/buggerjs/node-inspect/commit/1c60f91f233848c05d865617dc7f5aacb36270b6) **feat:** Set breakpoint before file is loaded
+ - [`bc82ecc`](https://github.com/buggerjs/node-inspect/commit/bc82eccb2a1a7c0f5332371254f6584e748216aa) **feat:** breakpoints to list breakpoints
+ - [`7f48c95`](https://github.com/buggerjs/node-inspect/commit/7f48c9510696ec400d51afaca8d23a9c292640f8) **feat:** watchers & exec
+ - [`0f8cd13`](https://github.com/buggerjs/node-inspect/commit/0f8cd13a092e5dbeb395ff04cbe2ed97cb986423) **feat:** clearBreakpoint
+ - [`0d31560`](https://github.com/buggerjs/node-inspect/commit/0d315603bdcb9f4da42fab24dc569c325151269e) **feat:** version to print v8 version
+ - [`df6b89d`](https://github.com/buggerjs/node-inspect/commit/df6b89df580a9afcb3b8883b0e4224cbcebb384f) **feat:** Paused & global exec
+ - [`9e97d73`](https://github.com/buggerjs/node-inspect/commit/9e97d73073ceffd70974d45887c84fadb9159d5c) **feat:** repl to enter exec mode
+ - [`9ee9f90`](https://github.com/buggerjs/node-inspect/commit/9ee9f903d6202f54ed2b3b3559da4006b65d39b5) **feat:** run & restart
+* [`3a752aa`](https://github.com/buggerjs/node-inspect/commit/3a752aaa773968bfe16c5f543bd739feed598bea) **feat:** kill
+* [`a67e470`](https://github.com/buggerjs/node-inspect/commit/a67e47018b20d46aeeaa7abd27eb8e7770fd0b8f) **feat:** Restore breakpoints on restart
+
+
+### 1.3.3
+
+* [`eb7a54c`](https://github.com/buggerjs/node-inspect/commit/eb7a54c6fa731ed3276072c72034046fc5ffbac6) **chore:** Switch to tap for tests
+
+
+### 1.3.2
+
+* Add notes about governance - **[@jkrems](https://github.com/jkrems)** [#3](https://github.com/buggerjs/node-inspect/pull/3)
+ - [`e94089d`](https://github.com/buggerjs/node-inspect/commit/e94089d93689cacf5c953e94563463d1e174452d) **chore:** Add notes about governance
+
+
+### 1.3.1
+
+* [`8767137`](https://github.com/buggerjs/node-inspect/commit/8767137c53a2f6b1d36970074ea95be9871e50e3) **style:** Remove rogue console.log
+
+
+### 1.3.0
+
+* [`3ac6232`](https://github.com/buggerjs/node-inspect/commit/3ac623219ba44b0af40ef66826610a26a46c7966) **feat:** Add `version` command
+
+
+### 1.2.0
+
+* [`86b5812`](https://github.com/buggerjs/node-inspect/commit/86b581218ccab44e6bde259a17ad1e71645a6137) **feat:** scripts & listScripts(true)
+
+
+### 1.1.1
+
+* [`feaea38`](https://github.com/buggerjs/node-inspect/commit/feaea385a981e6b72a8d99277fbf575c54e15fc6) **style:** Typo in comment
+
+
+### 1.1.0
+
+* [`c64155f`](https://github.com/buggerjs/node-inspect/commit/c64155faa552f71463842a26330aa5bcbfc31670) **feat:** repl command
+
+
+### 1.0.0
+
+* [`44c4c79`](https://github.com/buggerjs/node-inspect/commit/44c4c79af5a228ccfd8906f11409b2a33390b878) **chore:** Initial commit
+* [`985873c`](https://github.com/buggerjs/node-inspect/commit/985873cfb97146b38480080f9907219c473f1f6f) **feat:** Launching the example works
+* [`3d92d05`](https://github.com/buggerjs/node-inspect/commit/3d92d05cca152a2c2647aa64eefc80432638bc4d) **chore:** Proper license and passing tests
+* [`b3f99d9`](https://github.com/buggerjs/node-inspect/commit/b3f99d981038b17663fcfd984d2f5d6d9b51ee18) **feat:** Futile attempts to send a valid ws frame
+* [`465cfb7`](https://github.com/buggerjs/node-inspect/commit/465cfb7b295aebb48b285c26f6de9c4657fe590d) **feat:** Working ws connection
+* [`da9f011`](https://github.com/buggerjs/node-inspect/commit/da9f01118e2b144f2da8cd370113a608526774a1) **fix:** Fix remote connect
+* [`5ef33d7`](https://github.com/buggerjs/node-inspect/commit/5ef33d7892cc49becb4c66098fc7927bc74b014a) **feat:** Working step-by-step
+* [`534e1e4`](https://github.com/buggerjs/node-inspect/commit/534e1e46b307d61d51eb4c0aab4a3b17c17aea3d) **chore:** Add bin entry
+* [`8cff9cf`](https://github.com/buggerjs/node-inspect/commit/8cff9cfb0138b5ecff0f5f6a7839dbfddc0684fd) **style:** Use simpler key thingy
+* [`720ec53`](https://github.com/buggerjs/node-inspect/commit/720ec53a5b251ab3caf27f06b60924efb9e03a92) **doc:** Add instructions
+* [`b89ad60`](https://github.com/buggerjs/node-inspect/commit/b89ad601b885a417e6433b1609477d8453f498a1) **doc:** More helpful docs
+* [`de9243c`](https://github.com/buggerjs/node-inspect/commit/de9243c95eabe733d05952229340808c3cebf129) **feat:** Watchers
+* [`e16978f`](https://github.com/buggerjs/node-inspect/commit/e16978ff8e4b2b2bdccf88fd7d3905f525822981) **docs:** Working usage hints
+* [`2dbc204`](https://github.com/buggerjs/node-inspect/commit/2dbc2042145fd97169fc7536186a449715e27810) **refactor:** Use proxies
+* [`b8c9b14`](https://github.com/buggerjs/node-inspect/commit/b8c9b147713f63181396d5a7fe4c2f737b733b4c) **style:** Remove unused var
+* [`f6b4b20`](https://github.com/buggerjs/node-inspect/commit/f6b4b20a1d28d91cfe452b995f7dbe5f7c749e89) **feat:** Nicer inspect of remote values
+* [`36887c6`](https://github.com/buggerjs/node-inspect/commit/36887c66bbf26d540f087f80ddfec38462a33bdf) **fix:** Properly print watchers
+* [`7729442`](https://github.com/buggerjs/node-inspect/commit/77294426157a28cc76e339cb13916a205182641e) **feat:** Add pause command
+* [`e39a713`](https://github.com/buggerjs/node-inspect/commit/e39a7134873f06da37baaa9b6252cede4ad38d7a) **fix:** Properly format boolean properties
+* [`f8f51d7`](https://github.com/buggerjs/node-inspect/commit/f8f51d7a01e8d74023306a08a3d6e2da63d123e1) **fix:** Properly format numeric properties
+* [`89e6e08`](https://github.com/buggerjs/node-inspect/commit/89e6e087220f3c3cb628ac7541c44298485a2e04) **feat:** Add backtrace command
+* [`82362ac`](https://github.com/buggerjs/node-inspect/commit/82362acfc7ce22b4cccc64889ec136dedc8895ec) **feat:** Add setBreakpoint()
+* [`7064cce`](https://github.com/buggerjs/node-inspect/commit/7064ccec3b103683088d532abfe5b4e7c066948b) **feat:** Add `setBreakpoint(line)`
+* [`360580e`](https://github.com/buggerjs/node-inspect/commit/360580eba4353e81311e56df018eec0ca233da11) **feat:** Add run/kill/restart
+* [`b1b576e`](https://github.com/buggerjs/node-inspect/commit/b1b576e2645723a8575df544e0bfb672d60d9d91) **feat:** Add `help` command
+* [`2db4660`](https://github.com/buggerjs/node-inspect/commit/2db46609cd1c8543d31ebd5dc47e4c27ec254841) **feat:** Add remaining sb() variants
+* [`f2ad1ae`](https://github.com/buggerjs/node-inspect/commit/f2ad1aeedafb154043d70bb9195b10986d311d26) **fix:** Display breakpoints set into the future
+* [`73272f9`](https://github.com/buggerjs/node-inspect/commit/73272f9ace1f8546f8cad1d53627dbffba50bb4e) **refactor:** Make breakpoints more inspect friendly
+* [`507a71d`](https://github.com/buggerjs/node-inspect/commit/507a71de345a3de7fe144517e9f5ea264ff993e3) **feat:** Add breakpoints command
+* [`5fb3e5d`](https://github.com/buggerjs/node-inspect/commit/5fb3e5d17bbcfd45b264431547b3cf0b781c7640) **docs:** Link to Command Line API docs
+* [`81af501`](https://github.com/buggerjs/node-inspect/commit/81af501bbf85397e2078310c7f24a9ac5b7f02dc) **chore:** Fix license field
diff --git a/deps/node-inspect/CONTRIBUTING.md b/deps/node-inspect/CONTRIBUTING.md
new file mode 100644
index 00000000000000..08d333cce8321f
--- /dev/null
+++ b/deps/node-inspect/CONTRIBUTING.md
@@ -0,0 +1,183 @@
+# Contributing
+
+🎉🏅 Thanks for helping us improve this project! 🙏
+
+This document outlines some of the practices we care about.
+If you have any questions or suggestions about the process,
+feel free to [open an issue](#reporting-issues)
+.
+
+## Code of Conduct
+
+The [Node.js Code of Conduct][] applies to this repo.
+
+[Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
+
+## Code Contributions
+
+The nodereport project falls under the governance of the diagnostics
+working group which is documented in:
+https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md.
+
+## Developer's Certificate of Origin 1.1
+
+By making a contribution to this project, I certify that:
+
+* (a) The contribution was created in whole or in part by me and I
+ have the right to submit it under the open source license
+ indicated in the file; or
+
+* (b) The contribution is based upon previous work that, to the best
+ of my knowledge, is covered under an appropriate open source
+ license and I have the right under that license to submit that
+ work with modifications, whether created in whole or in part
+ by me, under the same open source license (unless I am
+ permitted to submit under a different license), as indicated
+ in the file; or
+
+* (c) The contribution was provided directly to me by some other
+ person who certified (a), (b) or (c) and I have not modified
+ it.
+
+* (d) I understand and agree that this project and the contribution
+ are public and that a record of the contribution (including all
+ personal information I submit with it, including my sign-off) is
+ maintained indefinitely and may be redistributed consistent with
+ this project or the open source license(s) involved.
+
+## How Can I Contribute?
+
+### Reporting Issues
+
+If you find any mistakes in the docs or a bug in the code,
+please [open an issue in Github](https://github.com/nodejs/node-inspect/issues/new) so we can look into it.
+You can also [create a PR](#contributing-code) fixing it yourself, or course.
+
+If you report a bug, please follow these guidelines:
+
+* Make sure the bug exists in the latest version.
+* Include instructions on how to reproduce the issue.
+ The instructions should be as minimal as possible
+ and answer the three big questions:
+ 1. What are the exact steps you took? This includes the exact versions of node, npm, and any packages involved.
+ 1. What result are you expecting?
+ 1. What is the actual result?
+
+### Improving Documentation
+
+For small documentation changes, you can use [Github's editing feature](https://help.github.com/articles/editing-files-in-another-user-s-repository/).
+The only thing to keep in mind is to prefix the commit message with "docs: ".
+The detault commit message generated by Github will lead to a failing CI build.
+
+For larger updates to the documentation
+it might be better to follow the [instructions for contributing code below](#contributing-code).
+
+### Contributing Code
+
+**Note:** If you're planning on making substantial changes,
+please [open an issue first to discuss your idea](#reporting-issues).
+Otherwise you might end up investing a lot of work
+only to discover that it conflicts with plans the maintainers might have.
+
+The general steps for creating a pull request are:
+
+1. Create a branch for your change.
+ Always start your branch from the latest `master`.
+ We often prefix the branch name with our initials, e.g. `jk-a-change`.
+1. Run `npm install` to install the dependencies.
+1. If you're fixing a bug, be sure to write a test *first*.
+ That way you can validate that the test actually catches the bug and doesn't pass.
+1. Make your changes to the code.
+ Remember to update the tests if you add new features or change behavior.
+1. Run the tests via `npm test`. This will also run style checks and other validations.
+ You might see errors about uncommitted files.
+ This is expected until you commit your changes.
+1. Once you're done, `git add .` and `git commit`.
+ Please follow the [commit message conventions](#commits--commit-messages) described below.
+1. Push your branch to Github & create a PR.
+
+#### Code Style
+
+In addition to any linting rules the project might include,
+a few general rules of thumb:
+
+* Try to match the style of the rest of the code.
+* We prefer simple code that is easy to understand over terse, expressive code.
+* We try to structure projects by semantics instead of role.
+ E.g. we'd rather have a `tree.js` module that contains tree traversal-related helpers
+ than a `helpers.js` module.
+* Actually, if you create helpers you might want to put those into a separate package.
+ That way it's easier to reuse them.
+
+#### Commits & Commit Messages
+
+Please follow the [angular commit message conventions](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#-git-commit-guidelines).
+We use an automated tool for generating releases
+that depends on the conventions to determine the next version and the content of the changelog.
+Commit messages that don't follow the conventions will cause `npm test` (and thus CI) to fail.
+
+The short summary - a commit message should look like this:
+
+```
+:
+
+
+
+
+
+ |