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", };