import { type GdExerciseFile, type GdExerciseLog, type GdProjectSettings } from "./utils.mts";
export declare const GdMessageTypeContent: {
    readonly READY: "READY";
    readonly INIT: "INIT";
    readonly DONE: "DONE";
    readonly LOAD_PLAYER_PROJECT_FILE: "LOAD_PLAYER_PROJECT_FILE";
    readonly LOAD_PLAYER_PROJECT_DIRECTORY: "LOAD_PLAYER_PROJECT_DIRECTORY";
    readonly LOAD_PLAYER_PROJECT_SETTINGS: "LOAD_PLAYER_PROJECT_SETTINGS";
    readonly LOAD_PLAYER_ENGINE: "LOAD_PLAYER_ENGINE";
    readonly PLAYER_PROGRESS: "PLAYER_PROGRESS";
    readonly SET_PLAYER_SCENE_TO_LOAD_PATH: "SET_PLAYER_SCENE_TO_LOAD_PATH";
    readonly LOAD_CODE_EDITOR_FILE: "LOAD_CODE_EDITOR_FILE";
    readonly FOCUS_CODE_EDITOR_FILE: "FOCUS_CODE_EDITOR_FILE";
    readonly SCRIPT_UPDATED: "SCRIPT_UPDATED";
    readonly SCRIPT_ERROR: "SCRIPT_ERROR";
    readonly SCRIPT_LOG: "SCRIPT_LOG";
};
export type GdMessageType = keyof typeof GdMessageTypeContent;
export interface GdMessageSource {
    [GdMessageTypeContent.READY]: GdMessageReady;
    [GdMessageTypeContent.INIT]: GdMessageInit;
    [GdMessageTypeContent.DONE]: GdMessageDone;
    [GdMessageTypeContent.LOAD_PLAYER_PROJECT_FILE]: GdMessageLoadPlayerProjectFile;
    [GdMessageTypeContent.LOAD_PLAYER_PROJECT_DIRECTORY]: GdMessageLoadPlayerProjectDirectory;
    [GdMessageTypeContent.LOAD_PLAYER_PROJECT_SETTINGS]: GdMessageLoadPlayerProjectSettings;
    [GdMessageTypeContent.LOAD_PLAYER_ENGINE]: GdMessageLoadPlayerEngine;
    [GdMessageTypeContent.PLAYER_PROGRESS]: GdMessagePlayerProgress;
    [GdMessageTypeContent.SET_PLAYER_SCENE_TO_LOAD_PATH]: GdMessageSetPlayerSceneToLoadPath;
    [GdMessageTypeContent.LOAD_CODE_EDITOR_FILE]: GdMessageLoadCodeEditorFile;
    [GdMessageTypeContent.FOCUS_CODE_EDITOR_FILE]: GdMessageFocusCodeEditorFile;
    [GdMessageTypeContent.SCRIPT_UPDATED]: GdMessageScriptUpdated;
    [GdMessageTypeContent.SCRIPT_ERROR]: GdMessageScriptError;
    [GdMessageTypeContent.SCRIPT_LOG]: GdMessageScriptLog;
}
export interface GdMessage {
    type: keyof GdMessageSource;
}
export interface GdMessageReady extends GdMessage {
    type: typeof GdMessageTypeContent.READY;
    origin: "CODE" | "GDEDITOR" | "GDPLAYER";
}
export interface GdMessageInit extends GdMessage {
    type: typeof GdMessageTypeContent.INIT;
}
export interface GdMessageDone extends GdMessage {
    type: typeof GdMessageTypeContent.DONE;
    of: keyof GdMessageSource;
}
export interface GdMessageLoadPlayerProjectFile extends GdMessage {
    type: typeof GdMessageTypeContent.LOAD_PLAYER_PROJECT_FILE;
    path: string;
    data: ArrayBuffer;
}
export interface GdMessageLoadPlayerProjectDirectory extends GdMessage {
    type: typeof GdMessageTypeContent.LOAD_PLAYER_PROJECT_DIRECTORY;
    path: string;
}
export interface GdMessageLoadPlayerProjectSettings extends GdMessage {
    type: typeof GdMessageTypeContent.LOAD_PLAYER_PROJECT_SETTINGS;
    settings: GdProjectSettings;
}
export interface GdMessageLoadPlayerEngine extends GdMessage {
    type: typeof GdMessageTypeContent.LOAD_PLAYER_ENGINE;
}
export interface GdMessagePlayerProgress extends GdMessage {
    type: typeof GdMessageTypeContent.PLAYER_PROGRESS;
    current: number;
    total: number;
    status: "PROGRESS" | "INDETERMINATE" | "READY";
}
export interface GdMessageSetPlayerSceneToLoadPath extends GdMessage {
    type: typeof GdMessageTypeContent.SET_PLAYER_SCENE_TO_LOAD_PATH;
    scenePath: string;
}
export interface GdMessageLoadCodeEditorFile extends GdMessage {
    type: typeof GdMessageTypeContent.LOAD_CODE_EDITOR_FILE;
    file: GdExerciseFile;
}
export interface GdMessageFocusCodeEditorFile extends GdMessage {
    type: typeof GdMessageTypeContent.FOCUS_CODE_EDITOR_FILE;
    path: string;
}
export interface GdMessageScriptUpdated extends GdMessage {
    type: typeof GdMessageTypeContent.SCRIPT_UPDATED;
    file: GdExerciseFile;
}
export interface GdMessageScriptError extends GdMessage {
    type: typeof GdMessageTypeContent.SCRIPT_ERROR;
    error: string;
}
export interface GdMessageScriptLog extends GdMessage {
    type: typeof GdMessageTypeContent.SCRIPT_LOG;
    log: GdExerciseLog;
}
export declare function isGdMessage<T extends keyof GdMessageSource>(message: GdMessage, type: T): message is GdMessageSource[T];
export interface WaitForDoneOptions {
    timeout?: number;
}
export declare function waitForGdMessageDone<T extends keyof GdMessageSource>(channel: BroadcastChannel, type: T, options?: WaitForDoneOptions): Promise<void>;
//# sourceMappingURL=message.d.mts.map