| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
Review requested:
|
Sorry, something went wrong.
|
cc @nodejs/repl @nodejs/inspector |
Sorry, something went wrong.
|
The notable-change PRs with changes that should be highlighted in changelogs. label has been added by @avivkeller. Please suggest a text for the release notes if you'd like to include a more detailed summary, then proceed to update the PR description with the text or a link to the notable change suggested text comment. Otherwise, the commit will be placed in the Other Notable Changes section. |
Sorry, something went wrong.
Sorry, something went wrong.
Sorry, something went wrong.
|
Does this change make tab-completions side-effect free in all cases? await $`echo hello`.sometextwas printing hello whilst tab completing. |
Sorry, something went wrong.
|
Hi @qwitwa! Unfortunately, that specific case is not resolved by this PR. Although, that might be an issue with V8, since the REPL relies on CDP's throwOnSideEffect, which determines $ as side-effect free (even though, apparently, it's not) |
Sorry, something went wrong.
|
Bump @nodejs/repl @nodejs/vm @nodejs/inspector |
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM
Sorry, something went wrong.
Sorry, something went wrong.
Sorry, something went wrong.
There was a problem hiding this comment.
lgtm
Sorry, something went wrong.
Commit Queue failed- Loading data for nodejs/node/pull/64034
✔ Done loading data for nodejs/node/pull/64034
----------------------------------- PR info ------------------------------------
Title repl: use inspector over vm (#64034)
Author Aviv Keller <me@aviv.sh> (@avivkeller)
Branch avivkeller:repl-inspector -> nodejs:main
Labels c++, repl, semver-major, lib / src, notable-change, author ready, needs-ci, review wanted, commit-queue-squash
Commits 9
- repl: use inspector over vm
- fixup!
- fixup!
- fixup!
- fixup! remove file from testing
- fixup!
- fixup!
- fixup!
- fixup!
Committers 2
- avivkeller <me@aviv.sh>
- GitHub <noreply@github.com>
PR-URL: https://github.com/nodejs/node/pull/64034
Fixes: https://github.com/nodejs/node/issues/64523
Fixes: https://github.com/nodejs/node/pull/64534
Fixes: https://github.com/nodejs/node/issues/39387
Fixes: https://github.com/nodejs/node/pull/39392
Fixes: https://github.com/nodejs/node/issues/61390
Fixes: https://github.com/nodejs/node/issues/63126
Fixes: https://github.com/nodejs/node/issues/38503
Fixes: https://github.com/nodejs/node/issues/37445
Fixes: https://github.com/nodejs/node/issues/38145
Fixes: https://github.com/nodejs/node/issues/33369
Fixes: https://github.com/nodejs/node/issues/48131
Fixes: https://github.com/nodejs/node/issues/8309
Fixes: https://github.com/nodejs/node/issues/39689
Fixes: https://github.com/nodejs/node/issues/18931
Reviewed-By: Dario Piotrowicz <dario.piotrowicz@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/64034
Fixes: https://github.com/nodejs/node/issues/64523
Fixes: https://github.com/nodejs/node/pull/64534
Fixes: https://github.com/nodejs/node/issues/39387
Fixes: https://github.com/nodejs/node/pull/39392
Fixes: https://github.com/nodejs/node/issues/61390
Fixes: https://github.com/nodejs/node/issues/63126
Fixes: https://github.com/nodejs/node/issues/38503
Fixes: https://github.com/nodejs/node/issues/37445
Fixes: https://github.com/nodejs/node/issues/38145
Fixes: https://github.com/nodejs/node/issues/33369
Fixes: https://github.com/nodejs/node/issues/48131
Fixes: https://github.com/nodejs/node/issues/8309
Fixes: https://github.com/nodejs/node/issues/39689
Fixes: https://github.com/nodejs/node/issues/18931
Reviewed-By: Dario Piotrowicz <dario.piotrowicz@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Sat, 20 Jun 2026 21:46:39 GMT
✔ Approvals: 3
✔ - Dario Piotrowicz (@dario-piotrowicz): https://github.com/nodejs/node/pull/64034#pullrequestreview-4675448876
✔ - Matteo Collina (@mcollina) (TSC): https://github.com/nodejs/node/pull/64034#pullrequestreview-4729043601
✔ - Filip Skokan (@panva) (TSC): https://github.com/nodejs/node/pull/64034#pullrequestreview-4728817049
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-07-18T17:54:29Z: https://ci.nodejs.org/job/node-test-pull-request/74881/
- Querying data for job/node-test-pull-request/74881/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
✔ No git cherry-pick in progress
✔ No git am in progress
✔ No git rebase in progress
--------------------------------------------------------------------------------
- Bringing origin/main up to date...
From https://github.com/nodejs/node
* branch main -> FETCH_HEAD
✔ origin/main is now up-to-date
- Downloading patch for 64034
From https://github.com/nodejs/node
* branch refs/pull/64034/merge -> FETCH_HEAD
✔ Fetched commits as 9df0e9b4d4a5..e90cd833579c
--------------------------------------------------------------------------------
Auto-merging doc/api/errors.md
Auto-merging lib/repl.js
[main a796734305] repl: use inspector over vm
Author: avivkeller <me@aviv.sh>
Date: Sat Jun 20 17:45:59 2026 -0400
126 files changed, 3119 insertions(+), 4299 deletions(-)
delete mode 100644 lib/internal/repl/await.js
create mode 100644 lib/internal/repl/eval.js
create mode 100644 lib/internal/repl/inspector.js
create mode 100644 lib/internal/repl/transform.js
delete mode 100644 test/addons/repl-domain-abort/binding.cc
delete mode 100644 test/addons/repl-domain-abort/binding.gyp
delete mode 100644 test/addons/repl-domain-abort/test.js
delete mode 100644 test/fixtures/repl-tab-completion-nested-repls.js
delete mode 100644 test/known_issues/test-repl-require-context.js
delete mode 100644 test/parallel/test-repl-autolibs.js
create mode 100644 test/parallel/test-repl-autolibs.mjs
rename test/parallel/{test-repl-context.js => test-repl-context.mjs} (83%)
delete mode 100644 test/parallel/test-repl-definecommand.js
create mode 100644 test/parallel/test-repl-definecommand.mjs
delete mode 100644 test/parallel/test-repl-domain.js
rename test/parallel/{test-repl-editor.js => test-repl-editor.mjs} (78%)
delete mode 100644 test/parallel/test-repl-function-definition-edge-case.js
create mode 100644 test/parallel/test-repl-function-definition-edge-case.mjs
rename test/parallel/{test-repl-inspector.js => test-repl-inspector.mjs} (64%)
rename test/parallel/{test-repl-load-multiline-no-trailing-newline.js => test-repl-load-multiline-no-trailing-newline.mjs} (56%)
rename test/parallel/{test-repl-load-multiline.js => test-repl-load-multiline.mjs} (52%)
delete mode 100644 test/parallel/test-repl-no-terminal-restore-process-listeners.js
delete mode 100644 test/parallel/test-repl-preprocess-top-level-await.js
delete mode 100644 test/parallel/test-repl-pretty-custom-stack.js
create mode 100644 test/parallel/test-repl-pretty-custom-stack.mjs
delete mode 100644 test/parallel/test-repl-pretty-stack-custom-writer.js
create mode 100644 test/parallel/test-repl-pretty-stack-custom-writer.mjs
delete mode 100644 test/parallel/test-repl-pretty-stack.js
create mode 100644 test/parallel/test-repl-pretty-stack.mjs
delete mode 100644 test/parallel/test-repl-preview-newlines.js
create mode 100644 test/parallel/test-repl-preview-newlines.mjs
delete mode 100644 test/parallel/test-repl-preview-without-inspector.js
rename test/parallel/{test-repl-preview.js => test-repl-preview.mjs} (65%)
delete mode 100644 test/parallel/test-repl-recoverable.js
create mode 100644 test/parallel/test-repl-recoverable.mjs
delete mode 100644 test/parallel/test-repl-sigint-nested-eval.js
delete mode 100644 test/parallel/test-repl-tab-complete-buffer.js
create mode 100644 test/parallel/test-repl-tab-complete-buffer.mjs
delete mode 100644 test/parallel/test-repl-tab-complete-nested-repls.js
delete mode 100644 test/parallel/test-repl-top-level-await.js
delete mode 100644 test/parallel/test-repl-uncaught-exception-async.js
delete mode 100644 test/parallel/test-repl-uncaught-exception-standalone.js
create mode 100644 test/parallel/test-repl-uncaught-exception-standalone.mjs
delete mode 100644 test/parallel/test-repl-uncaught-exception.js
delete mode 100644 test/parallel/test-repl-underscore.js
create mode 100644 test/parallel/test-repl-underscore.mjs
delete mode 100644 test/parallel/test-repl-use-global.js
create mode 100644 test/parallel/test-repl-use-global.mjs
delete mode 100644 test/parallel/test-util-sigint-watchdog.js
delete mode 100644 test/pseudo-tty/repl-dumb-tty.js
delete mode 100644 test/pseudo-tty/repl-dumb-tty.out
[main f5a0f14734] fixup!
Author: avivkeller <me@aviv.sh>
Date: Mon Jul 13 18:03:34 2026 -0700
5 files changed, 64 insertions(+), 21 deletions(-)
create mode 100644 test/parallel/test-repl-promise-gc.mjs
error: The following untracked working tree files would be overwritten by merge:
output
Please move or remove them before you merge.
Aborting
fatal: cherry-pick failed
[main 065e945eaa] fixup!
Author: avivkeller <me@aviv.sh>
Date: Mon Jul 13 18:07:27 2026 -0700
2 files changed, 4 insertions(+), 1 deletion(-)
✘ Failed to apply patcheshttps://github.com/nodejs/node/actions/runs/29658096987
|
Sorry, something went wrong.
Signed-off-by: Aviv Keller <me@aviv.sh> PR-URL: #64034 Fixes: #64523 Closes: #64534 Fixes: #39387 Closes: #39392 Fixes: #61390 Fixes: #63126 Fixes: #38503 Fixes: #37445 Fixes: #38145 Fixes: #33369 Fixes: #48131 Fixes: #8309 Fixes: #39689 Fixes: #18931 Reviewed-By: Dario Piotrowicz <dario.piotrowicz@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com>
|
Landed in 4f844f4 Auto commit queue failed because:
|
Sorry, something went wrong.
| AddOption("--experimental-repl-await", | ||
| "experimental await keyword support in REPL", | ||
| &EnvironmentOptions::experimental_repl_await, | ||
| kAllowedInEnvvar, | ||
| true); |
There was a problem hiding this comment.
We need to reintroduce this flag as a no-op
Sorry, something went wrong.
There was a problem hiding this comment.
Why? This is semver-major, isn't it fine to make flags stop working?
Sorry, something went wrong.
There was a problem hiding this comment.
Nope, when a feature is unflagged, we always keep the flag: the cost of keeping a flag is marginal, while for the ecosystem it's unnecessary churn
Sorry, something went wrong.
Two doc-only improvements to `doc/api/repl.md`, both filling gaps left by recent semver-major REPL changes: 1. `repl.REPLServer` is an ES class; calling it without `new` is End-of-Life (DEP0185) and throws a native V8 `TypeError`. The "Class: REPLServer" section now notes this and links to the DEP0185 entry in `doc/api/deprecations.md`. No `Stability: 0` banner is added because the class itself is not deprecated — only the `new`-less invocation is — matching the parallel DEP0184/DEP0195 "classes without `new`" convention. 2. PR nodejs#64034 ("repl: use inspector over vm") removed the old "Global uncaught exceptions" subsection because the `domain`-based restrictions it documented no longer exist. A new top-level `### Error handling` section documents the current model (mirroring the `### Error handling` convention in async_hooks/http2/quic), anchored to the existing `Uncaught Error: REPL await` example. Refs: nodejs#59495 Refs: nodejs#54869 Refs: nodejs#54842 Refs: nodejs#64034 PR-URL: nodejs#64993 Signed-off-by: Adrian Estrada <edsadr@gmail.com>
Two doc-only improvements to `doc/api/repl.md`, both filling gaps left by recent semver-major REPL changes: 1. `repl.REPLServer` is an ES class; calling it without `new` is End-of-Life (DEP0185) and throws a native V8 `TypeError`. The "Class: REPLServer" section now notes this and links to the DEP0185 entry in `doc/api/deprecations.md`. No `Stability: 0` banner is added because the class itself is not deprecated — only the `new`-less invocation is — matching the parallel DEP0184/DEP0195 "classes without `new`" convention. 2. PR nodejs#64034 ("repl: use inspector over vm") removed the old "Global uncaught exceptions" subsection because the `domain`-based restrictions it documented no longer exist. A new top-level `### Error handling` section documents the current model (mirroring the `### Error handling` convention in async_hooks/http2/quic), anchored to the existing `Uncaught Error: REPL await` example. Refs: nodejs#59495 Refs: nodejs#54869 Refs: nodejs#54842 Refs: nodejs#64034 PR-URL: nodejs#64993 Signed-off-by: Adrian Estrada <edsadr@gmail.com>
Two doc-only improvements to `doc/api/repl.md`, both filling gaps left by recent semver-major REPL changes: 1. `repl.REPLServer` is an ES class; calling it without `new` is End-of-Life (DEP0185) and throws a native V8 `TypeError`. The "Class: REPLServer" section now notes this and links to the DEP0185 entry in `doc/api/deprecations.md`. No `Stability: 0` banner is added because the class itself is not deprecated — only the `new`-less invocation is — matching the parallel DEP0184/DEP0195 "classes without `new`" convention. 2. PR #64034 ("repl: use inspector over vm") removed the old "Global uncaught exceptions" subsection because the `domain`-based restrictions it documented no longer exist. A new top-level `### Error handling` section documents the current model (mirroring the `### Error handling` convention in async_hooks/http2/quic), anchored to the existing `Uncaught Error: REPL await` example. Refs: #59495 Refs: #54869 Refs: #54842 Refs: #64034 Signed-off-by: Adrian Estrada <edsadr@gmail.com> PR-URL: #64993 Reviewed-By: Erick Wendel <erick.workspace@gmail.com> Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
| Back | FazBrowse Home | New Git URL |
This PR switches the REPL from node:vm to node:inspector, moving it from a synchronous to an asynchronous evaluator. This brings the following improvements:
This is a semver-major change; see the reasons listed in the notable changes section.
Removed Tests
Fixes: #64523
Closes: #64534
Fixes: #39387
Closes: #39392
Fixes: #61390
Fixes: #63126
Fixes: #38503
Fixes: #37445
Fixes: #38145
Fixes: #33369
Fixes: #48131
Fixes: #8309
Fixes: #39689
Fixes: #18931
Notable Change
The REPL has been re-implemented on top of the V8 Inspector (node:inspector) rather than node:vm. This moves the REPL from a synchronous to an asynchronous evaluator and resolves long-standing design quirks that stemmed from the vm-based design:
Breaking changes
In addition to the removal of --no-experimental-repl-await and similar await changes noted above: