sig
  class type ['a] nodeList =
    object
      method item : int -> 'Js.t Js.opt Js.meth
      method length : int Js.readonly_prop
    end
  type nodeType =
      OTHER
    | ELEMENT
    | ATTRIBUTE
    | TEXT
    | CDATA_SECTION
    | ENTITY_REFERENCE
    | ENTITY
    | PROCESSING_INSTRUCTION
    | COMMENT
    | DOCUMENT
    | DOCUMENT_TYPE
    | DOCUMENT_FRAGMENT
    | NOTATION
  class type node =
    object
      method appendChild : Dom.node Js.t -> Dom.node Js.t Js.meth
      method childNodes : Dom.node Dom.nodeList Js.t Js.prop
      method cloneNode : bool Js.t -> Dom.node Js.t Js.meth
      method firstChild : Dom.node Js.t Js.opt Js.prop
      method hasChildNodes : bool Js.t Js.meth
      method insertBefore :
        Dom.node Js.t -> Dom.node Js.t Js.opt -> Dom.node Js.t Js.meth
      method lastChild : Dom.node Js.t Js.opt Js.prop
      method nextSibling : Dom.node Js.t Js.opt Js.prop
      method nodeName : Js.js_string Js.t Js.readonly_prop
      method nodeType : Dom.nodeType Js.readonly_prop
      method nodeValue : Js.js_string Js.t Js.opt Js.readonly_prop
      method parentNode : Dom.node Js.t Js.opt Js.prop
      method previousSibling : Dom.node Js.t Js.opt Js.prop
      method removeChild : Dom.node Js.t -> Dom.node Js.t Js.meth
      method replaceChild :
        Dom.node Js.t -> Dom.node Js.t -> Dom.node Js.t Js.meth
    end
  class type tokenList =
    object
      method add : Js.js_string Js.t -> unit Js.meth
      method contains : Js.js_string Js.t -> bool Js.t Js.meth
      method item : int -> Js.js_string Js.t Js.optdef Js.meth
      method length : int Js.readonly_prop
      method remove : Js.js_string Js.t -> unit Js.meth
      method stringifier : Js.js_string Js.t Js.prop
      method toggle : Js.js_string Js.t -> bool Js.t Js.meth
    end
  class type attr =
    object
      method appendChild : node Js.t -> node Js.t Js.meth
      method childNodes : node nodeList Js.t Js.prop
      method cloneNode : bool Js.t -> node Js.t Js.meth
      method firstChild : node Js.t Js.opt Js.prop
      method hasChildNodes : bool Js.t Js.meth
      method insertBefore :
        node Js.t -> node Js.t Js.opt -> node Js.t Js.meth
      method lastChild : node Js.t Js.opt Js.prop
      method name : Js.js_string Js.t Js.readonly_prop
      method nextSibling : node Js.t Js.opt Js.prop
      method nodeName : Js.js_string Js.t Js.readonly_prop
      method nodeType : nodeType Js.readonly_prop
      method nodeValue : Js.js_string Js.t Js.opt Js.readonly_prop
      method ownerElement : Dom.element Js.t Js.prop
      method parentNode : node Js.t Js.opt Js.prop
      method previousSibling : node Js.t Js.opt Js.prop
      method removeChild : node Js.t -> node Js.t Js.meth
      method replaceChild : node Js.t -> node Js.t -> node Js.t Js.meth
      method specified : bool Js.t Js.readonly_prop
      method value : Js.js_string Js.t Js.prop
    end
  and namedNodeMap =
    object
      method getNamedItem : Js.js_string Js.t -> Dom.node Js.t Js.opt Js.meth
      method item : int -> Dom.node Js.t Js.opt Js.meth
      method length : int Js.readonly_prop
      method removeNamedItem :
        Js.js_string Js.t -> Dom.node Js.t Js.opt Js.meth
      method setNamedItem : Dom.node Js.t -> Dom.node Js.t Js.opt Js.meth
    end
  and element =
    object
      method appendChild : node Js.t -> node Js.t Js.meth
      method attributes : Dom.namedNodeMap Js.t Js.readonly_prop
      method childNodes : node nodeList Js.t Js.prop
      method classList : Dom.tokenList Js.t Js.readonly_prop
      method cloneNode : bool Js.t -> node Js.t Js.meth
      method firstChild : node Js.t Js.opt Js.prop
      method getAttribute :
        Js.js_string Js.t -> Js.js_string Js.t Js.opt Js.meth
      method getElementsByTagName :
        Js.js_string Js.t -> Dom.element Dom.nodeList Js.t Js.meth
      method hasAttribute : Js.js_string Js.t -> bool Js.t Js.meth
      method hasChildNodes : bool Js.t Js.meth
      method insertBefore :
        node Js.t -> node Js.t Js.opt -> node Js.t Js.meth
      method lastChild : node Js.t Js.opt Js.prop
      method nextSibling : node Js.t Js.opt Js.prop
      method nodeName : Js.js_string Js.t Js.readonly_prop
      method nodeType : nodeType Js.readonly_prop
      method nodeValue : Js.js_string Js.t Js.opt Js.readonly_prop
      method parentNode : node Js.t Js.opt Js.prop
      method previousSibling : node Js.t Js.opt Js.prop
      method removeAttribute : Js.js_string Js.t -> unit Js.meth
      method removeChild : node Js.t -> node Js.t Js.meth
      method replaceChild : node Js.t -> node Js.t -> node Js.t Js.meth
      method setAttribute :
        Js.js_string Js.t -> Js.js_string Js.t -> unit Js.meth
      method tagName : Js.js_string Js.t Js.readonly_prop
    end
  class type characterData =
    object
      method appendChild : node Js.t -> node Js.t Js.meth
      method appendData : Js.js_string Js.t -> unit Js.meth
      method childNodes : node nodeList Js.t Js.prop
      method cloneNode : bool Js.t -> node Js.t Js.meth
      method data : Js.js_string Js.t Js.prop
      method deleteData : int -> int -> unit Js.meth
      method firstChild : node Js.t Js.opt Js.prop
      method hasChildNodes : bool Js.t Js.meth
      method insertBefore :
        node Js.t -> node Js.t Js.opt -> node Js.t Js.meth
      method insertData : int -> Js.js_string Js.t -> unit Js.meth
      method lastChild : node Js.t Js.opt Js.prop
      method length : int Js.readonly_prop
      method nextSibling : node Js.t Js.opt Js.prop
      method nodeName : Js.js_string Js.t Js.readonly_prop
      method nodeType : nodeType Js.readonly_prop
      method nodeValue : Js.js_string Js.t Js.opt Js.readonly_prop
      method parentNode : node Js.t Js.opt Js.prop
      method previousSibling : node Js.t Js.opt Js.prop
      method removeChild : node Js.t -> node Js.t Js.meth
      method replaceChild : node Js.t -> node Js.t -> node Js.t Js.meth
      method replaceData : int -> int -> Js.js_string Js.t Js.meth
      method subjs_stringData : int -> int -> Js.js_string Js.t Js.meth
    end
  class type text = characterData
  class type documentFragment = node
  class type ['a] document =
    object
      method adoptNode : Dom.element Js.t -> 'Js.t Js.meth
      method appendChild : node Js.t -> node Js.t Js.meth
      method childNodes : node nodeList Js.t Js.prop
      method cloneNode : bool Js.t -> node Js.t Js.meth
      method createAttribute : Js.js_string Js.t -> Dom.attr Js.t Js.meth
      method createDocumentFragment : Dom.documentFragment Js.t Js.meth
      method createElement : Js.js_string Js.t -> 'Js.t Js.meth
      method createTextNode : Js.js_string Js.t -> Dom.text Js.t Js.meth
      method documentElement : 'Js.t Js.readonly_prop
      method firstChild : node Js.t Js.opt Js.prop
      method getElementById : Js.js_string Js.t -> 'Js.t Js.opt Js.meth
      method getElementsByTagName :
        Js.js_string Js.t -> 'Dom.nodeList Js.t Js.meth
      method hasChildNodes : bool Js.t Js.meth
      method importNode : Dom.element Js.t -> bool Js.t -> 'Js.t Js.meth
      method insertBefore :
        node Js.t -> node Js.t Js.opt -> node Js.t Js.meth
      method lastChild : node Js.t Js.opt Js.prop
      method nextSibling : node Js.t Js.opt Js.prop
      method nodeName : Js.js_string Js.t Js.readonly_prop
      method nodeType : nodeType Js.readonly_prop
      method nodeValue : Js.js_string Js.t Js.opt Js.readonly_prop
      method parentNode : node Js.t Js.opt Js.prop
      method previousSibling : node Js.t Js.opt Js.prop
      method removeChild : node Js.t -> node Js.t Js.meth
      method replaceChild : node Js.t -> node Js.t -> node Js.t Js.meth
    end
  val insertBefore :
    #Dom.node Js.t -> #Dom.node Js.t -> #Dom.node Js.t Js.opt -> unit
  val replaceChild :
    #Dom.node Js.t -> #Dom.node Js.t -> #Dom.node Js.t -> unit
  val removeChild : #Dom.node Js.t -> #Dom.node Js.t -> unit
  val appendChild : #Dom.node Js.t -> #Dom.node Js.t -> unit
  val list_of_nodeList : 'Dom.nodeList Js.t -> 'Js.t list
  type node_type =
      Element of Dom.element Js.t
    | Attr of Dom.attr Js.t
    | Text of Dom.text Js.t
    | Other of Dom.node Js.t
  val nodeType : #Dom.node Js.t -> Dom.node_type
  module CoerceTo :
    sig
      val element : #Dom.node Js.t -> Dom.element Js.t Js.opt
      val text : #Dom.node Js.t -> Dom.text Js.t Js.opt
      val attr : #Dom.node Js.t -> Dom.attr Js.t Js.opt
    end
end