-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
repl: extract and standardize history from both repl and interface #58225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
49982b2
to
63f9371
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #58225 +/- ##
========================================
Coverage 90.19% 90.20%
========================================
Files 635 635
Lines 187344 187522 +178
Branches 36791 36824 +33
========================================
+ Hits 168966 169145 +179
- Misses 11141 11143 +2
+ Partials 7237 7234 -3
🚀 New features to boost your workflow:
|
63f9371
to
01dcfe4
Compare
6e36f16
to
cf8f53f
Compare
Anyone from @nodejs/repl who wants to give this another review ? 😄 |
e57587a
to
ad9dcfc
Compare
anyone? |
I'd love to have a look, but I probably won't have time till this weekend, if you don't mind waiting a bit longer you can count on my reviewing 🙂 |
all reviews are welcome reviews ❤️ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot @puskin for waiting for me 🙏
I left a few comments I hope they are somewhat useful 🙂
(PS: I do hope we can improve the tests before landing this 🙇)
if (options.onHistoryFileLoaded) { | ||
this.historyManager.initialize(options.onHistoryFileLoaded); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is it correct that you initialize the history manager only if an onHistoryFileLoaded
is provided? shouldn't initialize
always be run and with a no-op callback if there is no onHistoryFileLoaded
? 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that's not how the current implementation works. The point of this PR is just to extract existing history functionality into a separate module because we realized that both readline and repl are too dependent on it; anything that can be improved, can be done in a separate PR 😄 .
When I tried doing what you suggested, countless things broke because that callback is only supposed to run in certain particular cases
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The point of this PR is just to extract existing history functionality into a separate module because we realized that both readline and repl are too dependent on it; anything that can be improved, can be done in a separate PR 😄 .
Agreed 🙂👍
When I tried doing what you suggested, countless things broke because that callback is only supposed to run in certain particular cases
Thanks for giving that a try 🙂👍
that's not how the current implementation works.
I actually gave this a quick try and it looks like your implemented behavior is diverging from what node currently does, currently if the callback is not provided an error is thrown, with your changes this doesn't happen, see:
(my-node
points to my local build of node, which I built on your branch)
would it be worth it to validate the callback and keep the current behavior? 🤔
PS: node is failing here:
node/lib/internal/repl/history.js
Line 121 in 19e0d47
ready(null, repl); |
so it's not 100% clear to me if this erroring is intentional or not... at the very least this makes me thing that an assumption is being made that the callback is always defined 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fascinating, if I always call the callback (even with an empty one, when not provided) I get the exact same error (complaining about ready
) but just in the test cases. Tbh, I like that it does not crash and it is still usable when not provided 😃
lib/internal/repl/history.js
Outdated
ArrayPrototypeShift(this[kHistory]); | ||
} else if (lastCommandErrored) { | ||
// If the last command errored and we are trying to edit the history to fix it | ||
// Remove the broken one from the history |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// Remove the broken one from the history | |
// remove the broken one from the history |
(since this sentence is part of the multiline comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not allowed by the linter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what do you mean? I believe that the linter forces capitalization only for the first line of multiline comments, see for example line 130 right above 👆
(PS: not a huge deal either way)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dario-piotrowicz sorry, I was looking at the wrong line 😞
8c8cc2e
to
9764ec5
Compare
lib/internal/repl/history.js
Outdated
ArrayPrototypeShift(this[kHistory]); | ||
} else if (lastCommandErrored) { | ||
// If the last command errored and we are trying to edit the history to fix it | ||
// Remove the broken one from the history |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what do you mean? I believe that the linter forces capitalization only for the first line of multiline comments, see for example line 130 right above 👆
(PS: not a huge deal either way)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still not that thrilled with the tests but I understand why the are the way the are 🙂
Again thanks for giving me a change to review this @puskin 😄
what do you mean! you provided more than welcome feedback 😄 |
9764ec5
to
5e94efb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the changes @puskin 🫶
This comment was marked as outdated.
This comment was marked as outdated.
d24f700
to
70adc77
Compare
Landed in 5a23443 |
PR-URL: #58225 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Dario Piotrowicz <[email protected]>
This does not land cleanly on v22.x-staging, it would require to be manually backported along the other REPL changes |
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | minor | `24.0.2` -> `24.2.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>nodejs/node (node)</summary> ### [`v24.2.0`](https://github.com/nodejs/node/releases/tag/v24.2.0): 2025-06-09, Version 24.2.0 (Current), @​aduh95 [Compare Source](nodejs/node@v24.0.2...v24.2.0) ##### Notable Changes ##### Remove support for HTTP/2 priority signaling The support for priority signaling has been removed in nghttp2, following its deprecation in the [RFC 9113](https://datatracker.ietf.org/doc/html/rfc9113#section-5.3.1). As a consequence of this, priority signaling is deprecated on all release lines of Node.js, and removed from Node.js 24 so we can include latest updates from nghttp2. Contributed by Matteo Collina and Antoine du Hamel in [#​58293](nodejs/node#58293). ##### `import.meta.main` is now available Boolean value available in ECMAScript modules, which can be used to detect whether the current module was the entry point of the current process. ```mjs export function foo() { return 'Hello, world'; } function main() { const message = foo(); console.log(message); } if (import.meta.main) main(); // `foo` can be imported from another module without possible side-effects from `main` ``` Contributed by Joe and Antoine du Hamel in [#​57804](nodejs/node#57804). ##### Other Notable Changes - \[[`e13930bbe0`](nodejs/node@e13930bbe0)] - **doc**: add Filip Skokan to TSC (Rafael Gonzaga) [#​58499](nodejs/node#58499) - \[[`984894b38c`](nodejs/node@984894b38c)] - **doc**: deprecate `util.isNativeError` in favor of `Error.isError` (Miguel Marcondes Filho) [#​58262](nodejs/node#58262) - \[[`d261274b0f`](nodejs/node@d261274b0f)] - **doc**: deprecate passing an empty string to `options.shell` (Antoine du Hamel) [#​58564](nodejs/node#58564) - \[[`510872a522`](nodejs/node@510872a522)] - **(SEMVER-MINOR)** **doc**: graduate `Symbol.dispose`/`asyncDispose` from experimental (James M Snell) [#​58467](nodejs/node#58467) - \[[`6f4c9dd423`](nodejs/node@6f4c9dd423)] - **(SEMVER-MINOR)** **fs**: add `autoClose` option to `FileHandle` readableWebStream (James M Snell) [#​58548](nodejs/node#58548) - \[[`32efb63242`](nodejs/node@32efb63242)] - **http**: deprecate instantiating classes without new (Yagiz Nizipli) [#​58518](nodejs/node#58518) - \[[`0234a8ef53`](nodejs/node@0234a8ef53)] - **(SEMVER-MINOR)** **http2**: add diagnostics channel `http2.server.stream.finish` (Darshan Sen) [#​58560](nodejs/node#58560) - \[[`0f1e94f731`](nodejs/node@0f1e94f731)] - **(SEMVER-MINOR)** **lib**: graduate error codes that have been around for years (James M Snell) [#​58541](nodejs/node#58541) - \[[`13abca3c26`](nodejs/node@13abca3c26)] - **(SEMVER-MINOR)** **perf_hooks**: make event loop delay histogram disposable (James M Snell) [#​58384](nodejs/node#58384) - \[[`8ea1fc5f3b`](nodejs/node@8ea1fc5f3b)] - **(SEMVER-MINOR)** **src**: support namespace options in configuration file (Pietro Marchini) [#​58073](nodejs/node#58073) - \[[`d6ea36ad6c`](nodejs/node@d6ea36ad6c)] - **src,permission**: implicit allow-fs-read to app entrypoint (Rafael Gonzaga) [#​58579](nodejs/node#58579) - \[[`5936cef60a`](nodejs/node@5936cef60a)] - **(SEMVER-MINOR)** **test**: add disposable histogram test (James M Snell) [#​58384](nodejs/node#58384) - \[[`7a91f4aaa1`](nodejs/node@7a91f4aaa1)] - **(SEMVER-MINOR)** **test**: add test for async disposable worker thread (James M Snell) [#​58385](nodejs/node#58385) - \[[`532c173cf2`](nodejs/node@532c173cf2)] - **(SEMVER-MINOR)** **util**: add `none` style to styleText (James M Snell) [#​58437](nodejs/node#58437) - \[[`aeb9ab4c4c`](nodejs/node@aeb9ab4c4c)] - **(SEMVER-MINOR)** **worker**: make Worker async disposable (James M Snell) [#​58385](nodejs/node#58385) ##### Commits - \[[`6c92329b1b`](nodejs/node@6c92329b1b)] - ***Revert*** "**benchmark**: fix broken fs.cpSync benchmark" (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`8bc045264e`](nodejs/node@8bc045264e)] - **benchmark**: fix broken fs.cpSync benchmark (Dario Piotrowicz) [#​58472](nodejs/node#58472) - \[[`46aa079cce`](nodejs/node@46aa079cce)] - **benchmark**: add callback-based `fs.glob` to glob benchmark (Livia Medeiros) [#​58417](nodejs/node#58417) - \[[`a57b05e105`](nodejs/node@a57b05e105)] - **benchmark**: add more options to cp-sync (Sonny) [#​58278](nodejs/node#58278) - \[[`8b5ada4b31`](nodejs/node@8b5ada4b31)] - **buffer**: use Utf8LengthV2() instead of Utf8Length() (Tobias Nießen) [#​58156](nodejs/node#58156) - \[[`22e97362f3`](nodejs/node@22e97362f3)] - **build**: search for libnode.so in multiple places (Jan Staněk) [#​58213](nodejs/node#58213) - \[[`0b4056c573`](nodejs/node@0b4056c573)] - **build**: add support for OpenHarmony operating system (hqzing) [#​58350](nodejs/node#58350) - \[[`db7f413dd3`](nodejs/node@db7f413dd3)] - **build**: fix pointer compression builds (Joyee Cheung) [#​58171](nodejs/node#58171) - \[[`7ff37183e5`](nodejs/node@7ff37183e5)] - **build**: fix defaults for shared llhttp (Antoine du Hamel) [#​58269](nodejs/node#58269) - \[[`b8c33190fe`](nodejs/node@b8c33190fe)] - **build,win**: fix dll build (Stefan Stojanovic) [#​58357](nodejs/node#58357) - \[[`ef9ecbe8a6`](nodejs/node@ef9ecbe8a6)] - **child_process**: give names to `ChildProcess` functions (Livia Medeiros) [#​58370](nodejs/node#58370) - \[[`cec9d9d016`](nodejs/node@cec9d9d016)] - **crypto**: forward auth tag to OpenSSL immediately (Tobias Nießen) [#​58547](nodejs/node#58547) - \[[`9fccb0609f`](nodejs/node@9fccb0609f)] - **crypto**: expose crypto.constants.OPENSSL_IS_BORINGSSL (Shelley Vohr) [#​58387](nodejs/node#58387) - \[[`e7c69b9345`](nodejs/node@e7c69b9345)] - **deps**: update nghttp2 to 1.65.0 (Node.js GitHub Bot) [#​57269](nodejs/node#57269) - \[[`d0b89598a3`](nodejs/node@d0b89598a3)] - **deps**: use proper C standard when building libuv (Yaksh Bariya) [#​58587](nodejs/node#58587) - \[[`8a1fe7bc6a`](nodejs/node@8a1fe7bc6a)] - **deps**: update simdjson to 3.12.3 (Node.js GitHub Bot) [#​57682](nodejs/node#57682) - \[[`36b639b1eb`](nodejs/node@36b639b1eb)] - **deps**: update googletest to [`e9092b1`](nodejs/node@e9092b1) (Node.js GitHub Bot) [#​58565](nodejs/node#58565) - \[[`f8a2a1ef52`](nodejs/node@f8a2a1ef52)] - **deps**: update corepack to 0.33.0 (Node.js GitHub Bot) [#​58566](nodejs/node#58566) - \[[`efb28f7895`](nodejs/node@efb28f7895)] - **deps**: V8: cherry-pick [`249de88`](nodejs/node@249de887a8d3) (Michaël Zasso) [#​58561](nodejs/node#58561) - \[[`88e621ea97`](nodejs/node@88e621ea97)] - **deps**: update sqlite to 3.50.0 (Node.js GitHub Bot) [#​58272](nodejs/node#58272) - \[[`8d2ba386f1`](nodejs/node@8d2ba386f1)] - **deps**: update OpenSSL gen container to Ubuntu 22.04 (Michaël Zasso) [#​58432](nodejs/node#58432) - \[[`7e62a77a7f`](nodejs/node@7e62a77a7f)] - **deps**: update undici to 7.10.0 (Node.js GitHub Bot) [#​58445](nodejs/node#58445) - \[[`87eebd7bad`](nodejs/node@87eebd7bad)] - **deps**: keep required OpenSSL doc files (Michaël Zasso) [#​58431](nodejs/node#58431) - \[[`10910660f6`](nodejs/node@10910660f6)] - **deps**: update undici to 7.9.0 (Node.js GitHub Bot) [#​58268](nodejs/node#58268) - \[[`5e27078ca2`](nodejs/node@5e27078ca2)] - **deps**: update ada to 3.2.4 (Node.js GitHub Bot) [#​58152](nodejs/node#58152) - \[[`3b1e4bdbbb`](nodejs/node@3b1e4bdbbb)] - **deps**: update libuv to 1.51.0 (Node.js GitHub Bot) [#​58124](nodejs/node#58124) - \[[`6bddf587ae`](nodejs/node@6bddf587ae)] - **dns**: fix dns query cache implementation (Ethan Arrowood) [#​58404](nodejs/node#58404) - \[[`984894b38c`](nodejs/node@984894b38c)] - **doc**: deprecate utilisNativeError in favor of ErrorisError (Miguel Marcondes Filho) [#​58262](nodejs/node#58262) - \[[`377ef3ce3a`](nodejs/node@377ef3ce3a)] - **doc**: add support link for panva (Filip Skokan) [#​58591](nodejs/node#58591) - \[[`33a69ff9e4`](nodejs/node@33a69ff9e4)] - **doc**: update metadata for \_transformState deprecation (James M Snell) [#​58530](nodejs/node#58530) - \[[`d261274b0f`](nodejs/node@d261274b0f)] - **doc**: deprecate passing an empty string to `options.shell` (Antoine du Hamel) [#​58564](nodejs/node#58564) - \[[`447ca11010`](nodejs/node@447ca11010)] - **doc**: correct formatting of example definitions for `--test-shard` (Jacob Smith) [#​58571](nodejs/node#58571) - \[[`2f555e0e19`](nodejs/node@2f555e0e19)] - **doc**: clarify DEP0194 scope (Antoine du Hamel) [#​58504](nodejs/node#58504) - \[[`af0446edcb`](nodejs/node@af0446edcb)] - **doc**: deprecate HTTP/2 priority signaling (Matteo Collina) [#​58313](nodejs/node#58313) - \[[`80cc17f1ec`](nodejs/node@80cc17f1ec)] - **doc**: explain child_process code and signal null values everywhere (Darshan Sen) [#​58479](nodejs/node#58479) - \[[`e13930bbe0`](nodejs/node@e13930bbe0)] - **doc**: add Filip Skokan to TSC (Rafael Gonzaga) [#​58499](nodejs/node#58499) - \[[`5f3f045ecc`](nodejs/node@5f3f045ecc)] - **doc**: update `git node release` example (Antoine du Hamel) [#​58475](nodejs/node#58475) - \[[`4bbd026cde`](nodejs/node@4bbd026cde)] - **doc**: add missing options.info for ZstdOptions (Jimmy Leung) [#​58360](nodejs/node#58360) - \[[`a6d0d2a0d7`](nodejs/node@a6d0d2a0d7)] - **doc**: add missing options.info for BrotliOptions (Jimmy Leung) [#​58359](nodejs/node#58359) - \[[`510872a522`](nodejs/node@510872a522)] - **(SEMVER-MINOR)** **doc**: graduate Symbol.dispose/asyncDispose from experimental (James M Snell) [#​58467](nodejs/node#58467) - \[[`08685256cd`](nodejs/node@08685256cd)] - **doc**: clarify x509.checkIssued only checks metadata (Filip Skokan) [#​58457](nodejs/node#58457) - \[[`095794fc24`](nodejs/node@095794fc24)] - **doc**: add links to parent class for `node:zlib` classes (Antoine du Hamel) [#​58433](nodejs/node#58433) - \[[`7acac70bce`](nodejs/node@7acac70bce)] - **doc**: remove remaining uses of `@@​wellknown` syntax (René) [#​58413](nodejs/node#58413) - \[[`62056d40c7`](nodejs/node@62056d40c7)] - **doc**: clarify behavior of --watch-path and --watch flags (Juan Ignacio Benito) [#​58136](nodejs/node#58136) - \[[`e6e6ae887d`](nodejs/node@e6e6ae887d)] - **doc**: fix the order of `process.md` sections (Allon Murienik) [#​58403](nodejs/node#58403) - \[[`d2f6c82c0f`](nodejs/node@d2f6c82c0f)] - **doc,lib**: update source map links to ECMA426 (Chengzhong Wu) [#​58597](nodejs/node#58597) - \[[`a994d3d51a`](nodejs/node@a994d3d51a)] - **doc,src,test**: fix typos (Noritaka Kobayashi) [#​58477](nodejs/node#58477) - \[[`252acc1e89`](nodejs/node@252acc1e89)] - **errors**: show url of unsupported attributes in the error message (Aditi) [#​58303](nodejs/node#58303) - \[[`767e88cbc3`](nodejs/node@767e88cbc3)] - **esm**: unwrap WebAssembly.Global on Wasm Namespaces (Guy Bedford) [#​57525](nodejs/node#57525) - \[[`adef9af3ae`](nodejs/node@adef9af3ae)] - **(SEMVER-MINOR)** **esm**: implement import.meta.main (Joe) [#​57804](nodejs/node#57804) - \[[`308f4cac4b`](nodejs/node@308f4cac4b)] - **esm**: add support for dynamic source phase hook (Guy Bedford) [#​58147](nodejs/node#58147) - \[[`fcef56cb05`](nodejs/node@fcef56cb05)] - **fs**: improve cpSync no-filter copyDir performance (Dario Piotrowicz) [#​58461](nodejs/node#58461) - \[[`996fdb05ab`](nodejs/node@996fdb05ab)] - **fs**: fix cp handle existing symlinks (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`d2931e50e3`](nodejs/node@d2931e50e3)] - **fs**: fix cpSync handle existing symlinks (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`6f4c9dd423`](nodejs/node@6f4c9dd423)] - **(SEMVER-MINOR)** **fs**: add autoClose option to FileHandle readableWebStream (James M Snell) [#​58548](nodejs/node#58548) - \[[`8870bb8677`](nodejs/node@8870bb8677)] - **fs**: improve `cpSync` dest overriding performance (Dario Piotrowicz) [#​58160](nodejs/node#58160) - \[[`f2e2301559`](nodejs/node@f2e2301559)] - **fs**: unexpose internal constants (Chengzhong Wu) [#​58327](nodejs/node#58327) - \[[`32efb63242`](nodejs/node@32efb63242)] - **http**: deprecate instantiating classes without new (Yagiz Nizipli) [#​58518](nodejs/node#58518) - \[[`0b987e5741`](nodejs/node@0b987e5741)] - **(SEMVER-MAJOR)** **http2**: remove support for priority signaling (Matteo Collina) [#​58293](nodejs/node#58293) - \[[`44ca874b2c`](nodejs/node@44ca874b2c)] - **http2**: add lenient flag for RFC-9113 (Carlos Fuentes) [#​58116](nodejs/node#58116) - \[[`0234a8ef53`](nodejs/node@0234a8ef53)] - **(SEMVER-MINOR)** **http2**: add diagnostics channel 'http2.server.stream.finish' (Darshan Sen) [#​58560](nodejs/node#58560) - \[[`2b868e8aa7`](nodejs/node@2b868e8aa7)] - **http2**: add diagnostics channel 'http2.server.stream.error' (Darshan Sen) [#​58512](nodejs/node#58512) - \[[`b4df8d38cd`](nodejs/node@b4df8d38cd)] - **http2**: add diagnostics channel 'http2.server.stream.start' (Darshan Sen) [#​58449](nodejs/node#58449) - \[[`d86ff608bb`](nodejs/node@d86ff608bb)] - **http2**: remove no longer userful options.selectPadding (Jimmy Leung) [#​58373](nodejs/node#58373) - \[[`13dbbdc8a8`](nodejs/node@13dbbdc8a8)] - **http2**: add diagnostics channel 'http2.server.stream.created' (Darshan Sen) [#​58390](nodejs/node#58390) - \[[`08855464ec`](nodejs/node@08855464ec)] - **http2**: add diagnostics channel 'http2.client.stream.close' (Darshan Sen) [#​58329](nodejs/node#58329) - \[[`566fc567b8`](nodejs/node@566fc567b8)] - **http2**: add diagnostics channel 'http2.client.stream.finish' (Darshan Sen) [#​58317](nodejs/node#58317) - \[[`f30b9117d4`](nodejs/node@f30b9117d4)] - **http2**: add diagnostics channel 'http2.client.stream.error' (Darshan Sen) [#​58306](nodejs/node#58306) - \[[`79b852a692`](nodejs/node@79b852a692)] - **inspector**: add mimeType and charset support to Network.Response (Shima Ryuhei) [#​58192](nodejs/node#58192) - \[[`402ac8b1d8`](nodejs/node@402ac8b1d8)] - **inspector**: add protocol method Network.dataReceived (Chengzhong Wu) [#​58001](nodejs/node#58001) - \[[`29f34a7f86`](nodejs/node@29f34a7f86)] - **lib**: disable REPL completion on proxies and getters (Dario Piotrowicz) [#​57909](nodejs/node#57909) - \[[`0f1e94f731`](nodejs/node@0f1e94f731)] - **(SEMVER-MINOR)** **lib**: graduate error codes that have been around for years (James M Snell) [#​58541](nodejs/node#58541) - \[[`cc1aacabb0`](nodejs/node@cc1aacabb0)] - **lib**: make ERM functions into wrappers returning undefined (Livia Medeiros) [#​58400](nodejs/node#58400) - \[[`8df4dee38c`](nodejs/node@8df4dee38c)] - **lib**: remove no-mixed-operators eslint rule (Ruben Bridgewater) [#​58375](nodejs/node#58375) - \[[`104d173f58`](nodejs/node@104d173f58)] - **meta**: bump github/codeql-action from 3.28.16 to 3.28.18 (dependabot\[bot]) [#​58552](nodejs/node#58552) - \[[`b454e8386c`](nodejs/node@b454e8386c)] - **meta**: bump codecov/codecov-action from 5.4.2 to 5.4.3 (dependabot\[bot]) [#​58551](nodejs/node#58551) - \[[`f31e014b81`](nodejs/node@f31e014b81)] - **meta**: bump step-security/harden-runner from 2.11.0 to 2.12.0 (dependabot\[bot]) [#​58109](nodejs/node#58109) - \[[`4da920cc13`](nodejs/node@4da920cc13)] - **meta**: bump ossf/scorecard-action from 2.4.1 to 2.4.2 (dependabot\[bot]) [#​58550](nodejs/node#58550) - \[[`eb9bb95fe2`](nodejs/node@eb9bb95fe2)] - **meta**: bump rtCamp/action-slack-notify from 2.3.2 to 2.3.3 (dependabot\[bot]) [#​58108](nodejs/node#58108) - \[[`27ada1f18c`](nodejs/node@27ada1f18c)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#​58456](nodejs/node#58456) - \[[`4606a6792b`](nodejs/node@4606a6792b)] - **meta**: bump github/codeql-action from 3.28.11 to 3.28.16 (dependabot\[bot]) [#​58112](nodejs/node#58112) - \[[`7dfe448b7f`](nodejs/node@7dfe448b7f)] - **meta**: bump codecov/codecov-action from 5.4.0 to 5.4.2 (dependabot\[bot]) [#​58110](nodejs/node#58110) - \[[`18bb5f7e7e`](nodejs/node@18bb5f7e7e)] - **meta**: bump actions/download-artifact from 4.2.1 to 4.3.0 (dependabot\[bot]) [#​58106](nodejs/node#58106) - \[[`72f2a22889`](nodejs/node@72f2a22889)] - **module**: clarify cjs global-like error on ModuleJobSync (Carlos Espa) [#​56491](nodejs/node#56491) - \[[`b0e0b1afae`](nodejs/node@b0e0b1afae)] - **net**: always publish to 'net.client.socket' diagnostics channel (Darshan Sen) [#​58349](nodejs/node#58349) - \[[`f373d6a540`](nodejs/node@f373d6a540)] - **node-api**: use WriteOneByteV2 in napi_get_value_string_latin1 (Chengzhong Wu) [#​58325](nodejs/node#58325) - \[[`429c38db1b`](nodejs/node@429c38db1b)] - **node-api**: use WriteV2 in napi_get_value_string_utf16 (Tobias Nießen) [#​58165](nodejs/node#58165) - \[[`b882148999`](nodejs/node@b882148999)] - **path**: improve path.resolve() performance when used as process.cwd() (Ruben Bridgewater) [#​58362](nodejs/node#58362) - \[[`13abca3c26`](nodejs/node@13abca3c26)] - **(SEMVER-MINOR)** **perf_hooks**: make event loop delay histogram disposable (James M Snell) [#​58384](nodejs/node#58384) - \[[`1cd417d823`](nodejs/node@1cd417d823)] - **permission**: remove useless conditional (Juan José) [#​58514](nodejs/node#58514) - \[[`462c4b0c24`](nodejs/node@462c4b0c24)] - **readline**: add stricter validation for functions called after closed (Dario Piotrowicz) [#​58283](nodejs/node#58283) - \[[`e3e36f902c`](nodejs/node@e3e36f902c)] - **repl**: extract and standardize history from both repl and interface (Giovanni Bucci) [#​58225](nodejs/node#58225) - \[[`cbb2a0172f`](nodejs/node@cbb2a0172f)] - **report**: use uv_getrusage_thread in report (theanarkh) [#​58405](nodejs/node#58405) - \[[`3a6bd9c4c4`](nodejs/node@3a6bd9c4c4)] - **sqlite**: handle thrown errors in result callback (Colin Ihrig) [#​58426](nodejs/node#58426) - \[[`0d761bbccd`](nodejs/node@0d761bbccd)] - **src**: env_vars caching and local variable scope optimization (Mert Can Altin) [#​57624](nodejs/node#57624) - \[[`8ea1fc5f3b`](nodejs/node@8ea1fc5f3b)] - **(SEMVER-MINOR)** **src**: support namespace options in configuration file (Pietro Marchini) [#​58073](nodejs/node#58073) - \[[`f72ce2ef75`](nodejs/node@f72ce2ef75)] - **src**: remove fast API for InternalModuleStat (Joyee Cheung) [#​58489](nodejs/node#58489) - \[[`8a1eaea151`](nodejs/node@8a1eaea151)] - **src**: update std::vector\<v8::Local\<T>> to use v8::LocalVector\<T> (Aditi) [#​58500](nodejs/node#58500) - \[[`d99d657842`](nodejs/node@d99d657842)] - **src**: fix FIPS init error handling (Tobias Nießen) [#​58379](nodejs/node#58379) - \[[`11e4cd698b`](nodejs/node@11e4cd698b)] - **src**: fix possible dereference of null pointer (Eusgor) [#​58459](nodejs/node#58459) - \[[`ca0f5a0188`](nodejs/node@ca0f5a0188)] - **src**: add env->cppgc_allocation_handle() convenience method (James M Snell) [#​58483](nodejs/node#58483) - \[[`440d4f42bd`](nodejs/node@440d4f42bd)] - **src**: fix -Wreturn-stack-address error (Shelley Vohr) [#​58439](nodejs/node#58439) - \[[`08615b1020`](nodejs/node@08615b1020)] - **src**: prepare for v8 sandboxing (James M Snell) [#​58376](nodejs/node#58376) - \[[`63f643e844`](nodejs/node@63f643e844)] - **src**: reorganize ContextifyFunction methods (Chengzhong Wu) [#​58434](nodejs/node#58434) - \[[`3b6895a506`](nodejs/node@3b6895a506)] - **src**: improve CompileFunctionAndCacheResult error handling (Chengzhong Wu) [#​58434](nodejs/node#58434) - \[[`7f1c95aee8`](nodejs/node@7f1c95aee8)] - **src**: make a number of minor improvements to buffer (James M Snell) [#​58377](nodejs/node#58377) - \[[`ce081bcb9a`](nodejs/node@ce081bcb9a)] - **src**: fix build when using shared simdutf (Antoine du Hamel) [#​58407](nodejs/node#58407) - \[[`a35cc216e5`](nodejs/node@a35cc216e5)] - **src**: track cppgc wrappers with a list in Realm (Joyee Cheung) [#​56534](nodejs/node#56534) - \[[`947c1c2cd5`](nodejs/node@947c1c2cd5)] - **src,lib**: obtain sourceURL in magic comments from V8 (Chengzhong Wu) [#​58389](nodejs/node#58389) - \[[`d6ea36ad6c`](nodejs/node@d6ea36ad6c)] - **src,permission**: implicit allow-fs-read to app entrypoint (Rafael Gonzaga) [#​58579](nodejs/node#58579) - \[[`e8a07f2198`](nodejs/node@e8a07f2198)] - **stream**: making DecompressionStream spec compilent for trailing junk (0hm☘️) [#​58316](nodejs/node#58316) - \[[`3caa2f71c1`](nodejs/node@3caa2f71c1)] - **stream**: test explicit resource management implicitly (LiviaMedeiros) [#​58296](nodejs/node#58296) - \[[`9ccdf4fdb4`](nodejs/node@9ccdf4fdb4)] - **test**: improve flakiness detection on stack corruption tests (Darshan Sen) [#​58601](nodejs/node#58601) - \[[`d3fea003df`](nodejs/node@d3fea003df)] - **test**: mark timeouts & flaky test as flaky on IBM i (Abdirahim Musse) [#​58583](nodejs/node#58583) - \[[`8347ef6b53`](nodejs/node@8347ef6b53)] - **test**: dispose of filehandles in filehandle.read tests (Livia Medeiros) [#​58543](nodejs/node#58543) - \[[`34e86f91aa`](nodejs/node@34e86f91aa)] - **test**: rewrite test-child-process-spawn-args (Michaël Zasso) [#​58546](nodejs/node#58546) - \[[`d7a2458a58`](nodejs/node@d7a2458a58)] - **test**: make sqlite-database-sync tests work with system sqlite (Jelle Licht) [#​58507](nodejs/node#58507) - \[[`4d9d6830e0`](nodejs/node@4d9d6830e0)] - **test**: force slow JSON.stringify path for overflow (Shelley Vohr) [#​58181](nodejs/node#58181) - \[[`bef67e45e3`](nodejs/node@bef67e45e3)] - **test**: account for truthy signal in flaky async_hooks tests (Darshan Sen) [#​58478](nodejs/node#58478) - \[[`007c82f206`](nodejs/node@007c82f206)] - **test**: mark `test-http2-debug` as flaky on LinuxONE (Richard Lau) [#​58494](nodejs/node#58494) - \[[`21f6400098`](nodejs/node@21f6400098)] - **test**: update WPT for WebCryptoAPI to [`591c95c`](nodejs/node@591c95ce61) (Node.js GitHub Bot) [#​58176](nodejs/node#58176) - \[[`1deb5f06a5`](nodejs/node@1deb5f06a5)] - **test**: remove --no-warnings flag (Tobias Nießen) [#​58424](nodejs/node#58424) - \[[`beba631a10`](nodejs/node@beba631a10)] - **test**: add tests ensuring worker threads cannot access internals (Joe) [#​58332](nodejs/node#58332) - \[[`5936cef60a`](nodejs/node@5936cef60a)] - **(SEMVER-MINOR)** **test**: add disposable histogram test (James M Snell) [#​58384](nodejs/node#58384) - \[[`7a91f4aaa1`](nodejs/node@7a91f4aaa1)] - **(SEMVER-MINOR)** **test**: add test for async disposable worker thread (James M Snell) [#​58385](nodejs/node#58385) - \[[`5fc4706280`](nodejs/node@5fc4706280)] - **test**: leverage process.features.openssl_is_boringssl in test (Shelley Vohr) [#​58421](nodejs/node#58421) - \[[`4629b18397`](nodejs/node@4629b18397)] - **test**: fix test-buffer-tostring-range on allocation failure (Joyee Cheung) [#​58416](nodejs/node#58416) - \[[`4c445a8c85`](nodejs/node@4c445a8c85)] - **test**: skip in test-buffer-tostring-rangeerror on allocation failure (Joyee Cheung) [#​58415](nodejs/node#58415) - \[[`53cb29898b`](nodejs/node@53cb29898b)] - **test**: fix missing edge case in test-blob-slice-with-large-size (Joyee Cheung) [#​58414](nodejs/node#58414) - \[[`89fdfdedc1`](nodejs/node@89fdfdedc1)] - **test**: make crypto tests work with BoringSSL (Shelley Vohr) [#​58117](nodejs/node#58117) - \[[`3b5d0e62b1`](nodejs/node@3b5d0e62b1)] - **test**: test reordering of setAAD and setAuthTag (Tobias Nießen) [#​58396](nodejs/node#58396) - \[[`029440bec5`](nodejs/node@029440bec5)] - **test**: switch from deprecated `optparse` to `argparse` (Aviv Keller) [#​58224](nodejs/node#58224) - \[[`d05263edcc`](nodejs/node@d05263edcc)] - **test**: do not skip OCB decryption in FIPS mode (Tobias Nießen) [#​58382](nodejs/node#58382) - \[[`23474cb257`](nodejs/node@23474cb257)] - **test**: show more information in test-http2-debug upon failure (Joyee Cheung) [#​58391](nodejs/node#58391) - \[[`d0302e7b3d`](nodejs/node@d0302e7b3d)] - **test**: remove loop over single element (Tobias Nießen) [#​58368](nodejs/node#58368) - \[[`33f615897d`](nodejs/node@33f615897d)] - **test**: add chacha20-poly1305 to auth tag order test (Tobias Nießen) [#​58367](nodejs/node#58367) - \[[`8f09a1f502`](nodejs/node@8f09a1f502)] - **test**: skip wasm-allocation tests for pointer compression builds (Joyee Cheung) [#​58171](nodejs/node#58171) - \[[`4ae6a1a5ed`](nodejs/node@4ae6a1a5ed)] - **test**: remove references to create(De|C)ipher (Tobias Nießen) [#​58363](nodejs/node#58363) - \[[`4d647271b2`](nodejs/node@4d647271b2)] - **test_runner**: emit event when file changes in watch mode (Jacopo Martinelli) [#​57903](nodejs/node#57903) - \[[`1eda87c365`](nodejs/node@1eda87c365)] - **test_runner**: add level parameter to reporter.diagnostic (Jacopo Martinelli) [#​57923](nodejs/node#57923) - \[[`13377512be`](nodejs/node@13377512be)] - **tools**: bump the eslint group in `/tools/eslint` with 6 updates (dependabot\[bot]) [#​58549](nodejs/node#58549) - \[[`fcc881de0d`](nodejs/node@fcc881de0d)] - **tools**: support `DisposableStack` and `AsyncDisposableStack` in linter (LiviaMedeiros) [#​58454](nodejs/node#58454) - \[[`208d6a5754`](nodejs/node@208d6a5754)] - **tools**: support explicit resource management in eslint (LiviaMedeiros) [#​58296](nodejs/node#58296) - \[[`32070f304a`](nodejs/node@32070f304a)] - **tools**: add missing highway defines for IBM i (Abdirahim Musse) [#​58335](nodejs/node#58335) - \[[`ddab63a323`](nodejs/node@ddab63a323)] - **tty**: improve color terminal color detection (Ruben Bridgewater) [#​58146](nodejs/node#58146) - \[[`c094bea8d9`](nodejs/node@c094bea8d9)] - **tty**: use terminal VT mode on Windows (Anna Henningsen) [#​58358](nodejs/node#58358) - \[[`dc21054a1e`](nodejs/node@dc21054a1e)] - **typings**: add inspector internalBinding typing (Shima Ryuhei) [#​58492](nodejs/node#58492) - \[[`3499285904`](nodejs/node@3499285904)] - **typings**: remove no longer valid `FixedSizeBlobCopyJob` type (Dario Piotrowicz) [#​58305](nodejs/node#58305) - \[[`1ed2deb2c8`](nodejs/node@1ed2deb2c8)] - **typings**: remove no longer valid `revokeDataObject` type (Dario Piotrowicz) [#​58305](nodejs/node#58305) - \[[`532c173cf2`](nodejs/node@532c173cf2)] - **(SEMVER-MINOR)** **util**: add 'none' style to styleText (James M Snell) [#​58437](nodejs/node#58437) - \[[`2d5a1ef528`](nodejs/node@2d5a1ef528)] - **vm**: import call should return a promise in the current context (Chengzhong Wu) [#​58309](nodejs/node#58309) - \[[`588c2449f2`](nodejs/node@588c2449f2)] - **win,tools**: use Azure Trusted Signing (Stefan Stojanovic) [#​58502](nodejs/node#58502) - \[[`aeb9ab4c4c`](nodejs/node@aeb9ab4c4c)] - **(SEMVER-MINOR)** **worker**: make Worker async disposable (James M Snell) [#​58385](nodejs/node#58385) - \[[`23416cce0a`](nodejs/node@23416cce0a)] - **worker**: give names to `MessagePort` functions (Livia Medeiros) [#​58307](nodejs/node#58307) - \[[`44df21b7fb`](nodejs/node@44df21b7fb)] - **zlib**: remove mentions of unexposed Z_TREES constant (Jimmy Leung) [#​58371](nodejs/node#58371) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC41Mi4wIiwidXBkYXRlZEluVmVyIjoiNDAuNTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Refactored and decoupled the history logic into its own separate module and made both REPL and readline depend on it as little as possible, still not breaking functionality.
Updated the
repl.setupHistory
function to accept more parameters than just a string for the history file path and a callback. Before this change you had to manually update the REPL instance to accept history parameters. With the decoupling of this PR, you can now achieve the same result calling the updated method: