From 769f8b45b089a116cece11db6be115821f0b1d56 Mon Sep 17 00:00:00 2001 From: Timothee Guerin Date: Fri, 11 Oct 2024 09:39:48 -0700 Subject: [PATCH] Fix: Resolving self module keeps looking up (#4697) --- ...resolve-self-recursive-2024-9-11-9-8-33.md | 7 +++++ .../src/module-resolver/module-resolver.ts | 8 +++--- .../module-resolver/module-resolver.test.ts | 26 +++++++++++++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 .chronus/changes/fix-resolve-self-recursive-2024-9-11-9-8-33.md diff --git a/.chronus/changes/fix-resolve-self-recursive-2024-9-11-9-8-33.md b/.chronus/changes/fix-resolve-self-recursive-2024-9-11-9-8-33.md new file mode 100644 index 00000000000..0b68d166181 --- /dev/null +++ b/.chronus/changes/fix-resolve-self-recursive-2024-9-11-9-8-33.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/compiler" +--- + +Fix module resolution when resolving self from within another package \ No newline at end of file diff --git a/packages/compiler/src/module-resolver/module-resolver.ts b/packages/compiler/src/module-resolver/module-resolver.ts index f747302e3db..6b2b353150c 100644 --- a/packages/compiler/src/module-resolver/module-resolver.ts +++ b/packages/compiler/src/module-resolver/module-resolver.ts @@ -162,11 +162,9 @@ export async function resolveModule( const pkgFile = resolvePath(dir, "package.json"); if (!(await isFile(host, pkgFile))) continue; const pkg = await readPackage(host, pkgFile); - if (pkg.name === name) { - return loadPackage(dir, pkg); - } else { - return undefined; - } + // Node Spec says that you shouldn't lookup past the first package.json. However we used to support that so keeping this. + if (pkg.name !== name) continue; + return loadPackage(dir, pkg); } return undefined; } diff --git a/packages/compiler/test/module-resolver/module-resolver.test.ts b/packages/compiler/test/module-resolver/module-resolver.test.ts index ee1d9c284ba..76af657dbfa 100644 --- a/packages/compiler/test/module-resolver/module-resolver.test.ts +++ b/packages/compiler/test/module-resolver/module-resolver.test.ts @@ -374,3 +374,29 @@ describe("packages", () => { }); }); }); + +describe("resolve self", () => { + const { host } = mkFs({ + "/ws/proj/package.json": JSON.stringify({ name: "@scope/proj", main: "entry.js" }), + "/ws/proj/entry.js": "", + "/ws/proj/nested/index.js": "", + "/ws/proj/node_modules/test-lib/package.json": JSON.stringify({ main: "entry.js" }), + "/ws/proj/node_modules/test-lib/entry.js": "", + "/ws/proj/node_modules/test-lib/nested/index.js": "", + }); + + it.each([ + ["at the same level", "/ws/proj"], + ["nested", "/ws/proj/nested"], + ["lookup parent package.json", "/ws/proj/node_modules/test-lib/nested"], + ])("%s", async (_, baseDir) => { + const resolved = await resolveModule(host, "@scope/proj", { + baseDir, + }); + expect(resolved).toMatchObject({ + type: "module", + path: "/ws/proj", + mainFile: "/ws/proj/entry.js", + }); + }); +});