// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type LoadingManager

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn LoadingManager::LoadingManager() -> LoadingManager = "loadingManager"

///|
pub extern "js" fn LoadingManager::set_on_load(
  self : LoadingManager,
  callback : () -> Unit,
) -> Unit =
  #| (self, callback) => { self.onLoad = callback; }

///|
pub extern "js" fn LoadingManager::set_on_progress(
  self : LoadingManager,
  callback : (String, Int, Int) -> Unit,
) -> Unit =
  #| (self, callback) => { self.onProgress = callback; }

///|
pub extern "js" fn LoadingManager::set_on_error(
  self : LoadingManager,
  callback : (String) -> Unit,
) -> Unit =
  #| (self, callback) => { self.onError = callback; }

///|
pub extern "js" fn LoadingManager::set_url_modifier(
  self : LoadingManager,
  callback : (String) -> String,
) -> LoadingManager =
  #| (self, callback) => self.setURLModifier(callback)

///|
pub extern "js" fn LoadingManager::set_on_start(
  self : LoadingManager,
  callback : (String, Int, Int) -> Unit,
) -> Unit =
  #| (self, callback) => { self.onStart = callback; }

///|
pub extern "js" fn LoadingManager::item_start(
  self : LoadingManager,
  url : String,
) -> Unit =
  #| (self, url) => self.itemStart(url)

///|
pub extern "js" fn LoadingManager::item_end(
  self : LoadingManager,
  url : String,
) -> Unit =
  #| (self, url) => self.itemEnd(url)

///|
pub extern "js" fn LoadingManager::item_error(
  self : LoadingManager,
  url : String,
) -> Unit =
  #| (self, url) => self.itemError(url)

///|
pub extern "js" fn LoadingManager::resolve_url(
  self : LoadingManager,
  url : String,
) -> String =
  #| (self, url) => self.resolveURL(url)

///|
pub extern "js" fn LoadingManager::abort(
  self : LoadingManager,
) -> LoadingManager =
  #| (self) => self.abort()

///|
extern "js" fn LoadingManager::ffi_get_handler(
  self : LoadingManager,
  file : String,
) -> Nullable[Loader] =
  #| (self, file) => self.getHandler(file)

///|
pub fn LoadingManager::get_handler(
  self : LoadingManager,
  file : String,
) -> Loader? {
  self.ffi_get_handler(file).to_option()
}

///|
extern "js" fn LoadingManager::ffi_add_handler(
  self : LoadingManager,
  pattern : String,
  flags : String,
  loader : Loader,
) -> JsResult[LoadingHandler] =
  #| (self, pattern, flags, loader) => { try { return { ok: true, value: (() => { const regex = new RegExp(pattern, flags); self.addHandler(regex, loader); return { manager: self, pattern: regex }; })() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn LoadingManager::add_handler(
  self : LoadingManager,
  pattern : String,
  flags : String,
  loader : Loader,
) -> LoadingHandler raise LoadError {
  match self.ffi_add_handler(pattern, flags, loader).into_result() {
    Ok(value) => value
    Err(message) => raise LoadError(message)
  }
}

///|
pub extern "js" fn LoadingManager::clear_url_modifier(
  self : LoadingManager,
) -> LoadingManager =
  #| (self) => self.setURLModifier(undefined)