Files
reverse-engineering-anything/tests/fixtures/renameOpenParent.ts
T
morluto ddefba83ef test(artifacts): handle blocked open-parent renames (#7904)
* test(artifacts): handle blocked open-parent renames

* test(artifacts): exercise blocked parent rename cleanup
2026-10-29 13:45:12 +08:00

26 lines
729 B
TypeScript

import { rename } from "node:fs/promises";
/** Attempt the inode-preserving parent swap; Windows may refuse it while the child is open. */
export const renameOpenParent = async (
from: string,
to: string,
options: {
readonly platform?: NodeJS.Platform;
readonly rename?: typeof rename;
} = {},
): Promise<{ kind: "renamed" } | { kind: "blocked"; cause: unknown }> => {
try {
await (options.rename ?? rename)(from, to);
return { kind: "renamed" };
} catch (cause: unknown) {
if (
(options.platform ?? process.platform) === "win32" &&
cause instanceof Error &&
"code" in cause &&
cause.code === "EPERM"
)
return { kind: "blocked", cause };
throw cause;
}
};