Codegen.d.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import type { JavaScriptLinked } from './types';
  2. export declare class CodegenStepExecJs {
  3. readonly js: string;
  4. constructor(js: string);
  5. }
  6. type JsonSerializerStep = CodegenStepExecJs | unknown;
  7. export interface CodegenOptions<Linkable = Record<string, unknown>> {
  8. args?: string[];
  9. name?: string;
  10. prologue?: string;
  11. epilogue?: string | (() => string);
  12. processSteps?: (steps: JsonSerializerStep[]) => CodegenStepExecJs[];
  13. linkable?: Linkable;
  14. }
  15. export type CodegenGenerateOptions = Pick<CodegenOptions, 'name' | 'args' | 'prologue' | 'epilogue'>;
  16. export declare class Codegen<Fn extends (...deps: any[]) => any = (...deps: unknown[]) => unknown, Linkable = Record<string, unknown>> {
  17. protected steps: JsonSerializerStep[];
  18. options: Required<CodegenOptions<Linkable>>;
  19. constructor(opts: CodegenOptions<Linkable>);
  20. js(js: string): void;
  21. var(expression?: string): string;
  22. if(condition: string, then: () => void, otherwise?: () => void): void;
  23. while(condition: string, block: () => void): void;
  24. doWhile(block: () => void, condition: string): void;
  25. switch(expression: string, cases: [match: string | number | boolean | null, block: () => void, noBreak?: boolean][], def?: () => void): void;
  26. return(expression: string): void;
  27. step(step: unknown): void;
  28. protected registerCounter: number;
  29. getRegister(): string;
  30. r(): string;
  31. protected dependencies: unknown[];
  32. protected dependencyNames: string[];
  33. linkDependency(dep: unknown, name?: string): string;
  34. linkDependencies(deps: unknown[]): string[];
  35. protected linked: {
  36. [key: string]: 1;
  37. };
  38. link(name: keyof Linkable): void;
  39. protected constants: string[];
  40. protected constantNames: string[];
  41. addConstant(constant: string, name?: string): string;
  42. addConstants(constants: string[]): string[];
  43. generate(opts?: CodegenGenerateOptions): JavaScriptLinked<Fn>;
  44. compile(opts?: CodegenGenerateOptions): Fn;
  45. }
  46. export {};