UNPKG

readdir-withfiletypes

Version:

A ponyfill for fs.readdir(path, { withFileTypes: true })

59 lines 2.21 kB
"use strict"; 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