import { QspEvents, QspEventLogger } from './events'; import { QspListItem } from './common'; export type QspTuple = Array; export type QspVariableType = Name extends `$${infer _A}` ? string : Name extends `%${infer _A}` ? QspTuple : number; export interface QspAPI { on(event: E, callback: QspEvents[E]): void; off(event: E, callback: QspEvents[E]): void; registerEventLogger(logger: QspEventLogger): void; version(): string; openGame(data: ArrayBuffer, isNewGame: boolean): void; saveGame(): ArrayBuffer | null; loadSave(data: ArrayBuffer): void; restartGame(): void; selectAction(index: number): void; execSelectedAction(): void; selectObject(index: number): void; readVariable(name: Name): QspVariableType; readVariableByIndex(name: Name, index: number): QspVariableType; readVariableByKey(name: Name, key: string): QspVariableType; readVariableSize(name: string): number; execCode(code: string): void; execCounter(): void; updateUserInput(code: string): void; execLoc(name: string): void; watchVariable(name: Name, callback: (value: QspVariableType) => void): () => void; watchVariableByIndex(name: Name, index: number, callback: (value: QspVariableType) => void): () => void; watchVariableByKey(name: Name, key: string, callback: (value: QspVariableType) => void): () => void; clearCache(): void; enableDebugMode(): void; disableDebugMode(): void; getLocationsList(): string[]; getLocationActions(name: string): QspListItem[]; getLocationCode(name: string): string[]; getActionCode(name: string, index: number): string[]; calculateStringExpression(expression: string): string | null; calculateNumericExpression(expression: string): number | null; showWindow(type: number, show: boolean): void; getSelectedActionIndex(): number; getSelectedObjectIndex(): number; getCompiledDateTime(): string; getErrorDescription(errorNum: number): string; getLocationDescription(name: string): string; _cleanup(): void; _run_checks(): void; }