47 lines · 1.4 KB · TypeScript
RawDownload
/** * Build a directory tree structure from CLAUDE.md injections. */ import type { TreeNode } from './types';import type { ClaudeMdContextInjection } from '@renderer/types/contextInjection'; /** * Build a tree structure from a list of directory CLAUDE.md injections. */export function buildDirectoryTree(  injections: ClaudeMdContextInjection[],  projectRoot: string): TreeNode {  const root: TreeNode = { name: '', path: '', isFile: false, children: new Map() };   for (const injection of injections) {    let relativePath = injection.path;    if (projectRoot && relativePath.startsWith(projectRoot)) {      relativePath = relativePath.slice(projectRoot.length);      if (relativePath.startsWith('/') || relativePath.startsWith('\\'))        relativePath = relativePath.slice(1);    }     const parts = relativePath.split(/[\\/]/);    let current = root;     for (let i = 0; i < parts.length; i++) {      const part = parts[i];      const isLast = i === parts.length - 1;       if (!current.children.has(part)) {        current.children.set(part, {          name: part,          path: isLast ? injection.path : '',          isFile: isLast && part === 'CLAUDE.md',          tokens: isLast ? injection.estimatedTokens : undefined,          firstSeenInGroup: isLast ? injection.firstSeenInGroup : undefined,          children: new Map(),        });      }      current = current.children.get(part)!;    }  }   return root;}