repomix
Version:
A tool to pack repository contents to single file for AI consumption
43 lines (42 loc) • 1.24 kB
JavaScript
export const buildTokenCountTree = (filesWithTokens) => {
const root = {};
for (const file of filesWithTokens) {
if (!file.path || typeof file.path !== 'string') {
continue;
}
const parts = file.path.split('/');
const fileName = parts.pop();
if (!fileName)
continue;
let current = root;
for (const part of parts) {
if (!current[part]) {
current[part] = {};
}
current = current[part];
}
if (!current._files) {
current._files = [];
}
current._files.push({
name: fileName,
tokens: file.tokens,
});
}
calculateTokenSums(root);
return root;
};
const calculateTokenSums = (node) => {
let totalTokens = 0;
if (node._files) {
totalTokens += node._files.reduce((sum, file) => sum + file.tokens, 0);
}
for (const [key, value] of Object.entries(node)) {
if (key.startsWith('_') || !value || typeof value !== 'object' || Array.isArray(value)) {
continue;
}
totalTokens += calculateTokenSums(value);
}
node._tokenSum = totalTokens;
return totalTokens;
};