From e34f006484d89c53dd4cac7cface3c4d70841e34 Mon Sep 17 00:00:00 2001 From: cm-ayf Date: Sun, 3 Sep 2023 07:26:59 +0900 Subject: [PATCH] fix(register): extension-aware module resolution and format handling --- packages/register/esm.mts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/register/esm.mts b/packages/register/esm.mts index 9835d10f6..a5f678183 100644 --- a/packages/register/esm.mts +++ b/packages/register/esm.mts @@ -31,11 +31,16 @@ const host: ts.ModuleResolutionHost = { fileExists: ts.sys.fileExists, readFile: ts.sys.readFile, } +const EXTENSIONS: string[] = [ts.Extension.Ts, ts.Extension.Tsx, ts.Extension.Mts] export const resolve: ResolveFn = async (specifier, context, nextResolve) => { // entrypoint if (!context.parentURL) { - return { format: 'ts', url: specifier, shortCircuit: true } + return { + format: EXTENSIONS.some((ext) => specifier.endsWith(ext)) ? 'ts' : undefined, + url: specifier, + shortCircuit: true, + } } // import/require from external library @@ -51,8 +56,12 @@ export const resolve: ResolveFn = async (specifier, context, nextResolve) => { moduleResolutionCache, ) - // import from local project to local project - if (resolvedModule && !resolvedModule.isExternalLibraryImport) { + // import from local project to local project TS file + if ( + resolvedModule && + !resolvedModule.resolvedFileName.includes('/node_modules/') && + EXTENSIONS.includes(resolvedModule.extension) + ) { return { format: 'ts', url: pathToFileURL(resolvedModule.resolvedFileName).href, @@ -60,7 +69,10 @@ export const resolve: ResolveFn = async (specifier, context, nextResolve) => { } } - // import from local project to external library (or unknown something) + // import from local project to either: + // - something TS couldn't resolve + // - external library + // - local project non-TS file return nextResolve(specifier) }