`class type blob = object ... end`
`type 'a make_blob = ?contentType:string -> ?endings:[ `Transparent | `Native ] -> 'a -> blob Js.t`
`val blob_from_string : string make_blob`
`val blob_from_any : [ `blob of blob Js.t | `arrayBuffer of Typed_array.arrayBuffer Js.t | `arrayBufferView of Typed_array.arrayBufferView Js.t | `string of string | `js_string of Js.js_string Js.t ] list make_blob`
`class type file = object ... end`
`type file_any`
`module CoerceTo : sig ... end`
`class type fileList = object ... end`
`class type fileError = object ... end`
`class type 'a progressEvent = object ... end`
`class type progressEventTarget = object ... end`
`type readyState =`

1. `| EMPTY`
2. `| LOADING`
3. `| DONE`

`class type fileReader = object ... end`
`module ReaderEvent : sig ... end`
`val filename : file Js.t -> Js.js_string Js.t`

`filename` handles old firefox without name property

`val fileReader : fileReader Js.t Js.constr`
`val addEventListener : progressEventTarget Js.t as 'a -> 'b Dom.Event.typ -> ('a, 'b) Dom.event_listener -> bool Js.t -> Dom.event_listener_id`

Add an event listener. This function matches the `addEventListener` DOM method, except that it returns an id for removing the listener.