-
Notifications
You must be signed in to change notification settings - Fork 30k
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
process: wrap process.binding for selective fallthrough to internalBinding #22269
Conversation
Selectively deprecate `process.binding()` and fallthrough Refs: nodejs#22163
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.
lgtm with DeprecationWarning
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.
Nice, thanks!
actually @jasnell can you switch this to use SafeSet from |
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.
CITGM run has yargs looking okay, with docs added this looks good
lib/internal/bootstrap/node.js
Outdated
if (!internalBindingWarned.has(name)) { | ||
process.emitWarning( | ||
`Use of process.binding('${name}') is deprecated.`, | ||
'DeprecationWarning', 'DEP0111'); |
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.
Can you add docs in doc/api/deprecations.md
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.
also it should be DEP00XX
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 part of the existing DEP0111 process.binding deprecation. The documentation is already there. The odd but is that it's not a complete switch to a runtime deprecation.
lib/internal/bootstrap/node.js
Outdated
// Deprecated specific process.binding() modules, but not all, allow | ||
// selective fallback to internalBinding for the deprecated ones. | ||
const processBinding = process.binding; | ||
const internalBindingWhitelist = new Set(['uv']); |
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.
please use SafeSet
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.
Done
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.
I'd like to hold this until an allow list, and those items in it, are more thoroughly digested. Many of the APIs that are deprecated have no user-land alternatives so leaves devs with nothing to fill the functionality gap. I think before a runtime error can be thrown we should have alternatives or guidance for the various APIs.
Update:
The move from process.binding
to internalBinding
is good. The mapping in process.binding
to internalBinding
, included in this PR, is good too (needed for a deprecation and migration path).
Update:
See additional comments, here and here, on migration and deprecation of recently removed bindings in master branch.
@jdalton ... this is not adding a runtime error. It adds a runtime deprecation for only |
The var name is a bit confusing as it suggests an allow list but then it issues a warning (Deprecation warnings can throw). |
They throw only if Either way, we need to fix the |
We can't fast track a semver-major with a red x. |
I'm a fan of removing reliance on
I'll update my ✖️ above with this note |
Data is great for this! |
Unblocking and landing this specific PR gives us a way of actually deprecating these things incrementally. |
@jasnell I 👍 the approach of your previous comment.
|
There is no need for all. |
Cool. You can address specifics in the follow-up commits in this PR. |
Removed the deprecation warning. Will handle that in a separate PR. Did not add the additional modules into the whitelist, prefer that to be done as separate PRs based on need. |
This doesn't really satisfy the request. It's reasonable to add non-experimental bindings to the list until we can determine if they can safely be removed with data. I'm not a fan of a break-first-then-follow-up process. I dig the doc deprecate -> runtime warn -> then drop process. |
Please let me know which transitioned items you want to see landed... So far we've transitioned:
The other modules are handled by still open PRs that would need to be updated after this lands. |
I don't think we have data on usage yet so if the bindings aren't experimental they should be added to the allow-list until then (so |
Ah nice! Ok then! |
CI (with lints fixed): https://ci.nodejs.org/job/node-test-pull-request/16453/ |
Selectively fallthrough `process.binding()` to `internalBinding()` Refs: #22163 PR-URL: #22269 Reviewed-By: Gus Caplan <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Jon Moss <[email protected]> Reviewed-By: John-David Dalton <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]>
Landed in 0257fd7 |
Selectively allow
process.binding()
to fall-through tointernalBinding()
This adds a selective deprecation. We might want to make this aPendingDeprecationWarning
instead of a regularDeprecationWarning
.Refs: #22163
/cc @addaleax
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes