@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
44 lines (42 loc) • 1.26 kB
JavaScript
import { dirname } from "node:path";
import fg from "fast-glob";
import { configurationFilesCandidates } from "@intlayer/config/node";
import simpleGit from "simple-git";
//#region src/listProjects.ts
/**
* Get the git root directory
*/
const getGitRootDir = async (cwd) => {
try {
return (await (cwd ? simpleGit(cwd) : simpleGit()).revparse(["--show-toplevel"])).trim();
} catch (_error) {
return null;
}
};
/**
* List all Intlayer projects by searching for configuration files
*
* @param options - Options for listing projects
* @returns Array of absolute paths to project directories containing Intlayer config
*/
const listProjects = async (options) => {
let searchDir = options?.baseDir ?? process.cwd();
if (options?.gitRoot) {
const gitRootDir = await getGitRootDir(searchDir);
if (gitRootDir) searchDir = gitRootDir;
}
const configFiles = await fg(configurationFilesCandidates.map((fileName) => `**/${fileName}`), {
cwd: searchDir,
absolute: true,
ignore: ["**/node_modules/**", "**/.git/**"],
dot: true
});
const projectDirs = [...new Set(configFiles.map((file) => dirname(file)))];
return {
searchDir,
projectsPath: projectDirs.sort()
};
};
//#endregion
export { listProjects };
//# sourceMappingURL=listProjects.mjs.map