{"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;AACpE,KAAI;AAGF,UAAO,OAFK,8BAAgB,IAAI,4BAAc,EACpB,SAAS,CAAC,kBAAkB,CAAC,EACxC,MAAM;UACd,QAAQ;AACf,SAAO;;;;;;;;;AAUX,MAAa,eAAe,OAC1B,YAC2D;CAC3D,IAAI,YAAY,SAAS,WAAW,QAAQ,KAAK;AAGjD,KAAI,SAAS,SAAS;EACpB,MAAM,aAAa,MAAM,cAAc,UAAU;AACjD,MAAI,WACF,aAAY;;CAUhB,MAAM,cAAc,6BALGA,mDAA6B,KACjD,aAAa,MAAM,WAIqB,EAAE;EAC3C,KAAK;EACL,UAAU;EACV,QAAQ,CAAC,sBAAsB,aAAa;EAC5C,KAAK;EACN,CAAC;CAGF,MAAM,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,KAAK,gCAAiB,KAAK,CAAC,CAAC,CAAC;AAG1E,QAAO;EAAE;EAAW,cAAc,YAAY,MAAM;EAAE"}