diff --git a/crates/node_binding/binding.d.ts b/crates/node_binding/binding.d.ts index a6b0f4049c5a..5774f96f571c 100644 --- a/crates/node_binding/binding.d.ts +++ b/crates/node_binding/binding.d.ts @@ -1081,6 +1081,7 @@ export interface JsTap { export interface NodeFsStats { isFile: boolean isDirectory: boolean + isSymlink: boolean atimeMs: number mtimeMs: number ctimeMs: number diff --git a/crates/rspack_fs_node/src/node.rs b/crates/rspack_fs_node/src/node.rs index 2e958df75948..405bbacb37ad 100644 --- a/crates/rspack_fs_node/src/node.rs +++ b/crates/rspack_fs_node/src/node.rs @@ -47,6 +47,7 @@ pub struct ThreadsafeNodeFS { pub struct NodeFsStats { pub is_file: bool, pub is_directory: bool, + pub is_symlink: bool, pub atime_ms: u32, pub mtime_ms: u32, pub ctime_ms: u32, @@ -59,7 +60,7 @@ impl From for FileMetadata { Self { is_file: value.is_file, is_directory: value.is_directory, - is_symlink: false, + is_symlink: value.is_symlink, atime_ms: value.atime_ms as u64, mtime_ms: value.mtime_ms as u64, ctime_ms: value.ctime_ms as u64, diff --git a/packages/rspack/src/FileSystem.ts b/packages/rspack/src/FileSystem.ts index 94b18e477ebc..49f543bb9e46 100644 --- a/packages/rspack/src/FileSystem.ts +++ b/packages/rspack/src/FileSystem.ts @@ -87,17 +87,7 @@ class ThreadsafeOutputNodeFS implements ThreadsafeNodeFS { const statFn = util.promisify(fs.stat.bind(fs)); return async (filePath: string) => { const res = await statFn(filePath); - return ( - res && { - isFile: res.isFile(), - isDirectory: res.isDirectory(), - atimeMs: res.atimeMs, - mtimeMs: res.atimeMs, - ctimeMs: res.atimeMs, - birthtimeMs: res.birthtimeMs, - size: res.size - } - ); + return res && ThreadsafeOutputNodeFS.__to_binding_stat(res); }; }); this.lstat = memoizeFn(() => { @@ -117,6 +107,7 @@ class ThreadsafeOutputNodeFS implements ThreadsafeNodeFS { return { isFile: stat.isFile(), isDirectory: stat.isDirectory(), + isSymlink: stat.isSymbolicLink(), atimeMs: stat.atimeMs, mtimeMs: stat.atimeMs, ctimeMs: stat.atimeMs,