Files
reverse-engineering-anything/src/artifacts/pyinstaller/PyInstallerFileAdmission.ts
T

37 lines
1.2 KiB
TypeScript

import {
NonRegularFileReadError,
RegularFileAdmissionFailure,
RegularFileOperationCancelled,
} from "../../filesystem/RegularFile.js";
import { ArtifactReaderFailure } from "../ArtifactReader.js";
/** Both carrier and private-image admission preserve cancellation and cleanup. */
export const pyInstallerFileAdmissionFailure = (
path: string,
cause: unknown,
): ArtifactReaderFailure => {
if (cause instanceof ArtifactReaderFailure) return cause;
if (cause instanceof RegularFileOperationCancelled)
return new ArtifactReaderFailure(
"cancelled",
"PyInstaller file admission cancelled",
{ cause: cause.reason },
);
if (cause instanceof RegularFileAdmissionFailure)
return ArtifactReaderFailure.withCleanup(
pyInstallerFileAdmissionFailure(path, cause.cause),
ArtifactReaderFailure.cleanupObservation(cause.cleanupCause, path),
);
if (cause instanceof NonRegularFileReadError)
return new ArtifactReaderFailure(
"format",
`PyInstaller source is not a regular file: ${path}`,
{ cause },
);
return new ArtifactReaderFailure(
"io",
"PyInstaller archive could not be opened",
{ cause },
);
};