Spaces:
Running
Running
; | |
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); | |
} | |