refactor: get rid of async.waterfall/each

v1.18.x
Barış Soner Uşaklı 4 years ago
parent 42dbd40253
commit 8fb53252a8

@ -3,7 +3,6 @@
const fs = require('fs');
const os = require('os');
const path = require('path');
const async = require('async');
const winston = require('winston');
const semver = require('semver');
const nconf = require('nconf');
@ -283,54 +282,45 @@ Plugins.showInstalled = async function () {
async function findNodeBBModules(dirs) {
const pluginPaths = [];
await async.each(dirs, (dirname, next) => {
await Promise.all(dirs.map(async (dirname) => {
const dirPath = path.join(Plugins.nodeModulesPath, dirname);
const isDir = await isDirectory(dirPath);
if (!isDir) {
return;
}
if (pluginNamePattern.test(dirname)) {
pluginPaths.push(dirname);
return;
}
async.waterfall([
function (cb) {
fs.stat(dirPath, (err, stats) => {
if (err && err.code !== 'ENOENT') {
return cb(err);
}
if (err || !stats.isDirectory()) {
return next();
}
if (pluginNamePattern.test(dirname)) {
pluginPaths.push(dirname);
return next();
}
if (dirname[0] !== '@') {
return next();
}
fs.readdir(dirPath, cb);
});
},
function (subdirs, cb) {
async.each(subdirs, (subdir, next) => {
if (!pluginNamePattern.test(subdir)) {
return next();
}
const subdirPath = path.join(dirPath, subdir);
fs.stat(subdirPath, (err, stats) => {
if (err && err.code !== 'ENOENT') {
return next(err);
}
if (err || !stats.isDirectory()) {
return next();
}
pluginPaths.push(`${dirname}/${subdir}`);
next();
});
}, cb);
},
], next);
});
if (dirname[0] === '@') {
const subdirs = await fs.promises.readdir(dirPath);
await Promise.all(subdirs.map(async (subdir) => {
if (!pluginNamePattern.test(subdir)) {
return;
}
const subdirPath = path.join(dirPath, subdir);
const isDir = await isDirectory(subdirPath);
if (isDir) {
pluginPaths.push(`${dirname}/${subdir}`);
}
}));
}
}));
return pluginPaths;
}
async function isDirectory(dirPath) {
try {
const stats = await fs.promises.stat(dirPath);
return stats.isDirectory();
} catch (err) {
if (err.code !== 'ENOENT') {
throw err;
}
return false;
}
}
require('../promisify')(Plugins);

Loading…
Cancel
Save