deno/ext/node/polyfills/_fs/_fs_rename.ts
David Sherret b1a510ce54
Some checks are pending
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build libs (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
fix(node): regression where Node fs APIs required elevated permissions on Windows (#30535)
Closes https://github.com/denoland/deno/issues/30534
2025-08-27 09:29:44 -04:00

56 lines
1.5 KiB
TypeScript

// Copyright 2018-2025 the Deno authors. MIT license.
import { promisify } from "ext:deno_node/internal/util.mjs";
import { getValidatedPathToString } from "ext:deno_node/internal/fs/utils.mjs";
import { validateFunction } from "ext:deno_node/internal/validators.mjs";
import { primordials } from "ext:core/mod.js";
import type { Buffer } from "node:buffer";
import { denoErrorToNodeError } from "ext:deno_node/internal/errors.ts";
const {
PromisePrototypeThen,
} = primordials;
export function rename(
oldPath: string | Buffer | URL,
newPath: string | Buffer | URL,
callback: (err?: Error) => void,
) {
oldPath = getValidatedPathToString(oldPath, "oldPath");
newPath = getValidatedPathToString(newPath, "newPath");
validateFunction(callback, "callback");
PromisePrototypeThen(
Deno.rename(oldPath, newPath),
() => callback(),
(err: Error) =>
callback(denoErrorToNodeError(err, {
syscall: "rename",
path: oldPath,
dest: newPath,
})),
);
}
export const renamePromise = promisify(rename) as (
oldPath: string | Buffer | URL,
newPath: string | Buffer | URL,
) => Promise<void>;
export function renameSync(
oldPath: string | Buffer | URL,
newPath: string | Buffer | URL,
) {
oldPath = getValidatedPathToString(oldPath, "oldPath");
newPath = getValidatedPathToString(newPath, "newPath");
try {
Deno.renameSync(oldPath, newPath);
} catch (err) {
throw denoErrorToNodeError(err as Error, {
syscall: "rename",
path: oldPath,
dest: newPath,
});
}
}