repomix
Version:
A tool to pack repository contents to single file for AI consumption
54 lines • 3.01 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { calculateAllFileMetrics, calculateSelectiveFileMetrics } from './calculateAllFileMetrics.js';
import { calculateOutputMetrics } from './calculateOutputMetrics.js';
import { calculateGitDiffMetrics } from './calculateGitDiffMetrics.js';
export const calculateMetrics = (processedFiles_1, output_1, progressCallback_1, config_1, gitDiffResult_1, ...args_1) => __awaiter(void 0, [processedFiles_1, output_1, progressCallback_1, config_1, gitDiffResult_1, ...args_1], void 0, function* (processedFiles, output, progressCallback, config, gitDiffResult, deps = {
calculateAllFileMetrics,
calculateSelectiveFileMetrics,
calculateOutputMetrics,
calculateGitDiffMetrics,
}) {
progressCallback('Calculating metrics...');
// For top files display optimization: calculate token counts only for top files by character count
const topFilesLength = config.output.topFilesLength;
const candidateFilesCount = Math.min(processedFiles.length, Math.max(topFilesLength * 10, topFilesLength));
// Get top files by character count first
const topFilesByChar = [...processedFiles]
.sort((a, b) => b.content.length - a.content.length)
.slice(0, candidateFilesCount);
const topFilePaths = topFilesByChar.map((file) => file.path);
const [selectiveFileMetrics, totalTokens, gitDiffTokenCount] = yield Promise.all([
deps.calculateSelectiveFileMetrics(processedFiles, topFilePaths, config.tokenCount.encoding, progressCallback),
deps.calculateOutputMetrics(output, config.tokenCount.encoding, config.output.filePath),
deps.calculateGitDiffMetrics(config, gitDiffResult),
]);
const totalFiles = processedFiles.length;
const totalCharacters = output.length;
// Build character counts for all files
const fileCharCounts = {};
for (const file of processedFiles) {
fileCharCounts[file.path] = file.content.length;
}
// Build token counts only for top files
const fileTokenCounts = {};
for (const file of selectiveFileMetrics) {
fileTokenCounts[file.path] = file.tokenCount;
}
return {
totalFiles,
totalCharacters,
totalTokens,
fileCharCounts,
fileTokenCounts,
gitDiffTokenCount: gitDiffTokenCount,
};
});
//# sourceMappingURL=calculateMetrics.js.map