sig
  class type blob =
    object
      method _type : Js.js_string Js.t Js.readonly_prop
      method size : int Js.readonly_prop
      method slice : int -> int -> File.blob Js.meth
      method slice_withContentType :
        int -> int -> Js.js_string Js.t -> File.blob Js.meth
    end
  class type file =
    object
      method _type : Js.js_string Js.t Js.readonly_prop
      method lastModifiedDate : Js.js_string Js.t Js.readonly_prop
      method name : Js.js_string Js.t Js.readonly_prop
      method size : int Js.readonly_prop
      method slice : int -> int -> blob Js.meth
      method slice_withContentType :
        int -> int -> Js.js_string Js.t -> blob Js.meth
    end
  type file_any
  module CoerceTo :
    sig val string : File.file_any -> Js.js_string Js.t Js.Opt.t end
  class type fileList =
    object
      method item : int -> file Js.t Js.opt Js.meth
      method length : int Js.readonly_prop
    end
  class type fileError = object method code : int Js.readonly_prop end
  type readyState = EMPTY | LOADING | DONE
  class type fileReader =
    object ('a)
      method abort : unit Js.meth
      method error : File.fileError Js.t Js.readonly_prop
      method onabort :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onclick :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method ondblclick :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onerror :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeydown :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeypress :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onkeyup :
        ('Js.t, Dom_html.keyboardEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onload :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onloadend :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onloadstart :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmousedown :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmousemove :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseout :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseover :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onmouseup :
        ('Js.t, Dom_html.mouseEvent Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method onprogress :
        ('Js.t, Dom_html.event Js.t) Dom_html.event_listener
        Js.writeonly_prop
      method readAsArrayBuffer : File.blob Js.t -> unit Js.meth
      method readAsBinaryString : File.blob Js.t -> unit Js.meth
      method readAsDataURL : File.blob Js.t -> unit Js.meth
      method readAsText : File.blob Js.t -> unit Js.meth
      method readAsText_withEncoding :
        File.blob Js.t -> Js.js_string Js.t -> unit Js.meth
      method readyState : File.readyState Js.readonly_prop
      method result : File.file_any Js.readonly_prop
    end
  val filename : File.file Js.t -> Js.js_string Js.t
  val fileReader : File.fileReader Js.t Js.constr
  val readAsBinaryString : File.blob Js.t -> Js.js_string Js.t Lwt.t
  val readAsText : File.blob Js.t -> Js.js_string Js.t Lwt.t
  val readAsText_withEncoding :
    File.blob Js.t -> Js.js_string Js.t -> Js.js_string Js.t Lwt.t
  val readAsDataURL : File.blob Js.t -> Js.js_string Js.t Lwt.t
end