import { Node, Edge, ExtractionResult, ExtractionError, UnresolvedReference, Language } from '../types'; import { generateNodeId } from './tree-sitter-helpers'; import { TreeSitterExtractor } from './tree-sitter'; import { isLanguageSupported } from './grammars'; /** * Vue built-in components — skipped so a `` / `` in the * template doesn't become a phantom reference to a user component. Checked * AFTER kebab→Pascal conversion, so `` is caught here too. */ const VUE_BUILTIN_COMPONENTS = new Set([ 'Transition', 'TransitionGroup', 'KeepAlive', 'Suspense', 'Teleport', 'Component', 'Slot', ]); /** `my-component` → `MyComponent` (Vue allows either form in templates). */ function kebabToPascal(name: string): string { return name .split('-') .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : '')) .join(''); } /** * VueExtractor - Extracts code relationships from Vue Single-File Component files * * Vue SFCs are multi-language (script + template + style). Rather than * parsing the full Vue grammar, we extract the