readdir-withfiletypes
Version:
A ponyfill for fs.readdir(path, { withFileTypes: true })
59 lines • 2.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fs_1 = __importDefault(require("fs"));
var path_1 = __importDefault(require("path"));
var util_1 = require("util");
var fsReaddir = util_1.promisify(fs_1.default.readdir);
var fsLstat = util_1.promisify(fs_1.default.lstat);
function createDirent(name, stat) {
return {
name: name,
isBlockDevice: stat.isBlockDevice.bind(stat),
isCharacterDevice: stat.isCharacterDevice.bind(stat),
isDirectory: stat.isDirectory.bind(stat),
isFIFO: stat.isFIFO.bind(stat),
isFile: stat.isFile.bind(stat),
isSocket: stat.isSocket.bind(stat),
isSymbolicLink: stat.isSymbolicLink.bind(stat),
};
}
exports.readdir = (function (dir, options, callback) {
if (typeof options === "function") {
callback = options;
options = {};
}
if (typeof callback !== "function") {
var err = new TypeError("Callback must be a function");
err.code = "ERR_INVALID_CALLBACK";
throw err;
}
fsReaddir(dir, options)
.then(function (entries) {
if (!options.withFileTypes)
return entries;
return Promise.all(entries.map(function (entry) {
if (typeof entry !== "string")
return entry;
return fsLstat(path_1.default.join(dir.toString(), entry)).then(function (stat) {
return createDirent(entry, stat);
});
}));
})
.then(function (results) { return callback(null, results); })
.catch(function (err) { return callback(err); });
});
exports.readdirSync = (function (dir, options) {
var entries = fs_1.default.readdirSync(dir, options);
if (!(options && options.withFileTypes))
return entries;
return entries.map(function (entry) {
if (typeof entry !== "string")
return entry;
var stat = fs_1.default.lstatSync(path_1.default.join(dir, entry));
return createDirent(entry, stat);
});
});
//# sourceMappingURL=readdir.js.map