feat(unenv-preset): add native node:tty module support #12023
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Devin PR requested by @petebacondarwin
Adds support for the native
node:ttymodule from workerd when theenable_nodejs_tty_moduleandexperimentalcompatibility flags are enabled. This follows the same pattern as other experimental modules (inspector, sqlite, dgram, stream_wrap, repl).The native code appears in workerd as of https://github.com/cloudflare/workerd/blob/main/src/node/tty.ts. It is currently experimental with no default enable date.
Implementation Comparison
isattyReadStreamERR_METHOD_NOT_IMPLEMENTEDWriteStreamERR_METHOD_NOT_IMPLEMENTEDBreaking change analysis: There are no breaking changes when moving from unenv to workerd. Both implementations return false for
isatty(). ForReadStream/WriteStreamconstructors, the unenv stub creates stub objects while workerd throwsERR_METHOD_NOT_IMPLEMENTED. This is a stricter behavior in workerd but not a breaking change since code that worked with unenv stubs would need to handle the objects anyway.Human Review Checklist
getTtyOverrides()function follows the same pattern as other experimental modulesLink to Devin run