Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.7 KiB

2 years ago
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findAlternativeNodeModules = findAlternativeNodeModules;
exports.findAlternativeFiles = findAlternativeFiles;
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
var _schema = require("./schema");
var _path2 = require("./path");
var _config = require("./config");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
async function findAlternativeNodeModules(fs, moduleName, dir) {
let potentialModules = [];
let root = _path().default.parse(dir).root;
let isOrganisationModule = moduleName.startsWith('@');
while (dir !== root) {
// Skip node_modules directories
if (_path().default.basename(dir) === 'node_modules') {
dir = _path().default.dirname(dir);
}
try {
let modulesDir = _path().default.join(dir, 'node_modules');
let stats = await fs.stat(modulesDir);
if (stats.isDirectory()) {
let dirContent = (await fs.readdir(modulesDir)).sort(); // Filter out the modules that interest us
let modules = dirContent.filter(i => isOrganisationModule ? i.startsWith('@') : !i.startsWith('@')); // If it's an organisation module, loop through all the modules of that organisation
if (isOrganisationModule) {
await Promise.all(modules.map(async item => {
let orgDirPath = _path().default.join(modulesDir, item);
let orgDirContent = (await fs.readdir(orgDirPath)).sort(); // Add all org packages
potentialModules.push(...orgDirContent.map(i => `${item}/${i}`));
}));
}
}
} catch (err) {// ignore
} // Move up a directory
dir = _path().default.dirname(dir);
}
return (0, _schema.fuzzySearch)(potentialModules.sort(), moduleName).slice(0, 2);
}
async function findAllFilesUp({
fs,
dir,
root,
basedir,
maxlength,
collected,
leadingDotSlash = true,
includeDirectories = true
}) {
let dirContent = (await fs.readdir(dir)).sort();
return Promise.all(dirContent.map(async item => {
let fullPath = _path().default.join(dir, item);
let relativeFilePath = (0, _path2.relativePath)(basedir, fullPath, leadingDotSlash);
if (relativeFilePath.length < maxlength) {
let stats = await fs.stat(fullPath);
let isDir = stats.isDirectory();
if (isDir && includeDirectories || stats.isFile()) {
collected.push(relativeFilePath);
} // If it's a directory, run over each item within said directory...
if (isDir) {
return findAllFilesUp({
fs,
dir: fullPath,
root,
basedir,
maxlength,
collected
});
}
}
}));
}
async function findAlternativeFiles(fs, fileSpecifier, dir, projectRoot, leadingDotSlash = true, includeDirectories = true, includeExtension = false) {
let potentialFiles = []; // Find our root, we won't recommend files above the package root as that's bad practise
let pkg = await (0, _config.resolveConfig)(fs, _path().default.join(dir, 'index'), ['package.json'], projectRoot);
let pkgRoot = pkg ? _path().default.dirname(pkg) : projectRoot;
await findAllFilesUp({
fs,
dir: pkgRoot,
root: pkgRoot,
basedir: dir,
maxlength: fileSpecifier.length + 10,
collected: potentialFiles,
leadingDotSlash,
includeDirectories
});
if (_path().default.extname(fileSpecifier) === '' && !includeExtension) {
potentialFiles = potentialFiles.map(p => {
let ext = _path().default.extname(p);
return ext.length > 0 ? p.slice(0, -ext.length) : p;
});
}
return (0, _schema.fuzzySearch)(potentialFiles, fileSpecifier).slice(0, 2);
}