export interface RegistryInput { classPropertyName: string; bindingPropertyName: string; isSignal: boolean; required: boolean; /** * `true` when the input declares a `transform` function. The actual * transform expression isn't usable cross-file, but downstream tools * (template type checking, codegen widening) need to know whether * one exists so they can broaden the accepted binding type. */ hasTransform?: boolean; } export interface RegistryEntry { /** CSS selector for components/directives, pipe name for pipes, class name for NgModules */ selector: string; /** What kind of Angular declaration this is */ kind: 'component' | 'directive' | 'pipe' | 'ngmodule' | 'tuple'; /** The pipe name (only for pipes) */ pipeName?: string; /** Exported class names (only for NgModules) */ exports?: string[]; /** * Member class names (only for `tuple` kind) — produced by top-level * `export const X = [A, B, C] as const` style barrels common in * helm/spartan-style libraries. The compiler expands these into the * underlying directives when they appear in another component's * `imports` array, mirroring how Angular's official compiler resolves * static `imports` references at compile time. */ members?: string[]; /** The source file this declaration was found in */ fileName: string; /** The class name */ className: string; /** Input bindings (from signal APIs and @Input decorators) */ inputs?: Record; /** Output bindings (from signal APIs and @Output decorators) */ outputs?: Record; /** The package this declaration was scanned from (e.g. "@angular/cdk") */ sourcePackage?: string; } /** Maps class name → registry entry */ export type ComponentRegistry = Map; /** * Lightweight scan of a TypeScript file to extract Angular decorator metadata * without performing full compilation. Uses OXC's native Rust parser for speed. */ export declare function scanFile(code: string, fileName: string): RegistryEntry[];