deno/ext/node/polyfills/_fs/_fs_close.ts
Daniel Osvaldo Rahmanto 9c871d0a57
fix(ext/node): validate fs.close callback function (#30679)
Towards #29972

Allows the
[parallel/test-fs-close-errors.js](https://github.com/nodejs/node/blob/v24.2.0/test/parallel/test-fs-close-errors.js)
test to pass, and also addresses the `prefer-primordials` lint rule
#24236
2025-09-10 14:29:22 +00:00

39 lines
1 KiB
TypeScript

// Copyright 2018-2025 the Deno authors. MIT license.
import {
type CallbackWithError,
makeCallback,
} from "ext:deno_node/_fs/_fs_common.ts";
import { getValidatedFd } from "ext:deno_node/internal/fs/utils.mjs";
import { core, primordials } from "ext:core/mod.js";
const {
Error,
ErrorPrototype,
ObjectPrototypeIsPrototypeOf,
} = primordials;
export function close(fd: number, callback: CallbackWithError) {
fd = getValidatedFd(fd);
callback = makeCallback(callback);
setTimeout(() => {
let error = null;
try {
// TODO(@littledivy): Treat `fd` as real file descriptor. `rid` is an
// implementation detail and may change.
core.close(fd);
} catch (err) {
error = ObjectPrototypeIsPrototypeOf(ErrorPrototype, err)
? err as Error
: new Error("[non-error thrown]");
}
callback(error);
}, 0);
}
export function closeSync(fd: number) {
fd = getValidatedFd(fd);
// TODO(@littledivy): Treat `fd` as real file descriptor. `rid` is an
// implementation detail and may change.
core.close(fd);
}