type RunGame = () => Promise<void>;

declare const GAME: string;
declare const GAMES: Game[];

declare namespace WebAssembly {
    type tc = 'i32' | 'i64' | 'f32' | 'f64';
    export class Function {
        constructor(args: { parameters: tc[], results: tc[] }, func: (...args: number[]) => number[] | void);
    }
}

declare module '*.module.css' {
    const classes: { [key: string]: string };
    export default classes;
}
declare module "*.png" {
    const image: HTMLImageElement;
    export default image;
}
declare module "*.jpg" {
    const image: HTMLImageElement;
    export default image;
}
declare module "*.jpeg" {
    const image: HTMLImageElement;
    export default image;
}
declare module "*.wav" {
    const audio: HTMLAudioElement;
    export default audio;
}
declare module "*.mp3" {
    const audio: HTMLAudioElement;
    export default audio;
}
declare module "*.ogg" {
    const audio: HTMLAudioElement;
    export default audio;
}
declare module "*.wasm" {
    const instance: {
        memory: WebAssembly.Memory;
        data: DataView;

        [x: string]: (...args: any) => any;
    };
    export default instance;
}
declare module "*.c" {
    const instance: {
        memory: WebAssembly.Memory;
        table: WebAssembly.Table;
        data: DataView;

        [x: string]: (...args: any) => any;
    };
    export default instance;
}
declare module "*.cpp" {
    const instance: {
        memory: WebAssembly.Memory;
        table: WebAssembly.Table;
        data: DataView;

        [x: string]: (...args: any) => any;
    };
    export default instance;
}
declare module "*.glsl" {
    const content: string;
    export default content;
}