import type { JavaScriptLinked } from './types'; export declare class CodegenStepExecJs { readonly js: string; constructor(js: string); } type JsonSerializerStep = CodegenStepExecJs | unknown; export interface CodegenOptions<Linkable = Record<string, unknown>> { args?: string[]; name?: string; prologue?: string; epilogue?: string | (() => string); processSteps?: (steps: JsonSerializerStep[]) => CodegenStepExecJs[]; linkable?: Linkable; } export type CodegenGenerateOptions = Pick<CodegenOptions, 'name' | 'args' | 'prologue' | 'epilogue'>; export declare class Codegen<Fn extends (...deps: any[]) => any = (...deps: unknown[]) => unknown, Linkable = Record<string, unknown>> { protected steps: JsonSerializerStep[]; options: Required<CodegenOptions<Linkable>>; constructor(opts: CodegenOptions<Linkable>); js(js: string): void; var(expression?: string): string; if(condition: string, then: () => void, otherwise?: () => void): void; while(condition: string, block: () => void): void; doWhile(block: () => void, condition: string): void; switch(expression: string, cases: [match: string | number | boolean | null, block: () => void, noBreak?: boolean][], def?: () => void): void; return(expression: string): void; step(step: unknown): void; protected registerCounter: number; getRegister(): string; r(): string; protected dependencies: unknown[]; protected dependencyNames: string[]; linkDependency(dep: unknown, name?: string): string; linkDependencies(deps: unknown[]): string[]; protected linked: { [key: string]: 1; }; link(name: keyof Linkable): void; protected constants: string[]; protected constantNames: string[]; addConstant(constant: string, name?: string): string; addConstants(constants: string[]): string[]; generate(opts?: CodegenGenerateOptions): JavaScriptLinked<Fn>; compile(opts?: CodegenGenerateOptions): Fn; } export {};