Skip to content

fs.stat(filepath).isSymbolicLink() always returns false #37456

@AlttiRi

Description

@AlttiRi
  • Version: v15.9.0, v14.15.5
  • Platform: Windows 10 x64 2004

What steps will reproduce the bug?

Run this script in a folder with a symbolic link to a file/directory.

Use mklink file_slink.js file.js to create a slink for a file.
Use mklink /D dir_slink dir to create a slink for a directory.

#!/usr/bin/env node

const fs = require("fs").promises;
const path = require("path");

(async function() {
    const workDirPath = process.cwd();

    /** @type {Dirent[]} */
    const dirents = await fs.readdir(workDirPath, {withFileTypes: true});
    for (const dirent of dirents) {
        if (dirent.isSymbolicLink()) {
            console.log("Symbolic Link found with dirent.isSymbolicLink!");
        }
    }

    /** @type {string[]} */
    const files = await fs.readdir(workDirPath);
    for (const file of files) {
        const filepath = path.resolve(workDirPath, file);
        /** @type {Stats} */
        const stat = await fs.stat(filepath);
        if (stat.isSymbolicLink()) {
            console.log("Symbolic Link found with fs.stat.isSymbolicLink!");
        }
    }
    
})();

How often does it reproduce? Is there a required condition?

Always. No.

What is the expected behavior?

stat.isSymbolicLink() returns true for a symbolic link.

Output:

Symbolic Link found with dirent.isSymbolicLink!
Symbolic Link found with fs.stat.isSymbolicLink!

What do you see instead?

Symbolic Link found with dirent.isSymbolicLink!

Additional information

fs.stat(filepath).isSymbolicLink() should return true for a symbolic link.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions