mirror of
https://github.com/morluto/rea
synced 2026-10-28 06:46:47 -04:00
fix(javascript): keep paths after __dirname inside the source directory (#2366)
Node's path.join does not reset at an absolute segment, so path.join(__dirname, '/preload.js') is <dir>/preload.js. The static path projection skipped the __dirname anchor and joined the remaining parts, which turned that common spelling into the root path /preload.js. In an app whose main script lives in src/, the BrowserWindow preload was then reported not-found, or resolved to an unrelated preload.js at the artifact root, and the utilityProcess.fork target was never resolved. String concatenation had the same defect: path.dirname(__filename) + '/preload.js' projected to /preload.js, and __dirname + '/preload.js' stayed unknown. A source directory now contributes "." to a join, so path.join(__dirname) projects to "." like path.resolve(__dirname). A concatenation that starts with __dirname or the source file's dirname keeps text that begins with a separator inside that directory; other text extends the directory's own name and stays unknown. The empty-string projection of path.dirname(__filename), which produced the wrong concatenation, is removed, so a bare path.dirname(__filename) is unknown like a bare __dirname.
This commit is contained in:
@@ -38,6 +38,9 @@ const anchoredExpressions = [
|
||||
["path.resolve(__dirname)", "."],
|
||||
['path.posix.resolve(`/app`, `/shared`, "preload.js")', "/shared/preload.js"],
|
||||
['path.posix.resolve("" + "/app", "preload.js")', "/app/preload.js"],
|
||||
['__dirname + "/preload.js"', "preload.js"],
|
||||
['__dirname + "/" + "preload.js"', "preload.js"],
|
||||
['path.dirname(__filename) + "/lib" + "/preload.js"', "lib/preload.js"],
|
||||
] as const;
|
||||
|
||||
const unknownExpressions = [
|
||||
@@ -58,6 +61,8 @@ const unknownExpressions = [
|
||||
'path.win32.resolve(__dirname, "preload.js")',
|
||||
'win32.resolve("/app", "preload.js")',
|
||||
'resolve("/app", "preload.js")',
|
||||
'__dirname + "preload.js"',
|
||||
'path.dirname(__filename) + "preload.js"',
|
||||
];
|
||||
|
||||
describe("inert JavaScript path resolution", () => {
|
||||
@@ -100,6 +105,16 @@ describe("inert JavaScript path resolution", () => {
|
||||
"preload.js",
|
||||
"filesystem-expression",
|
||||
],
|
||||
[
|
||||
'path.join(__dirname, "/preload.js")',
|
||||
"preload.js",
|
||||
"filesystem-expression",
|
||||
],
|
||||
[
|
||||
'path.join(dirname(fileURLToPath(import.meta.url)), "/lib", "/preload.js")',
|
||||
"lib/preload.js",
|
||||
"filesystem-expression",
|
||||
],
|
||||
[
|
||||
'path.join("ignored", __dirname, "preload.js")',
|
||||
"ignored/preload.js",
|
||||
@@ -111,6 +126,7 @@ describe("inert JavaScript path resolution", () => {
|
||||
"filesystem-expression",
|
||||
],
|
||||
['join("sub", "preload.js")', "sub/preload.js", "module-specifier"],
|
||||
["path.join(__dirname)", ".", "filesystem-expression"],
|
||||
] as const)("preserves join behavior in %s", (expression, path, context) => {
|
||||
assertPathProjection(expression, path, context);
|
||||
});
|
||||
@@ -182,7 +198,6 @@ describe("inert JavaScript path resolution", () => {
|
||||
|
||||
it.each([
|
||||
"path.join()",
|
||||
"path.join(__dirname)",
|
||||
'path.join("/app", runtimeFile)',
|
||||
"path.join(...parts)",
|
||||
])("preserves unresolved join syntax in %s", (expression) =>
|
||||
|
||||
Reference in New Issue
Block a user