You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix ESM node processes being unable to fork into other scripts (#1814)
* Fix ESM node processes being unable to fork into other scripts
Currently, Node processes instantiated through the `--esm` flag result
in a child process being created so that the ESM loader can be
registered. This works fine and is reasonable.
The child process approach to register ESM hooks currently prevents
the NodeJS `fork` method from being used because the `execArgv`
propagated into forked processes causes `ts-node` (which is also
propagated as child exec script -- this is good because it allows nested
type resolution to work) to always execute the original entry-point,
causing potential infinite loops because the designated fork module
script is not executed as expected.
This commit fixes this by not encoding the entry-point information into
the state that is captured as part of the `execArgv`. Instead the
entry-point information is always retrieved from the parsed rest command
line arguments in the final stage (`phase4`).
Fixes#1812.
* Fix `--cwd` to actually set the working directory and work with ESM child process
Currently the `--esm` option does not necessarily do what the
documentation suggests. i.e. the script does not run as if the working
directory is the specified directory.
This commit fixes this, so that the option is useful for TSConfig
resolution, as well as for controlling the script working directory.
Also fixes that the CWD encoded in the bootstrap brotli state for the
ESM child process messes with the entry-point resolution, if e.g. the
entry-point in `child_process.fork` is relative to a specified `cwd`.
* changes based on review
* lint-fix
* enable transpileOnly in new tests for performance
* Tweak basic working dir tests to verify that --cwd affects entrypoint resolution but not process.cwd()
* update forking tests:
disable non --esm test with comment about known bug and link to tickets
make tests set cwd for fork() call, to be sure it is respected and not overridden by --cwd
* use swc compiler to avoid issue with ancient TS versions not understanding import.meta.url syntax
* Remove tests that I think are redundant (but I've asked for confirmation in code review)
* fix another issue with old TS
* final review updates
Co-authored-by: Andrew Bradley <[email protected]>
* Unresolved. May point to a symlink, not realpath. May be missing file extension
453
+
* NOTE: resolution relative to cwd option (not `process.cwd()`) is legacy backwards-compat; should be changed in next major: https://github.com/TypeStrong/ts-node/issues/1834
0 commit comments