import type { JavaScriptLinked } from './types'; export declare class CodegenStepExecJs { readonly js: string; constructor(js: string); } type JsonSerializerStep = CodegenStepExecJs | unknown; export interface CodegenOptions> { args?: string[]; name?: string; prologue?: string; epilogue?: string | (() => string); processSteps?: (steps: JsonSerializerStep[]) => CodegenStepExecJs[]; linkable?: Linkable; } export type CodegenGenerateOptions = Pick; export declare class Codegen any = (...deps: unknown[]) => unknown, Linkable = Record> { protected steps: JsonSerializerStep[]; options: Required>; constructor(opts: CodegenOptions); js(js: string): void; var(expression?: string): string; if(condition: string, then: () => void, otherwise?: () => void): 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; compile(opts?: CodegenGenerateOptions): Fn; } export {};