From 60edd0685fd30f7d965ae76bb4619c414a67148f Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Tue, 31 Jan 2023 13:02:59 -0800 Subject: [PATCH] Reject auto-imports of relative paths through node_modules in `bundler` resolution (#52536) --- src/services/utilities.ts | 4 ++- ...ortBundlerBlockRelativeNodeModulesPaths.ts | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/autoImportBundlerBlockRelativeNodeModulesPaths.ts diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 9935d419b2c..b6694c1c502 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -2413,7 +2413,9 @@ export function getModuleSpecifierResolverHost(program: Program, host: LanguageS /** @internal */ export function moduleResolutionUsesNodeModules(moduleResolution: ModuleResolutionKind): boolean { - return moduleResolution === ModuleResolutionKind.Node10 || moduleResolution >= ModuleResolutionKind.Node16 && moduleResolution <= ModuleResolutionKind.NodeNext; + return moduleResolution === ModuleResolutionKind.Node10 + || moduleResolution >= ModuleResolutionKind.Node16 && moduleResolution <= ModuleResolutionKind.NodeNext + || moduleResolution === ModuleResolutionKind.Bundler; } /** @internal */ diff --git a/tests/cases/fourslash/autoImportBundlerBlockRelativeNodeModulesPaths.ts b/tests/cases/fourslash/autoImportBundlerBlockRelativeNodeModulesPaths.ts new file mode 100644 index 00000000000..761625a662a --- /dev/null +++ b/tests/cases/fourslash/autoImportBundlerBlockRelativeNodeModulesPaths.ts @@ -0,0 +1,26 @@ +/// + +// @module: esnext +// @moduleResolution: bundler + +// @Filename: /node_modules/dep/package.json +//// { +//// "name": "dep", +//// "version": "1.0.0", +//// "exports": "./dist/index.js" +//// } + +// @Filename: /node_modules/dep/dist/utils.d.ts +//// export const util: () => void; + +// @Filename: /node_modules/dep/dist/index.d.ts +//// export * from "./utils"; + +// @Filename: /index.ts +//// util/**/ + +// Ensures we filter out the relative path through node_modules +// for the non-reexport source, which can only be accessed +// directly with the relative path since it's blocked by the +// package.json "exports" field. +verify.importFixModuleSpecifiers("", ["dep"]);