chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
34
third_party/pi/packages/env/src/errors.ts
vendored
Normal file
34
third_party/pi/packages/env/src/errors.ts
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
import { err, FileError, type Result } from "@earendil-works/pi-durable/env";
|
||||
import { RemoteError } from "./connection.ts";
|
||||
|
||||
export function abortResult<T>(signal: AbortSignal | undefined, path?: string): Result<T, FileError> | undefined {
|
||||
return signal?.aborted ? err(new FileError("aborted", "aborted", path)) : undefined;
|
||||
}
|
||||
|
||||
/** `NodeExecutionEnv`'s mapping of Node error codes to `FileError` codes. */
|
||||
export function toFileError(error: unknown, fallbackPath?: string): FileError {
|
||||
if (error instanceof FileError) return error;
|
||||
if (!(error instanceof RemoteError)) {
|
||||
const cause = error instanceof Error ? error : new Error(String(error));
|
||||
return new FileError("unknown", cause.message, fallbackPath, cause);
|
||||
}
|
||||
const path = error.path ?? fallbackPath;
|
||||
switch (error.code) {
|
||||
case "aborted":
|
||||
return new FileError("aborted", error.message, path, error);
|
||||
case "ENOENT":
|
||||
return new FileError("not_found", error.message, path, error);
|
||||
case "EACCES":
|
||||
case "EPERM":
|
||||
return new FileError("permission_denied", error.message, path, error);
|
||||
case "ENOTDIR":
|
||||
return new FileError("not_directory", error.message, path, error);
|
||||
case "EISDIR":
|
||||
return new FileError("is_directory", error.message, path, error);
|
||||
case "EINVAL":
|
||||
case "SYMLINK":
|
||||
case "NOT_REGULAR":
|
||||
return new FileError("invalid", error.message, path, error);
|
||||
}
|
||||
return new FileError("unknown", error.message, path, error);
|
||||
}
|
||||
Reference in New Issue
Block a user