45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
|
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;
|
||
|
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 {};
|