repograph
Version:
Generate rich, semantic, and interactive codemaps with a functional, composable API for Node.js.
1 lines • 49.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/fs.util.ts","../src/pipeline/discover.ts","../src/tree-sitter/languages.ts","../src/pipeline/analyzer.worker.ts","../src/pipeline/analyze.ts","../src/pipeline/rank.ts","../src/high-level.ts","../src/composer.ts","../src/index.ts"],"names":["fs","FileSystemError","path","globby","realpath","logger","fileURLToPath","Parser","ParserError","analyzeFileContent","createLanguageImportResolvers","getLanguageConfigForFile","Tinypool","URL","SymbolResolver","execSync","createPageRanker","RepoGraphError","createMarkdownRenderer"],"mappings":"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","file":"index.cjs","sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { FileSystemError } from 'repograph-core';\n\nexport const readFile = async (filePath: string): Promise<string> => {\n try {\n const buffer = await fs.readFile(filePath);\n // A simple heuristic to filter out binary files is checking for a null byte.\n if (buffer.includes(0)) {\n throw new FileSystemError('File appears to be binary', filePath);\n }\n return buffer.toString('utf-8');\n } catch (e) {\n if (e instanceof FileSystemError) throw e;\n throw new FileSystemError('Failed to read file', filePath, e);\n }\n};\n\nexport const writeFile = async (filePath: string, content: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content);\n } catch (e) {\n throw new FileSystemError('Failed to write file', filePath, e);\n }\n};\n\nexport const isDirectory = async (filePath: string): Promise<boolean> => {\n try {\n const stats = await fs.stat(filePath);\n return stats.isDirectory();\n } catch (e) {\n if (e && typeof e === 'object' && 'code' in e && e.code === 'ENOENT') {\n return false;\n }\n throw new FileSystemError('Failed to check if path is a directory', filePath, e);\n }\n};","import { globby } from 'globby';\nimport path from 'node:path';\nimport { realpath } from 'node:fs/promises';\nimport type { FileContent, FileDiscoverer } from 'repograph-core';\nimport { logger, FileSystemError } from 'repograph-core';\nimport { isDirectory, readFile } from '../utils/fs.util';\n\n/**\n * Creates the default file discoverer. It uses globby to find all files,\n * respecting .gitignore patterns and custom include/exclude rules.\n * @returns A FileDiscoverer function.\n */\nexport const createDefaultDiscoverer = (): FileDiscoverer => {\n return async ({ root, include, ignore: userIgnore, noGitignore = false }) => {\n if (!(await isDirectory(root))) {\n throw new FileSystemError('Root path is not a directory or does not exist', root);\n }\n\n const patterns = include && include.length > 0 ? [...include] : ['**/*'];\n \n const foundPaths = await globby(patterns, {\n cwd: root,\n gitignore: !noGitignore,\n ignore: [...(userIgnore || [])],\n dot: true,\n absolute: true,\n onlyFiles: true,\n followSymbolicLinks: true, // Follow symlinks to find all possible files\n });\n\n const relativePaths = foundPaths.map(p => path.relative(root, p).replace(/\\\\/g, '/'));\n\n // Filter out files that are duplicates via symlinks by checking their real path\n const visitedRealPaths = new Set<string>();\n const safeRelativePaths: string[] = [];\n\n for (const relativePath of relativePaths) {\n const fullPath = path.resolve(root, relativePath);\n try {\n const realPath = await realpath(fullPath);\n if (!visitedRealPaths.has(realPath)) {\n visitedRealPaths.add(realPath);\n safeRelativePaths.push(relativePath);\n }\n } catch (error) {\n logger.debug(`Skipping file due to symlink resolution error: ${relativePath}`);\n }\n }\n\n const fileContents = await Promise.all(\n safeRelativePaths.map(async (relativePath): Promise<FileContent | null> => {\n try {\n const absolutePath = path.join(root, relativePath);\n const content = await readFile(absolutePath);\n return { path: relativePath, content };\n } catch (e) {\n logger.debug(`Skipping file that could not be read: ${relativePath}`, e instanceof Error ? e.message : e);\n return null;\n }\n })\n );\n\n return fileContents.filter((c): c is FileContent => c !== null);\n };\n};","import * as Parser from 'web-tree-sitter';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport type { LanguageConfig, LoadedLanguage } from 'repograph-core';\nimport { logger, ParserError } from 'repograph-core';\n\nconst getDirname = () => path.dirname(fileURLToPath(import.meta.url));\nconst loadedLanguages = new Map<string, LoadedLanguage>();\nlet isInitialized = false;\n\nexport const initializeParser = async (): Promise<void> => {\n if (isInitialized) return;\n await Parser.Parser.init();\n isInitialized = true;\n};\n\nconst findWasmFile = async (config: LanguageConfig): Promise<string> => {\n // wasmPath is like 'tree-sitter-typescript/tree-sitter-typescript.wasm'\n const wasmFileName = path.basename(config.wasmPath);\n if (!wasmFileName) {\n throw new ParserError(`Invalid wasmPath format for ${config.name}: ${config.wasmPath}.`, config.name);\n }\n\n const currentDir = getDirname();\n\n // Path when running from dist (e.g., in a published package)\n const distWasmPath = path.resolve(currentDir, 'wasm', wasmFileName);\n if (fs.existsSync(distWasmPath)) return distWasmPath;\n \n // Path when running tests from src, looking in dist\n const projectDistWasmPath = path.resolve(currentDir, '../../dist/wasm', wasmFileName);\n if (fs.existsSync(projectDistWasmPath)) return projectDistWasmPath;\n\n // Path for development, resolving from node_modules using robust import.meta.resolve\n try {\n const [pkgName, ...rest] = config.wasmPath.split('/');\n const wasmPathInPkg = rest.join('/');\n const pkgJsonUrl = await import.meta.resolve(`${pkgName}/package.json`);\n const pkgDir = path.dirname(fileURLToPath(pkgJsonUrl));\n const resolvedWasmPath = path.join(pkgDir, wasmPathInPkg);\n if (fs.existsSync(resolvedWasmPath)) {\n return resolvedWasmPath;\n }\n } catch (e) {\n // Could not resolve, proceed to throw\n }\n\n throw new ParserError(`WASM file for ${config.name} not found. Looked in ${distWasmPath}, ${projectDistWasmPath}, and tried resolving from node_modules.`, config.name);\n};\n\nexport const loadLanguage = async (config: LanguageConfig): Promise<LoadedLanguage> => {\n if (loadedLanguages.has(config.name)) {\n return loadedLanguages.get(config.name)!;\n }\n await initializeParser();\n\n try {\n const wasmPath = await findWasmFile(config);\n logger.debug(`Loading WASM for ${config.name} from: ${wasmPath}`);\n const language = await Parser.Language.load(wasmPath);\n const loadedLanguage: LoadedLanguage = { config, language };\n loadedLanguages.set(config.name, loadedLanguage);\n return loadedLanguage;\n } catch (error) {\n const message = `Failed to load Tree-sitter WASM file for ${config.name}.`;\n logger.error(message, error);\n throw new ParserError(message, config.name, error);\n }\n};\n\nexport const createParserForLanguage = async (config: LanguageConfig): Promise<Parser.Parser> => {\n const { language } = await loadLanguage(config);\n const parser = new Parser.Parser();\n parser.setLanguage(language);\n return parser;\n};","import { createParserForLanguage } from '../tree-sitter/languages';\nimport type { LanguageConfig, FileContent } from 'repograph-core';\nimport { analyzeFileContent } from 'repograph-core';\n\nexport default async function processFileInWorker({ file, langConfig }: { file: FileContent; langConfig: LanguageConfig; }) {\n const parser = await createParserForLanguage(langConfig);\n return analyzeFileContent({ file, langConfig, parser });\n}","import { posix as path } from 'node:path';\nimport { URL } from 'node:url';\nimport Tinypool from 'tinypool';\nimport type { Analyzer, CodeNode, CodeEdge, FileContent, UnresolvedRelation, LanguageConfig } from 'repograph-core';\nimport { getLanguageConfigForFile, logger, ParserError, SymbolResolver, createLanguageImportResolvers } from 'repograph-core';\nimport { default as processFileInWorker } from './analyzer.worker.js';\n\nconst normalizePath = (p: string) => p.replace(/\\\\/g, '/');\nconst { getImportResolver } = createLanguageImportResolvers(path);\n\nexport const createTreeSitterAnalyzer = (options: { maxWorkers?: number } = {}): Analyzer => {\n const { maxWorkers = 1 } = options;\n\n return async (files: readonly FileContent[]) => {\n const nodes = new Map<string, CodeNode>();\n let unresolvedRelations: UnresolvedRelation[] = [];\n const allFilePaths = files.map(f => normalizePath(f.path));\n\n for (const file of files) {\n const langConfig = getLanguageConfigForFile(normalizePath(file.path));\n nodes.set(file.path, {\n id: file.path, type: 'file', name: path.basename(file.path),\n filePath: file.path, startLine: 1, endLine: file.content.split('\\n').length,\n language: langConfig?.name,\n });\n }\n\n const filesToProcess = files.map(file => ({ file, langConfig: getLanguageConfigForFile(normalizePath(file.path)) }))\n .filter((item): item is { file: FileContent, langConfig: LanguageConfig } => !!item.langConfig);\n\n if (maxWorkers > 1) {\n logger.debug(`Analyzing files in parallel with ${maxWorkers} workers.`);\n const pool = new Tinypool({\n filename: new URL('analyzer.worker.js', import.meta.url).pathname,\n maxThreads: maxWorkers,\n });\n\n const tasks = filesToProcess.map(item => pool.run(item));\n const results = await Promise.all(tasks);\n\n for (const result of results) {\n if (result) {\n result.nodes.forEach((node: CodeNode) => nodes.set(node.id, node));\n unresolvedRelations.push(...result.relations);\n }\n }\n } else {\n logger.debug(`Analyzing files sequentially in the main thread.`);\n for (const item of filesToProcess) {\n try {\n const result = await processFileInWorker(item);\n if (result) {\n result.nodes.forEach(node => nodes.set(node.id, node));\n unresolvedRelations.push(...result.relations);\n }\n } catch(error) {\n logger.warn(new ParserError(`Failed to process ${item.file.path}`, item.langConfig.name, error));\n }\n }\n }\n\n // --- Phase 3: Resolve all relationships ---\n const edges: CodeEdge[] = [];\n const importEdges: CodeEdge[] = [];\n\n // Resolve imports first, as they are needed by the SymbolResolver\n for (const rel of unresolvedRelations) {\n if (rel.type === 'imports') {\n const fromNode = nodes.get(rel.fromId);\n if (!fromNode || fromNode.type !== 'file' || !fromNode.language) continue;\n\n const resolver = getImportResolver(fromNode.language);\n const toId = resolver(rel.fromId, rel.toName, allFilePaths);\n if (toId && nodes.has(toId)) {\n importEdges.push({ fromId: rel.fromId, toId, type: 'imports' });\n }\n }\n }\n\n const symbolResolver = new SymbolResolver(nodes, importEdges);\n\n for (const rel of unresolvedRelations) {\n if (rel.type === 'imports') continue; // Already handled\n\n const fromFile = rel.fromId.split('#')[0]!;\n const toNode = symbolResolver.resolve(rel.toName, fromFile);\n if (toNode && rel.fromId !== toNode.id) {\n const edgeType = (rel.type === 'reference' ? 'calls' : rel.type) as CodeEdge['type'];\n edges.push({ fromId: rel.fromId, toId: toNode.id, type: edgeType });\n }\n }\n\n const finalEdges = [...importEdges, ...edges];\n // Remove duplicates\n const uniqueEdges = [...new Map(finalEdges.map(e => [`${e.fromId}->${e.toId}->${e.type}`, e])).values()];\n\n return { nodes: Object.freeze(nodes), edges: Object.freeze(uniqueEdges) };\n };\n};","import type { Ranker, CodeGraph, RankedCodeGraph } from 'repograph-core';\nimport { logger } from 'repograph-core';\nimport { execSync } from 'node:child_process';\n\n/**\n * Creates a ranker based on Git commit history. Files changed more frequently are considered\n * more important. Requires Git to be installed and the project to be a Git repository.\n * @returns A Ranker function.\n */\nexport const createGitRanker = (options: { maxCommits?: number } = {}): Ranker => {\n return async (graph: CodeGraph): Promise<RankedCodeGraph> => {\n const { maxCommits = 500 } = options;\n const ranks = new Map<string, number>();\n\n if (graph.nodes.size === 0) {\n return { ...graph, ranks };\n }\n\n try {\n const command = `git log --max-count=${maxCommits} --name-only --pretty=format:`;\n const output = execSync(command, { encoding: 'utf-8' });\n const files = output.split('\\n').filter(Boolean);\n\n const changeCounts: Record<string, number> = {};\n for (const file of files) {\n changeCounts[file] = (changeCounts[file] || 0) + 1;\n }\n\n const maxChanges = Math.max(...Object.values(changeCounts), 1);\n\n for (const [nodeId, attributes] of graph.nodes) {\n if (attributes.type === 'file') {\n const count = changeCounts[attributes.filePath] ?? 0;\n ranks.set(nodeId, count / maxChanges); // Normalize score\n } else {\n ranks.set(nodeId, 0); // Only rank files with this strategy\n }\n }\n } catch (e) {\n logger.warn('Failed to use \"git\" for ranking. Is git installed and is this a git repository? Defaulting to 0 for all ranks.');\n for (const [nodeId] of graph.nodes) {\n ranks.set(nodeId, 0);\n }\n }\n\n return { ...graph, ranks };\n };\n};","import { createDefaultDiscoverer } from './pipeline/discover';\nimport { createTreeSitterAnalyzer } from './pipeline/analyze';\nimport { createGitRanker } from './pipeline/rank';\nimport { createPageRanker, createMarkdownRenderer, logger, RepoGraphError, type Ranker, type RankedCodeGraph, type FileContent } from 'repograph-core';\nimport path from 'node:path';\nimport { writeFile } from './utils/fs.util';\n\nexport type RepoGraphOptions = {\n root?: string;\n output?: string;\n include?: readonly string[];\n ignore?: readonly string[];\n noGitignore?: boolean;\n rankingStrategy?: 'pagerank' | 'git-changes';\n maxWorkers?: number;\n logLevel?: 'silent' | 'error' | 'warn' | 'info' | 'debug';\n rendererOptions?: import('repograph-core').RendererOptions;\n files?: readonly FileContent[];\n};\n\nconst selectRanker = (rankingStrategy: RepoGraphOptions['rankingStrategy'] = 'pagerank'): Ranker => {\n if (rankingStrategy === 'git-changes') return createGitRanker();\n if (rankingStrategy === 'pagerank') return createPageRanker();\n throw new Error(`Invalid ranking strategy: '${rankingStrategy}'. Available options are 'pagerank', 'git-changes'.`);\n};\n\nexport const analyzeProject = async (options: RepoGraphOptions = {}): Promise<RankedCodeGraph> => {\n const { root, logLevel, include, ignore, noGitignore, maxWorkers, files: inputFiles } = options;\n\n if (logLevel) {\n logger.setLevel(logLevel);\n }\n\n const ranker = selectRanker(options.rankingStrategy);\n\n try {\n let files: readonly FileContent[];\n if (inputFiles && inputFiles.length > 0) {\n logger.info('1/3 Using provided files...');\n files = inputFiles;\n } else {\n const effectiveRoot = root || process.cwd();\n logger.info(`1/3 Discovering files in \"${effectiveRoot}\"...`);\n const discoverer = createDefaultDiscoverer();\n files = await discoverer({ root: path.resolve(effectiveRoot), include, ignore, noGitignore });\n }\n logger.debug(` -> Found ${files.length} files to analyze.`);\n\n logger.info('2/3 Analyzing code and building graph...');\n const analyzer = createTreeSitterAnalyzer({ maxWorkers });\n const graph = await analyzer(files);\n logger.debug(` -> Built graph with ${graph.nodes.size} nodes and ${graph.edges.length} edges.`);\n\n logger.info('3/3 Ranking graph nodes...');\n const rankedGraph = await ranker(graph);\n logger.debug(' -> Ranking complete.');\n\n return rankedGraph;\n } catch (error) {\n throw new RepoGraphError(`Failed to analyze project`, error);\n }\n};\n\nexport const generateMap = async (options: RepoGraphOptions = {}): Promise<void> => {\n const finalOptions = { ...options, logLevel: options.logLevel ?? 'info' };\n\n const {\n root = process.cwd(),\n output = './repograph.md',\n } = finalOptions;\n\n try {\n const rankedGraph = await analyzeProject(finalOptions);\n\n logger.info('4/4 Rendering output...');\n const renderer = createMarkdownRenderer();\n const markdown = renderer(rankedGraph, finalOptions.rendererOptions);\n logger.debug(' -> Rendering complete.');\n\n const outputPath = path.isAbsolute(output) ? output : path.resolve(root, output);\n\n logger.info(`Writing report to ${path.relative(process.cwd(), outputPath)}...`);\n await writeFile(outputPath, markdown);\n logger.info(' -> Report saved.');\n } catch (error) {\n throw error;\n }\n};","import type { Analyzer, FileDiscoverer, Ranker, RepoGraphMap, Renderer } from 'repograph-core';\nimport { logger, RepoGraphError } from 'repograph-core';\nimport { writeFile } from './utils/fs.util';\nimport path from 'node:path';\nimport type { RepoGraphOptions } from './high-level';\n\ntype MapGenerator = (config: RepoGraphOptions & { root: string }) => Promise<RepoGraphMap>;\n\n/**\n * A Higher-Order Function that takes pipeline functions as arguments and\n * returns a fully configured `generate` function for creating a codemap.\n * This is the core of RepoGraph's composability.\n *\n * @param pipeline An object containing implementations for each pipeline stage.\n * @returns An asynchronous function to generate and write the codemap.\n */\nexport const createMapGenerator = (pipeline: {\n readonly discover: FileDiscoverer;\n readonly analyze: Analyzer;\n readonly rank: Ranker;\n readonly render: Renderer;\n}): MapGenerator => {\n if (\n !pipeline ||\n typeof pipeline.discover !== 'function' ||\n typeof pipeline.analyze !== 'function' ||\n typeof pipeline.rank !== 'function' ||\n typeof pipeline.render !== 'function'\n ) {\n throw new Error('createMapGenerator: A valid pipeline object with discover, analyze, rank, and render functions must be provided.');\n }\n return async (config) => {\n const { root, output, include, ignore, noGitignore, rendererOptions } = config;\n\n let stage = 'discover';\n try {\n logger.info('1/4 Discovering files...');\n const files = await pipeline.discover({ root, include, ignore, noGitignore });\n logger.debug(` -> Found ${files.length} files to analyze.`);\n\n stage = 'analyze';\n logger.info('2/4 Analyzing code and building graph...');\n const graph = await pipeline.analyze(files);\n logger.debug(` -> Built graph with ${graph.nodes.size} nodes and ${graph.edges.length} edges.`);\n\n stage = 'rank';\n logger.info('3/4 Ranking graph nodes...');\n const rankedGraph = await pipeline.rank(graph);\n logger.debug(' -> Ranking complete.');\n\n stage = 'render';\n logger.info('4/4 Rendering output...');\n const markdown = pipeline.render(rankedGraph, rendererOptions);\n logger.debug(' -> Rendering complete.');\n\n if (output) {\n const outputPath = path.isAbsolute(output) ? output : path.resolve(root, output);\n stage = 'write';\n logger.info(`Writing report to ${path.relative(process.cwd(), outputPath)}...`);\n await writeFile(outputPath, markdown);\n logger.info(' -> Report saved.');\n }\n\n return { graph: rankedGraph, markdown };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const stageErrorMessage = stage === 'write' ? `Failed to write output file` : `Error in ${stage} stage`;\n throw new RepoGraphError(`${stageErrorMessage}: ${message}`, error);\n }\n };\n};","#!/usr/bin/env bun\nimport { logger, RepoGraphError } from 'repograph-core';\nimport { generateMap as executeGenerateMap, type RepoGraphOptions as IRepoGraphOptions } from './high-level';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n// Export full API for library usage\nexport { generateMap, analyzeProject, type RepoGraphOptions } from './high-level';\nexport { createMapGenerator } from './composer';\nexport { createDefaultDiscoverer } from './pipeline/discover';\nexport { createTreeSitterAnalyzer } from './pipeline/analyze';\nexport { initializeParser } from './tree-sitter/languages';\nexport { createGitRanker } from './pipeline/rank';\nexport * from 'repograph-core';\n\n// --- CLI LOGIC ---\nconst isRunningDirectly = () => {\n if (typeof process.argv[1] === 'undefined') return false;\n const runningFile = path.resolve(process.argv[1]);\n const currentFile = fileURLToPath(import.meta.url);\n return runningFile === currentFile;\n};\n\nconst copyWasmFiles = async (destination: string) => {\n try {\n const { promises: fs } = await import('node:fs');\n const path = await import('node:path');\n\n const sourceDir = path.resolve(fileURLToPath(import.meta.url), '..', 'wasm');\n\n await fs.mkdir(destination, { recursive: true });\n\n const wasmFiles = (await fs.readdir(sourceDir)).filter(file => file.endsWith('.wasm'));\n for (const file of wasmFiles) {\n const srcPath = path.join(sourceDir, file);\n const destPath = path.join(destination, file);\n await fs.copyFile(srcPath, destPath);\n logger.info(`Copied ${file} to ${path.relative(process.cwd(), destPath)}`);\n }\n logger.info(`\\n✅ All ${wasmFiles.length} WASM files copied successfully.`);\n } catch (err) {\n logger.error('Error copying WASM files.', err);\n }\n};\n\nif (isRunningDirectly()) {\n (async () => {\n const args = process.argv.slice(2);\n\n if (args.includes('--help') || args.includes('-h')) {\n console.log(`\nUsage: repograph [root] [options]\n repograph copy-wasm [destination]\n\nCommands:\n [root] Analyze a repository at the given root path. This is the default command.\n copy-wasm [destination] Copy the necessary Tree-sitter WASM files to a specified directory\n for browser-based usage.\n (default destination: \"./public/wasm\")\n\nArguments:\n root The root directory of the repository to analyze. Defaults to the current working directory.\n\nOptions:\n -h, --help Display this help message.\n -v, --version Display the version number.\n --output <path> Path to the output Markdown file. (default: \"repograph.md\")\n --include <pattern> Glob pattern for files to include. Can be specified multiple times.\n --ignore <pattern> Glob pattern for files to ignore. Can be specified multiple times.\n --no-gitignore Do not respect .gitignore files.\n --ranking-strategy <name> The ranking strategy to use. (default: \"pagerank\", options: \"pagerank\", \"git-changes\")\n --max-workers <num> Set the maximum number of parallel workers for analysis. (default: 1)\n --log-level <level> Set the logging level. (default: \"info\", options: \"silent\", \"error\", \"warn\", \"info\", \"debug\")\n\nOutput Formatting:\n --no-header Do not include the main \"RepoGraph\" header.\n --no-overview Do not include the project overview section.\n --no-mermaid Do not include the Mermaid dependency graph.\n --no-file-list Do not include the list of top-ranked files.\n --no-symbol-details Do not include the detailed file and symbol breakdown.\n --top-file-count <num> Set the number of files in the top list. (default: 10)\n --file-section-separator <str> Custom separator for file sections. (default: \"---\")\n --no-symbol-relations Hide symbol relationship details (e.g., calls, implements).\n --no-symbol-line-numbers Hide line numbers for symbols.\n --no-symbol-snippets Hide code snippets for symbols.\n --max-relations-to-show <num> Max number of 'calls' relations to show per symbol. (default: 3)\n `);\n process.exit(0);\n }\n\n if (args[0] === 'copy-wasm') {\n const destDir = args[1] || './public/wasm';\n logger.info(`Copying WASM files to \"${path.resolve(destDir)}\"...`);\n await copyWasmFiles(destDir);\n process.exit(0);\n }\n\n if (args.includes('--version') || args.includes('-v')) {\n const { readFileSync } = await import('node:fs');\n const pkgPath = new URL('../package.json', import.meta.url);\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n console.log(pkg.version);\n process.exit(0);\n }\n\n const options: {\n root?: string;\n output?: string;\n include?: readonly string[];\n ignore?: readonly string[];\n noGitignore?: boolean;\n maxWorkers?: number;\n rankingStrategy?: 'pagerank' | 'git-changes';\n logLevel?: IRepoGraphOptions['logLevel'];\n rendererOptions?: IRepoGraphOptions['rendererOptions'];\n } = {};\n const includePatterns: string[] = [];\n const ignorePatterns: string[] = [];\n const rendererOptions: NonNullable<IRepoGraphOptions['rendererOptions']> = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (!arg) continue;\n switch (arg) {\n case '--output': options.output = args[++i]; break;\n case '--include': includePatterns.push(args[++i] as string); break;\n case '--ignore': ignorePatterns.push(args[++i] as string); break;\n case '--no-gitignore': options.noGitignore = true; break;\n case '--ranking-strategy': options.rankingStrategy = args[++i] as any; break;\n case '--max-workers': options.maxWorkers = parseInt(args[++i] as string, 10); break;\n case '--log-level': options.logLevel = args[++i] as any; break;\n case '--no-header': rendererOptions.includeHeader = false; break;\n case '--no-overview': rendererOptions.includeOverview = false; break;\n case '--no-mermaid': rendererOptions.includeMermaidGraph = false; break;\n case '--no-file-list': rendererOptions.includeFileList = false; break;\n case '--no-symbol-details': rendererOptions.includeSymbolDetails = false; break;\n case '--top-file-count': rendererOptions.topFileCount = parseInt(args[++i] as string, 10); break;\n case '--file-section-separator': rendererOptions.fileSectionSeparator = args[++i]; break;\n case '--no-symbol-relations':\n rendererOptions.symbolDetailOptions = { ...(rendererOptions.symbolDetailOptions || {}), includeRelations: false }; break;\n case '--no-symbol-line-numbers':\n rendererOptions.symbolDetailOptions = { ...(rendererOptions.symbolDetailOptions || {}), includeLineNumber: false }; break;\n case '--no-symbol-snippets':\n rendererOptions.symbolDetailOptions = { ...(rendererOptions.symbolDetailOptions || {}), includeCodeSnippet: false }; break;\n case '--max-relations-to-show':\n rendererOptions.symbolDetailOptions = { ...(rendererOptions.symbolDetailOptions || {}), maxRelationsToShow: parseInt(args[++i] as string, 10) }; break;\n default: if (!arg.startsWith('-')) options.root = arg; break;\n }\n }\n\n if (includePatterns.length > 0) options.include = includePatterns;\n if (ignorePatterns.length > 0) options.ignore = ignorePatterns;\n if (Object.keys(rendererOptions).length > 0) options.rendererOptions = rendererOptions;\n\n const finalOutput = path.resolve(options.root || process.cwd(), options.output || 'repograph.md');\n logger.info(`Starting RepoGraph analysis for \"${path.resolve(options.root || process.cwd())}\"...`);\n\n try {\n await executeGenerateMap(options);\n logger.info(`\\n✅ Success! RepoGraph map saved to ${path.relative(process.cwd(), finalOutput)}`);\n } catch (error: unknown) {\n if (error instanceof RepoGraphError) {\n logger.error(`\\n❌ Error generating RepoGraph map: ${error.message}`);\n } else {\n logger.error('\\n❌ An unknown error occurred while generating the RepoGraph map.', error);\n }\n process.exit(1);\n }\n })().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n });\n}\n"]}