summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/_fs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/_fs')
-rw-r--r--ext/node/polyfills/_fs/_fs_common.ts1
-rw-r--r--ext/node/polyfills/_fs/_fs_copy.ts6
-rw-r--r--ext/node/polyfills/_fs/_fs_open.ts4
-rw-r--r--ext/node/polyfills/_fs/_fs_readFile.ts10
-rw-r--r--ext/node/polyfills/_fs/_fs_readlink.ts33
-rw-r--r--ext/node/polyfills/_fs/_fs_readv.ts1
-rw-r--r--ext/node/polyfills/_fs/_fs_stat.ts24
7 files changed, 54 insertions, 25 deletions
diff --git a/ext/node/polyfills/_fs/_fs_common.ts b/ext/node/polyfills/_fs/_fs_common.ts
index ac0bf5a55..a29548bb3 100644
--- a/ext/node/polyfills/_fs/_fs_common.ts
+++ b/ext/node/polyfills/_fs/_fs_common.ts
@@ -20,6 +20,7 @@ import {
notImplemented,
TextEncodings,
} from "ext:deno_node/_utils.ts";
+import { type Buffer } from "node:buffer";
export type CallbackWithError = (err: ErrnoException | null) => void;
diff --git a/ext/node/polyfills/_fs/_fs_copy.ts b/ext/node/polyfills/_fs/_fs_copy.ts
index 2f8ddf4fc..0434bff4d 100644
--- a/ext/node/polyfills/_fs/_fs_copy.ts
+++ b/ext/node/polyfills/_fs/_fs_copy.ts
@@ -53,8 +53,9 @@ export function copyFile(
}, (e) => {
if (e instanceof Deno.errors.NotFound) {
Deno.copyFile(srcStr, destStr).then(() => cb(null), cb);
+ } else {
+ cb(e);
}
- cb(e);
});
} else {
Deno.copyFile(srcStr, destStr).then(() => cb(null), cb);
@@ -83,8 +84,9 @@ export function copyFileSync(
} catch (e) {
if (e instanceof Deno.errors.NotFound) {
Deno.copyFileSync(srcStr, destStr);
+ } else {
+ throw e;
}
- throw e;
}
} else {
Deno.copyFileSync(srcStr, destStr);
diff --git a/ext/node/polyfills/_fs/_fs_open.ts b/ext/node/polyfills/_fs/_fs_open.ts
index 8bd989790..31ca4bb61 100644
--- a/ext/node/polyfills/_fs/_fs_open.ts
+++ b/ext/node/polyfills/_fs/_fs_open.ts
@@ -147,8 +147,8 @@ export function open(
export function openPromise(
path: string | Buffer | URL,
- flags?: openFlags = "r",
- mode? = 0o666,
+ flags: openFlags = "r",
+ mode = 0o666,
): Promise<FileHandle> {
return new Promise((resolve, reject) => {
open(path, flags, mode, (err, fd) => {
diff --git a/ext/node/polyfills/_fs/_fs_readFile.ts b/ext/node/polyfills/_fs/_fs_readFile.ts
index 0f05ee167..cf7e0305d 100644
--- a/ext/node/polyfills/_fs/_fs_readFile.ts
+++ b/ext/node/polyfills/_fs/_fs_readFile.ts
@@ -19,6 +19,7 @@ import {
TextEncodings,
} from "ext:deno_node/_utils.ts";
import { FsFile } from "ext:deno_fs/30_fs.js";
+import { denoErrorToNodeError } from "ext:deno_node/internal/errors.ts";
function maybeDecode(data: Uint8Array, encoding: TextEncodings): string;
function maybeDecode(
@@ -87,7 +88,7 @@ export function readFile(
}
const buffer = maybeDecode(data, encoding);
(cb as BinaryCallback)(null, buffer);
- }, (err) => cb && cb(err));
+ }, (err) => cb && cb(denoErrorToNodeError(err)));
}
}
@@ -117,7 +118,12 @@ export function readFileSync(
opt?: FileOptionsArgument,
): string | Buffer {
path = path instanceof URL ? pathFromURL(path) : path;
- const data = Deno.readFileSync(path);
+ let data;
+ try {
+ data = Deno.readFileSync(path);
+ } catch (err) {
+ throw denoErrorToNodeError(err);
+ }
const encoding = getEncoding(opt);
if (encoding && encoding !== "binary") {
const text = maybeDecode(data, encoding);
diff --git a/ext/node/polyfills/_fs/_fs_readlink.ts b/ext/node/polyfills/_fs/_fs_readlink.ts
index 5f2312798..08bea843f 100644
--- a/ext/node/polyfills/_fs/_fs_readlink.ts
+++ b/ext/node/polyfills/_fs/_fs_readlink.ts
@@ -4,13 +4,10 @@
// deno-lint-ignore-file prefer-primordials
import { TextEncoder } from "ext:deno_web/08_text_encoding.js";
-import {
- intoCallbackAPIWithIntercept,
- MaybeEmpty,
- notImplemented,
-} from "ext:deno_node/_utils.ts";
+import { MaybeEmpty, notImplemented } from "ext:deno_node/_utils.ts";
import { pathFromURL } from "ext:deno_web/00_infra.js";
import { promisify } from "ext:deno_node/internal/util.mjs";
+import { denoErrorToNodeError } from "ext:deno_node/internal/errors.ts";
type ReadlinkCallback = (
err: MaybeEmpty<Error>,
@@ -69,12 +66,17 @@ export function readlink(
const encoding = getEncoding(optOrCallback);
- intoCallbackAPIWithIntercept<string, Uint8Array | string>(
- Deno.readLink,
- (data: string): string | Uint8Array => maybeEncode(data, encoding),
- cb,
- path,
- );
+ Deno.readLink(path).then((data: string) => {
+ const res = maybeEncode(data, encoding);
+ if (cb) cb(null, res);
+ }, (err: Error) => {
+ if (cb) {
+ (cb as (e: Error) => void)(denoErrorToNodeError(err, {
+ syscall: "readlink",
+ path,
+ }));
+ }
+ });
}
export const readlinkPromise = promisify(readlink) as (
@@ -88,5 +90,12 @@ export function readlinkSync(
): string | Uint8Array {
path = path instanceof URL ? pathFromURL(path) : path;
- return maybeEncode(Deno.readLinkSync(path), getEncoding(opt));
+ try {
+ return maybeEncode(Deno.readLinkSync(path), getEncoding(opt));
+ } catch (error) {
+ throw denoErrorToNodeError(error, {
+ syscall: "readlink",
+ path,
+ });
+ }
}
diff --git a/ext/node/polyfills/_fs/_fs_readv.ts b/ext/node/polyfills/_fs/_fs_readv.ts
index 384f5e319..2259f029a 100644
--- a/ext/node/polyfills/_fs/_fs_readv.ts
+++ b/ext/node/polyfills/_fs/_fs_readv.ts
@@ -15,6 +15,7 @@ import { maybeCallback } from "ext:deno_node/_fs/_fs_common.ts";
import { validateInteger } from "ext:deno_node/internal/validators.mjs";
import * as io from "ext:deno_io/12_io.js";
import { op_fs_seek_async, op_fs_seek_sync } from "ext:core/ops";
+import process from "node:process";
type Callback = (
err: ErrnoException | null,
diff --git a/ext/node/polyfills/_fs/_fs_stat.ts b/ext/node/polyfills/_fs/_fs_stat.ts
index c4ed82d57..507cb05ea 100644
--- a/ext/node/polyfills/_fs/_fs_stat.ts
+++ b/ext/node/polyfills/_fs/_fs_stat.ts
@@ -290,8 +290,8 @@ export function convertFileInfoToStats(origin: Deno.FileInfo): Stats {
isFIFO: () => false,
isCharacterDevice: () => false,
isSocket: () => false,
- ctime: origin.mtime,
- ctimeMs: origin.mtime?.getTime() || null,
+ ctime: origin.ctime,
+ ctimeMs: origin.ctime?.getTime() || null,
});
return stats;
@@ -336,9 +336,9 @@ export function convertFileInfoToBigIntStats(
isFIFO: () => false,
isCharacterDevice: () => false,
isSocket: () => false,
- ctime: origin.mtime,
- ctimeMs: origin.mtime ? BigInt(origin.mtime.getTime()) : null,
- ctimeNs: origin.mtime ? BigInt(origin.mtime.getTime()) * 1000000n : null,
+ ctime: origin.ctime,
+ ctimeMs: origin.ctime ? BigInt(origin.ctime.getTime()) : null,
+ ctimeNs: origin.ctime ? BigInt(origin.ctime.getTime()) * 1000000n : null,
});
return stats;
}
@@ -383,7 +383,10 @@ export function stat(
Deno.stat(path).then(
(stat) => callback(null, CFISBIS(stat, options.bigint)),
- (err) => callback(denoErrorToNodeError(err, { syscall: "stat" })),
+ (err) =>
+ callback(
+ denoErrorToNodeError(err, { syscall: "stat", path: getPathname(path) }),
+ ),
);
}
@@ -417,9 +420,16 @@ export function statSync(
return;
}
if (err instanceof Error) {
- throw denoErrorToNodeError(err, { syscall: "stat" });
+ throw denoErrorToNodeError(err, {
+ syscall: "stat",
+ path: getPathname(path),
+ });
} else {
throw err;
}
}
}
+
+function getPathname(path: string | URL) {
+ return typeof path === "string" ? path : path.pathname;
+}