{"version":3,"file":"listProjects.cjs","names":["configurationFilesCandidates"],"sources":["../../src/listProjects.ts"],"sourcesContent":["import { dirname } from 'node:path';\nimport { configurationFilesCandidates } from '@intlayer/config/node';\nimport fg from 'fast-glob';\nimport simpleGit from 'simple-git';\n\nexport type ListProjectsOptions = {\n  /**\n   * Base directory to search from\n   * @default process.cwd()\n   */\n  baseDir?: string;\n  /**\n   * If true, search from the git root directory instead of baseDir\n   * @default false\n   */\n  gitRoot?: boolean;\n};\n\n/**\n * Get the git root directory\n */\nconst getGitRootDir = async (cwd?: string): Promise<string | null> => {\n  try {\n    const git = cwd ? simpleGit(cwd) : simpleGit();\n    const rootDir = await git.revparse(['--show-toplevel']);\n    return rootDir.trim();\n  } catch (_error) {\n    return null;\n  }\n};\n\n/**\n * List all Intlayer projects by searching for configuration files\n *\n * @param options - Options for listing projects\n * @returns Array of absolute paths to project directories containing Intlayer config\n */\nexport const listProjects = async (\n  options?: ListProjectsOptions\n): Promise<{ searchDir: string; projectsPath: string[] }> => {\n  let searchDir = options?.baseDir ?? process.cwd();\n\n  // If gitRoot option is enabled, try to get the git root directory\n  if (options?.gitRoot) {\n    const gitRootDir = await getGitRootDir(searchDir);\n    if (gitRootDir) {\n      searchDir = gitRootDir;\n    }\n  }\n\n  // Build glob patterns for all config file candidates\n  const configPatterns = configurationFilesCandidates.map(\n    (fileName) => `**/${fileName}`\n  );\n\n  // Search for all config files\n  const configFiles = await fg(configPatterns, {\n    cwd: searchDir,\n    absolute: true,\n    ignore: ['**/node_modules/**', '**/.git/**'],\n    dot: true, // Include dot files like .intlayerrc\n  });\n\n  // Extract unique directory paths from config files\n  const projectDirs = [...new Set(configFiles.map((file) => dirname(file)))];\n\n  // Sort alphabetically for consistent output\n  return { searchDir, projectsPath: projectDirs.sort() };\n};\n"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,gBAAgB,OAAO,QAAyC;CACpE,IAAI;EAGF,QAAO,OAFK,8BAAgB,GAAG,4BAAc,GACnB,SAAS,CAAC,iBAAiB,CAAC,GACvC,KAAK;CACtB,SAAS,QAAQ;EACf,OAAO;CACT;AACF;;;;;;;AAQA,MAAa,eAAe,OAC1B,YAC2D;CAC3D,IAAI,YAAY,SAAS,WAAW,QAAQ,IAAI;CAGhD,IAAI,SAAS,SAAS;EACpB,MAAM,aAAa,MAAM,cAAc,SAAS;EAChD,IAAI,YACF,YAAY;CAEhB;CAQA,MAAM,cAAc,6BALGA,mDAA6B,KACjD,aAAa,MAAM,UAIoB,GAAG;EAC3C,KAAK;EACL,UAAU;EACV,QAAQ,CAAC,sBAAsB,YAAY;EAC3C,KAAK;CACP,CAAC;CAGD,MAAM,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,KAAK,gCAAiB,IAAI,CAAC,CAAC,CAAC;CAGzE,OAAO;EAAE;EAAW,cAAc,YAAY,KAAK;CAAE;AACvD"}