fix: override ts-node module behaviour [gh-768] #804
Merged
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.
I hereby confirm that I followed the code guidelines found at engineering guidelines
Affected Components
Notes for the Reviewer
The bug
Currently the CLI is unable to support TypeScript
checkly.config.ts
and**.check.ts
files in projects that are configured as ECMAScript Module projects. This can be reproduced by setting"type": "module"
inpackage.json
for the boilerplate project:The issue occurs when importing the project files via
ts-node
. Thets-node
documentation has extensive notes on this: ts-node CommonJS vs native ECMAScript modules and ts-node Module type overrides.The Fix
The Checkly CLI is currently compiled to CommonJS and the
await import
in loadTsFile is compiled to arequire
:One option could be to leave the MaC project code as an ECMAScript Module, and import it using a similar trick we use for
.mjs
support (here. This would be difficult, though, withts-node
. We would need to usets-node
's Native ECMAScript Modules Support, and this requires passing the--loader
flag tonode
.Instead, this PR configures
ts-node
to ignore the project'spackage.json
and compile the code to CommonJS. This is described in ts-node Module Type Overrides. This let's us continue torequire
the project'scheckly.config.ts
and*.check.ts
files.One downside with this approach may be with projects importing other dependencies that are pure ESM packages. In this case, I think that they will run into
ERR_REQUIRE_ESM
.