/** * Core Language Codegen — shared TypeScript generation for KERN's type system * * Handles: type, interface, fn, machine, error, module, config, store, test, event * These are target-agnostic — they compile to TypeScript regardless of target. * * Machine nodes are KERN's killer feature: 12 lines of KERN → 140+ lines of TS. * * Generator implementations are split into domain modules under codegen/. * This file is the thin dispatcher: imports, re-exports, and generateCoreNode switch. * Generators that call generateCoreNode recursively remain here to avoid circular imports. */ import { type KernRuntime } from './runtime.js'; import type { IRNode } from './types.js'; export { generateCache, generateConfig, generateDependency, generateModel, generateRepository, generateStore, } from './codegen/data-layer.js'; export { emitIdentifier, emitImportSpecifier, emitPath, emitStringLiteral, emitTemplateSafe, emitTypeAnnotation, } from './codegen/emitters.js'; export { generateEvent, generateOn, generateWebSocket } from './codegen/events.js'; export { generateError, generateFunction } from './codegen/functions.js'; export { emitStringKeyArray, generateAction, generateActionRegistry, generateApply, generateAssume, generateAsync, generateAt, generateAvg, generateChunk, generateClamp, generateCoalesce, generateCollect, generateCompact, generateConcat, generateCount, generateCountBy, generateDerive, generateDrop, generateEvery, generateExpect, generateFilter, generateFind, generateFindIndex, generateFindLast, generateFindLastIndex, generateFirstDefined, generateFirstTruthy, generateFlat, generateFlatMap, generateFmt, generateForEach, generateGroupBy, generateGuard, generateIncludes, generateIndexBy, generateIndexOf, generateIntersect, generateInvariant, generateJoin, generateLastIndexOf, generateMap, generateMax, generateMaxBy, generateMin, generateMinBy, generateObjectMerge, generateObjectOmit, generateObjectPick, generatePartition, generatePattern, generatePluck, generateRange, generateRecover, generateReduce, generateResolve, generateReverse, generateSlice, generateSome, generateSort, generateSum, generateSumBy, generateTake, generateTransform, generateTry, generateUnique, generateUniqueBy, generateZip, parseKeys, } from './codegen/ground-layer.js'; export { capitalize, cssPropertyName, dedent, emitLowConfidenceTodo, emitReasonAnnotations, exportPrefix, getChildren, getFirstChild, getProps, getPseudoStyles, getStyles, getThemeRefs, handlerCode, parseParamList, sourceComment, } from './codegen/helpers.js'; export { generateMachine, generateMachineReducer } from './codegen/machines.js'; export { generateExtern, generateImport, generateIsland, generateLoosePythonSidecarImports, generateUse, isLoosePythonSidecarImportNode, } from './codegen/modules.js'; export { emitRender, generateScreen } from './codegen/screens.js'; export type { SemanticTypeMapping } from './codegen/semantic-types.js'; export { mapSemanticType, SEMANTIC_TYPE_MAP } from './codegen/semantic-types.js'; export { generateTest } from './codegen/test-gen.js'; export { emitConstValue, emitParamList, generateClass, generateConst, generateDestructure, generateEnum, generateInterface, generateMapLit, generateService, generateSetLit, generateType, generateUnion, parseParamListFromChildren, } from './codegen/type-system.js'; /** Register an evolved generator (called at startup). */ export declare function registerEvolvedGenerator(keyword: string, fn: (node: IRNode) => string[]): void; /** Register a target-specific evolved generator (called at startup). */ export declare function registerEvolvedTargetGenerator(keyword: string, target: string, fn: (node: IRNode) => string[]): void; /** Unregister an evolved generator (for rollback/testing). */ export declare function unregisterEvolvedGenerator(keyword: string): void; /** Clear all evolved generators (for test isolation). */ export declare function clearEvolvedGenerators(): void; /** Check if an evolved generator exists for a type. */ export declare function hasEvolvedGenerator(type: string): boolean; /** Emit a single `export` IR node as its JS export statement. * * Used both inside `generateModule` (for `export` children of `module`) and * by the top-level `case 'export':` in `generateCoreNode` so a bare * `export from="..." names="..."` at file root produces the same JS as an * identical node wrapped inside a `module`. Before this helper existed, the * top-level path fell through to the default case in `generateCoreNode` and * returned `[]` — the export was schema-valid but silently dropped. */ export declare function generateExport(node: IRNode): string[]; export declare function generateModule(node: IRNode): string[]; export declare function generateEach(node: IRNode): string[]; export declare function generateBranch(node: IRNode): string[]; export declare function generateConditional(node: IRNode): string[]; export declare function generateSelect(node: IRNode): string[]; export declare const CORE_NODE_TYPES: Set; /** Check if a node type is a core language construct. */ export declare function isCoreNode(type: string): boolean; /** * Generate TypeScript lines for a core IR node (type system, functions, machines, etc.). * * Returns an empty array if the node type is unknown and no evolved generator is registered. * Template nodes are expanded automatically via the template engine. * * @param node - The IR node to generate code for * @param target - Optional target hint (e.g., `'ink'` for machine → useReducer) * @param runtime - Optional KernRuntime instance * @returns Array of TypeScript source lines * @throws {KernCodegenError} For nodes with invalid/missing required props */ export declare function generateCoreNode(node: IRNode, target?: string, runtime?: KernRuntime): string[];