Spaces:
Sleeping
Sleeping
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; | |
| const fsStat = require("@nodelib/fs.stat"); | |
| const rpl = require("run-parallel"); | |
| const constants_1 = require("../constants"); | |
| const utils = require("../utils"); | |
| const common = require("./common"); | |
| function read(directory, settings, callback) { | |
| if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { | |
| readdirWithFileTypes(directory, settings, callback); | |
| return; | |
| } | |
| readdir(directory, settings, callback); | |
| } | |
| exports.read = read; | |
| function readdirWithFileTypes(directory, settings, callback) { | |
| settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => { | |
| if (readdirError !== null) { | |
| callFailureCallback(callback, readdirError); | |
| return; | |
| } | |
| const entries = dirents.map((dirent) => ({ | |
| dirent, | |
| name: dirent.name, | |
| path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) | |
| })); | |
| if (!settings.followSymbolicLinks) { | |
| callSuccessCallback(callback, entries); | |
| return; | |
| } | |
| const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings)); | |
| rpl(tasks, (rplError, rplEntries) => { | |
| if (rplError !== null) { | |
| callFailureCallback(callback, rplError); | |
| return; | |
| } | |
| callSuccessCallback(callback, rplEntries); | |
| }); | |
| }); | |
| } | |
| exports.readdirWithFileTypes = readdirWithFileTypes; | |
| function makeRplTaskEntry(entry, settings) { | |
| return (done) => { | |
| if (!entry.dirent.isSymbolicLink()) { | |
| done(null, entry); | |
| return; | |
| } | |
| settings.fs.stat(entry.path, (statError, stats) => { | |
| if (statError !== null) { | |
| if (settings.throwErrorOnBrokenSymbolicLink) { | |
| done(statError); | |
| return; | |
| } | |
| done(null, entry); | |
| return; | |
| } | |
| entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); | |
| done(null, entry); | |
| }); | |
| }; | |
| } | |
| function readdir(directory, settings, callback) { | |
| settings.fs.readdir(directory, (readdirError, names) => { | |
| if (readdirError !== null) { | |
| callFailureCallback(callback, readdirError); | |
| return; | |
| } | |
| const tasks = names.map((name) => { | |
| const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); | |
| return (done) => { | |
| fsStat.stat(path, settings.fsStatSettings, (error, stats) => { | |
| if (error !== null) { | |
| done(error); | |
| return; | |
| } | |
| const entry = { | |
| name, | |
| path, | |
| dirent: utils.fs.createDirentFromStats(name, stats) | |
| }; | |
| if (settings.stats) { | |
| entry.stats = stats; | |
| } | |
| done(null, entry); | |
| }); | |
| }; | |
| }); | |
| rpl(tasks, (rplError, entries) => { | |
| if (rplError !== null) { | |
| callFailureCallback(callback, rplError); | |
| return; | |
| } | |
| callSuccessCallback(callback, entries); | |
| }); | |
| }); | |
| } | |
| exports.readdir = readdir; | |
| function callFailureCallback(callback, error) { | |
| callback(error); | |
| } | |
| function callSuccessCallback(callback, result) { | |
| callback(null, result); | |
| } | |