Skip to content

Commit

Permalink
fix(ext/node): add path to fs.stat and fs.statSync error (denolan…
Browse files Browse the repository at this point in the history
  • Loading branch information
familyboat authored Oct 27, 2024
1 parent 05868cc commit c314b2d
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
14 changes: 12 additions & 2 deletions ext/node/polyfills/_fs/_fs_stat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 383,10 @@ export function stat(

Deno.stat(path).then(
(stat) => callback(null, CFISBIS(stat, options.bigint)),
(err) => callback(denoErrorToNodeError(err, { syscall: "stat" })),
(err) =>
callback(
denoErrorToNodeError(err, { syscall: "stat", path: getPathname(path) }),
),
);
}

Expand Down Expand Up @@ -417,9 420,16 @@ export function statSync(
return;
}
if (err instanceof Error) {
throw denoErrorToNodeError(err, { syscall: "stat" });
throw denoErrorToNodeError(err, {
syscall: "stat",
path: getPathname(path),
});
} else {
throw err;
}
}
}

function getPathname(path: string | URL) {
return typeof path === "string" ? path : path.pathname;
}
43 changes: 43 additions & 0 deletions tests/unit_node/fs_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 26,7 @@ import {
cp,
FileHandle,
open,
stat,
writeFile,
} from "node:fs/promises";
import process from "node:process";
Expand Down Expand Up @@ -123,6 124,48 @@ Deno.test(
},
);

Deno.test(
"[node/fs statSync] throw error with path information",
() => {
const file = "non-exist-file";
const fileUrl = new URL(file, import.meta.url);

assertThrows(() => {
statSync(file);
}, "Error: ENOENT: no such file or directory, stat 'non-exist-file'");

assertThrows(() => {
statSync(fileUrl);
}, `Error: ENOENT: no such file or directory, stat '${fileUrl.pathname}'`);
},
);

Deno.test(
"[node/fs/promises stat] throw error with path information",
async () => {
const file = "non-exist-file";
const fileUrl = new URL(file, import.meta.url);

try {
await stat(file);
} catch (error: unknown) {
assertEquals(
`${error}`,
"Error: ENOENT: no such file or directory, stat 'non-exist-file'",
);
}

try {
await stat(fileUrl);
} catch (error: unknown) {
assertEquals(
`${error}`,
`Error: ENOENT: no such file or directory, stat '${fileUrl.pathname}'`,
);
}
},
);

Deno.test(
"[node/fs/promises cp] copy file",
async () => {
Expand Down

0 comments on commit c314b2d

Please sign in to comment.