UNPKG

@tylertech/forge-build-tools

Version:
71 lines 11 kB
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==