From 991437d823ec6c285480620a01fbc06333c55b16 Mon Sep 17 00:00:00 2001 From: dasdeo Date: Thu, 14 Dec 2023 10:43:55 +0100 Subject: [PATCH 1/2] In certain cirumstances findPackageJson will loop forever. This is fixed by checking if the root directory (/) was already looped over. --- packages/node-resolve/src/package/utils.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/node-resolve/src/package/utils.ts b/packages/node-resolve/src/package/utils.ts index 00a71a791..3457f8548 100644 --- a/packages/node-resolve/src/package/utils.ts +++ b/packages/node-resolve/src/package/utils.ts @@ -11,6 +11,7 @@ function isModuleDir(current: string, moduleDirs: readonly string[]) { export async function findPackageJson(base: string, moduleDirs: readonly string[]) { const { root } = path.parse(base); let current = base; + let prev_current = null; while (current !== root && !isModuleDir(current, moduleDirs)) { const pkgJsonPath = path.join(current, 'package.json'); @@ -18,7 +19,11 @@ export async function findPackageJson(base: string, moduleDirs: readonly string[ const pkgJsonString = fs.readFileSync(pkgJsonPath, 'utf-8'); return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; } + prev_current = current; current = path.resolve(current, '..'); + + // issue #1647 prevent infinite loop for virtual modules + if (current === "/" && prev_current === "/") break; } return null; } From 359dde903196741801c36c0e49624563572b4ad4 Mon Sep 17 00:00:00 2001 From: dasdeo Date: Thu, 14 Dec 2023 10:50:08 +0100 Subject: [PATCH 2/2] Fix linter issues. --- packages/node-resolve/src/package/utils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node-resolve/src/package/utils.ts b/packages/node-resolve/src/package/utils.ts index 3457f8548..2b2f6a6d1 100644 --- a/packages/node-resolve/src/package/utils.ts +++ b/packages/node-resolve/src/package/utils.ts @@ -11,7 +11,7 @@ function isModuleDir(current: string, moduleDirs: readonly string[]) { export async function findPackageJson(base: string, moduleDirs: readonly string[]) { const { root } = path.parse(base); let current = base; - let prev_current = null; + let prevCurrent = null; while (current !== root && !isModuleDir(current, moduleDirs)) { const pkgJsonPath = path.join(current, 'package.json'); @@ -19,11 +19,11 @@ export async function findPackageJson(base: string, moduleDirs: readonly string[ const pkgJsonString = fs.readFileSync(pkgJsonPath, 'utf-8'); return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; } - prev_current = current; + prevCurrent = current; current = path.resolve(current, '..'); // issue #1647 prevent infinite loop for virtual modules - if (current === "/" && prev_current === "/") break; + if (current === '/' && prevCurrent === '/') break; } return null; }