1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

fix(ext/node): add path to fs.stat and fs.statSync error (#26037)

This commit is contained in:
familyboat 2024-10-27 11:04:35 +08:00 committed by Bartek Iwańczuk
parent 2d2928c4b7
commit 56ecc26b71
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
2 changed files with 55 additions and 2 deletions

View file

@ -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) }),
),
);
}
@ -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;
}

View file

@ -26,6 +26,7 @@ import {
cp,
FileHandle,
open,
stat,
writeFile,
} from "node:fs/promises";
import process from "node:process";
@ -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 () => {