Due to the below if condition, introduced in #694, if options are passed to register programmatically (e.g. register({ ...customOptions })), they will be ignored in favor of either the results from readDefaultTsConfig or options gathered directly by swc from a nearby .swcrc file when process.env.SWCRC = 'true'.
|
if (!process.env.SWCRC) { |
|
options = readDefaultTsConfig() |
|
} |
In cases where SWCRC is not true (unset, etc.), the configuration returned from readDefaultTsConfig is taken even if options are passed to register, meaning the passed options are altogether ignored.
I believe in this specific circumstance, the intuition would be for options passed to register to be used $iif$ they were given && !process.env.SWCRC.
Unless I am totally off-base here, I think the body of the if can be changed to (or something similar):
if (!process.env.SWCRC) {
options = Object.keys(options).length ? options : readDefaultTsConfig()
}
Where when process.env.SWCRC is falsy, we prefer any programmatically specified options before trying to read a tsconfig.json file. With this, I think the scenario above should be accounted for appropriately, while also not breaking what was fixed in #694.
For anyone running into this currently, using patch-package with the below diff, I was able to quickly fix this for 1.6.6
diff --git a/node_modules/@swc-node/register/lib/register.js b/node_modules/@swc-node/register/lib/register.js
index 7d4cfd8..1a8eab1 100644
--- a/node_modules/@swc-node/register/lib/register.js
+++ b/node_modules/@swc-node/register/lib/register.js
@@ -88,7 +88,7 @@ function compile(sourcecode, filename, options, async = false) {
exports.compile = compile;
function register(options = {}, hookOpts = {}) {
if (!process.env.SWCRC) {
- options = (0, read_default_tsconfig_1.readDefaultTsConfig)();
+ options = Object.keys(options).length ? options : (0, read_default_tsconfig_1.readDefaultTsConfig)();
}
options.module = ts.ModuleKind.CommonJS;
(0, sourcemap_support_1.installSourceMapSupport)();
A more detailed and interactive reproduction can be seen here.
Due to the below
ifcondition, introduced in #694, ifoptionsare passed toregisterprogrammatically (e.g.register({ ...customOptions })), they will be ignored in favor of either the results fromreadDefaultTsConfigor options gathered directly byswcfrom a nearby.swcrcfile whenprocess.env.SWCRC = 'true'.swc-node/packages/register/register.ts
Lines 108 to 110 in ba8f60d
In cases where
SWCRCis nottrue(unset, etc.), the configuration returned fromreadDefaultTsConfigis taken even ifoptionsare passed toregister, meaning the passedoptionsare altogether ignored.I believe in this specific circumstance, the intuition would be for$iif$ they were given
optionspassed toregisterto be used&& !process.env.SWCRC.Unless I am totally off-base here, I think the body of the
ifcan be changed to (or something similar):Where when
process.env.SWCRCis falsy, we prefer any programmatically specified options before trying to read atsconfig.jsonfile. With this, I think the scenario above should be accounted for appropriately, while also not breaking what was fixed in #694.For anyone running into this currently, using
patch-packagewith the below diff, I was able to quickly fix this for1.6.6A more detailed and interactive reproduction can be seen here.