UNPKG

repomix

Version:

A tool to pack repository contents to single file for AI consumption

65 lines (64 loc) 3.31 kB
import { withMemoryLogging } from '../../shared/memoryUtils.js'; import { generateOutput as generateOutputDefault } from '../output/outputGenerate.js'; import { generateSplitOutputParts } from '../output/outputSplit.js'; import { copyToClipboardIfEnabled as copyToClipboardIfEnabledDefault } from './copyToClipboardIfEnabled.js'; import { writeOutputToDisk as writeOutputToDiskDefault } from './writeOutputToDisk.js'; const defaultDeps = { generateOutput: generateOutputDefault, writeOutputToDisk: writeOutputToDiskDefault, copyToClipboardIfEnabled: copyToClipboardIfEnabledDefault, }; export const produceOutput = async (rootDirs, config, processedFiles, allFilePaths, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, overrideDeps = {}) => { const deps = { ...defaultDeps, ...overrideDeps }; const splitMaxBytes = config.output.splitOutput; if (splitMaxBytes !== undefined) { return await generateAndWriteSplitOutput(rootDirs, config, processedFiles, allFilePaths, splitMaxBytes, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, deps); } return await generateAndWriteSingleOutput(rootDirs, config, processedFiles, allFilePaths, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, deps); }; const generateAndWriteSplitOutput = async (rootDirs, config, processedFiles, allFilePaths, splitMaxBytes, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, deps) => { const parts = await withMemoryLogging('Generate Split Output', async () => { return await generateSplitOutputParts({ rootDirs, baseConfig: config, processedFiles, allFilePaths, maxBytesPerPart: splitMaxBytes, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, deps: { generateOutput: deps.generateOutput, }, }); }); progressCallback('Writing output files...'); await withMemoryLogging('Write Split Output', async () => { await Promise.all(parts.map((part) => { const partConfig = { ...config, output: { ...config.output, stdout: false, filePath: part.filePath, }, }; return deps.writeOutputToDisk(part.content, partConfig); })); }); return { outputFiles: parts.map((p) => p.filePath), outputForMetrics: parts.map((p) => p.content), }; }; const generateAndWriteSingleOutput = async (rootDirs, config, processedFiles, allFilePaths, gitDiffResult, gitLogResult, progressCallback, filePathsByRoot, emptyDirPaths, deps) => { const output = await withMemoryLogging('Generate Output', () => deps.generateOutput(rootDirs, config, processedFiles, allFilePaths, gitDiffResult, gitLogResult, filePathsByRoot, emptyDirPaths)); progressCallback('Writing output file...'); await withMemoryLogging('Write Output', () => deps.writeOutputToDisk(output, config)); await deps.copyToClipboardIfEnabled(output, progressCallback, config); return { outputForMetrics: output, }; };