node-ejs-renderer/node_modules/@jsonjoy.com/util/lib/codegen/Codegen.d.ts

45 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-06-09 13:55:01 -04:00
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 {};