@tylertech/forge-build-tools
Version:
Node utilities for building and packaging libraries.
71 lines • 11 kB
JavaScript
import { readdirSync, statSync, existsSync } from 'fs';
import { extname } from 'path';
import { deleteAsync } from 'del';
import cpath from 'canonical-path';
/**
* Gets a list of directory names in `directoryPath` that contain all files in `files`.
* @param {string} directoryPath The root directory to search.
* @param {string | string[]} files A single filename or array of filenames to ensure each directory contains.
* @param {string | string[] | null} [excludedDirectories=null] Directories names to ignore within `directoryPath`.
* @returns {string[]} An array of directory names.
*/
export function getDirectoriesContainingFiles(directoryPath, files, excludedDirectories = null) {
const filesAry = files instanceof Array ? files : [files];
const excludedDirectoriesAry = excludedDirectories instanceof Array || !excludedDirectories ? excludedDirectories : [excludedDirectories];
return readdirSync(directoryPath).filter(file => {
if (excludedDirectoriesAry && excludedDirectoriesAry.indexOf(file) >= 0) {
return false;
}
const checkPath = cpath.join(directoryPath, file);
return statSync(checkPath).isDirectory() && filesAry.every(f => existsSync(cpath.join(checkPath, f)));
});
}
/** Removes directories in the specified paths */
export function cleanDirectories(paths) {
return deleteAsync(paths);
}
/** Removes files in the specified paths */
export function cleanFiles(paths) {
return deleteAsync(paths);
}
/** Finds all directory names containing a file with the provided extension. */
export function findDirectoriesContainingFileByExtension(startPath, extension, paths = []) {
readdirSync(startPath).forEach(file => {
const checkPath = cpath.join(startPath, file);
if (statSync(checkPath).isDirectory()) {
const fileCount = readdirSync(checkPath).filter(subFile => !statSync(cpath.join(checkPath, subFile)).isDirectory() && extname(subFile) === extension).length;
if (fileCount) {
paths.push({ name: file, path: checkPath });
}
paths = findDirectoriesContainingFileByExtension(checkPath, extension, paths);
}
});
return paths;
}
/**
* Finds all subdirectories within `srcPath`.
* @param {string} srcPath The directory to search in.
* @returns {string[]} The directories paths.
*/
export function getDirectories(srcPath) {
return readdirSync(srcPath)
.map(file => cpath.join(srcPath, file))
.filter(path => statSync(path).isDirectory());
}
/**
* Finds all directories and sub-directories within `srcPath`.
* @param {string} srcPath The directory to search in.
* @returns {string[]} The directory paths.
*/
export function getDirectoriesRecursive(dir, dirs = []) {
readdirSync(dir).forEach(file => {
const dirPath = cpath.join(dir, file);
const isDirectory = statSync(dirPath).isDirectory();
if (isDirectory) {
dirs.push(dirPath);
getDirectoriesRecursive(cpath.join(dir, file), dirs);
}
});
return dirs;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZzL2RpcmVjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxhQUFxQixFQUFFLEtBQXdCLEVBQUUsc0JBQWdELElBQUk7SUFDakosTUFBTSxRQUFRLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CLFlBQVksS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUksT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzlDLElBQUksc0JBQXNCLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBd0I7SUFDdkQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELDJDQUEyQztBQUMzQyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQXdCO0lBQ2pELE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUErQyxFQUFFO0lBQzlJLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzdKLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUVELEtBQUssR0FBRyx3Q0FBd0MsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQWU7SUFDNUMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1NBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEdBQVcsRUFBRSxPQUFpQixFQUFFO0lBQ3RFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkZGlyU3luYywgc3RhdFN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBkZWxldGVBc3luYyB9IGZyb20gJ2RlbCc7XG5pbXBvcnQgY3BhdGggZnJvbSAnY2Fub25pY2FsLXBhdGgnO1xuXG4vKipcbiAqIEdldHMgYSBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyBpbiBgZGlyZWN0b3J5UGF0aGAgdGhhdCBjb250YWluIGFsbCBmaWxlcyBpbiBgZmlsZXNgLlxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdG9yeVBhdGggVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHNlYXJjaC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGZpbGVzIEEgc2luZ2xlIGZpbGVuYW1lIG9yIGFycmF5IG9mIGZpbGVuYW1lcyB0byBlbnN1cmUgZWFjaCBkaXJlY3RvcnkgY29udGFpbnMuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdIHwgbnVsbH0gW2V4Y2x1ZGVkRGlyZWN0b3JpZXM9bnVsbF0gRGlyZWN0b3JpZXMgbmFtZXMgdG8gaWdub3JlIHdpdGhpbiBgZGlyZWN0b3J5UGF0aGAuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIGRpcmVjdG9yeSBuYW1lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdG9yaWVzQ29udGFpbmluZ0ZpbGVzKGRpcmVjdG9yeVBhdGg6IHN0cmluZywgZmlsZXM6IHN0cmluZyB8IHN0cmluZ1tdLCBleGNsdWRlZERpcmVjdG9yaWVzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsKTogc3RyaW5nW10ge1xuICBjb25zdCBmaWxlc0FyeSA9IGZpbGVzIGluc3RhbmNlb2YgQXJyYXkgPyBmaWxlcyA6IFtmaWxlc107XG4gIGNvbnN0IGV4Y2x1ZGVkRGlyZWN0b3JpZXNBcnkgPSBleGNsdWRlZERpcmVjdG9yaWVzIGluc3RhbmNlb2YgQXJyYXkgfHwgIWV4Y2x1ZGVkRGlyZWN0b3JpZXMgPyBleGNsdWRlZERpcmVjdG9yaWVzIDogW2V4Y2x1ZGVkRGlyZWN0b3JpZXNdO1xuICByZXR1cm4gcmVhZGRpclN5bmMoZGlyZWN0b3J5UGF0aCkuZmlsdGVyKGZpbGUgPT4ge1xuICAgIGlmIChleGNsdWRlZERpcmVjdG9yaWVzQXJ5ICYmIGV4Y2x1ZGVkRGlyZWN0b3JpZXNBcnkuaW5kZXhPZihmaWxlKSA+PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrUGF0aCA9IGNwYXRoLmpvaW4oZGlyZWN0b3J5UGF0aCwgZmlsZSk7XG4gICAgcmV0dXJuIHN0YXRTeW5jKGNoZWNrUGF0aCkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlc0FyeS5ldmVyeShmID0+IGV4aXN0c1N5bmMoY3BhdGguam9pbihjaGVja1BhdGgsIGYpKSk7XG4gIH0pO1xufVxuXG4vKiogUmVtb3ZlcyBkaXJlY3RvcmllcyBpbiB0aGUgc3BlY2lmaWVkIHBhdGhzICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaXJlY3RvcmllcyhwYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHJldHVybiBkZWxldGVBc3luYyhwYXRocyk7XG59XG5cbi8qKiBSZW1vdmVzIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgcGF0aHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkZpbGVzKHBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIGRlbGV0ZUFzeW5jKHBhdGhzKTtcbn1cblxuLyoqIEZpbmRzIGFsbCBkaXJlY3RvcnkgbmFtZXMgY29udGFpbmluZyBhIGZpbGUgd2l0aCB0aGUgcHJvdmlkZWQgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREaXJlY3Rvcmllc0NvbnRhaW5pbmdGaWxlQnlFeHRlbnNpb24oc3RhcnRQYXRoOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nLCBwYXRoczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PiA9IFtdKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PiB7XG4gIHJlYWRkaXJTeW5jKHN0YXJ0UGF0aCkuZm9yRWFjaChmaWxlID0+IHtcbiAgICBjb25zdCBjaGVja1BhdGggPSBjcGF0aC5qb2luKHN0YXJ0UGF0aCwgZmlsZSk7XG4gICAgaWYgKHN0YXRTeW5jKGNoZWNrUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgY29uc3QgZmlsZUNvdW50ID0gcmVhZGRpclN5bmMoY2hlY2tQYXRoKS5maWx0ZXIoc3ViRmlsZSA9PiAhc3RhdFN5bmMoY3BhdGguam9pbihjaGVja1BhdGgsIHN1YkZpbGUpKS5pc0RpcmVjdG9yeSgpICYmIGV4dG5hbWUoc3ViRmlsZSkgPT09IGV4dGVuc2lvbikubGVuZ3RoO1xuICAgICAgaWYgKGZpbGVDb3VudCkge1xuICAgICAgICBwYXRocy5wdXNoKHsgbmFtZTogZmlsZSwgcGF0aDogY2hlY2tQYXRoIH0pO1xuICAgICAgfVxuXG4gICAgICBwYXRocyA9IGZpbmREaXJlY3Rvcmllc0NvbnRhaW5pbmdGaWxlQnlFeHRlbnNpb24oY2hlY2tQYXRoLCBleHRlbnNpb24sIHBhdGhzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXRocztcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgc3ViZGlyZWN0b3JpZXMgd2l0aGluIGBzcmNQYXRoYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNQYXRoIFRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoIGluLlxuICogQHJldHVybnMge3N0cmluZ1tdfSBUaGUgZGlyZWN0b3JpZXMgcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3RvcmllcyhzcmNQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiByZWFkZGlyU3luYyhzcmNQYXRoKVxuICAgIC5tYXAoZmlsZSA9PiBjcGF0aC5qb2luKHNyY1BhdGgsIGZpbGUpKVxuICAgIC5maWx0ZXIocGF0aCA9PiBzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZGlyZWN0b3JpZXMgYW5kIHN1Yi1kaXJlY3RvcmllcyB3aXRoaW4gYHNyY1BhdGhgLlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1BhdGggVGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggaW4uXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IFRoZSBkaXJlY3RvcnkgcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3Rvcmllc1JlY3Vyc2l2ZShkaXI6IHN0cmluZywgZGlyczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgcmVhZGRpclN5bmMoZGlyKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IGRpclBhdGggPSBjcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgY29uc3QgaXNEaXJlY3RvcnkgPSBzdGF0U3luYyhkaXJQYXRoKS5pc0RpcmVjdG9yeSgpO1xuICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgZGlycy5wdXNoKGRpclBhdGgpO1xuICAgICAgZ2V0RGlyZWN0b3JpZXNSZWN1cnNpdmUoY3BhdGguam9pbihkaXIsIGZpbGUpLCBkaXJzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGlycztcbn1cbiJdfQ==