sig
  class type ['a] nodeList =
    object
      method item : int -> 'Js.t Js.optdef 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 element =
    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 getAttribute : Js.js_string Js.t -> Js.js_string Js.t Js.meth
      method getElementsByTagName :
        Js.js_string Js.t -> '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 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 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 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
end