mirror of
https://github.com/morluto/rea.git
synced 2026-11-10 00:36:35 +00:00
fix(reference): distinguish root access failures from invalid input
Share root filesystem failure classification between import preflight and traversal. Missing roots remain invalid selections; permission and I/O errors retain their reason and reach the CLI as execution failures. Preserve cancellation priority and expose unexpected exceptions. Validation: compiled CLI permission regression, direct reader error details, import/traversal and unreadable-directory boundaries passed. Windows-only cases were skipped on macOS; static, architecture and documentation checks passed.
This commit is contained in:
1 parent
2014ee7d68
commit
3967cfa43e
5 files changed
+113
-10
No files matched your search
@@ -49,6 +49,26 @@ export const filesystemFailureDetail = (
|
||||
: undefined;
|
||||
};
|
||||
|
||||
/** Preserve root I/O detail while separating bad selections from access failures. */
|
||||
export const rootFilesystemFailure = (
|
||||
cause: unknown,
|
||||
operation: string,
|
||||
):
|
||||
| {
|
||||
readonly code: "invalid-root" | "io";
|
||||
readonly message: string;
|
||||
}
|
||||
| undefined => {
|
||||
if (!(cause instanceof Error)) return undefined;
|
||||
const code: unknown = Reflect.get(cause, "code");
|
||||
if (typeof code !== "string" || !FILESYSTEM_ERROR_CODES.has(code))
|
||||
return undefined;
|
||||
return {
|
||||
code: code === "ENOENT" || code === "ENOTDIR" ? "invalid-root" : "io",
|
||||
message: `${operation}: ${cause.message}`,
|
||||
};
|
||||
};
|
||||
|
||||
export const entryFailure = (
|
||||
...[path, kind, code, message, size]: readonly [
|
||||
string,
|
||||
|
||||
Reference in new issue
Block a user