Files
zopu-code/repos/effect/packages/platform-node-shared/src/internal/utils.ts
T

52 lines
1.1 KiB
TypeScript

import type { SystemError, SystemErrorTag } from "effect/PlatformError"
import * as PlatformError from "effect/PlatformError"
import type { PathLike } from "node:fs"
/** @internal */
export const handleErrnoException = (module: SystemError["module"], method: string) =>
(
err: NodeJS.ErrnoException,
[path]: [path: PathLike | number | string | readonly string[], ...args: Array<any>]
): PlatformError.PlatformError => {
let reason: SystemErrorTag = "Unknown"
switch (err.code) {
case "ENOENT":
reason = "NotFound"
break
case "EACCES":
reason = "PermissionDenied"
break
case "EEXIST":
reason = "AlreadyExists"
break
case "EISDIR":
reason = "BadResource"
break
case "ENOTDIR":
reason = "BadResource"
break
case "EBUSY":
reason = "Busy"
break
case "ELOOP":
reason = "BadResource"
break
}
return PlatformError.systemError({
_tag: reason,
module,
method,
pathOrDescriptor: path as string | number,
syscall: err.syscall,
cause: err
})
}