From 423b11c8ef7de15fce25ba00d6f2cf378bc8a615 Mon Sep 17 00:00:00 2001 From: Immanuel Tikhonov <122638311+immanuwell@users.noreply.github.com> Date: Sun, 11 Oct 2026 02:23:05 +0400 Subject: [PATCH] fix(javascript): preserve trailing slash in package directory requests (#1615) --- .../javascript/JavaScriptArtifactPathResolution.ts | 3 ++- tests/acceptance/applications/packageSubpathsCli.test.ts | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/application/javascript/JavaScriptArtifactPathResolution.ts b/src/application/javascript/JavaScriptArtifactPathResolution.ts index 6f32b4238..bee94c841 100644 --- a/src/application/javascript/JavaScriptArtifactPathResolution.ts +++ b/src/application/javascript/JavaScriptArtifactPathResolution.ts @@ -234,7 +234,8 @@ const resolvePackageSpecifier = ( if (rawExports === undefined || rawExports === null) { if (subpath === ".") return resolveDirectory(input, directory, metadata, new Set()); - const candidate = confineCandidate(posix.join(directory, subpath.slice(2))); + // Preserve the trailing slash for a package directory request. + const candidate = confineCandidate(`${directory}/${subpath.slice(2)}`); return typeof candidate === "string" ? resolveCandidate(input, candidate, new Set()) : candidate; diff --git a/tests/acceptance/applications/packageSubpathsCli.test.ts b/tests/acceptance/applications/packageSubpathsCli.test.ts index 2cbd4ff14..185580c18 100644 --- a/tests/acceptance/applications/packageSubpathsCli.test.ts +++ b/tests/acceptance/applications/packageSubpathsCli.test.ts @@ -23,10 +23,14 @@ cliTest.for(["CLI", "stdio MCP"] as const)( 'const hidden = require("exported/hidden");', 'const missing = require("exported/missing");', 'new BrowserWindow({webPreferences:{preload:"exported/parser"}});', + 'const file = require("fixture");', + 'const packageDirectory = require("fixture/");', ].join("\n"); const files = { "src/main.cjs": source, "src/node_modules/fixture/parser.js": "module.exports = 1;", + "src/node_modules/fixture.js": "module.exports = 'file';", + "src/node_modules/fixture/index.js": "module.exports = 'directory';", "node_modules/fixture/package.json": "{}", "node_modules/fixture/parser.js": "module.exports = 2;", "node_modules/nested/package.json": "{}", @@ -59,6 +63,8 @@ cliTest.for(["CLI", "stdio MCP"] as const)( const nativeRequire = createRequire(join(root, "src/main.cjs")); const expectedTargets = { "fixture/parser": "src/node_modules/fixture/parser.js", + fixture: "src/node_modules/fixture.js", + "fixture/": "src/node_modules/fixture/index.js", "nested/parser": "node_modules/nested/parser/entry.js", "exported/parser": "node_modules/exported/parser.cjs", };