import * as _$ini from "ini";
import * as _$path_browserify0 from "path-browserify";

//#region src/types/retroarch-emscripten.d.ts
interface RetroArchEmscriptenModule extends EmscriptenModule {
  asm: any;
  callMain: (args: string[]) => void;
  canvas: HTMLCanvasElement;
  EmscriptenSendCommand?: (command: string) => void;
  ERRNO_CODES: any;
  FS: any;
  mainScriptUrlOrBlob: Blob | string;
  monitorRunDependencies: (left?: number) => Promise<void> | void;
  PATH: any;
  preRun: ((...args: any) => void)[];
  setCanvasSize: (width: number, height: number) => void;
}
type RetroArchEmscriptenModuleOptions = Partial<RetroArchEmscriptenModule>;
//#endregion
//#region src/libs/utils.d.ts
type ResolvableWrapped<T> = ((...args: any[]) => T) | Promise<T>;
type Resolvable<T> = ResolvableWrapped<ResolvableWrapped<T>> | ResolvableWrapped<T> | T;
//#endregion
//#region src/classes/resolvable-file.d.ts
type ResolvableFilePrimitive = ArrayBuffer | Blob | FileSystemFileHandle | Request | Response | string | Uint8Array | URL;
type ResolvableFileObjects = {
  fileContent: Resolvable<ResolvableFilePrimitive>;
  fileName: Resolvable<string>;
} | ResolvableFilePrimitive;
type ResolvableFileInput = Resolvable<ResolvableFilePrimitive> | ResolvableFileObjects;
type ResolvableFileInputs = Resolvable<ResolvableFileInput[]>;
interface ResolvableFileConstructorParameters {
  blobType?: string;
  name?: string;
  raw: ResolvableFileInput;
  signal?: AbortSignal | undefined;
  urlResolver?: (raw: unknown) => unknown;
}
type ResolvableFileParameter = ResolvableFile | ResolvableFileConstructorParameters | ResolvableFileConstructorParameters['raw'];
declare class ResolvableFile {
  name: string;
  /** The base name of the file, without its extension. */
  get baseName(): string;
  /** The extension name of the file, with a leading ".". */
  get extension(): string;
  private arrayBuffer;
  private blob;
  private readonly blobType;
  private objectUrl?;
  private readonly raw;
  private readonly signal;
  private text;
  private uint8Array;
  private readonly urlResolver?;
  constructor({
    blobType,
    name,
    raw,
    signal,
    urlResolver
  }: ResolvableFileConstructorParameters);
  static create(rawOrOption: ResolvableFileParameter): Promise<ResolvableFile>;
  dispose(): void;
  getArrayBuffer(): Promise<ArrayBuffer>;
  getBlob(): Blob;
  getObjectUrl(): string;
  getText(): Promise<string>;
  getUint8Array(): Promise<Uint8Array<ArrayBufferLike>>;
  private load;
  private loadArrayBuffer;
  private loadContent;
  private loadFetchable;
  private loadFileSystemFileHandle;
  private loadObject;
  private loadPlainText;
  private loadResponse;
  private loadUint8Array;
}
//#endregion
//#region src/types/retroarch-config/input.d.ts
type RetroArchInputButton$1 = number | string;
interface RetroArchInputConfig {
  input_close_content: RetroArchInputButton$1;
  input_close_content_axis: RetroArchInputButton$1;
  input_close_content_btn: RetroArchInputButton$1;
  input_close_content_mbtn: RetroArchInputButton$1;
  input_desktop_menu_toggle: RetroArchInputButton$1;
  input_desktop_menu_toggle_axis: RetroArchInputButton$1;
  input_desktop_menu_toggle_btn: RetroArchInputButton$1;
  input_desktop_menu_toggle_mbtn: RetroArchInputButton$1;
  input_fps_toggle: RetroArchInputButton$1;
  input_fps_toggle_axis: RetroArchInputButton$1;
  input_fps_toggle_btn: RetroArchInputButton$1;
  input_fps_toggle_mbtn: RetroArchInputButton$1;
  input_game_focus_toggle: RetroArchInputButton$1;
  input_game_focus_toggle_axis: RetroArchInputButton$1;
  input_game_focus_toggle_btn: RetroArchInputButton$1;
  input_game_focus_toggle_mbtn: RetroArchInputButton$1;
  input_hold_fast_forward_btn: RetroArchInputButton$1;
  input_hold_slowmotion: RetroArchInputButton$1;
  input_netplay_game_watch: RetroArchInputButton$1;
  input_netplay_player_chat: RetroArchInputButton$1;
  input_netplay_player_chat_axis: RetroArchInputButton$1;
  input_netplay_player_chat_btn: RetroArchInputButton$1;
  input_netplay_player_chat_mbtn: RetroArchInputButton$1;
  input_preempt_toggle: RetroArchInputButton$1;
  input_preempt_toggle_axis: RetroArchInputButton$1;
  input_preempt_toggle_btn: RetroArchInputButton$1;
  input_preempt_toggle_mbtn: RetroArchInputButton$1;
  input_record_replay: RetroArchInputButton$1;
  input_record_replay_axis: RetroArchInputButton$1;
  input_record_replay_btn: RetroArchInputButton$1;
  input_record_replay_mbtn: RetroArchInputButton$1;
  input_recording_toggle: RetroArchInputButton$1;
  input_recording_toggle_axis: RetroArchInputButton$1;
  input_recording_toggle_btn: RetroArchInputButton$1;
  input_recording_toggle_mbtn: RetroArchInputButton$1;
  input_replay_slot_decrease: RetroArchInputButton$1;
  input_replay_slot_decrease_axis: RetroArchInputButton$1;
  input_replay_slot_decrease_btn: RetroArchInputButton$1;
  input_replay_slot_decrease_mbtn: RetroArchInputButton$1;
  input_replay_slot_increase: RetroArchInputButton$1;
  input_replay_slot_increase_axis: RetroArchInputButton$1;
  input_replay_slot_increase_btn: RetroArchInputButton$1;
  input_replay_slot_increase_mbtn: RetroArchInputButton$1;
  input_reset_axis: RetroArchInputButton$1;
  input_reset_btn: RetroArchInputButton$1;
  input_reset_mbtn: RetroArchInputButton$1;
  input_rewind_axis: RetroArchInputButton$1;
  input_rewind_btn: RetroArchInputButton$1;
  input_rewind_mbtn: RetroArchInputButton$1;
  input_rumble_gain: RetroArchInputButton$1;
  input_runahead_toggle: RetroArchInputButton$1;
  input_runahead_toggle_axis: RetroArchInputButton$1;
  input_runahead_toggle_btn: RetroArchInputButton$1;
  input_runahead_toggle_mbtn: RetroArchInputButton$1;
  input_save_state_axis: RetroArchInputButton$1;
  input_save_state_btn: RetroArchInputButton$1;
  input_save_state_mbtn: RetroArchInputButton$1;
  input_screenshot_axis: RetroArchInputButton$1;
  input_screenshot_btn: RetroArchInputButton$1;
  input_screenshot_mbtn: RetroArchInputButton$1;
  input_sensors_enable: RetroArchInputButton$1;
  input_shader_next_axis: RetroArchInputButton$1;
  input_shader_next_btn: RetroArchInputButton$1;
  input_shader_next_mbtn: RetroArchInputButton$1;
  input_shader_prev_axis: RetroArchInputButton$1;
  input_shader_prev_btn: RetroArchInputButton$1;
  input_shader_prev_mbtn: RetroArchInputButton$1;
  input_shader_toggle_axis: RetroArchInputButton$1;
  input_shader_toggle_btn: RetroArchInputButton$1;
  input_shader_toggle_mbtn: RetroArchInputButton$1;
  input_state_slot_decrease_axis: RetroArchInputButton$1;
  input_state_slot_decrease_btn: RetroArchInputButton$1;
  input_state_slot_decrease_mbtn: RetroArchInputButton$1;
  input_state_slot_increase_axis: RetroArchInputButton$1;
  input_state_slot_increase_btn: RetroArchInputButton$1;
  input_state_slot_increase_mbtn: RetroArchInputButton$1;
  input_streaming_toggle: RetroArchInputButton$1;
  input_streaming_toggle_axis: RetroArchInputButton$1;
  input_streaming_toggle_btn: RetroArchInputButton$1;
  input_streaming_toggle_mbtn: RetroArchInputButton$1;
  input_toggle_fast_forward_axis: RetroArchInputButton$1;
  input_toggle_fast_forward_btn: RetroArchInputButton$1;
  input_toggle_fast_forward_mbtn: RetroArchInputButton$1;
  input_toggle_fullscreen_axis: RetroArchInputButton$1;
  input_toggle_fullscreen_btn: RetroArchInputButton$1;
  input_toggle_fullscreen_mbtn: RetroArchInputButton$1;
  input_toggle_slowmotion: RetroArchInputButton$1;
  input_toggle_slowmotion_axis: RetroArchInputButton$1;
  input_toggle_slowmotion_btn: RetroArchInputButton$1;
  input_toggle_slowmotion_mbtn: RetroArchInputButton$1;
  input_toggle_statistics_axis: RetroArchInputButton$1;
  input_toggle_statistics_btn: RetroArchInputButton$1;
  input_toggle_statistics_mbtn: RetroArchInputButton$1;
  input_toggle_vrr_runloop_axis: RetroArchInputButton$1;
  input_toggle_vrr_runloop_btn: RetroArchInputButton$1;
  input_toggle_vrr_runloop_mbtn: RetroArchInputButton$1;
  input_touch_scale: RetroArchInputButton$1;
  input_turbo_default_button: RetroArchInputButton$1;
  input_turbo_mode: RetroArchInputButton$1;
  input_volume_down_axis: RetroArchInputButton$1;
  input_volume_down_btn: RetroArchInputButton$1;
  input_volume_down_mbtn: RetroArchInputButton$1;
  input_volume_up_axis: RetroArchInputButton$1;
  input_volume_up_btn: RetroArchInputButton$1;
  input_volume_up_mbtn: RetroArchInputButton$1;
}
//#endregion
//#region src/types/retroarch-config/input-player.d.ts
type RetroArchInputButton = number | string;
interface RetroArchInputPlayerConfig {
  input_player1_a_axis: RetroArchInputButton;
  input_player1_a_mbtn: RetroArchInputButton;
  input_player1_analog_dpad_mode: RetroArchInputButton;
  input_player1_b_axis: RetroArchInputButton;
  input_player1_b_mbtn: RetroArchInputButton;
  input_player1_down_mbtn: RetroArchInputButton;
  input_player1_gun_aux_a: RetroArchInputButton;
  input_player1_gun_aux_a_axis: RetroArchInputButton;
  input_player1_gun_aux_a_btn: RetroArchInputButton;
  input_player1_gun_aux_a_mbtn: RetroArchInputButton;
  input_player1_gun_aux_b: RetroArchInputButton;
  input_player1_gun_aux_b_axis: RetroArchInputButton;
  input_player1_gun_aux_b_btn: RetroArchInputButton;
  input_player1_gun_aux_b_mbtn: RetroArchInputButton;
  input_player1_gun_aux_c: RetroArchInputButton;
  input_player1_gun_aux_c_axis: RetroArchInputButton;
  input_player1_gun_aux_c_btn: RetroArchInputButton;
  input_player1_gun_aux_c_mbtn: RetroArchInputButton;
  input_player1_gun_dpad_down: RetroArchInputButton;
  input_player1_gun_dpad_down_axis: RetroArchInputButton;
  input_player1_gun_dpad_down_btn: RetroArchInputButton;
  input_player1_gun_dpad_down_mbtn: RetroArchInputButton;
  input_player1_gun_dpad_left: RetroArchInputButton;
  input_player1_gun_dpad_left_axis: RetroArchInputButton;
  input_player1_gun_dpad_left_btn: RetroArchInputButton;
  input_player1_gun_dpad_left_mbtn: RetroArchInputButton;
  input_player1_gun_dpad_right: RetroArchInputButton;
  input_player1_gun_dpad_right_axis: RetroArchInputButton;
  input_player1_gun_dpad_right_btn: RetroArchInputButton;
  input_player1_gun_dpad_right_mbtn: RetroArchInputButton;
  input_player1_gun_dpad_up: RetroArchInputButton;
  input_player1_gun_dpad_up_axis: RetroArchInputButton;
  input_player1_gun_dpad_up_btn: RetroArchInputButton;
  input_player1_gun_dpad_up_mbtn: RetroArchInputButton;
  input_player1_gun_offscreen_shot: RetroArchInputButton;
  input_player1_gun_offscreen_shot_axis: RetroArchInputButton;
  input_player1_gun_offscreen_shot_btn: RetroArchInputButton;
  input_player1_gun_offscreen_shot_mbtn: RetroArchInputButton;
  input_player1_gun_select: RetroArchInputButton;
  input_player1_gun_select_axis: RetroArchInputButton;
  input_player1_gun_select_btn: RetroArchInputButton;
  input_player1_gun_select_mbtn: RetroArchInputButton;
  input_player1_gun_start: RetroArchInputButton;
  input_player1_gun_start_axis: RetroArchInputButton;
  input_player1_gun_start_btn: RetroArchInputButton;
  input_player1_gun_start_mbtn: RetroArchInputButton;
  input_player1_gun_trigger: RetroArchInputButton;
  input_player1_gun_trigger_axis: RetroArchInputButton;
  input_player1_gun_trigger_btn: RetroArchInputButton;
  input_player1_gun_trigger_mbtn: RetroArchInputButton;
  input_player1_l_axis: RetroArchInputButton;
  input_player1_l_mbtn: RetroArchInputButton;
  input_player1_l_x_minus_axis: RetroArchInputButton;
  input_player1_l_x_minus_btn: RetroArchInputButton;
  input_player1_l_x_minus_mbtn: RetroArchInputButton;
  input_player1_l_x_plus_axis: RetroArchInputButton;
  input_player1_l_x_plus_btn: RetroArchInputButton;
  input_player1_l_x_plus_mbtn: RetroArchInputButton;
  input_player1_l_y_minus_axis: RetroArchInputButton;
  input_player1_l_y_minus_btn: RetroArchInputButton;
  input_player1_l_y_minus_mbtn: RetroArchInputButton;
  input_player1_l_y_plus_axis: RetroArchInputButton;
  input_player1_l_y_plus_btn: RetroArchInputButton;
  input_player1_l_y_plus_mbtn: RetroArchInputButton;
  input_player1_l2_axis: RetroArchInputButton;
  input_player1_l2_mbtn: RetroArchInputButton;
  input_player1_l3_axis: RetroArchInputButton;
  input_player1_l3_mbtn: RetroArchInputButton;
  input_player1_left_mbtn: RetroArchInputButton;
  input_player1_mouse_index: RetroArchInputButton;
  input_player1_r_axis: RetroArchInputButton;
  input_player1_r_mbtn: RetroArchInputButton;
  input_player1_r_x_minus_axis: RetroArchInputButton;
  input_player1_r_x_minus_btn: RetroArchInputButton;
  input_player1_r_x_minus_mbtn: RetroArchInputButton;
  input_player1_r_x_plus_axis: RetroArchInputButton;
  input_player1_r_x_plus_btn: RetroArchInputButton;
  input_player1_r_x_plus_mbtn: RetroArchInputButton;
  input_player1_r_y_minus_axis: RetroArchInputButton;
  input_player1_r_y_minus_btn: RetroArchInputButton;
  input_player1_r_y_minus_mbtn: RetroArchInputButton;
  input_player1_r_y_plus_axis: RetroArchInputButton;
  input_player1_r_y_plus_btn: RetroArchInputButton;
  input_player1_r_y_plus_mbtn: RetroArchInputButton;
  input_player1_r2_axis: RetroArchInputButton;
  input_player1_r2_mbtn: RetroArchInputButton;
  input_player1_r3_axis: RetroArchInputButton;
  input_player1_r3_mbtn: RetroArchInputButton;
  input_player1_right_mbtn: RetroArchInputButton;
  input_player1_select_axis: RetroArchInputButton;
  input_player1_select_mbtn: RetroArchInputButton;
  input_player1_start_axis: RetroArchInputButton;
  input_player1_start_mbtn: RetroArchInputButton;
  input_player1_turbo_axis: RetroArchInputButton;
  input_player1_turbo_btn: RetroArchInputButton;
  input_player1_turbo_mbtn: RetroArchInputButton;
  input_player1_up_mbtn: RetroArchInputButton;
  input_player1_x_axis: RetroArchInputButton;
  input_player1_x_mbtn: RetroArchInputButton;
  input_player1_y_axis: RetroArchInputButton;
  input_player1_y_mbtn: RetroArchInputButton;
  input_player2_a: RetroArchInputButton;
  input_player2_a_axis: RetroArchInputButton;
  input_player2_a_btn: RetroArchInputButton;
  input_player2_a_mbtn: RetroArchInputButton;
  input_player2_analog_dpad_mode: RetroArchInputButton;
  input_player2_b: RetroArchInputButton;
  input_player2_b_axis: RetroArchInputButton;
  input_player2_b_btn: RetroArchInputButton;
  input_player2_b_mbtn: RetroArchInputButton;
  input_player2_down: RetroArchInputButton;
  input_player2_down_axis: RetroArchInputButton;
  input_player2_down_btn: RetroArchInputButton;
  input_player2_down_mbtn: RetroArchInputButton;
  input_player2_gun_aux_a: RetroArchInputButton;
  input_player2_gun_aux_a_axis: RetroArchInputButton;
  input_player2_gun_aux_a_btn: RetroArchInputButton;
  input_player2_gun_aux_a_mbtn: RetroArchInputButton;
  input_player2_gun_aux_b: RetroArchInputButton;
  input_player2_gun_aux_b_axis: RetroArchInputButton;
  input_player2_gun_aux_b_btn: RetroArchInputButton;
  input_player2_gun_aux_b_mbtn: RetroArchInputButton;
  input_player2_gun_aux_c: RetroArchInputButton;
  input_player2_gun_aux_c_axis: RetroArchInputButton;
  input_player2_gun_aux_c_btn: RetroArchInputButton;
  input_player2_gun_aux_c_mbtn: RetroArchInputButton;
  input_player2_gun_dpad_down: RetroArchInputButton;
  input_player2_gun_dpad_down_axis: RetroArchInputButton;
  input_player2_gun_dpad_down_btn: RetroArchInputButton;
  input_player2_gun_dpad_down_mbtn: RetroArchInputButton;
  input_player2_gun_dpad_left: RetroArchInputButton;
  input_player2_gun_dpad_left_axis: RetroArchInputButton;
  input_player2_gun_dpad_left_btn: RetroArchInputButton;
  input_player2_gun_dpad_left_mbtn: RetroArchInputButton;
  input_player2_gun_dpad_right: RetroArchInputButton;
  input_player2_gun_dpad_right_axis: RetroArchInputButton;
  input_player2_gun_dpad_right_btn: RetroArchInputButton;
  input_player2_gun_dpad_right_mbtn: RetroArchInputButton;
  input_player2_gun_dpad_up: RetroArchInputButton;
  input_player2_gun_dpad_up_axis: RetroArchInputButton;
  input_player2_gun_dpad_up_btn: RetroArchInputButton;
  input_player2_gun_dpad_up_mbtn: RetroArchInputButton;
  input_player2_gun_offscreen_shot: RetroArchInputButton;
  input_player2_gun_offscreen_shot_axis: RetroArchInputButton;
  input_player2_gun_offscreen_shot_btn: RetroArchInputButton;
  input_player2_gun_offscreen_shot_mbtn: RetroArchInputButton;
  input_player2_gun_select: RetroArchInputButton;
  input_player2_gun_select_axis: RetroArchInputButton;
  input_player2_gun_select_btn: RetroArchInputButton;
  input_player2_gun_select_mbtn: RetroArchInputButton;
  input_player2_gun_start: RetroArchInputButton;
  input_player2_gun_start_axis: RetroArchInputButton;
  input_player2_gun_start_btn: RetroArchInputButton;
  input_player2_gun_start_mbtn: RetroArchInputButton;
  input_player2_gun_trigger: RetroArchInputButton;
  input_player2_gun_trigger_axis: RetroArchInputButton;
  input_player2_gun_trigger_btn: RetroArchInputButton;
  input_player2_gun_trigger_mbtn: RetroArchInputButton;
  input_player2_l: RetroArchInputButton;
  input_player2_l_axis: RetroArchInputButton;
  input_player2_l_btn: RetroArchInputButton;
  input_player2_l_mbtn: RetroArchInputButton;
  input_player2_l_x_minus: RetroArchInputButton;
  input_player2_l_x_minus_axis: RetroArchInputButton;
  input_player2_l_x_minus_btn: RetroArchInputButton;
  input_player2_l_x_minus_mbtn: RetroArchInputButton;
  input_player2_l_x_plus: RetroArchInputButton;
  input_player2_l_x_plus_axis: RetroArchInputButton;
  input_player2_l_x_plus_btn: RetroArchInputButton;
  input_player2_l_x_plus_mbtn: RetroArchInputButton;
  input_player2_l_y_minus: RetroArchInputButton;
  input_player2_l_y_minus_axis: RetroArchInputButton;
  input_player2_l_y_minus_btn: RetroArchInputButton;
  input_player2_l_y_minus_mbtn: RetroArchInputButton;
  input_player2_l_y_plus: RetroArchInputButton;
  input_player2_l_y_plus_axis: RetroArchInputButton;
  input_player2_l_y_plus_btn: RetroArchInputButton;
  input_player2_l_y_plus_mbtn: RetroArchInputButton;
  input_player2_l2: RetroArchInputButton;
  input_player2_l2_axis: RetroArchInputButton;
  input_player2_l2_btn: RetroArchInputButton;
  input_player2_l2_mbtn: RetroArchInputButton;
  input_player2_l3: RetroArchInputButton;
  input_player2_l3_axis: RetroArchInputButton;
  input_player2_l3_btn: RetroArchInputButton;
  input_player2_l3_mbtn: RetroArchInputButton;
  input_player2_left: RetroArchInputButton;
  input_player2_left_axis: RetroArchInputButton;
  input_player2_left_btn: RetroArchInputButton;
  input_player2_left_mbtn: RetroArchInputButton;
  input_player2_mouse_index: RetroArchInputButton;
  input_player2_r: RetroArchInputButton;
  input_player2_r_axis: RetroArchInputButton;
  input_player2_r_btn: RetroArchInputButton;
  input_player2_r_mbtn: RetroArchInputButton;
  input_player2_r_x_minus: RetroArchInputButton;
  input_player2_r_x_minus_axis: RetroArchInputButton;
  input_player2_r_x_minus_btn: RetroArchInputButton;
  input_player2_r_x_minus_mbtn: RetroArchInputButton;
  input_player2_r_x_plus: RetroArchInputButton;
  input_player2_r_x_plus_axis: RetroArchInputButton;
  input_player2_r_x_plus_btn: RetroArchInputButton;
  input_player2_r_x_plus_mbtn: RetroArchInputButton;
  input_player2_r_y_minus: RetroArchInputButton;
  input_player2_r_y_minus_axis: RetroArchInputButton;
  input_player2_r_y_minus_btn: RetroArchInputButton;
  input_player2_r_y_minus_mbtn: RetroArchInputButton;
  input_player2_r_y_plus: RetroArchInputButton;
  input_player2_r_y_plus_axis: RetroArchInputButton;
  input_player2_r_y_plus_btn: RetroArchInputButton;
  input_player2_r_y_plus_mbtn: RetroArchInputButton;
  input_player2_r2: RetroArchInputButton;
  input_player2_r2_axis: RetroArchInputButton;
  input_player2_r2_btn: RetroArchInputButton;
  input_player2_r2_mbtn: RetroArchInputButton;
  input_player2_r3: RetroArchInputButton;
  input_player2_r3_axis: RetroArchInputButton;
  input_player2_r3_btn: RetroArchInputButton;
  input_player2_r3_mbtn: RetroArchInputButton;
  input_player2_right: RetroArchInputButton;
  input_player2_right_axis: RetroArchInputButton;
  input_player2_right_btn: RetroArchInputButton;
  input_player2_right_mbtn: RetroArchInputButton;
  input_player2_select: RetroArchInputButton;
  input_player2_select_axis: RetroArchInputButton;
  input_player2_select_btn: RetroArchInputButton;
  input_player2_select_mbtn: RetroArchInputButton;
  input_player2_start: RetroArchInputButton;
  input_player2_start_axis: RetroArchInputButton;
  input_player2_start_btn: RetroArchInputButton;
  input_player2_start_mbtn: RetroArchInputButton;
  input_player2_turbo: RetroArchInputButton;
  input_player2_turbo_axis: RetroArchInputButton;
  input_player2_turbo_btn: RetroArchInputButton;
  input_player2_turbo_mbtn: RetroArchInputButton;
  input_player2_up: RetroArchInputButton;
  input_player2_up_axis: RetroArchInputButton;
  input_player2_up_btn: RetroArchInputButton;
  input_player2_up_mbtn: RetroArchInputButton;
  input_player2_x: RetroArchInputButton;
  input_player2_x_axis: RetroArchInputButton;
  input_player2_x_btn: RetroArchInputButton;
  input_player2_x_mbtn: RetroArchInputButton;
  input_player2_y: RetroArchInputButton;
  input_player2_y_axis: RetroArchInputButton;
  input_player2_y_btn: RetroArchInputButton;
  input_player2_y_mbtn: RetroArchInputButton;
  input_player3_a: RetroArchInputButton;
  input_player3_a_axis: RetroArchInputButton;
  input_player3_a_btn: RetroArchInputButton;
  input_player3_a_mbtn: RetroArchInputButton;
  input_player3_analog_dpad_mode: RetroArchInputButton;
  input_player3_b: RetroArchInputButton;
  input_player3_b_axis: RetroArchInputButton;
  input_player3_b_btn: RetroArchInputButton;
  input_player3_b_mbtn: RetroArchInputButton;
  input_player3_down: RetroArchInputButton;
  input_player3_down_axis: RetroArchInputButton;
  input_player3_down_btn: RetroArchInputButton;
  input_player3_down_mbtn: RetroArchInputButton;
  input_player3_gun_aux_a: RetroArchInputButton;
  input_player3_gun_aux_a_axis: RetroArchInputButton;
  input_player3_gun_aux_a_btn: RetroArchInputButton;
  input_player3_gun_aux_a_mbtn: RetroArchInputButton;
  input_player3_gun_aux_b: RetroArchInputButton;
  input_player3_gun_aux_b_axis: RetroArchInputButton;
  input_player3_gun_aux_b_btn: RetroArchInputButton;
  input_player3_gun_aux_b_mbtn: RetroArchInputButton;
  input_player3_gun_aux_c: RetroArchInputButton;
  input_player3_gun_aux_c_axis: RetroArchInputButton;
  input_player3_gun_aux_c_btn: RetroArchInputButton;
  input_player3_gun_aux_c_mbtn: RetroArchInputButton;
  input_player3_gun_dpad_down: RetroArchInputButton;
  input_player3_gun_dpad_down_axis: RetroArchInputButton;
  input_player3_gun_dpad_down_btn: RetroArchInputButton;
  input_player3_gun_dpad_down_mbtn: RetroArchInputButton;
  input_player3_gun_dpad_left: RetroArchInputButton;
  input_player3_gun_dpad_left_axis: RetroArchInputButton;
  input_player3_gun_dpad_left_btn: RetroArchInputButton;
  input_player3_gun_dpad_left_mbtn: RetroArchInputButton;
  input_player3_gun_dpad_right: RetroArchInputButton;
  input_player3_gun_dpad_right_axis: RetroArchInputButton;
  input_player3_gun_dpad_right_btn: RetroArchInputButton;
  input_player3_gun_dpad_right_mbtn: RetroArchInputButton;
  input_player3_gun_dpad_up: RetroArchInputButton;
  input_player3_gun_dpad_up_axis: RetroArchInputButton;
  input_player3_gun_dpad_up_btn: RetroArchInputButton;
  input_player3_gun_dpad_up_mbtn: RetroArchInputButton;
  input_player3_gun_offscreen_shot: RetroArchInputButton;
  input_player3_gun_offscreen_shot_axis: RetroArchInputButton;
  input_player3_gun_offscreen_shot_btn: RetroArchInputButton;
  input_player3_gun_offscreen_shot_mbtn: RetroArchInputButton;
  input_player3_gun_select: RetroArchInputButton;
  input_player3_gun_select_axis: RetroArchInputButton;
  input_player3_gun_select_btn: RetroArchInputButton;
  input_player3_gun_select_mbtn: RetroArchInputButton;
  input_player3_gun_start: RetroArchInputButton;
  input_player3_gun_start_axis: RetroArchInputButton;
  input_player3_gun_start_btn: RetroArchInputButton;
  input_player3_gun_start_mbtn: RetroArchInputButton;
  input_player3_gun_trigger: RetroArchInputButton;
  input_player3_gun_trigger_axis: RetroArchInputButton;
  input_player3_gun_trigger_btn: RetroArchInputButton;
  input_player3_gun_trigger_mbtn: RetroArchInputButton;
  input_player3_l: RetroArchInputButton;
  input_player3_l_axis: RetroArchInputButton;
  input_player3_l_btn: RetroArchInputButton;
  input_player3_l_mbtn: RetroArchInputButton;
  input_player3_l_x_minus: RetroArchInputButton;
  input_player3_l_x_minus_axis: RetroArchInputButton;
  input_player3_l_x_minus_btn: RetroArchInputButton;
  input_player3_l_x_minus_mbtn: RetroArchInputButton;
  input_player3_l_x_plus: RetroArchInputButton;
  input_player3_l_x_plus_axis: RetroArchInputButton;
  input_player3_l_x_plus_btn: RetroArchInputButton;
  input_player3_l_x_plus_mbtn: RetroArchInputButton;
  input_player3_l_y_minus: RetroArchInputButton;
  input_player3_l_y_minus_axis: RetroArchInputButton;
  input_player3_l_y_minus_btn: RetroArchInputButton;
  input_player3_l_y_minus_mbtn: RetroArchInputButton;
  input_player3_l_y_plus: RetroArchInputButton;
  input_player3_l_y_plus_axis: RetroArchInputButton;
  input_player3_l_y_plus_btn: RetroArchInputButton;
  input_player3_l_y_plus_mbtn: RetroArchInputButton;
  input_player3_l2: RetroArchInputButton;
  input_player3_l2_axis: RetroArchInputButton;
  input_player3_l2_btn: RetroArchInputButton;
  input_player3_l2_mbtn: RetroArchInputButton;
  input_player3_l3: RetroArchInputButton;
  input_player3_l3_axis: RetroArchInputButton;
  input_player3_l3_btn: RetroArchInputButton;
  input_player3_l3_mbtn: RetroArchInputButton;
  input_player3_left: RetroArchInputButton;
  input_player3_left_axis: RetroArchInputButton;
  input_player3_left_btn: RetroArchInputButton;
  input_player3_left_mbtn: RetroArchInputButton;
  input_player3_mouse_index: RetroArchInputButton;
  input_player3_r: RetroArchInputButton;
  input_player3_r_axis: RetroArchInputButton;
  input_player3_r_btn: RetroArchInputButton;
  input_player3_r_mbtn: RetroArchInputButton;
  input_player3_r_x_minus: RetroArchInputButton;
  input_player3_r_x_minus_axis: RetroArchInputButton;
  input_player3_r_x_minus_btn: RetroArchInputButton;
  input_player3_r_x_minus_mbtn: RetroArchInputButton;
  input_player3_r_x_plus: RetroArchInputButton;
  input_player3_r_x_plus_axis: RetroArchInputButton;
  input_player3_r_x_plus_btn: RetroArchInputButton;
  input_player3_r_x_plus_mbtn: RetroArchInputButton;
  input_player3_r_y_minus: RetroArchInputButton;
  input_player3_r_y_minus_axis: RetroArchInputButton;
  input_player3_r_y_minus_btn: RetroArchInputButton;
  input_player3_r_y_minus_mbtn: RetroArchInputButton;
  input_player3_r_y_plus: RetroArchInputButton;
  input_player3_r_y_plus_axis: RetroArchInputButton;
  input_player3_r_y_plus_btn: RetroArchInputButton;
  input_player3_r_y_plus_mbtn: RetroArchInputButton;
  input_player3_r2: RetroArchInputButton;
  input_player3_r2_axis: RetroArchInputButton;
  input_player3_r2_btn: RetroArchInputButton;
  input_player3_r2_mbtn: RetroArchInputButton;
  input_player3_r3: RetroArchInputButton;
  input_player3_r3_axis: RetroArchInputButton;
  input_player3_r3_btn: RetroArchInputButton;
  input_player3_r3_mbtn: RetroArchInputButton;
  input_player3_right: RetroArchInputButton;
  input_player3_right_axis: RetroArchInputButton;
  input_player3_right_btn: RetroArchInputButton;
  input_player3_right_mbtn: RetroArchInputButton;
  input_player3_select: RetroArchInputButton;
  input_player3_select_axis: RetroArchInputButton;
  input_player3_select_btn: RetroArchInputButton;
  input_player3_select_mbtn: RetroArchInputButton;
  input_player3_start: RetroArchInputButton;
  input_player3_start_axis: RetroArchInputButton;
  input_player3_start_btn: RetroArchInputButton;
  input_player3_start_mbtn: RetroArchInputButton;
  input_player3_turbo: RetroArchInputButton;
  input_player3_turbo_axis: RetroArchInputButton;
  input_player3_turbo_btn: RetroArchInputButton;
  input_player3_turbo_mbtn: RetroArchInputButton;
  input_player3_up: RetroArchInputButton;
  input_player3_up_axis: RetroArchInputButton;
  input_player3_up_btn: RetroArchInputButton;
  input_player3_up_mbtn: RetroArchInputButton;
  input_player3_x: RetroArchInputButton;
  input_player3_x_axis: RetroArchInputButton;
  input_player3_x_btn: RetroArchInputButton;
  input_player3_x_mbtn: RetroArchInputButton;
  input_player3_y: RetroArchInputButton;
  input_player3_y_axis: RetroArchInputButton;
  input_player3_y_btn: RetroArchInputButton;
  input_player3_y_mbtn: RetroArchInputButton;
  input_player4_a: RetroArchInputButton;
  input_player4_a_axis: RetroArchInputButton;
  input_player4_a_btn: RetroArchInputButton;
  input_player4_a_mbtn: RetroArchInputButton;
  input_player4_analog_dpad_mode: RetroArchInputButton;
  input_player4_b: RetroArchInputButton;
  input_player4_b_axis: RetroArchInputButton;
  input_player4_b_btn: RetroArchInputButton;
  input_player4_b_mbtn: RetroArchInputButton;
  input_player4_down: RetroArchInputButton;
  input_player4_down_axis: RetroArchInputButton;
  input_player4_down_btn: RetroArchInputButton;
  input_player4_down_mbtn: RetroArchInputButton;
  input_player4_gun_aux_a: RetroArchInputButton;
  input_player4_gun_aux_a_axis: RetroArchInputButton;
  input_player4_gun_aux_a_btn: RetroArchInputButton;
  input_player4_gun_aux_a_mbtn: RetroArchInputButton;
  input_player4_gun_aux_b: RetroArchInputButton;
  input_player4_gun_aux_b_axis: RetroArchInputButton;
  input_player4_gun_aux_b_btn: RetroArchInputButton;
  input_player4_gun_aux_b_mbtn: RetroArchInputButton;
  input_player4_gun_aux_c: RetroArchInputButton;
  input_player4_gun_aux_c_axis: RetroArchInputButton;
  input_player4_gun_aux_c_btn: RetroArchInputButton;
  input_player4_gun_aux_c_mbtn: RetroArchInputButton;
  input_player4_gun_dpad_down: RetroArchInputButton;
  input_player4_gun_dpad_down_axis: RetroArchInputButton;
  input_player4_gun_dpad_down_btn: RetroArchInputButton;
  input_player4_gun_dpad_down_mbtn: RetroArchInputButton;
  input_player4_gun_dpad_left: RetroArchInputButton;
  input_player4_gun_dpad_left_axis: RetroArchInputButton;
  input_player4_gun_dpad_left_btn: RetroArchInputButton;
  input_player4_gun_dpad_left_mbtn: RetroArchInputButton;
  input_player4_gun_dpad_right: RetroArchInputButton;
  input_player4_gun_dpad_right_axis: RetroArchInputButton;
  input_player4_gun_dpad_right_btn: RetroArchInputButton;
  input_player4_gun_dpad_right_mbtn: RetroArchInputButton;
  input_player4_gun_dpad_up: RetroArchInputButton;
  input_player4_gun_dpad_up_axis: RetroArchInputButton;
  input_player4_gun_dpad_up_btn: RetroArchInputButton;
  input_player4_gun_dpad_up_mbtn: RetroArchInputButton;
  input_player4_gun_offscreen_shot: RetroArchInputButton;
  input_player4_gun_offscreen_shot_axis: RetroArchInputButton;
  input_player4_gun_offscreen_shot_btn: RetroArchInputButton;
  input_player4_gun_offscreen_shot_mbtn: RetroArchInputButton;
  input_player4_gun_select: RetroArchInputButton;
  input_player4_gun_select_axis: RetroArchInputButton;
  input_player4_gun_select_btn: RetroArchInputButton;
  input_player4_gun_select_mbtn: RetroArchInputButton;
  input_player4_gun_start: RetroArchInputButton;
  input_player4_gun_start_axis: RetroArchInputButton;
  input_player4_gun_start_btn: RetroArchInputButton;
  input_player4_gun_start_mbtn: RetroArchInputButton;
  input_player4_gun_trigger: RetroArchInputButton;
  input_player4_gun_trigger_axis: RetroArchInputButton;
  input_player4_gun_trigger_btn: RetroArchInputButton;
  input_player4_gun_trigger_mbtn: RetroArchInputButton;
  input_player4_l: RetroArchInputButton;
  input_player4_l_axis: RetroArchInputButton;
  input_player4_l_btn: RetroArchInputButton;
  input_player4_l_mbtn: RetroArchInputButton;
  input_player4_l_x_minus: RetroArchInputButton;
  input_player4_l_x_minus_axis: RetroArchInputButton;
  input_player4_l_x_minus_btn: RetroArchInputButton;
  input_player4_l_x_minus_mbtn: RetroArchInputButton;
  input_player4_l_x_plus: RetroArchInputButton;
  input_player4_l_x_plus_axis: RetroArchInputButton;
  input_player4_l_x_plus_btn: RetroArchInputButton;
  input_player4_l_x_plus_mbtn: RetroArchInputButton;
  input_player4_l_y_minus: RetroArchInputButton;
  input_player4_l_y_minus_axis: RetroArchInputButton;
  input_player4_l_y_minus_btn: RetroArchInputButton;
  input_player4_l_y_minus_mbtn: RetroArchInputButton;
  input_player4_l_y_plus: RetroArchInputButton;
  input_player4_l_y_plus_axis: RetroArchInputButton;
  input_player4_l_y_plus_btn: RetroArchInputButton;
  input_player4_l_y_plus_mbtn: RetroArchInputButton;
  input_player4_l2: RetroArchInputButton;
  input_player4_l2_axis: RetroArchInputButton;
  input_player4_l2_btn: RetroArchInputButton;
  input_player4_l2_mbtn: RetroArchInputButton;
  input_player4_l3: RetroArchInputButton;
  input_player4_l3_axis: RetroArchInputButton;
  input_player4_l3_btn: RetroArchInputButton;
  input_player4_l3_mbtn: RetroArchInputButton;
  input_player4_left: RetroArchInputButton;
  input_player4_left_axis: RetroArchInputButton;
  input_player4_left_btn: RetroArchInputButton;
  input_player4_left_mbtn: RetroArchInputButton;
  input_player4_mouse_index: RetroArchInputButton;
  input_player4_r: RetroArchInputButton;
  input_player4_r_axis: RetroArchInputButton;
  input_player4_r_btn: RetroArchInputButton;
  input_player4_r_mbtn: RetroArchInputButton;
  input_player4_r_x_minus: RetroArchInputButton;
  input_player4_r_x_minus_axis: RetroArchInputButton;
  input_player4_r_x_minus_btn: RetroArchInputButton;
  input_player4_r_x_minus_mbtn: RetroArchInputButton;
  input_player4_r_x_plus: RetroArchInputButton;
  input_player4_r_x_plus_axis: RetroArchInputButton;
  input_player4_r_x_plus_btn: RetroArchInputButton;
  input_player4_r_x_plus_mbtn: RetroArchInputButton;
  input_player4_r_y_minus: RetroArchInputButton;
  input_player4_r_y_minus_axis: RetroArchInputButton;
  input_player4_r_y_minus_btn: RetroArchInputButton;
  input_player4_r_y_minus_mbtn: RetroArchInputButton;
  input_player4_r_y_plus: RetroArchInputButton;
  input_player4_r_y_plus_axis: RetroArchInputButton;
  input_player4_r_y_plus_btn: RetroArchInputButton;
  input_player4_r_y_plus_mbtn: RetroArchInputButton;
  input_player4_r2: RetroArchInputButton;
  input_player4_r2_axis: RetroArchInputButton;
  input_player4_r2_btn: RetroArchInputButton;
  input_player4_r2_mbtn: RetroArchInputButton;
  input_player4_r3: RetroArchInputButton;
  input_player4_r3_axis: RetroArchInputButton;
  input_player4_r3_btn: RetroArchInputButton;
  input_player4_r3_mbtn: RetroArchInputButton;
  input_player4_right: RetroArchInputButton;
  input_player4_right_axis: RetroArchInputButton;
  input_player4_right_btn: RetroArchInputButton;
  input_player4_right_mbtn: RetroArchInputButton;
  input_player4_select: RetroArchInputButton;
  input_player4_select_axis: RetroArchInputButton;
  input_player4_select_btn: RetroArchInputButton;
  input_player4_select_mbtn: RetroArchInputButton;
  input_player4_start: RetroArchInputButton;
  input_player4_start_axis: RetroArchInputButton;
  input_player4_start_btn: RetroArchInputButton;
  input_player4_start_mbtn: RetroArchInputButton;
  input_player4_turbo: RetroArchInputButton;
  input_player4_turbo_axis: RetroArchInputButton;
  input_player4_turbo_btn: RetroArchInputButton;
  input_player4_turbo_mbtn: RetroArchInputButton;
  input_player4_up: RetroArchInputButton;
  input_player4_up_axis: RetroArchInputButton;
  input_player4_up_btn: RetroArchInputButton;
  input_player4_up_mbtn: RetroArchInputButton;
  input_player4_x: RetroArchInputButton;
  input_player4_x_axis: RetroArchInputButton;
  input_player4_x_btn: RetroArchInputButton;
  input_player4_x_mbtn: RetroArchInputButton;
  input_player4_y: RetroArchInputButton;
  input_player4_y_axis: RetroArchInputButton;
  input_player4_y_btn: RetroArchInputButton;
  input_player4_y_mbtn: RetroArchInputButton;
}
//#endregion
//#region src/types/retroarch-config/notification.d.ts
interface RetroArchNotificationConfig {
  notification_show_autoconfig: boolean;
  notification_show_cheats_applied: boolean;
  notification_show_config_override_load: boolean;
  notification_show_fast_forward: boolean;
  notification_show_netplay_extra: boolean;
  notification_show_patch_applied: boolean;
  notification_show_refresh_rate: boolean;
  notification_show_remap_load: boolean;
  notification_show_save_state: boolean;
  notification_show_screenshot: boolean;
  notification_show_screenshot_duration: number;
  notification_show_screenshot_flash: number;
  notification_show_set_initial_disk: boolean;
  notification_show_when_menu_is_alive: boolean;
}
//#endregion
//#region src/types/retroarch-config/quick-menu.d.ts
interface RetroArchQuickMenuConfig {
  quick_menu_show_add_to_favorites: boolean;
  quick_menu_show_cheats: boolean;
  quick_menu_show_close_content: boolean;
  quick_menu_show_controls: boolean;
  quick_menu_show_core_options_flush: boolean;
  quick_menu_show_download_thumbnails: boolean;
  quick_menu_show_information: boolean;
  quick_menu_show_options: boolean;
  quick_menu_show_replay: boolean;
  quick_menu_show_reset_core_association: boolean;
  quick_menu_show_restart_content: boolean;
  quick_menu_show_resume_content: boolean;
  quick_menu_show_save_content_dir_overrides: boolean;
  quick_menu_show_save_core_overrides: boolean;
  quick_menu_show_save_game_overrides: boolean;
  quick_menu_show_save_load_state: boolean;
  quick_menu_show_savestate_submenu: boolean;
  quick_menu_show_set_core_association: boolean;
  quick_menu_show_shaders: boolean;
  quick_menu_show_start_recording: boolean;
  quick_menu_show_start_streaming: boolean;
  quick_menu_show_take_screenshot: boolean;
  quick_menu_show_undo_save_load_state: boolean;
}
//#endregion
//#region src/types/retroarch-config/rewind.d.ts
interface RetroArchRewindConfig {
  rewind_buffer_size: number;
  rewind_buffer_size_step: number;
  rewind_enable: boolean;
  rewind_granularity: number;
}
//#endregion
//#region src/types/retroarch-config/run-ahead.d.ts
interface RetroArchRunAheadConfig {
  run_ahead_enabled: boolean;
  run_ahead_frames: number;
  run_ahead_hide_warnings: boolean;
  run_ahead_secondary_instance: boolean;
}
//#endregion
//#region src/types/retroarch-config/save.d.ts
interface RetroArchSaveConfig {
  save_file_compression: boolean;
  savefile_directory: string;
  savefiles_in_content_dir: boolean;
  savestate_auto_index: boolean;
  savestate_directory: string;
  savestate_file_compression: boolean;
  savestate_max_keep: number;
  savestate_thumbnail_enable: boolean;
  savestates_in_content_dir: boolean;
}
//#endregion
//#region src/types/retroarch-config/skeleton.d.ts
/**
 * @see {@link https://github.com/libretro/RetroArch/blob/master/retroarch.cfg | RetroArch Skeleton config file in the repo of RetroArch}
 */
interface RetroArchSkeletonConfig {
  /**
   * If set to a directory, the content history playlist will be saved
   * to this directory.
   */
  content_history_dir: string;
  savestate_auto_load: boolean;
  /**
   * Automatically saves a savestate at the end of RetroArch's lifetime.
   * The path is $SRAM_PATH.auto.
   * RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set.
   */
  savestate_auto_save: boolean;
  /**
   * Path to a libretro implementation.
   */
  libretro_path: string;
  /**
   * Sets log level for libretro cores (GET_LOG_INTERFACE).
   * If a log level issued by a libretro core is below libretro_log_level, it is ignored.
   * DEBUG logs are always ignored unless verbose mode is activated (--verbose).
   * DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3.
   */
  libretro_log_level: number | string;
  /**
   * Enable or disable verbosity level of frontend.
   */
  log_verbosity: boolean;
  /**
   * If this option is enabled, every content file loaded in RetroArch will be
   * automatically added to a history list.
   */
  history_list_enable: boolean;
  /**
   * Enable performance counters
   */
  perfcnt_enable: boolean;
  /**
   * Path to core options config file.
   * This config file is used to expose core-specific options.
   * It will be written to by RetroArch.
   * A default path will be assigned if not set.
   */
  core_options_path: string;
  /**
   * Path to content history file.
   * RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading.
   * A default path will be assigned if not set.
   */
  content_history_path: string;
  /**
   * Path to music content history file (optional).
   * RetroArch keeps track of all music content loaded in the menu and from CLI directly for convenient quick loading.
   * A default path will be assigned if not set.
   */
  content_music_history_path: string;
  /**
   * Path to image content history file (optional).
   * RetroArch keeps track of all image content loaded in the menu and from CLI directly for convenient quick loading.
   * A default path will be assigned if not set.
   */
  content_image_history_path: string;
  /**
   * Path to video content history file (optional).
   * RetroArch keeps track of all video content loaded in the menu and from CLI directly for convenient quick loading.
   * A default path will be assigned if not set.
   */
  content_video_history_path: string;
  /**
   * Number of entries that will be kept in content history file.
   */
  content_history_size: number;
  /**
   * Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY.
   * Usually set by developers who bundle libretro/RetroArch apps to point to assets.
   */
  content_directory: string;
  /**
   * Sets start directory for menu config browser.
   */
  rgui_config_directory: string;
  /**
   * Show startup screen in menu.
   * Is automatically set to false when seen for the first time.
   * This is only updated in config if config_save_on_exit is set to true, however.
   */
  rgui_show_start_screen: boolean;
  /**
   * Flushes config to disk on exit. Useful for menu as settings can be modified.
   * Overwrites the config. #include's and comments are not preserved.
   */
  config_save_on_exit: boolean;
  /**
   * Shows hidden files and folders in directory listings.
   */
  show_hidden_files: false;
  /**
   * Input driver. Depending on video driver, it might force a different input driver.
   */
  input_driver: string;
  /**
   * Joypad driver. ("udev", "linuxraw", "paraport", "sdl2", "hid", "dinput")
   */
  input_joypad_driver: string;
  /**
   * Video driver to use. "gl", "xvideo", "sdl", "d3d"
   */
  video_driver: string;
  /**
   * Which context implementation to use.
   * Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl.
   * By default, tries to use first suitable driver.
   */
  video_context_driver: string;
  /**
   * Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio.
   */
  audio_driver: string;
  /**
   * Audio resampler driver backend. Which audio resampler to use.
   * Default will use "sinc".
   */
  audio_resampler: string;
  /**
   * Camera driver.
   */
  camera_driver: string;
  /**
   * Location driver.
   */
  location_driver: string;
  /**
   * Menu driver to use. ("rgui", "xmb", "glui")
   */
  menu_driver: string;
  /**
   * Record driver. Used when recording video.
   */
  record_driver: string;
  /**
   * Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored
   * by video driver.
   */
  suspend_screensaver_enable: boolean;
  /**
   * Display framerate.
   */
  fps_show: boolean;
  /**
   * Display memory.
   */
  memory_show: boolean;
  /**
   * Display total number of frames rendered. (only displays if fps_show is enabled)
   */
  framecount_show: string;
  /**
   * Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor),
   * suggests RetroArch to use that particular monitor.
   */
  video_monitor_index: number;
  /**
   * Start in fullscreen. Can be changed at runtime.
   */
  video_fullscreen: boolean;
  /**
   * If fullscreen, prefer using a windowed fullscreen mode.
   */
  video_windowed_fullscreen: boolean;
  /**
   * Fullscreen resolution. Resolution of 0 uses the resolution of the desktop.
   */
  video_fullscreen_x: number;
  /**
   * Fullscreen resolution. Resolution of 0 uses the resolution of the desktop.
   */
  video_fullscreen_y: number;
  /**
   * Video refresh rate of your CRT monitor.
   * Used to calculate a suitable audio input rate.
   */
  crt_video_refresh_rate: number;
  /**
   * Video refresh rate of your monitor.
   * Used to calculate a suitable audio input rate.
   */
  video_refresh_rate: number;
  /**
   * Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows
   * have video problems with sRGB FBO support enabled.
   */
  video_force_srgb_disable: boolean;
  /**
   * If this is true and video_aspect_ratio is not set,
   * aspect ratio is decided by libretro implementation.
   * If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set.
   */
  video_aspect_ratio_auto: boolean;
  /**
   * A floating point value for video aspect ratio (width / height).
   * If this is not set, aspect ratio is assumed to be automatic.
   * Behavior then is defined by video_aspect_ratio_auto.
   */
  video_aspect_ratio: string;
  /**
   * Windowed x resolution scale and y resolution scale
   * (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale)
   */
  video_scale: number;
  /**
   * Percentage of opacity to use for the window (100 is completely opaque).
   */
  video_window_opacity: number;
  /**
   * Whether to enable the default window decorations like border, titlebar etc.
   */
  video_window_show_decorations: boolean;
  /**
   * Forcibly disable composition. Only works in Windows Vista/7 for now.
   */
  video_disable_composition: boolean;
  /**
   * Video vsync.
   */
  video_vsync: boolean;
  /**
   * Interval at which a Vsync swap is performed.
   * 1 is normal, 2 is doubled frames, 3 is tripled frames, etc.
   */
  video_swap_interval: number;
  /**
   * Max amount of swapchain images.
   * Single buffering = 1, Double buffering = 2, 3 = Triple buffering
   */
  video_max_swapchain_images: number;
  /**
   * Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance.
   */
  video_hard_sync: boolean;
  /**
   * Sets how many frames CPU can run ahead of GPU when using video_hard_sync.
   * Maximum is 3.
   */
  video_hard_sync_frames: number;
  /**
   * Sets how many milliseconds to delay after VSync before running the core.
   * Can reduce latency at cost of higher risk of stuttering.
   * Maximum is 15.
   */
  video_frame_delay: number;
  /**
   * Inserts a black frame inbetween frames.
   * Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.
   * video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2).
   */
  video_black_frame_insertion: boolean;
  /**
   * Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering.
   */
  video_threaded: boolean;
  /**
   * Use a shared context for HW rendered libretro cores.
   * Avoids having to assume HW state changes inbetween frames.
   */
  video_shared_context: boolean;
  /**
   * Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders.
   */
  video_smooth: boolean;
  /**
   * Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio.
   */
  video_force_aspect: boolean;
  /**
   * Only scales video in integer steps.
   * The base size depends on system-reported geometry and aspect ratio.
   * If video_force_aspect is not set, X/Y will be integer scaled independently.
   */
  video_scale_integer: boolean;
  /**
   * Index of the aspect ratio selection in the menu.
   * 20 = Config, 21 = 1:1 PAR, 22 = Core Provided, 23 = Custom Aspect Ratio
   */
  aspect_ratio_index: number;
  /**
   * Forces cropping of overscanned frames.
   * Exact behavior of this option is implementation specific.
   */
  video_crop_overscan: boolean;
  /**
   * Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset)
   */
  video_shader: string;
  /**
   * Load video_shader on startup.
   * Other shaders can still be loaded later in runtime.
   */
  video_shader_enable: boolean;
  /**
   * CPU-based video filter. Path to a dynamic library.
   */
  video_filter: string;
  /**
   * Path to a font used for rendering messages. This path must be defined to enable fonts.
   * Do note that the _full_ path of the font is necessary!
   */
  video_font_path: string;
  /**
   * Size of the font rendered in points.
   */
  video_font_size: number;
  /**
   * Enable usage of OSD messages.
   */
  video_font_enable: boolean;
  /**
   * Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values.
   * [0.0, 0.0] maps to the lower left corner of the screen.
   */
  video_message_pos_x: number;
  /**
   * Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values.
   * [0.0, 0.0] maps to the lower left corner of the screen.
   */
  video_message_pos_y: number;
  /**
   * Color for message. The value is treated as a hexadecimal value.
   * It is a regular RGB hex number, i.e. red is "ff0000".
   */
  video_message_color: string;
  /**
   * Background color for OSD messages. Red/Green/Blue values are from 0 to 255 and opacity is 0.0 to 1.0.
   */
  video_message_bgcolor_enable: boolean;
  /**
   * Background color for OSD messages. Red/Green/Blue values are from 0 to 255 and opacity is 0.0 to 1.0.
   */
  video_message_bgcolor_red: number;
  /**
   * Background color for OSD messages. Red/Green/Blue values are from 0 to 255 and opacity is 0.0 to 1.0.
   */
  video_message_bgcolor_green: number;
  /**
   * Background color for OSD messages. Red/Green/Blue values are from 0 to 255 and opacity is 0.0 to 1.0.
   */
  video_message_bgcolor_blue: number;
  /**
   * Background color for OSD messages. Red/Green/Blue values are from 0 to 255 and opacity is 0.0 to 1.0.
   */
  video_message_bgcolor_opacity: number;
  /**
   * Allows libretro cores to set rotation modes.
   * Setting this to false will honor, but ignore this request.
   * This is useful for vertically oriented content where one manually rotates the monitor.
   */
  video_allow_rotate: boolean;
  /**
   * Forces a certain rotation of the video.
   * The rotation is added to rotations which the libretro core sets (see video_allow_rotate).
   * The angle is <value> * 90 degrees counter-clockwise.
   */
  video_rotation: number;
  /**
   * Forces a certain orientation of the screen from the operating system.
   * The angle is <value> * 90 degrees counter-clockwise.
   */
  screen_orientation: number;
  /**
   * HDR settings
   */
  video_hdr_enable: boolean;
  /**
   * HDR settings
   */
  video_hdr_max_nits: string;
  /**
   * HDR settings
   */
  video_hdr_paper_white_nits: string;
  /**
   * HDR settings
   */
  video_hdr_contrast: string;
  /**
   * HDR settings
   */
  video_hdr_expand_gamut: boolean;
  /**
   * Enable audio.
   */
  audio_enable: boolean;
  /**
   * Enable menu audio sounds.
   */
  audio_enable_menu: boolean;
  /**
   * Enable menu audio sounds.
   */
  audio_enable_menu_ok: boolean;
  /**
   * Enable menu audio sounds.
   */
  audio_enable_menu_cancel: boolean;
  /**
   * Enable menu audio sounds.
   */
  audio_enable_menu_notice: boolean;
  /**
   * Enable menu audio sounds.
   */
  audio_enable_menu_bgm: boolean;
  /**
   * Mutes audio.
   */
  audio_mute_enable: boolean;
  /**
   * Mutes audio mixer volume globally.
   */
  audio_mixer_mute_enable: boolean;
  /**
   * Audio output samplerate.
   */
  audio_out_rate: number;
  /**
   * Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ...
   */
  audio_device: string;
  /**
   * Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library.
   */
  audio_dsp_plugin: string;
  /**
   * Will sync (block) on audio. Recommended.
   */
  audio_sync: boolean;
  /**
   * Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency.
   */
  audio_latency: number;
  /**
   * Enable audio rate control.
   */
  audio_rate_control: boolean;
  /**
   * Controls audio rate control delta. Defines how much input rate can be adjusted dynamically.
   * Input rate = in_rate * (1.0 +/- audio_rate_control_delta)
   */
  audio_rate_control_delta: number;
  /**
   * Controls maximum audio timing skew. Defines the maximum change in input rate.
   * Input rate = in_rate * (1.0 +/- max_timing_skew)
   */
  audio_max_timing_skew: number;
  /**
   * Audio volume. Volume is expressed in dB.
   * 0 dB is normal volume. No gain will be applied.
   * Gain can be controlled in runtime with input_volume_up/input_volume_down.
   */
  audio_volume: number;
  /**
   * Audio mixer volume. Volume is expressed in dB.
   * 0 dB is normal volume. No gain will be applied.
   */
  audio_mixer_volume: number;
  /**
   * Enable microphone support.
   */
  microphone_enable: boolean;
  /**
   * Desired microphone latency in milliseconds. Might not be honored if driver can't provide given latency.
   */
  microphone_latency: number;
  /**
   * Enable the overlay.
   */
  input_overlay_enable: boolean;
  /**
   * Show the overlay behind the menu instead of in front.
   */
  input_overlay_behind_menu: boolean;
  /**
   * Hide the current overlay from appearing inside the menu.
   */
  input_overlay_hide_in_menu: boolean;
  /**
   * Path to input overlay.
   */
  input_overlay: string;
  /**
   * Opacity of all the UI elements of the overlay.
   */
  input_overlay_opacity: number;
  /**
   * Scale of all UI elements of the overlay.
   */
  input_overlay_scale: number;
  /**
   * Center of all UI elements of the overlay.
   */
  input_overlay_center_x: number;
  /**
   * Center of all UI elements of the overlay.
   */
  input_overlay_center_y: number;
  /**
   * Path to input remapping file.
   */
  input_remapping_path: string;
  /**
   * Input bind timer timeout.
   * Amount of seconds to wait until proceeding to the next bind. Default: 5, minimum: 1
   */
  input_bind_timeout: number;
  /**
   * If enabled, overrides the input binds with the remapped binds set for the current core.
   */
  input_remap_binds_enable: boolean;
  /**
   * Maximum amount of users supported by RetroArch.
   */
  input_max_users: number;
  /**
   * Keyboard layout for input driver if applicable (udev/evdev for now).
   * Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys").
   */
  input_keyboard_layout: string;
  /**
   * Defines axis threshold. Possible values are [0.0, 1.0]
   */
  input_axis_threshold: number;
  input_analog_deadzone: number;
  input_analog_sensitivity: number;
  /**
   * Enable input auto-detection. Will attempt to autoconfigure
   * joypads, Plug-and-Play style.
   */
  input_autodetect_enable: boolean;
  /**
   * Show the input descriptors set by the core instead of the
   * default ones.
   */
  input_descriptor_label_show: boolean;
  /**
   * Hide input descriptors that were not set by the core.
   */
  input_descriptor_hide_unbound: boolean;
  /**
   * Influence how input polling is done inside RetroArch.
   * 0 : Early  - Input polling is performed before call to retro_run.
   * 1 : Normal - Input polling is performed when retro_input_poll is
   *     requested.
   * 2 : Late   - Input polling is performed on first call to retro_input_state
   *     per frame
   *
   * Setting it to 0 or 2 can result in less latency depending on
   * your configuration.
   *
   * When netplay is enabled, the default polling behavior (1) will
   * be used regardless of the value set here.
   */
  input_poll_type_behavior: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p1: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p2: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p3: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p4: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p5: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p6: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p7: number;
  /**
   * Sets which libretro device is used for a user.
   * Devices are indentified with a number.
   * This is normally saved by the menu.
   * Device IDs are found in libretro.h.
   * These settings are overridden by explicit command-line arguments which refer to input devices.
   * None: 0
   * Joypad (RetroPad): 1
   * Mouse: 2
   * Keyboard: 3
   * Generic Lightgun: 4
   * Joypad w/ Analog (RetroPad + Analog sticks): 5
   * Multitap (SNES specific): 257
   * Super Scope (SNES specific): 260
   * Justifier (SNES specific): 516
   * Justifiers (SNES specific): 772
   */
  input_libretro_device_p8: number;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_a: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_b: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_y: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_x: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_start: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_select: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_l: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_r: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_left: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_right: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_up: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_down: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_l2: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_r2: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_l3: string;
  /**
   * Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
   * is for keypad keys):
   *
   *   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
   *   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
   *   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
   *   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
   *   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
   *   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
   *   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
   *   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
   *
   * Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely,
   * rather than relying on a default.
   */
  input_player1_r3: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_l_x_plus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_l_x_minus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_l_y_plus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_l_y_minus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_r_x_plus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_r_x_minus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_r_y_plus: string;
  /**
   * Two analog sticks (DualShock-esque).
   * Bound as usual, however, if a real analog axis is bound,
   * it can be read as a true analog.
   * Positive X axis is right, Positive Y axis is down.
   */
  input_player1_r_y_minus: string;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player1_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player2_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player3_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player4_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player5_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player6_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player7_joypad_index: number;
  /**
   * If desired, it is possible to override which joypads are being used for user 1 through 8.
   * First joypad available is 0.
   */
  input_player8_joypad_index: number;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_a_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_b_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_y_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_x_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_start_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_select_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_l_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_r_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_left_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_right_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_up_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_down_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_l2_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_r2_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_l3_btn: string;
  /**
   * Input device buttons.
   * Figure these out by using the RetroArch configuration menu
   * You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction.
   * E.g. "h0up"
   */
  input_player1_r3_btn: string;
  /**
   * Menu buttons.
   */
  menu_search_btn: string;
  /**
   * Menu buttons.
   */
  menu_info_btn: string;
  /**
   * Menu buttons.
   */
  menu_default_btn: string;
  /**
   * Menu buttons.
   */
  menu_scroll_down_btn: string;
  /**
   * Menu buttons.
   */
  menu_scroll_up_btn: string;
  /**
   * Swap buttons for OK/Cancel
   */
  menu_swap_ok_cancel_buttons: boolean;
  /**
   * Swap buttons for scrolling (10 items vs alphabetical)
   */
  menu_swap_scroll_buttons: boolean;
  /**
   * Axis for RetroArch D-Pad.
   * Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number.
   * Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
   */
  input_player1_left_axis: string;
  /**
   * Axis for RetroArch D-Pad.
   * Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number.
   * Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
   */
  input_player1_right_axis: string;
  /**
   * Axis for RetroArch D-Pad.
   * Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number.
   * Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
   */
  input_player1_up_axis: string;
  /**
   * Axis for RetroArch D-Pad.
   * Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number.
   * Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
   */
  input_player1_down_axis: string;
  /**
   * Holding the turbo while pressing another button will let the button enter a turbo mode
   * where the button state is modulated with a periodic signal.
   * The modulation stops when the button itself (not turbo button) is released.
   */
  input_player1_turbo: string;
  /**
   * Describes the period and how long of that period a turbo-enabled button should behave.
   * Numbers are described in frames.
   */
  input_turbo_period: number;
  /**
   * Describes the period and how long of that period a turbo-enabled button should behave.
   * Numbers are described in frames.
   */
  input_turbo_duty_cycle: number;
  /**
   * This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity.
   * All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well.
   /**
   * Toggles fullscreen.
   */
  input_toggle_fullscreen: string;
  /**
   * Saves state.
   */
  input_save_state: string;
  /**
   * Loads state.
   */
  input_load_state: string;
  /**
   * State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline).
   * When slot is != 0, path will be $path%d, where %d is slot number.
   */
  input_state_slot_increase: string;
  /**
   * State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline).
   * When slot is != 0, path will be $path%d, where %d is slot number.
   * defaults to f6
   */
  input_state_slot_decrease: string;
  /**
   * Toggles between fast-forwarding and normal speed.
   * defaults to space
   */
  input_toggle_fast_forward: string;
  /**
   * Hold for fast-forward. Releasing button disables fast-forward.
   * defaults to l
   */
  input_hold_fast_forward: string;
  /**
   * Key to exit RetroArch cleanly.
   * Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc.
   * On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization.
   * defaults to escape
   */
  input_exit_emulator: string;
  /**
   * Applies next and previous shader in directory.
   * defaults to m
   */
  input_shader_next: string;
  /**
   * Applies next and previous shader in directory.
   * defaults to n
   */
  input_shader_prev: string;
  /**
   * Applies next and previous shader in directory.
   * defaults to comma
   */
  input_shader_toggle: string;
  /**
   * Hold button down to rewind. Rewinding must be enabled.
   * defaults to r
   */
  input_rewind: string;
  /**
   * Toggle between recording and not.
   * defaults to o
   */
  input_movie_record_toggle: string;
  /**
   * Toggle between paused and non-paused state
   * defaults to p
   */
  input_pause_toggle: string;
  /**
   * Frame advance when content is paused
   * defaults to k
   */
  input_frame_advance: string;
  /**
   * Reset the content.
   * defaults to h
   */
  input_reset: string;
  /**
   * Cheats.
   * defaults to y
   */
  input_cheat_index_plus: string;
  /**
   * Cheats.
   * defaults to t
   */
  input_cheat_index_minus: string;
  /**
   * Cheats.
   * defaults to u
   */
  input_cheat_toggle: string;
  /**
   * Mute/unmute audio
   * defaults to f9
   */
  input_audio_mute: string;
  /**
   * Take screenshot
   * defaults to f8
   */
  input_screenshot: string;
  /**
   * Netplay flip users.
   * defaults to i
   */
  input_netplay_flip_players: string;
  /**
   * Hold for slowmotion.
   * defaults to e
   */
  input_slowmotion: string;
  /**
   * Toggles sync to exact content framerate.
   */
  input_toggle_vrr_runloop: string;
  /**
   * Enable other hotkeys.
   * If this hotkey is bound to either keyboard, joybutton or joyaxis,
   * all other hotkeys will be disabled unless this hotkey is also held at the same time.
   * This is useful for RETRO_KEYBOARD centric implementations
   * which query a large area of the keyboard, where it is not desirable
   * that hotkeys get in the way.
   *
   * Alternatively, all hotkeys for keyboard could be disabled by the user.
   */
  input_enable_hotkey_btn: number;
  /**
   * Adds a delay in frames before the assigned hotkey blocks input.  Useful if the the
   * hotkey input is mapped to another action.
   */
  input_hotkey_block_delay: number;
  /**
   * Increases audio volume.
   */
  input_volume_up: string;
  /**
   * Decreases audio volume.
   */
  input_volume_down: string;
  /**
   * Toggles to next overlay. Wraps around.
   */
  input_overlay_next: string;
  /**
   * Toggles eject for disks. Used for multiple-disk content.
   */
  input_disk_eject_toggle: string;
  /**
   * Cycles through disk images. Use after ejecting.
   * Complete by toggling eject again.
   */
  input_disk_next: string;
  /**
   * Toggles menu.
   */
  input_menu_toggle: string;
  /**
   * Toggles display of on-screen technical statistics.
   */
  input_toggle_statistics: string;
  /**
   * RetroPad button combination to toggle menu
   * 0: None
   * 1: Down + Y + L1 + R1
   * 2: L3 + R3
   * 3: L1 + R1 + Start + Select
   * 4: Start + Select
   * 5: L3 + R1
   * 6: L1 + R1
   * 7: Hold Start (2 seconds)
   * 8: Hold Select (2 seconds)
   * 9: Down + Select
   * 10: L2 + R2
   */
  input_menu_toggle_gamepad_combo: number;
  /**
   * RetroPad button combination to quit
   * 0: None
   * 1: Down + Y + L1 + R1
   * 2: L3 + R3
   * 3: L1 + R1 + Start + Select
   * 4: Start + Select
   * 5: L3 + R1
   * 6: L1 + R1
   * 7: Hold Start (2 seconds)
   * 8: Hold Select (2 seconds)
   * 9: Down + Select
   * 10: L2 + R2
   */
  input_quit_gamepad_combo: number;
  /**
   * allow any RetroPad to control the menu
   */
  all_users_control_menu: boolean;
  /**
   * Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse,
   * and keeps the mouse pointer inside the window to allow relative mouse input
   * to work better.
   */
  input_grab_mouse_toggle: string;
  /**
   * If disabled, will hide 'Online Updater' inside the menu.
   */
  menu_show_online_updater: boolean;
  /**
   * If disabled, will hide the ability to update cores (and core info files) inside the menu.
   */
  menu_show_core_updater: boolean;
  /**
   * If disabled, the libretro core will keep running in the background when we
   * are in the menu.
   */
  menu_pause_libretro: boolean;
  /**
   * If disabled, we use separate controls for menu operation.
   */
  menu_unified_controls: boolean;
  /**
   * Enable mouse controls inside the menu.
   */
  menu_mouse_enable: boolean;
  /**
   * Enable touch controls inside the menu.
   */
  menu_pointer_enable: boolean;
  /**
   * Shows current date and/or time inside menu.
   */
  menu_timedate_enable: boolean;
  /**
   * Shows current battery level inside menu.
   */
  menu_battery_level_enable: boolean;
  /**
   * Shows current core inside menu.
   */
  menu_core_enable: boolean;
  /**
   * Path to an image to set as menu wallpaper.
   */
  menu_wallpaper: string;
  /**
   * Dynamically load a new wallpaper depending on context.
   */
  menu_dynamic_wallpaper_enable: boolean;
  /**
   * Type of thumbnail to display. 0 = none, 1 = snaps, 2 = titles, 3 = boxarts
   */
  menu_thumbnails: number;
  /**
   * Type of thumbnail to display. 0 = none, 1 = snaps, 2 = titles, 3 = boxarts
   */
  menu_left_thumbnails: number;
  /**
   * Wrap-around to beginning and/or end if boundary of list is reached horizontally or vertically.
   */
  menu_navigation_wraparound_enable: boolean;
  /**
   * Filter files being shown in filebrowser by supported extensions.
   */
  menu_navigation_browser_filter_supported_extensions_enable: boolean;
  /**
   * Collapse subgroup settings into main group to create one big listing of settings
   * per category.
   */
  menu_collapse_subgroups_enable: boolean;
  /**
   * Prevent libretro cores from closing RetroArch on exit by loading a dummy core.
   */
  load_dummy_on_core_shutdown: boolean;
  /**
   * Check for firmware requirement(s) before loading a content.
   */
  check_firmware_before_loading: boolean;
  /**
   * Start UI companion driver's interface on boot (if available).
   */
  ui_companion_start_on_boot: boolean;
  /**
   * Toggle companion UI on startup (currently only used to show the WIMP UI)
   */
  ui_companion_toggle: boolean;
  /**
   * Only init the WIMP UI for this session if this is enabled
   */
  desktop_menu_enable: boolean;
  /**
   * Override the default camera device the camera driver uses. This is driver dependant.
   */
  camera_device: string;
  /**
   * Override the default privacy permission for cores that want to access camera services. Is "false" by default.
   */
  camera_allow: boolean;
  /**
   * Override the default privacy permission for cores that want to access location services. Is "false" by default.
   */
  location_allow: boolean;
  /**
   * URL to core update directory on buildbot.
   */
  core_updater_buildbot_url: string;
  /**
   * URL to assets update directory on buildbot.
   */
  core_updater_buildbot_assets_url: string;
  /**
   * After downloading, automatically extract archives that the downloads are contained inside.
   */
  core_updater_auto_extract_archive: boolean;
  /**
   * When being client over netplay, use keybinds for user 1.
   */
  netplay_client_swap_input: boolean;
  /**
   * The username of the person running RetroArch. This will be used for playing online, for instance.
   */
  netplay_nickname: string;
  /**
   * The amount of delay frames to use for netplay. Increasing this value will increase
   * performance, but introduce more latency.
   */
  netplay_delay_frames: number;
  /**
   * Netplay mode for the current user.
   * false is Server, true is Client.
   */
  netplay_mode: boolean;
  /**
   * Enable or disable spectator mode for the user during netplay.
   */
  netplay_spectator_mode_enable: boolean;
  /**
   * The IP Address of the host to connect to.
   */
  netplay_ip_address: string;
  /**
   * The port of the host IP Address. Can be either a TCP or UDP port.
   */
  netplay_ip_port: number;
  /**
   * Force game hosting to go through a man-in-the-middle server to get around firewalls and NAT/UPnP problems.
   */
  netplay_use_mitm_server: boolean;
  /**
   * The requested MITM server to use.
   */
  netplay_mitm_server: string;
  /**
   * Sets the System/BIOS directory.
   * Implementations can query for this directory to load BIOSes, system-specific configs, etc.
   */
  system_directory: string;
  /**
   * Save all downloaded files to this directory.
   */
  core_assets_directory: string;
  /**
   * Assets directory. This location is queried by default when menu interfaces try to look for
   * loadable assets, etc.
   */
  assets_directory: string;
  /**
   * Dynamic wallpapers directory. The place to store the wallpapers dynamically
   * loaded by the menu depending on context.
   */
  dynamic_wallpapers_directory: string;
  /**
   * Thumbnails directory. To store thumbnail files.
   */
  thumbnails_directory: string;
  /**
   * File browser directory. Sets start directory for menu file browser.
   */
  rgui_browser_directory: string;
  /**
   * Core directory for libretro core implementations.
   */
  libretro_directory: string;
  /**
   * Core info directory for libretro core information.
   */
  libretro_info_path: string;
  /**
   * Path to content database directory.
   */
  content_database_path: string;
  /**
   * Saved queries are stored to this directory.
   */
  cursor_directory: string;
  /**
   * Path to cheat database directory.
   */
  cheat_database_path: string;
  /**
   * Defines a directory where CPU-based video filters are kept.
   */
  video_filter_dir: string;
  /**
   * Directory where DSP plugins are kept.
   */
  audio_filter_dir: string;
  /**
   * Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access.
   */
  video_shader_dir: string;
  /**
   * Recording output directory. Where recordings are saved.
   */
  recording_output_directory: string;
  /**
   * Recording config directory. Where recording settings are kept.
   */
  recording_config_directory: string;
  /**
   * Overlay directory. Where overlays are kept for easy access.
   */
  overlay_directory: string;
  /**
   * Directory to dump screenshots to.
   */
  screenshot_directory: string;
  /**
   * Directory for joypad autoconfigs.
   * If a joypad is plugged in, that joypad will be autoconfigured if a config file
   * corresponding to that joypad is present in joypad_autoconfig_dir.
   * Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs.
   * Autoconfigs can be created with manually, or with the frontend.
   * Requires input_autodetect_enable to be enabled.
   */
  joypad_autoconfig_dir: string;
  /**
   * Save all remapped controls to this directory.
   */
  input_remapping_directory: string;
  /**
   * Save all playlists/collections to this directory.
   */
  playlist_directory: string;
  /**
   * Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ...
   * This will be overridden by explicit command line options.
   */
  savefile_directory: string;
  /**
   * Save all save states (*.state) to this directory.
   * This will be overridden by explicit command line options.
   */
  savestate_directory: string;
  /**
   * If set to a directory, content which is temporarily extracted
   * will be extracted to this directory.
   */
  cache_directory: string;
  /**
   * Enable the RetroAchievements feature.
   */
  cheevos_enable: boolean;
  /**
   * RetroAchievements.org credentials.
   */
  cheevos_username: string;
  /**
   * RetroAchievements.org credentials.
   */
  cheevos_password: string;
  /**
   * Show a popup when logging in to RetroAchievements.
   */
  cheevos_visibility_account: boolean;
  /**
   * The hardcore mode disables savestates and cheating features. Achievements
   * earned in hardcore mode are uniquely marked so that you can show others
   * what you've achieved without emulator assistance features.
   */
  cheevos_hardcore_mode_enable: boolean;
  /**
   * Show a popup when an achievement is unlocked.
   */
  cheevos_visibility_unlock: boolean;
  /**
   * Play the 'unlock' audio sound when an achievement is unlocked.
   */
  cheevos_unlock_sound_enable: boolean;
  /**
   * Take a screenshot when an achievement is triggered.
   */
  cheevos_auto_screenshot: boolean;
  /**
   * Show a popup when all achievements for a game are unlocked.
   */
  cheevos_visibility_mastery: boolean;
  /**
   * Shows additional diagnostic and error messages
   */
  cheevos_verbose_enable: boolean;
  /**
   * Show achievements' badges in Quick Menu \> Achievements List.
   * (note: has no effect if menu_driver = rgui).
   */
  cheevos_badges_enable: boolean;
  /**
   * Show an on-screen indicator when attempting challenging achievements
   * to provide feedback when the attempt has failed (for achievements that
   * support it)
   */
  cheevos_challenge_indicators: boolean;
  /**
   * Shows a message when a leaderboard activates.
   */
  cheevos_visibility_lboard_start: boolean;
  /**
   * Shows a message with your score when a leaderboard is submitted to the server.
   */
  cheevos_visibility_lboard_submit: boolean;
  /**
   * Shows an on-screen tracker with the current value of active leaderboards.
   */
  cheevos_visibility_lboard_trackers: boolean;
  /**
   * Send some messages to the RetroAchievements.org saying, for example,
   * where you are in the game, how many lives you have, your score, etc.
   */
  cheevos_richpresence_enable: boolean;
  /**
   * Even after unlocking achievements in previous sessions, you may still want
   * to see them triggering in the current session. (encore mode)
   */
  cheevos_start_active: boolean;
  /**
   * Unnoficial achievements are used only for achievement creators and testers.
   */
  cheevos_test_unofficial: boolean;
  /**
   * Enable rewinding. This will take a performance hit when playing, so it is disabled by default.
   */
  rewind_enable: boolean;
  /**
   * Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer.
   * The buffer should be approx. 20MB per minute of buffer time.
   */
  rewind_buffer_size: number;
  /**
   * Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed.
   */
  rewind_granularity: number;
  /**
   * Pause gameplay when window focus is lost.
   */
  pause_nonactive: boolean;
  /**
   * Pause gameplay when controller disconnects.
   */
  pause_on_disconnect: boolean;
  /**
   * Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise.
   * The interval is measured in seconds. A value of 0 disables autosave.
   */
  autosave_interval: string;
  /**
   * Records video after CPU video filter.
   */
  video_post_filter_record: boolean;
  /**
   * Records output of GPU shaded material if available.
   */
  video_gpu_record: boolean;
  /**
   * Screenshots output of GPU shaded material if available.
   */
  video_gpu_screenshot: boolean;
  /**
   * Watch content shader files for changes and auto-apply as necessary.
   */
  video_shader_watch_files: boolean;
  /**
   * Block SRAM from being overwritten when loading save states.
   * Might potentially lead to buggy games.
   */
  block_sram_overwrite: boolean;
  /**
   * When saving a savestate, save state index is automatically increased before
   * it is saved.
   * Also, when loading content, the index will be set to the highest existing index.
   * There is no upper bound on the index.
   */
  savestate_auto_index: boolean;
  /**
   * Slowmotion ratio. When slowmotion, content will slow down by factor.
   */
  slowmotion_ratio: number;
  /**
   * The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content =\> 300 fps cap).
   * RetroArch will go to sleep to ensure that the maximum rate will not be exceeded.
   * Do not rely on this cap to be perfectly accurate.
   * If this is set at 0, then fastforward ratio is unlimited (no FPS cap)
   */
  fastforward_ratio: number;
  /**
   * Enable stdin/network command interface.
   */
  network_cmd_enable: boolean;
  network_cmd_port: number;
  /**
   * Enable stdin/network command interface.
   */
  stdin_cmd_enable: boolean;
  /**
   * Enable Sustained Performance Mode in Android 7.0+
   */
  sustained_performance_mode: boolean;
  /**
   * File format to use when writing playlists to disk
   */
  playlist_use_old_format: boolean;
  /**
   * Keep track of how long each core+content has been running for over time
   */
  content_runtime_log: boolean;
  /**
   */
  vibrate_on_keypress: boolean;
  /**
   * Enable device vibration for supported cores
   */
  enable_device_vibration: boolean;
  /**
   * Enable game mode on supported platforms.
   * Depending on the system, it can result in more stable frame times, less audio
   * crackling, better performance and lower latency. On Linux, Feral GameMode
   * needs to be installed (https://github.com/FeralInteractive/gamemode).
   */
  gamemode_enable: boolean;
}
//#endregion
//#region src/types/retroarch-config/theme.d.ts
interface RetroArchThemeConfig {
  ozone_collapse_sidebar: boolean;
  ozone_menu_color_theme: number;
  ozone_scroll_content_metadata: boolean;
  ozone_sort_after_truncate_playlist_name: boolean;
  ozone_thumbnail_scale_factor: number;
  ozone_truncate_playlist_name: boolean;
  materialui_auto_rotate_nav_bar: boolean;
  materialui_dual_thumbnail_list_view_enable: boolean;
  materialui_icons_enable: boolean;
  materialui_landscape_layout_optimization: number;
  materialui_menu_color_theme: number;
  materialui_menu_transition_animation: number;
  materialui_playlist_icons_enable: boolean;
  materialui_show_nav_bar: boolean;
  materialui_switch_icons: boolean;
  materialui_thumbnail_background_enable: boolean;
  materialui_thumbnail_view_landscape: number;
  materialui_thumbnail_view_portrait: number;
  rgui_aspect_ratio: number;
  rgui_aspect_ratio_lock: number;
  rgui_background_filler_thickness_enable: boolean;
  rgui_border_filler_enable: boolean;
  rgui_border_filler_thickness_enable: boolean;
  rgui_browser_directory: string;
  rgui_config_directory: string;
  rgui_extended_ascii: boolean;
  rgui_inline_thumbnails: boolean;
  rgui_internal_upscale_level: number;
  rgui_menu_color_theme: number;
  rgui_menu_theme_preset: number;
  rgui_particle_effect: number;
  rgui_particle_effect_screensaver: boolean;
  rgui_particle_effect_speed: number;
  rgui_show_start_screen: boolean;
  rgui_swap_thumbnails: boolean;
  rgui_switch_icons: boolean;
  rgui_thumbnail_delay: number;
  rgui_thumbnail_downscaler: number;
  xmb_alpha_factor: number;
  xmb_font: string;
  xmb_layout: number;
  xmb_menu_color_theme: number;
  xmb_shadows_enable: boolean;
  xmb_switch_icons: boolean;
  xmb_theme: number;
  xmb_vertical_thumbnails: boolean;
}
//#endregion
//#region src/types/retroarch-config/video.d.ts
interface RetroArchVideoConfig {
  video_adaptive_vsync: boolean;
  video_allow_rotate: boolean;
  video_aspect_ratio_auto: boolean;
  video_autoswitch_pal_threshold: number;
  video_autoswitch_refresh_rate: number;
  video_context_driver: string;
  video_crop_overscan: boolean;
  video_ctx_scaling: boolean;
  video_disable_composition: boolean;
  video_driver: string;
  video_filter: string;
  video_filter_dir: string;
  video_font_enable: boolean;
  video_font_path: string;
  video_font_size: number;
  video_force_aspect: boolean;
  video_force_srgb_disable: boolean;
  video_frame_delay: number;
  video_frame_delay_auto: boolean;
  video_fullscreen: boolean;
  video_fullscreen_x: number;
  video_fullscreen_y: number;
  video_gpu_record: boolean;
  video_gpu_screenshot: boolean;
  video_hard_sync: boolean;
  video_hard_sync_frames: number;
  video_hdr_display_contrast: number;
  video_hdr_enable: boolean;
  video_hdr_expand_gamut: boolean;
  video_max_frame_latency: number;
  video_max_swapchain_images: number;
  video_message_color: string;
  video_message_pos_x: number;
  video_message_pos_y: number;
  video_monitor_index: number;
  video_msg_bgcolor_blue: number;
  video_msg_bgcolor_enable: boolean;
  video_msg_bgcolor_green: number;
  video_msg_bgcolor_opacity: number;
  video_msg_bgcolor_red: number;
  video_notch_write_over_enable: boolean;
  video_post_filter_record: boolean;
  video_record_config: string;
  video_record_quality: number;
  video_record_scale_factor: number;
  video_record_threads: number;
  video_refresh_rate: number;
  video_rotation: number;
  video_scale: number;
  video_scale_integer: boolean;
  video_scale_integer_overscale: boolean;
  video_shader_delay: number;
  video_shader_dir: string;
  video_shader_enable: boolean;
  video_shader_preset_save_reference_enable: boolean;
  video_shader_remember_last_dir: boolean;
  video_shader_watch_files: boolean;
  video_shared_context: boolean;
  video_smooth: boolean;
  video_stream_config: string;
  video_stream_port: number;
  video_stream_quality: number;
  video_stream_scale_factor: number;
  video_stream_url: string;
  video_swap_interval: number;
  video_threaded: boolean;
  video_vsync: boolean;
  video_waitable_swapchains: boolean;
  video_window_auto_height_max: number;
  video_window_auto_width_max: number;
  video_window_custom_size_enable: boolean;
  video_window_opacity: number;
  video_window_save_positions: boolean;
  video_window_show_decorations: boolean;
  video_windowed_fullscreen: boolean;
  video_windowed_position_height: number;
  video_windowed_position_width: number;
  video_windowed_position_x: number;
  video_windowed_position_y: number;
}
//#endregion
//#region src/types/retroarch-config/index.d.ts
interface RetroArchFullConfig extends RetroArchInputConfig, RetroArchInputPlayerConfig, RetroArchNotificationConfig, RetroArchQuickMenuConfig, RetroArchRewindConfig, RetroArchRunAheadConfig, RetroArchSaveConfig, RetroArchSkeletonConfig, RetroArchThemeConfig, RetroArchVideoConfig {
  fps_update_interval: number;
  frame_time_counter_reset_after_fastforwarding: boolean;
  frame_time_counter_reset_after_load_state: boolean;
  frame_time_counter_reset_after_save_state: boolean;
  frontend_log_level: number;
  game_specific_options: boolean;
  gamma_correction: number;
  global_core_options: boolean;
  quit_press_twice: boolean;
}
/**
 * RetroArch config list.
 * These config fields are just copied from templates so not all options can make effects in browser.
 */
type RetroArchConfig = Partial<RetroArchFullConfig>;
//#endregion
//#region src/types/nostalgist-options.d.ts
interface NostalgistCoreDict {
  /** the name of core */
  name: string;
  /** the resolvable file of core's js file */
  js: ResolvableFileInput;
  /** the resolvable file of core's wasm file */
  wasm: ResolvableFileInput;
}
type NostalgistResolveFileFunction = (file: string, options: NostalgistOptions) => ResolvableFileInput;
interface NostalgistOptions {
  /**
   * The canvas element to use.
   * @defaultValue '' an empty string
   */
  element: HTMLCanvasElement | string;
  /**
   * The style of the canvas element.
   *
   * The CSS rule name should be "camelCase" instead of "kebab-case". For example, `{ backgroundColor: 'black' }` is valid, but `{ background-color: '' }` is not.
   *
   * If the canvas element is created automatically, the style will be
   * ```js
   * {
   *   position: 'fixed',
   *   top: '0',
   *   left: '0',
   *   width: '100%',
   *   height: '100%',
   *   backgroundColor: 'black',
   *   zIndex: '1',
   * }
   * ```
   * otherwise it will be `undefined`.
   */
  style?: Partial<CSSStyleDeclaration>;
  /**
   *
   * The size of the canvas element.
   * If it's `'auto'`, the canvas element will keep its original size, or it's width and height will be updated as specified.
   */
  size?: 'auto' | {
    height: number;
    width: number;
  };
  core: NostalgistCoreDict | string;
  /**
   * The rom needs to be launched.
   *
   * This property can be:
   * + a string.
   * + a [File object](https://developer.mozilla.org/en-US/docs/Web/API/File).
   * + a plain object, with a fileName property and a fileContent property.
   * + an array of above.
   *
   * @example
   * If it's a url, that's saying, it starts with `"http://"` or `"https://"`, a request will be sent to grab its content.
   * ```js
   * const nostalgist = await Nostalgist.launch({
   *   rom: 'https://example.com/contra.nes'
   * })
   * ```
   *
   * @example
   * If it's a normal string, it will be passed to `options.resolveRom`, another function option that should return a [resolvable file](https://nostalgist.js.org/apis/resolvable-file).
   * ```js
   * const nostalgist = await Nostalgist.launch({
   *   rom: 'contra.nes',
   *   resolveRom({ file }) {
   *     return `https://example.com/roms/${file}`
   *   },
   * })
   * ```
   *
   * Bear in mind if you want to load your ROM via url, you should make sure you can access that url by CORS.
   *
   * @example
   * If it's a `File` object, its content and file name will be directly used for emulation.
   * ```js
   * const rom = await showFilePicker()
   * const nostalgist = await Nostalgist.launch({
   *   rom,
   * })
   *
   * ```
   *
   * @example
   * If it's an plain object, here is an example.
   * ```js
   * const fileContent = await fetch('http://example.com/contra.nes')
   * const nostalgist = await Nostalgist.launch({
   *   rom: {
   *     fileName: 'contra.nes',
   *     fileContent,
   *   }
   * })
   * ```
   *
   * @example
   * For some situations, we may need multiple files for emulation. Then we need to pass an array here.
   * ```js
   * const blob = await showFilePicker()
   * const fileContent = await fetch('http://example.com/contra.nes')
   * const nostalgist = await Nostalgist.launch({
   *   rom: ['rom1.bin', blob, {
   *     fileName: 'rom2.bin',
   *     fileContent,
   *   }]
   * })
   * ```
   */
  rom?: ResolvableFileInput | ResolvableFileInputs;
  /**
   * The name of the shader to be used.
   * By default, shaders will be loaded from https://github.com/libretro/glsl-shaders in a loose way, while this can be changed by customizing the `resolveShader` option.
   */
  shader?: string;
  /**
   * The BIOS files needed to be launched with roms.
   *
   * This property can be:
   * + a string
   * + a [File object](https://developer.mozilla.org/en-US/docs/Web/API/File)
   * + an object, with a fileName property and a fileContent property. for example: `{ filename: 'xx.nes', fileContent: someBlob }`
   * + an array of above
   */
  bios?: ResolvableFileInput | ResolvableFileInputs;
  /**
   * The initial state to be loaded after launching.
   */
  state?: ResolvableFileInput;
  /**
   * The initial SRAM to be loaded after launching.
   */
  sram?: ResolvableFileInput;
  /**
   * The type of battery save the core generates.
   */
  sramType?: 'sav' | 'srm';
  respondToGlobalEvents?: boolean;
  /**
   * RetroArch config.
   * Not all options can make effects in browser.
   */
  retroarchConfig: RetroArchConfig;
  /**
   * RetroArch core config.
   * Not all options can make effects in browser.
   */
  retroarchCoreConfig: Record<string, string>;
  /**
   * DO NOT use this option. It's for CI testing purposes only.
   * @internal
   */
  setupEmulatorManually: boolean;
  /**
   * If this is set to true, emulator will not run automatically.
   * To run the emulator, `nostalgist.launchEmulator` should be called later.
   * Default value is `false`.
   */
  runEmulatorManually: boolean;
  /**
   * An option to override the `Module` object for Emscripten. See [Module object](https://emscripten.org/docs/api_reference/module.html).
   *
   * This is a low level option and not well tested, so use it at your own risk.
   */
  emscriptenModule?: RetroArchEmscriptenModuleOptions;
  /**
   * The `AbortSignal` object used for cancelling a launch.
   */
  signal?: AbortSignal;
  cache?: {
    bios?: boolean;
    core?: boolean;
    rom?: boolean;
    shader?: boolean;
    sram?: boolean;
    state?: boolean;
  } | boolean;
  beforeLaunch?: (nostalgist: Nostalgist) => Promise<void> | void;
  onLaunch?: (nostalgist: Nostalgist) => Promise<void> | void;
  resolveBios: NostalgistResolveFileFunction;
  resolveCoreJs: (core: NostalgistOptions['core'], options: NostalgistOptions) => ResolvableFileInput;
  resolveCoreWasm: (core: NostalgistOptions['core'], options: NostalgistOptions) => ResolvableFileInput;
  resolveRom: NostalgistResolveFileFunction;
  resolveShader: (shader: NostalgistOptions['shader'], options: NostalgistOptions) => ResolvableFileInput | ResolvableFileInputs;
  /**
   * @deprecated Use `Nostalgist.prepare` instead.
   */
  waitForInteraction?: (params: {
    done: () => void;
  }) => void;
}
type NostalgistOptionsPartial = Partial<NostalgistOptions>;
type NostalgistLaunchOptions = NostalgistOptionsPartial & Pick<NostalgistOptions, 'core'>;
interface NostalgistLaunchRomObjectOptions extends Omit<NostalgistOptionsPartial, 'core'> {
  rom: ResolvableFileInput | ResolvableFileInputs;
}
type NostalgistLaunchRomOptions = NostalgistLaunchRomObjectOptions | ResolvableFileInput | ResolvableFileInputs;
//#endregion
//#region src/types/retroarch-command.d.ts
type RetroArchCommand = 'CHEAT_INDEX_MINUS' | 'CHEAT_INDEX_PLUS' | 'CHEAT_TOGGLE' | 'DISK_EJECT_TOGGLE' | 'DISK_NEXT' | 'DISK_PREV' | 'FAST_FORWARD_HOLD' | 'FAST_FORWARD' | 'FRAMEADVANCE' | 'FULLSCREEN_TOGGLE' | 'GRAB_MOUSE_TOGGLE' | 'LOAD_STATE' | 'MENU_TOGGLE' | 'MOVIE_RECORD_TOGGLE' | 'MUTE' | 'NETPLAY_FLIP' | 'OVERLAY_NEXT' | 'PAUSE_TOGGLE' | 'QUIT' | 'RESET' | 'REWIND' | 'SAVE_STATE' | 'SCREENSHOT' | 'SHADER_NEXT' | 'SHADER_PREV' | 'SLOWMOTION' | 'STATE_SLOT_MINUS' | 'STATE_SLOT_PLUS' | 'VOLUME_DOWN' | 'VOLUME_UP';
//#endregion
//#region src/classes/emulator-options.d.ts
declare class EmulatorOptions {
  static readonly cacheStorage: {
    bios: Map<NonNullable<ResolvableFileInput | ResolvableFileInputs | undefined>, ResolvableFile[]>;
    core: Map<NonNullable<string | NostalgistCoreDict>, {
      /** the name of core */name: string; /** the core's resolvable js file */
      js: ResolvableFile; /** the core's resolvable wasm file */
      wasm: ResolvableFile;
    }>;
    rom: Map<NonNullable<ResolvableFileInput | ResolvableFileInputs | undefined>, ResolvableFile[]>;
    shader: Map<string, ResolvableFile[]>;
    sram: Map<NonNullable<ResolvableFileInput | undefined>, ResolvableFile | undefined>;
    state: Map<NonNullable<ResolvableFileInput | undefined>, ResolvableFile | undefined>;
  };
  beforeLaunch?: (() => Promise<void> | void) | undefined;
  bios: ResolvableFile[];
  cache: {
    bios: boolean;
    core: boolean;
    rom: boolean;
    shader: boolean;
    sram: boolean;
    state: boolean;
  };
  core: {
    /** the name of core */name: string; /** the core's resolvable js file */
    js: ResolvableFile; /** the core's resolvable wasm file */
    wasm: ResolvableFile;
  };
  element: HTMLCanvasElement;
  /**
   * An option to override the `Module` object for Emscripten. See [Module object](https://emscripten.org/docs/api_reference/module.html).
   *
   * This is a low level option and not well tested, so use it at your own risk.
   */
  emscriptenModule: RetroArchEmscriptenModuleOptions;
  respondToGlobalEvents: boolean;
  rom: ResolvableFile[];
  shader: ResolvableFile[];
  signal?: AbortSignal | undefined;
  /**
   *
   * The size of the canvas element.
   * If it's `'auto'`, the canvas element will keep its original size, or it's width and height will be updated as specified.
   */
  size?: 'auto' | {
    height: number;
    width: number;
  };
  sram?: ResolvableFile | undefined;
  sramType?: 'sav' | 'srm';
  state?: ResolvableFile | undefined;
  waitForInteraction: ((params: {
    done: () => void;
  }) => void) | undefined;
  /**
   * RetroArch config.
   * Not all options can make effects in browser.
   */
  get retroarchConfig(): typeof this.nostalgistOptions.retroarchConfig;
  /**
   * RetroArch core config.
   * Not all options can make effects in browser.
   */
  get retroarchCoreConfig(): typeof this.nostalgistOptions.retroarchCoreConfig;
  get style(): Partial<CSSStyleDeclaration>;
  private loadPromises;
  private readonly nostalgistOptions;
  private constructor();
  static create(options: NostalgistOptions): Promise<EmulatorOptions>;
  static resetCacheStore(): void;
  load(): Promise<void>;
  loadFromCache(): void;
  saveToCache(): void;
  updateSRAM(): Promise<void>;
  updateState(): Promise<void>;
  private getElement;
  private updateBios;
  private updateCore;
  private updateRom;
  private updateShader;
}
//#endregion
//#region src/classes/emulator.d.ts
type GameStatus = 'initial' | 'paused' | 'running' | 'terminated';
type EmulatorEvent = 'beforeLaunch' | 'onLaunch';
interface EmulatorEmscripten {
  AL: any;
  Browser: any;
  exit: (code: number) => void;
  JSEvents: any;
  Module: RetroArchEmscriptenModule;
}
declare class Emulator {
  private blobUrlJs;
  private blobUrlWasm;
  private cachedKeyboardCodes;
  private cachedRetroarchConfigMtime;
  private canvasInitialSize;
  private emscripten;
  private readonly eventListeners;
  private fileSystem;
  private gameStatus;
  private readonly globalDOMEventListeners;
  private readonly messageQueue;
  private readonly options;
  private get coreFullName();
  private get fs();
  private get romBaseName();
  private get sramFileDirectory();
  private get sramFilePath();
  private get sramFileType();
  private get stateFileDirectory();
  private get stateFilePath();
  private get stateThumbnailFilePath();
  constructor(options: EmulatorOptions);
  callCommand(command: string): void;
  exit(statusCode?: number): void;
  getEmscripten(): EmulatorEmscripten;
  getOptions(): EmulatorOptions;
  getStatus(): GameStatus;
  launch(): Promise<void>;
  loadState(state: ResolvableFile): Promise<void>;
  on(event: EmulatorEvent, callback: (...args: unknown[]) => unknown): this;
  pause(): void;
  press(button: string, player?: number, time?: number): Promise<void>;
  pressDown(button: string, player?: number): void;
  pressUp(button: string, player?: number): void;
  resize({
    height,
    width
  }: {
    height: number;
    width: number;
  }): void;
  restart(): void;
  resume(): void;
  saveSRAM(): Promise<Blob>;
  saveState(): Promise<{
    state: Blob;
    thumbnail: Blob | undefined;
  }>;
  screenshot(): Promise<Blob>;
  sendCommand(msg: RetroArchCommand): void;
  setup(): Promise<void>;
  private clearStateFile;
  private fireKeyboardEvent;
  private getCurrentRetroarchConfig;
  private getElementSize;
  private getKeyboardCode;
  private guessScreenshotFileName;
  private keyboardDown;
  private keyboardPress;
  private keyboardUp;
  private postRun;
  private recordGlobalDOMEventListeners;
  private removeGlobalDOMEventListeners;
  private runEventListeners;
  private runMain;
  private setupEmscripten;
  private setupFileSystem;
  private setupRaConfigFiles;
  private setupRaShaderFiles;
  private stdin;
  private updateKeyboardEventHandlers;
}
//#endregion
//#region src/classes/nostalgist.d.ts
declare class Nostalgist {
  static readonly Nostalgist: typeof Nostalgist;
  static readonly vendors: {
    ini: typeof _$ini;
    path: _$path_browserify0.Path;
  };
  private emulator;
  private emulatorOptions;
  private readonly options;
  private constructor();
  static clearCache(): void;
  /**
   * Update the global options for `Nostalgist`, so everytime the `Nostalgist.launch` method or shortcuts like `Nostalgist.nes` is called, the default options specified here will be used.
   *
   * You may want to specify how to resolve ROMs and RetroArch cores here.
   *
   * @see {@link https://nostalgist.js.org/apis/configure/}
   *
   * @example
   * ```js
   * Nostalgist.configure({
   *   resolveRom({ file }) {
   *     return `https://example.com/roms/${file}`
   *   },
   *   // other configuation can also be specified here
   * })
   * ```
   */
  static configure(options: NostalgistOptionsPartial): void;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for GB emulation.
   *
   * It will use mgba as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/gb/}
   */
  static gb(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for GBA emulation.
   *
   * It will use mgba as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/gba/}
   */
  static gba(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for GBC emulation.
   *
   * It will use mgba as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/gbc/}
   */
  static gbc(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  /**
   * Launch an emulator and return a `Promise` of the instance of the emulator.
   *
   * @see {@link https://nostalgist.js.org/apis/launch/}
   *
   * @example
   * A simple example:
   * ```js
   * const nostalgist = await Nostalgist.launch({
   *   core: 'fceumm',
   *   rom: 'flappybird.nes',
   * })
   * ```
   *
   * @example
   * A more complex one:
   * ```js
   * const nostalgist = await Nostalgist.launch({
   *   element: document.querySelector('.emulator-canvas'),
   *   core: 'fbneo',
   *   rom: ['mslug.zip'],
   *   bios: ['neogeo.zip'],
   *   retroarchConfig: {
   *     rewind_enable: true,
   *     savestate_thumbnail_enable: true,
   *   }
   *   runEmulatorManually: false,
   *   resolveCoreJs(core) {
   *     return `https://example.com/core/${core}_libretro.js`
   *   },
   *   resolveCoreWasm(core) {
   *     return `https://example.com/core/${core}_libretro.wasm`
   *   },
   *   resolveRom(file) {
   *     return `https://example.com/roms/${file}`
   *   },
   *   resolveBios(bios) {
   *     return `https://example.com/system/${bios}`
   *   },
   * })
   * ```
   */
  static launch(options: NostalgistLaunchOptions): Promise<Nostalgist>;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for Sega Genesis / Megadrive emulation.
   *
   * It will use genesis_plus_gx as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/megadrive/}
   */
  static megadrive(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for NES emulation.
   *
   * It will use fceumm as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/nes/}
   */
  static nes(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  static prepare(options: NostalgistLaunchOptions): Promise<Nostalgist>;
  /**
   * Reset the global configuation set by `Nostalgist.configure` to default.
   *
   * @see {@link https://nostalgist.js.org/apis/reset-to-default/}
   */
  static resetToDefault(): void;
  /**
   * A shortcut method for Nostalgist.launch method, with some additional default options for SNES emulation.
   *
   * It will use snes9x as the default core for emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/snes/}
   */
  static snes(options: NostalgistLaunchRomOptions): Promise<Nostalgist>;
  private static launchSystem;
  /**
   * Exit the current running game and the emulator. Remove the canvas element used by the emulator if needed.
   *
   * @see {@link https://nostalgist.js.org/apis/exit/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.exit()
   * ```
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * // the canvas element will not be removed
   * nostalgist.exit({ removeCanvas: false })
   * ```
   */
  exit({
    removeCanvas
  }?: {
    removeCanvas?: boolean;
  }): void;
  /**
   * Get the canvas DOM element that the current emulator is using.
   *
   * @see {@link https://nostalgist.js.org/apis/get-canvas/}
   */
  getCanvas(): HTMLCanvasElement;
  /**
   * Get the Emscripten object exposed by RetroArch.
   *
   * @see {@link https://nostalgist.js.org/apis/get-emscripten-module/}
   */
  getEmscripten(): any;
  /**
   * Get the Emscripten AL object exposed by RetroArch.
   *
   * @see {@link https://nostalgist.js.org/apis/get-emscripten-module/}
   */
  getEmscriptenAL(): any;
  /**
   * Get the Emscripten FS object of the current running emulator.
   *
   * @see {@link https://nostalgist.js.org/apis/get-emscripten-fs/}
   */
  getEmscriptenFS(): any;
  /**
   * Get the Emscripten Module object of the current running emulator.
   *
   * @see {@link https://nostalgist.js.org/apis/get-emscripten-module/}
   */
  getEmscriptenModule(): RetroArchEmscriptenModule;
  getEmulator(): Emulator;
  getEmulatorOptions(): EmulatorOptions;
  getOptions(): NostalgistOptions;
  /**
   * Get the status of current emulation.
   *
   * @see {@link https://nostalgist.js.org/apis/get-status/}
   *
   * @returns One of 'initial' | 'paused' | 'running' | 'terminated'
   * @example
   * ```js
   * const nostalgist = await Nostalgist.prepare('flappybird.nes')
   * console.log(nostalgist.getStatus()) // 'initial'
      * await nostalgist.launch()
   * console.log(nostalgist.getStatus()) // 'running'
      * await nostalgist.pause()
   * console.log(nostalgist.getStatus()) // 'paused'
      * nostalgist.exit()
   * console.log(nostalgist.getStatus()) // 'terminated'
   * ```
   */
  getStatus(): "initial" | "paused" | "running" | "terminated";
  /**
   * Launch the emulator, if it's not launched, because of the launch option `runEmulatorManually` being set to `true`.
   * @deprecated Use the `start` method instead.
   * @see {@link https://nostalgist.js.org/apis/launch-emulator/}
   */
  launchEmulator(): Promise<void>;
  /**
   * Load a state for the current running emulator and game.
   *
   * @see {@link https://nostalgist.js.org/apis/load-state/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * // save the state
   * const { state } = await nostalgist.saveState()
   *
   * // load the state
   * await nostalgist.loadState(state)
   * ```
   */
  loadState(state: ResolvableFileInput): Promise<void>;
  /**
   * Pause the current running game.
   *
   * @see {@link https://nostalgist.js.org/apis/pause/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.pause()
   * ```
   */
  pause(): void;
  /**
   * Press a button and then release it programmatically. Analog Joysticks are not supported by now.
   *
   * @see {@link https://nostalgist.js.org/apis/press/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * await nostalgist.press('start')
   * ```
   */
  press(options: {
    button: string;
    player?: number;
    time?: number;
  } | string): Promise<void>;
  /**
   * Press a button programmatically. Analog Joysticks are not supported by now.
   *
   * @see {@link https://nostalgist.js.org/apis/press-down/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.pressDown('start')
   * ```
   */
  pressDown(options: {
    button: string;
    player?: number;
  } | string): void;
  /**
   * Release it programmatically. Analog Joysticks are not supported by now.
   *
   * @see {@link https://nostalgist.js.org/apis/press-up/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.pressUp('start')
   * ```
   */
  pressUp(options: {
    button: string;
    player?: number;
  } | string): void;
  /**
   * Resize the canvas element of the emulator.
   *
   * @see {@link https://nostalgist.js.org/apis/resize/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.resize({ width: 1000, height: 800 })
   * ```
   */
  resize(size: {
    height: number;
    width: number;
  }): void;
  /**
   * Restart the current running game.
   *
   * @see {@link https://nostalgist.js.org/apis/restart/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.restart()
   * ```
   */
  restart(): void;
  /**
   * Resume the current running game, if it has been paused by `pause`.
   *
   * @see {@link https://nostalgist.js.org/apis/resume/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.pause()
   * await new Promise(resolve => setTimeout(resolve, 1000))
   * nostalgist.resume()
   * ```
   */
  resume(): void;
  /**
   * Save the SRAM of the current running game.
   *
   * @see {@link https://nostalgist.js.org/apis/save-sram/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * const sram = await nostalgist.saveSRAM()
   * ```
   */
  saveSRAM(): Promise<Blob>;
  /**
   * Save the state of the current running game.
   *
   * @see {@link https://nostalgist.js.org/apis/save-state/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * // save the state
   * const { state } = await nostalgist.saveState()
   *
   * // load the state
   * await nostalgist.loadState(state)
   * ```
   * @returns
   * A Promise of the state of the current running game.
   *
   * Its type is like `Promise<{ state: Blob, thumbnail: Blob | undefined }>`.
   *
   * If RetroArch is launched with the option `savestate_thumbnail_enable` set to `true`, which is the default value inside Nostalgist.js, then the `thumbnail` will be a `Blob`. Otherwise the `thumbnail` will be `undefined`.
   */
  saveState(): Promise<{
    state: Blob;
    thumbnail: Blob | undefined;
  }>;
  /**
   * Take a screenshot for the current running game.
   *
   * @see {@link https://nostalgist.js.org/apis/screenshot/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * const blob = await nostalgist.screenshot()
   * ```
   */
  screenshot(): Promise<Blob>;
  /**
   * Send a command to RetroArch.
   * The commands are listed here: https://docs.libretro.com/development/retroarch/network-control-interface/#commands .
   * But not all of them are supported inside a browser.
   *
   * @see {@link https://nostalgist.js.org/apis/send-command/}
   *
   * @example
   * ```js
   * const nostalgist = await Nostalgist.nes('flappybird.nes')
   *
   * nostalgist.sendCommand('FAST_FORWARD')
   * ```
   */
  sendCommand(command: RetroArchCommand): void;
  /**
   * Start the emulator if it's not started because of the instance is returned by `Nostalgist.prepare` rather than `Nostalgist.launch`, or the option `runEmulatorManually` for `Nostalgist.launch` being set to `true`.
   *
   * @see {@link https://nostalgist.js.org/apis/start/}
   */
  start(): Promise<void>;
  /**
   * Load options and then launch corresponding emulator if should
   */
  private load;
  private setupEmulator;
}
//#endregion
export { Nostalgist };