export const metadata = { title: "@json-render/codegen API" } # @json-render/codegen Utilities for generating code from UI trees. ## Tree Traversal ### traverseSpec Walk the UI spec depth-first. ```typescript function traverseSpec( spec: Spec, visitor: TreeVisitor, startKey?: string ): void interface TreeVisitor { (element: UIElement, key: string, depth: number, parent: UIElement | null): void; } ``` ### collectUsedComponents Get all unique component types used in a spec. ```typescript function collectUsedComponents(spec: Spec): Set // Example const components = collectUsedComponents(spec); // Set { 'Card', 'Metric', 'Chart' } ``` ### collectStatePaths Get all state paths referenced in props (statePath, bindPath, etc.). ```typescript function collectStatePaths(spec: Spec): Set // Example const paths = collectStatePaths(spec); // Set { 'analytics/revenue', 'analytics/customers' } ``` ### collectActions Get all action names used in the spec. ```typescript function collectActions(spec: Spec): Set // Example const actions = collectActions(spec); // Set { 'submit_form', 'refresh_data' } ``` ## Serialization ### serializePropValue Serialize a single value to a code string. ```typescript function serializePropValue( value: unknown, options?: SerializeOptions ): { value: string; needsBraces: boolean } // Examples serializePropValue("hello") // { value: '"hello"', needsBraces: false } serializePropValue(42) // { value: '42', needsBraces: true } serializePropValue({ $state: '/user/name' }) // { value: '{ $state: "/user/name" }', needsBraces: true } ``` ### serializeProps Serialize a props object to a JSX attributes string. ```typescript function serializeProps( props: Record, options?: SerializeOptions ): string // Example serializeProps({ title: 'Dashboard', columns: 3, disabled: true }) // 'title="Dashboard" columns={3} disabled' ``` ### escapeString Escape a string for use in code. ```typescript function escapeString( str: string, quotes?: 'single' | 'double' ): string ``` ## Types ### GeneratedFile ```typescript interface GeneratedFile { /** File path relative to project root */ path: string; /** File contents */ content: string; } ``` ### CodeGenerator ```typescript interface CodeGenerator { /** Generate files from a UI spec */ generate(spec: Spec): GeneratedFile[]; } ``` ### SerializeOptions ```typescript interface SerializeOptions { /** Quote style for strings */ quotes?: 'single' | 'double'; /** Indent for objects/arrays */ indent?: number; } ```