@depup/jsdom 28.1.0-depup.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/LICENSE.txt +22 -0
  2. package/README.md +38 -0
  3. package/changes.json +38 -0
  4. package/lib/api.js +373 -0
  5. package/lib/generated/event-sets.js +115 -0
  6. package/lib/generated/idl/AbortController.js +143 -0
  7. package/lib/generated/idl/AbortSignal.js +249 -0
  8. package/lib/generated/idl/AbstractRange.js +171 -0
  9. package/lib/generated/idl/AddEventListenerOptions.js +53 -0
  10. package/lib/generated/idl/AssignedNodesOptions.js +28 -0
  11. package/lib/generated/idl/Attr.js +219 -0
  12. package/lib/generated/idl/BarProp.js +117 -0
  13. package/lib/generated/idl/BeforeUnloadEvent.js +139 -0
  14. package/lib/generated/idl/BinaryType.js +12 -0
  15. package/lib/generated/idl/Blob.js +253 -0
  16. package/lib/generated/idl/BlobCallback.js +30 -0
  17. package/lib/generated/idl/BlobEvent.js +157 -0
  18. package/lib/generated/idl/BlobEventInit.js +43 -0
  19. package/lib/generated/idl/BlobPropertyBag.js +42 -0
  20. package/lib/generated/idl/CDATASection.js +109 -0
  21. package/lib/generated/idl/CanPlayTypeResult.js +12 -0
  22. package/lib/generated/idl/CharacterData.js +455 -0
  23. package/lib/generated/idl/CloseEvent.js +168 -0
  24. package/lib/generated/idl/CloseEventInit.js +65 -0
  25. package/lib/generated/idl/Comment.js +120 -0
  26. package/lib/generated/idl/CompositionEvent.js +219 -0
  27. package/lib/generated/idl/CompositionEventInit.js +32 -0
  28. package/lib/generated/idl/Crypto.js +148 -0
  29. package/lib/generated/idl/CustomElementConstructor.js +34 -0
  30. package/lib/generated/idl/CustomElementRegistry.js +269 -0
  31. package/lib/generated/idl/CustomEvent.js +206 -0
  32. package/lib/generated/idl/CustomEventInit.js +32 -0
  33. package/lib/generated/idl/DOMException.js +222 -0
  34. package/lib/generated/idl/DOMImplementation.js +237 -0
  35. package/lib/generated/idl/DOMParser.js +140 -0
  36. package/lib/generated/idl/DOMRect.js +276 -0
  37. package/lib/generated/idl/DOMRectInit.js +76 -0
  38. package/lib/generated/idl/DOMRectReadOnly.js +285 -0
  39. package/lib/generated/idl/DOMStringMap.js +299 -0
  40. package/lib/generated/idl/DOMTokenList.js +539 -0
  41. package/lib/generated/idl/DeviceMotionEvent.js +183 -0
  42. package/lib/generated/idl/DeviceMotionEventAcceleration.js +145 -0
  43. package/lib/generated/idl/DeviceMotionEventAccelerationInit.js +61 -0
  44. package/lib/generated/idl/DeviceMotionEventInit.js +70 -0
  45. package/lib/generated/idl/DeviceMotionEventRotationRate.js +145 -0
  46. package/lib/generated/idl/DeviceMotionEventRotationRateInit.js +61 -0
  47. package/lib/generated/idl/DeviceOrientationEvent.js +183 -0
  48. package/lib/generated/idl/DeviceOrientationEventInit.js +80 -0
  49. package/lib/generated/idl/Document.js +4511 -0
  50. package/lib/generated/idl/DocumentFragment.js +336 -0
  51. package/lib/generated/idl/DocumentReadyState.js +12 -0
  52. package/lib/generated/idl/DocumentType.js +254 -0
  53. package/lib/generated/idl/Element.js +3720 -0
  54. package/lib/generated/idl/ElementCreationOptions.js +26 -0
  55. package/lib/generated/idl/ElementDefinitionOptions.js +29 -0
  56. package/lib/generated/idl/ElementInternals.js +2152 -0
  57. package/lib/generated/idl/EndingType.js +12 -0
  58. package/lib/generated/idl/ErrorEvent.js +192 -0
  59. package/lib/generated/idl/ErrorEventInit.js +92 -0
  60. package/lib/generated/idl/Event.js +430 -0
  61. package/lib/generated/idl/EventHandlerNonNull.js +36 -0
  62. package/lib/generated/idl/EventInit.js +58 -0
  63. package/lib/generated/idl/EventListener.js +35 -0
  64. package/lib/generated/idl/EventListenerOptions.js +28 -0
  65. package/lib/generated/idl/EventModifierInit.js +221 -0
  66. package/lib/generated/idl/EventTarget.js +259 -0
  67. package/lib/generated/idl/External.js +130 -0
  68. package/lib/generated/idl/File.js +185 -0
  69. package/lib/generated/idl/FileList.js +298 -0
  70. package/lib/generated/idl/FilePropertyBag.js +33 -0
  71. package/lib/generated/idl/FileReader.js +468 -0
  72. package/lib/generated/idl/FocusEvent.js +144 -0
  73. package/lib/generated/idl/FocusEventInit.js +36 -0
  74. package/lib/generated/idl/FormData.js +468 -0
  75. package/lib/generated/idl/Function.js +42 -0
  76. package/lib/generated/idl/GetRootNodeOptions.js +31 -0
  77. package/lib/generated/idl/HTMLAnchorElement.js +1026 -0
  78. package/lib/generated/idl/HTMLAreaElement.js +825 -0
  79. package/lib/generated/idl/HTMLAudioElement.js +111 -0
  80. package/lib/generated/idl/HTMLBRElement.js +156 -0
  81. package/lib/generated/idl/HTMLBaseElement.js +196 -0
  82. package/lib/generated/idl/HTMLBodyElement.js +880 -0
  83. package/lib/generated/idl/HTMLButtonElement.js +525 -0
  84. package/lib/generated/idl/HTMLCanvasElement.js +307 -0
  85. package/lib/generated/idl/HTMLCollection.js +352 -0
  86. package/lib/generated/idl/HTMLDListElement.js +159 -0
  87. package/lib/generated/idl/HTMLDataElement.js +156 -0
  88. package/lib/generated/idl/HTMLDataListElement.js +126 -0
  89. package/lib/generated/idl/HTMLDetailsElement.js +159 -0
  90. package/lib/generated/idl/HTMLDialogElement.js +159 -0
  91. package/lib/generated/idl/HTMLDirectoryElement.js +159 -0
  92. package/lib/generated/idl/HTMLDivElement.js +156 -0
  93. package/lib/generated/idl/HTMLElement.js +3492 -0
  94. package/lib/generated/idl/HTMLEmbedElement.js +381 -0
  95. package/lib/generated/idl/HTMLFieldSetElement.js +332 -0
  96. package/lib/generated/idl/HTMLFontElement.js +239 -0
  97. package/lib/generated/idl/HTMLFormControlsCollection.js +318 -0
  98. package/lib/generated/idl/HTMLFormElement.js +661 -0
  99. package/lib/generated/idl/HTMLFrameElement.js +513 -0
  100. package/lib/generated/idl/HTMLFrameSetElement.js +711 -0
  101. package/lib/generated/idl/HTMLHRElement.js +323 -0
  102. package/lib/generated/idl/HTMLHeadElement.js +111 -0
  103. package/lib/generated/idl/HTMLHeadingElement.js +156 -0
  104. package/lib/generated/idl/HTMLHtmlElement.js +156 -0
  105. package/lib/generated/idl/HTMLIFrameElement.js +689 -0
  106. package/lib/generated/idl/HTMLImageElement.js +906 -0
  107. package/lib/generated/idl/HTMLInputElement.js +1931 -0
  108. package/lib/generated/idl/HTMLLIElement.js +204 -0
  109. package/lib/generated/idl/HTMLLabelElement.js +182 -0
  110. package/lib/generated/idl/HTMLLegendElement.js +169 -0
  111. package/lib/generated/idl/HTMLLinkElement.js +555 -0
  112. package/lib/generated/idl/HTMLMapElement.js +171 -0
  113. package/lib/generated/idl/HTMLMarqueeElement.js +558 -0
  114. package/lib/generated/idl/HTMLMediaElement.js +900 -0
  115. package/lib/generated/idl/HTMLMenuElement.js +159 -0
  116. package/lib/generated/idl/HTMLMetaElement.js +279 -0
  117. package/lib/generated/idl/HTMLMeterElement.js +368 -0
  118. package/lib/generated/idl/HTMLModElement.js +217 -0
  119. package/lib/generated/idl/HTMLOListElement.js +284 -0
  120. package/lib/generated/idl/HTMLObjectElement.js +945 -0
  121. package/lib/generated/idl/HTMLOptGroupElement.js +200 -0
  122. package/lib/generated/idl/HTMLOptionElement.js +379 -0
  123. package/lib/generated/idl/HTMLOptionsCollection.js +513 -0
  124. package/lib/generated/idl/HTMLOutputElement.js +395 -0
  125. package/lib/generated/idl/HTMLParagraphElement.js +156 -0
  126. package/lib/generated/idl/HTMLParamElement.js +279 -0
  127. package/lib/generated/idl/HTMLPictureElement.js +111 -0
  128. package/lib/generated/idl/HTMLPreElement.js +163 -0
  129. package/lib/generated/idl/HTMLProgressElement.js +232 -0
  130. package/lib/generated/idl/HTMLQuoteElement.js +176 -0
  131. package/lib/generated/idl/HTMLScriptElement.js +472 -0
  132. package/lib/generated/idl/HTMLSelectElement.js +993 -0
  133. package/lib/generated/idl/HTMLSlotElement.js +195 -0
  134. package/lib/generated/idl/HTMLSourceElement.js +340 -0
  135. package/lib/generated/idl/HTMLSpanElement.js +111 -0
  136. package/lib/generated/idl/HTMLStyleElement.js +210 -0
  137. package/lib/generated/idl/HTMLTableCaptionElement.js +156 -0
  138. package/lib/generated/idl/HTMLTableCellElement.js +733 -0
  139. package/lib/generated/idl/HTMLTableColElement.js +376 -0
  140. package/lib/generated/idl/HTMLTableElement.js +802 -0
  141. package/lib/generated/idl/HTMLTableRowElement.js +417 -0
  142. package/lib/generated/idl/HTMLTableSectionElement.js +349 -0
  143. package/lib/generated/idl/HTMLTemplateElement.js +124 -0
  144. package/lib/generated/idl/HTMLTextAreaElement.js +1210 -0
  145. package/lib/generated/idl/HTMLTimeElement.js +156 -0
  146. package/lib/generated/idl/HTMLTitleElement.js +155 -0
  147. package/lib/generated/idl/HTMLTrackElement.js +366 -0
  148. package/lib/generated/idl/HTMLUListElement.js +200 -0
  149. package/lib/generated/idl/HTMLUnknownElement.js +109 -0
  150. package/lib/generated/idl/HTMLVideoElement.js +344 -0
  151. package/lib/generated/idl/HashChangeEvent.js +157 -0
  152. package/lib/generated/idl/HashChangeEventInit.js +50 -0
  153. package/lib/generated/idl/Headers.js +418 -0
  154. package/lib/generated/idl/History.js +266 -0
  155. package/lib/generated/idl/InputEvent.js +168 -0
  156. package/lib/generated/idl/InputEventInit.js +68 -0
  157. package/lib/generated/idl/KeyboardEvent.js +445 -0
  158. package/lib/generated/idl/KeyboardEventInit.js +116 -0
  159. package/lib/generated/idl/Location.js +404 -0
  160. package/lib/generated/idl/MessageEvent.js +317 -0
  161. package/lib/generated/idl/MessageEventInit.js +100 -0
  162. package/lib/generated/idl/MimeType.js +156 -0
  163. package/lib/generated/idl/MimeTypeArray.js +326 -0
  164. package/lib/generated/idl/MouseEvent.js +595 -0
  165. package/lib/generated/idl/MouseEventInit.js +189 -0
  166. package/lib/generated/idl/MutationCallback.js +34 -0
  167. package/lib/generated/idl/MutationObserver.js +178 -0
  168. package/lib/generated/idl/MutationObserverInit.js +121 -0
  169. package/lib/generated/idl/MutationRecord.js +229 -0
  170. package/lib/generated/idl/NamedNodeMap.js +529 -0
  171. package/lib/generated/idl/Navigator.js +326 -0
  172. package/lib/generated/idl/Node.js +765 -0
  173. package/lib/generated/idl/NodeFilter.js +75 -0
  174. package/lib/generated/idl/NodeIterator.js +207 -0
  175. package/lib/generated/idl/NodeList.js +302 -0
  176. package/lib/generated/idl/OnBeforeUnloadEventHandlerNonNull.js +42 -0
  177. package/lib/generated/idl/OnErrorEventHandlerNonNull.js +56 -0
  178. package/lib/generated/idl/PageTransitionEvent.js +144 -0
  179. package/lib/generated/idl/PageTransitionEventInit.js +35 -0
  180. package/lib/generated/idl/Performance.js +142 -0
  181. package/lib/generated/idl/Plugin.js +359 -0
  182. package/lib/generated/idl/PluginArray.js +336 -0
  183. package/lib/generated/idl/PointerEvent.js +324 -0
  184. package/lib/generated/idl/PointerEventInit.js +241 -0
  185. package/lib/generated/idl/PopStateEvent.js +144 -0
  186. package/lib/generated/idl/PopStateEventInit.js +32 -0
  187. package/lib/generated/idl/ProcessingInstruction.js +122 -0
  188. package/lib/generated/idl/ProgressEvent.js +170 -0
  189. package/lib/generated/idl/ProgressEventInit.js +65 -0
  190. package/lib/generated/idl/PromiseRejectionEvent.js +157 -0
  191. package/lib/generated/idl/PromiseRejectionEventInit.js +42 -0
  192. package/lib/generated/idl/RadioNodeList.js +296 -0
  193. package/lib/generated/idl/Range.js +643 -0
  194. package/lib/generated/idl/SVGAnimatedPreserveAspectRatio.js +136 -0
  195. package/lib/generated/idl/SVGAnimatedRect.js +136 -0
  196. package/lib/generated/idl/SVGAnimatedString.js +149 -0
  197. package/lib/generated/idl/SVGBoundingBoxOptions.js +64 -0
  198. package/lib/generated/idl/SVGDefsElement.js +109 -0
  199. package/lib/generated/idl/SVGDescElement.js +109 -0
  200. package/lib/generated/idl/SVGElement.js +3157 -0
  201. package/lib/generated/idl/SVGGElement.js +109 -0
  202. package/lib/generated/idl/SVGGraphicsElement.js +139 -0
  203. package/lib/generated/idl/SVGMetadataElement.js +109 -0
  204. package/lib/generated/idl/SVGNumber.js +132 -0
  205. package/lib/generated/idl/SVGPreserveAspectRatio.js +196 -0
  206. package/lib/generated/idl/SVGRect.js +210 -0
  207. package/lib/generated/idl/SVGSVGElement.js +786 -0
  208. package/lib/generated/idl/SVGStringList.js +511 -0
  209. package/lib/generated/idl/SVGSwitchElement.js +109 -0
  210. package/lib/generated/idl/SVGSymbolElement.js +146 -0
  211. package/lib/generated/idl/SVGTitleElement.js +109 -0
  212. package/lib/generated/idl/Screen.js +180 -0
  213. package/lib/generated/idl/ScrollBehavior.js +12 -0
  214. package/lib/generated/idl/ScrollIntoViewOptions.js +45 -0
  215. package/lib/generated/idl/ScrollLogicalPosition.js +14 -0
  216. package/lib/generated/idl/ScrollOptions.js +30 -0
  217. package/lib/generated/idl/ScrollRestoration.js +12 -0
  218. package/lib/generated/idl/Selection.js +571 -0
  219. package/lib/generated/idl/SelectionMode.js +12 -0
  220. package/lib/generated/idl/ShadowRoot.js +189 -0
  221. package/lib/generated/idl/ShadowRootInit.js +30 -0
  222. package/lib/generated/idl/ShadowRootMode.js +12 -0
  223. package/lib/generated/idl/StaticRange.js +123 -0
  224. package/lib/generated/idl/StaticRangeInit.js +72 -0
  225. package/lib/generated/idl/Storage.js +397 -0
  226. package/lib/generated/idl/StorageEvent.js +318 -0
  227. package/lib/generated/idl/StorageEventInit.js +99 -0
  228. package/lib/generated/idl/StyleSheetList.js +300 -0
  229. package/lib/generated/idl/SubmitEvent.js +144 -0
  230. package/lib/generated/idl/SubmitEventInit.js +36 -0
  231. package/lib/generated/idl/SupportedType.js +18 -0
  232. package/lib/generated/idl/Text.js +170 -0
  233. package/lib/generated/idl/TextDecodeOptions.js +28 -0
  234. package/lib/generated/idl/TextDecoder.js +211 -0
  235. package/lib/generated/idl/TextDecoderOptions.js +43 -0
  236. package/lib/generated/idl/TextEncoder.js +176 -0
  237. package/lib/generated/idl/TextEncoderEncodeIntoResult.js +42 -0
  238. package/lib/generated/idl/TextTrackKind.js +12 -0
  239. package/lib/generated/idl/TouchEvent.js +222 -0
  240. package/lib/generated/idl/TouchEventInit.js +89 -0
  241. package/lib/generated/idl/TransitionEvent.js +170 -0
  242. package/lib/generated/idl/TransitionEventInit.js +65 -0
  243. package/lib/generated/idl/TreeWalker.js +255 -0
  244. package/lib/generated/idl/UIEvent.js +235 -0
  245. package/lib/generated/idl/UIEventInit.js +62 -0
  246. package/lib/generated/idl/ValidityState.js +249 -0
  247. package/lib/generated/idl/VisibilityState.js +12 -0
  248. package/lib/generated/idl/VoidFunction.js +26 -0
  249. package/lib/generated/idl/WebSocket.js +480 -0
  250. package/lib/generated/idl/WheelEvent.js +191 -0
  251. package/lib/generated/idl/WheelEventInit.js +71 -0
  252. package/lib/generated/idl/XMLDocument.js +109 -0
  253. package/lib/generated/idl/XMLHttpRequest.js +663 -0
  254. package/lib/generated/idl/XMLHttpRequestEventTarget.js +334 -0
  255. package/lib/generated/idl/XMLHttpRequestResponseType.js +14 -0
  256. package/lib/generated/idl/XMLHttpRequestUpload.js +109 -0
  257. package/lib/generated/idl/XMLSerializer.js +132 -0
  258. package/lib/generated/idl/utils.js +252 -0
  259. package/lib/generated/js-globals.json +332 -0
  260. package/lib/jsdom/browser/Window.js +952 -0
  261. package/lib/jsdom/browser/default-stylesheet.css +415 -0
  262. package/lib/jsdom/browser/not-implemented.js +20 -0
  263. package/lib/jsdom/browser/parser/html.js +208 -0
  264. package/lib/jsdom/browser/parser/index.js +37 -0
  265. package/lib/jsdom/browser/parser/xml.js +202 -0
  266. package/lib/jsdom/browser/resources/async-resource-queue.js +114 -0
  267. package/lib/jsdom/browser/resources/decompress-interceptor.js +184 -0
  268. package/lib/jsdom/browser/resources/jsdom-dispatcher.js +756 -0
  269. package/lib/jsdom/browser/resources/per-document-resource-loader.js +116 -0
  270. package/lib/jsdom/browser/resources/request-interceptor.js +171 -0
  271. package/lib/jsdom/browser/resources/request-manager.js +33 -0
  272. package/lib/jsdom/browser/resources/resource-queue.js +142 -0
  273. package/lib/jsdom/browser/resources/stream-handler.js +89 -0
  274. package/lib/jsdom/level2/style.js +65 -0
  275. package/lib/jsdom/level3/xpath.js +1875 -0
  276. package/lib/jsdom/living/aborting/AbortController-impl.js +17 -0
  277. package/lib/jsdom/living/aborting/AbortSignal-impl.js +131 -0
  278. package/lib/jsdom/living/attributes/Attr-impl.js +60 -0
  279. package/lib/jsdom/living/attributes/NamedNodeMap-impl.js +78 -0
  280. package/lib/jsdom/living/attributes.js +312 -0
  281. package/lib/jsdom/living/constraint-validation/DefaultConstraintValidation-impl.js +75 -0
  282. package/lib/jsdom/living/constraint-validation/ValidityState-impl.js +66 -0
  283. package/lib/jsdom/living/crypto/Crypto-impl.js +68 -0
  284. package/lib/jsdom/living/cssom/StyleSheetList-impl.js +38 -0
  285. package/lib/jsdom/living/custom-elements/CustomElementRegistry-impl.js +279 -0
  286. package/lib/jsdom/living/custom-elements/ElementInternals-impl.js +56 -0
  287. package/lib/jsdom/living/deviceorientation/DeviceMotionEventAcceleration-impl.js +7 -0
  288. package/lib/jsdom/living/deviceorientation/DeviceMotionEventRotationRate-impl.js +7 -0
  289. package/lib/jsdom/living/documents.js +15 -0
  290. package/lib/jsdom/living/domparsing/DOMParser-impl.js +59 -0
  291. package/lib/jsdom/living/domparsing/InnerHTML-impl.js +30 -0
  292. package/lib/jsdom/living/domparsing/XMLSerializer-impl.js +18 -0
  293. package/lib/jsdom/living/domparsing/parse5-adapter-serialization.js +63 -0
  294. package/lib/jsdom/living/domparsing/serialization.js +36 -0
  295. package/lib/jsdom/living/encoding/TextDecoder-impl.js +25 -0
  296. package/lib/jsdom/living/encoding/TextEncoder-impl.js +26 -0
  297. package/lib/jsdom/living/events/BeforeUnloadEvent-impl.js +12 -0
  298. package/lib/jsdom/living/events/BlobEvent-impl.js +14 -0
  299. package/lib/jsdom/living/events/CloseEvent-impl.js +10 -0
  300. package/lib/jsdom/living/events/CompositionEvent-impl.js +20 -0
  301. package/lib/jsdom/living/events/CustomEvent-impl.js +21 -0
  302. package/lib/jsdom/living/events/DeviceMotionEvent-impl.js +49 -0
  303. package/lib/jsdom/living/events/DeviceOrientationEvent-impl.js +10 -0
  304. package/lib/jsdom/living/events/ErrorEvent-impl.js +14 -0
  305. package/lib/jsdom/living/events/Event-impl.js +195 -0
  306. package/lib/jsdom/living/events/EventModifierMixin-impl.js +24 -0
  307. package/lib/jsdom/living/events/EventTarget-impl.js +438 -0
  308. package/lib/jsdom/living/events/FocusEvent-impl.js +9 -0
  309. package/lib/jsdom/living/events/HashChangeEvent-impl.js +14 -0
  310. package/lib/jsdom/living/events/InputEvent-impl.js +11 -0
  311. package/lib/jsdom/living/events/KeyboardEvent-impl.js +29 -0
  312. package/lib/jsdom/living/events/MessageEvent-impl.js +25 -0
  313. package/lib/jsdom/living/events/MouseEvent-impl.js +72 -0
  314. package/lib/jsdom/living/events/PageTransitionEvent-impl.js +20 -0
  315. package/lib/jsdom/living/events/PointerEvent-impl.js +21 -0
  316. package/lib/jsdom/living/events/PopStateEvent-impl.js +9 -0
  317. package/lib/jsdom/living/events/ProgressEvent-impl.js +14 -0
  318. package/lib/jsdom/living/events/PromiseRejectionEvent-impl.js +14 -0
  319. package/lib/jsdom/living/events/StorageEvent-impl.js +26 -0
  320. package/lib/jsdom/living/events/SubmitEvent-impl.js +13 -0
  321. package/lib/jsdom/living/events/TouchEvent-impl.js +14 -0
  322. package/lib/jsdom/living/events/TransitionEvent-impl.js +10 -0
  323. package/lib/jsdom/living/events/UIEvent-impl.js +43 -0
  324. package/lib/jsdom/living/events/WheelEvent-impl.js +12 -0
  325. package/lib/jsdom/living/fetch/Headers-impl.js +173 -0
  326. package/lib/jsdom/living/fetch/header-list.js +158 -0
  327. package/lib/jsdom/living/fetch/header-types.js +205 -0
  328. package/lib/jsdom/living/fetch/header-utils.js +26 -0
  329. package/lib/jsdom/living/file-api/Blob-impl.js +125 -0
  330. package/lib/jsdom/living/file-api/File-impl.js +12 -0
  331. package/lib/jsdom/living/file-api/FileList-impl.js +15 -0
  332. package/lib/jsdom/living/file-api/FileReader-impl.js +148 -0
  333. package/lib/jsdom/living/geometry/DOMRect-impl.js +39 -0
  334. package/lib/jsdom/living/geometry/DOMRectReadOnly-impl.js +72 -0
  335. package/lib/jsdom/living/helpers/binary-data.js +63 -0
  336. package/lib/jsdom/living/helpers/by-id-cache.js +67 -0
  337. package/lib/jsdom/living/helpers/colors.js +245 -0
  338. package/lib/jsdom/living/helpers/create-element.js +329 -0
  339. package/lib/jsdom/living/helpers/create-event-accessor.js +209 -0
  340. package/lib/jsdom/living/helpers/custom-elements.js +272 -0
  341. package/lib/jsdom/living/helpers/dates-and-times.js +270 -0
  342. package/lib/jsdom/living/helpers/details.js +15 -0
  343. package/lib/jsdom/living/helpers/encoding.js +60 -0
  344. package/lib/jsdom/living/helpers/events.js +24 -0
  345. package/lib/jsdom/living/helpers/focusing.js +104 -0
  346. package/lib/jsdom/living/helpers/form-controls.js +309 -0
  347. package/lib/jsdom/living/helpers/html-constructor.js +78 -0
  348. package/lib/jsdom/living/helpers/internal-constants.js +12 -0
  349. package/lib/jsdom/living/helpers/is-window.js +18 -0
  350. package/lib/jsdom/living/helpers/iterable-weak-set.js +48 -0
  351. package/lib/jsdom/living/helpers/json.js +7 -0
  352. package/lib/jsdom/living/helpers/mutation-observers.js +198 -0
  353. package/lib/jsdom/living/helpers/namespaces.js +16 -0
  354. package/lib/jsdom/living/helpers/node.js +108 -0
  355. package/lib/jsdom/living/helpers/number-and-date-inputs.js +195 -0
  356. package/lib/jsdom/living/helpers/ordered-set.js +104 -0
  357. package/lib/jsdom/living/helpers/page-transition-event.js +9 -0
  358. package/lib/jsdom/living/helpers/runtime-script-errors.js +75 -0
  359. package/lib/jsdom/living/helpers/shadow-dom.js +285 -0
  360. package/lib/jsdom/living/helpers/strings.js +168 -0
  361. package/lib/jsdom/living/helpers/style-rules.js +404 -0
  362. package/lib/jsdom/living/helpers/stylesheets.js +148 -0
  363. package/lib/jsdom/living/helpers/svg/basic-types.js +41 -0
  364. package/lib/jsdom/living/helpers/svg/render.js +46 -0
  365. package/lib/jsdom/living/helpers/system-colors.js +147 -0
  366. package/lib/jsdom/living/helpers/text.js +19 -0
  367. package/lib/jsdom/living/helpers/traversal.js +72 -0
  368. package/lib/jsdom/living/helpers/validate-names.js +65 -0
  369. package/lib/jsdom/living/hr-time/Performance-impl.js +22 -0
  370. package/lib/jsdom/living/interfaces.js +252 -0
  371. package/lib/jsdom/living/mutation-observer/MutationObserver-impl.js +95 -0
  372. package/lib/jsdom/living/mutation-observer/MutationRecord-impl.js +37 -0
  373. package/lib/jsdom/living/navigator/MimeType-impl.js +3 -0
  374. package/lib/jsdom/living/navigator/MimeTypeArray-impl.js +21 -0
  375. package/lib/jsdom/living/navigator/Navigator-impl.js +29 -0
  376. package/lib/jsdom/living/navigator/NavigatorConcurrentHardware-impl.js +8 -0
  377. package/lib/jsdom/living/navigator/NavigatorCookies-impl.js +7 -0
  378. package/lib/jsdom/living/navigator/NavigatorID-impl.js +37 -0
  379. package/lib/jsdom/living/navigator/NavigatorLanguage-impl.js +9 -0
  380. package/lib/jsdom/living/navigator/NavigatorOnLine-impl.js +7 -0
  381. package/lib/jsdom/living/navigator/NavigatorPlugins-impl.js +8 -0
  382. package/lib/jsdom/living/navigator/Plugin-impl.js +3 -0
  383. package/lib/jsdom/living/navigator/PluginArray-impl.js +23 -0
  384. package/lib/jsdom/living/node-document-position.js +10 -0
  385. package/lib/jsdom/living/node-type.js +16 -0
  386. package/lib/jsdom/living/node.js +331 -0
  387. package/lib/jsdom/living/nodes/CDATASection-impl.js +16 -0
  388. package/lib/jsdom/living/nodes/CharacterData-impl.js +118 -0
  389. package/lib/jsdom/living/nodes/ChildNode-impl.js +80 -0
  390. package/lib/jsdom/living/nodes/Comment-impl.js +20 -0
  391. package/lib/jsdom/living/nodes/DOMImplementation-impl.js +120 -0
  392. package/lib/jsdom/living/nodes/DOMStringMap-impl.js +64 -0
  393. package/lib/jsdom/living/nodes/DOMTokenList-impl.js +171 -0
  394. package/lib/jsdom/living/nodes/Document-impl.js +1000 -0
  395. package/lib/jsdom/living/nodes/DocumentFragment-impl.js +44 -0
  396. package/lib/jsdom/living/nodes/DocumentOrShadowRoot-impl.js +28 -0
  397. package/lib/jsdom/living/nodes/DocumentType-impl.js +24 -0
  398. package/lib/jsdom/living/nodes/Element-impl.js +584 -0
  399. package/lib/jsdom/living/nodes/ElementCSSInlineStyle-impl.js +22 -0
  400. package/lib/jsdom/living/nodes/ElementContentEditable-impl.js +7 -0
  401. package/lib/jsdom/living/nodes/GlobalEventHandlers-impl.js +81 -0
  402. package/lib/jsdom/living/nodes/HTMLAnchorElement-impl.js +50 -0
  403. package/lib/jsdom/living/nodes/HTMLAreaElement-impl.js +43 -0
  404. package/lib/jsdom/living/nodes/HTMLAudioElement-impl.js +9 -0
  405. package/lib/jsdom/living/nodes/HTMLBRElement-impl.js +9 -0
  406. package/lib/jsdom/living/nodes/HTMLBaseElement-impl.js +44 -0
  407. package/lib/jsdom/living/nodes/HTMLBodyElement-impl.js +12 -0
  408. package/lib/jsdom/living/nodes/HTMLButtonElement-impl.js +79 -0
  409. package/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js +136 -0
  410. package/lib/jsdom/living/nodes/HTMLCollection-impl.js +96 -0
  411. package/lib/jsdom/living/nodes/HTMLDListElement-impl.js +9 -0
  412. package/lib/jsdom/living/nodes/HTMLDataElement-impl.js +9 -0
  413. package/lib/jsdom/living/nodes/HTMLDataListElement-impl.js +20 -0
  414. package/lib/jsdom/living/nodes/HTMLDetailsElement-impl.js +35 -0
  415. package/lib/jsdom/living/nodes/HTMLDialogElement-impl.js +9 -0
  416. package/lib/jsdom/living/nodes/HTMLDirectoryElement-impl.js +9 -0
  417. package/lib/jsdom/living/nodes/HTMLDivElement-impl.js +9 -0
  418. package/lib/jsdom/living/nodes/HTMLElement-impl.js +211 -0
  419. package/lib/jsdom/living/nodes/HTMLEmbedElement-impl.js +8 -0
  420. package/lib/jsdom/living/nodes/HTMLFieldSetElement-impl.js +43 -0
  421. package/lib/jsdom/living/nodes/HTMLFontElement-impl.js +9 -0
  422. package/lib/jsdom/living/nodes/HTMLFormControlsCollection-impl.js +33 -0
  423. package/lib/jsdom/living/nodes/HTMLFormElement-impl.js +248 -0
  424. package/lib/jsdom/living/nodes/HTMLFrameElement-impl.js +266 -0
  425. package/lib/jsdom/living/nodes/HTMLFrameSetElement-impl.js +12 -0
  426. package/lib/jsdom/living/nodes/HTMLHRElement-impl.js +9 -0
  427. package/lib/jsdom/living/nodes/HTMLHeadElement-impl.js +9 -0
  428. package/lib/jsdom/living/nodes/HTMLHeadingElement-impl.js +9 -0
  429. package/lib/jsdom/living/nodes/HTMLHtmlElement-impl.js +9 -0
  430. package/lib/jsdom/living/nodes/HTMLHyperlinkElementUtils-impl.js +368 -0
  431. package/lib/jsdom/living/nodes/HTMLIFrameElement-impl.js +9 -0
  432. package/lib/jsdom/living/nodes/HTMLImageElement-impl.js +127 -0
  433. package/lib/jsdom/living/nodes/HTMLInputElement-impl.js +1097 -0
  434. package/lib/jsdom/living/nodes/HTMLLIElement-impl.js +9 -0
  435. package/lib/jsdom/living/nodes/HTMLLabelElement-impl.js +94 -0
  436. package/lib/jsdom/living/nodes/HTMLLegendElement-impl.js +18 -0
  437. package/lib/jsdom/living/nodes/HTMLLinkElement-impl.js +107 -0
  438. package/lib/jsdom/living/nodes/HTMLMapElement-impl.js +13 -0
  439. package/lib/jsdom/living/nodes/HTMLMarqueeElement-impl.js +9 -0
  440. package/lib/jsdom/living/nodes/HTMLMediaElement-impl.js +138 -0
  441. package/lib/jsdom/living/nodes/HTMLMenuElement-impl.js +9 -0
  442. package/lib/jsdom/living/nodes/HTMLMetaElement-impl.js +9 -0
  443. package/lib/jsdom/living/nodes/HTMLMeterElement-impl.js +180 -0
  444. package/lib/jsdom/living/nodes/HTMLModElement-impl.js +9 -0
  445. package/lib/jsdom/living/nodes/HTMLOListElement-impl.js +22 -0
  446. package/lib/jsdom/living/nodes/HTMLObjectElement-impl.js +26 -0
  447. package/lib/jsdom/living/nodes/HTMLOptGroupElement-impl.js +9 -0
  448. package/lib/jsdom/living/nodes/HTMLOptionElement-impl.js +146 -0
  449. package/lib/jsdom/living/nodes/HTMLOptionsCollection-impl.js +110 -0
  450. package/lib/jsdom/living/nodes/HTMLOrSVGElement-impl.js +88 -0
  451. package/lib/jsdom/living/nodes/HTMLOutputElement-impl.js +88 -0
  452. package/lib/jsdom/living/nodes/HTMLParagraphElement-impl.js +9 -0
  453. package/lib/jsdom/living/nodes/HTMLParamElement-impl.js +9 -0
  454. package/lib/jsdom/living/nodes/HTMLPictureElement-impl.js +9 -0
  455. package/lib/jsdom/living/nodes/HTMLPreElement-impl.js +9 -0
  456. package/lib/jsdom/living/nodes/HTMLProgressElement-impl.js +72 -0
  457. package/lib/jsdom/living/nodes/HTMLQuoteElement-impl.js +9 -0
  458. package/lib/jsdom/living/nodes/HTMLScriptElement-impl.js +255 -0
  459. package/lib/jsdom/living/nodes/HTMLSelectElement-impl.js +283 -0
  460. package/lib/jsdom/living/nodes/HTMLSlotElement-impl.js +59 -0
  461. package/lib/jsdom/living/nodes/HTMLSourceElement-impl.js +8 -0
  462. package/lib/jsdom/living/nodes/HTMLSpanElement-impl.js +9 -0
  463. package/lib/jsdom/living/nodes/HTMLStyleElement-impl.js +76 -0
  464. package/lib/jsdom/living/nodes/HTMLTableCaptionElement-impl.js +9 -0
  465. package/lib/jsdom/living/nodes/HTMLTableCellElement-impl.js +73 -0
  466. package/lib/jsdom/living/nodes/HTMLTableColElement-impl.js +9 -0
  467. package/lib/jsdom/living/nodes/HTMLTableElement-impl.js +236 -0
  468. package/lib/jsdom/living/nodes/HTMLTableRowElement-impl.js +88 -0
  469. package/lib/jsdom/living/nodes/HTMLTableSectionElement-impl.js +61 -0
  470. package/lib/jsdom/living/nodes/HTMLTemplateElement-impl.js +67 -0
  471. package/lib/jsdom/living/nodes/HTMLTextAreaElement-impl.js +244 -0
  472. package/lib/jsdom/living/nodes/HTMLTimeElement-impl.js +9 -0
  473. package/lib/jsdom/living/nodes/HTMLTitleElement-impl.js +18 -0
  474. package/lib/jsdom/living/nodes/HTMLTrackElement-impl.js +13 -0
  475. package/lib/jsdom/living/nodes/HTMLUListElement-impl.js +9 -0
  476. package/lib/jsdom/living/nodes/HTMLUnknownElement-impl.js +9 -0
  477. package/lib/jsdom/living/nodes/HTMLVideoElement-impl.js +17 -0
  478. package/lib/jsdom/living/nodes/LinkStyle-impl.js +2 -0
  479. package/lib/jsdom/living/nodes/Node-impl.js +1179 -0
  480. package/lib/jsdom/living/nodes/NodeList-impl.js +43 -0
  481. package/lib/jsdom/living/nodes/NonDocumentTypeChildNode-impl.js +28 -0
  482. package/lib/jsdom/living/nodes/NonElementParentNode-impl.js +11 -0
  483. package/lib/jsdom/living/nodes/ParentNode-impl.js +90 -0
  484. package/lib/jsdom/living/nodes/ProcessingInstruction-impl.js +22 -0
  485. package/lib/jsdom/living/nodes/RadioNodeList-impl.js +49 -0
  486. package/lib/jsdom/living/nodes/SVGDefsElement-impl.js +9 -0
  487. package/lib/jsdom/living/nodes/SVGDescElement-impl.js +9 -0
  488. package/lib/jsdom/living/nodes/SVGElement-impl.js +64 -0
  489. package/lib/jsdom/living/nodes/SVGGElement-impl.js +9 -0
  490. package/lib/jsdom/living/nodes/SVGGraphicsElement-impl.js +16 -0
  491. package/lib/jsdom/living/nodes/SVGMetadataElement-impl.js +9 -0
  492. package/lib/jsdom/living/nodes/SVGSVGElement-impl.js +40 -0
  493. package/lib/jsdom/living/nodes/SVGSwitchElement-impl.js +9 -0
  494. package/lib/jsdom/living/nodes/SVGSymbolElement-impl.js +9 -0
  495. package/lib/jsdom/living/nodes/SVGTests-impl.js +42 -0
  496. package/lib/jsdom/living/nodes/SVGTitleElement-impl.js +9 -0
  497. package/lib/jsdom/living/nodes/ShadowRoot-impl.js +41 -0
  498. package/lib/jsdom/living/nodes/Slotable-impl.js +48 -0
  499. package/lib/jsdom/living/nodes/Text-impl.js +96 -0
  500. package/lib/jsdom/living/nodes/WindowEventHandlers-impl.js +14 -0
  501. package/lib/jsdom/living/nodes/XMLDocument-impl.js +4 -0
  502. package/lib/jsdom/living/range/AbstractRange-impl.js +43 -0
  503. package/lib/jsdom/living/range/Range-impl.js +902 -0
  504. package/lib/jsdom/living/range/StaticRange-impl.js +39 -0
  505. package/lib/jsdom/living/range/boundary-point.js +47 -0
  506. package/lib/jsdom/living/selection/Selection-impl.js +358 -0
  507. package/lib/jsdom/living/svg/SVGAnimatedPreserveAspectRatio-impl.js +24 -0
  508. package/lib/jsdom/living/svg/SVGAnimatedRect-impl.js +122 -0
  509. package/lib/jsdom/living/svg/SVGAnimatedString-impl.js +42 -0
  510. package/lib/jsdom/living/svg/SVGListBase.js +195 -0
  511. package/lib/jsdom/living/svg/SVGNumber-impl.js +48 -0
  512. package/lib/jsdom/living/svg/SVGPreserveAspectRatio-impl.js +100 -0
  513. package/lib/jsdom/living/svg/SVGRect-impl.js +143 -0
  514. package/lib/jsdom/living/svg/SVGStringList-impl.js +16 -0
  515. package/lib/jsdom/living/traversal/NodeIterator-impl.js +107 -0
  516. package/lib/jsdom/living/traversal/TreeWalker-impl.js +217 -0
  517. package/lib/jsdom/living/traversal/helpers.js +44 -0
  518. package/lib/jsdom/living/webidl/DOMException-impl.js +46 -0
  519. package/lib/jsdom/living/websockets/WebSocket-impl.js +211 -0
  520. package/lib/jsdom/living/webstorage/Storage-impl.js +102 -0
  521. package/lib/jsdom/living/window/BarProp-impl.js +10 -0
  522. package/lib/jsdom/living/window/External-impl.js +9 -0
  523. package/lib/jsdom/living/window/History-impl.js +148 -0
  524. package/lib/jsdom/living/window/Location-impl.js +227 -0
  525. package/lib/jsdom/living/window/Screen-impl.js +13 -0
  526. package/lib/jsdom/living/window/SessionHistory.js +163 -0
  527. package/lib/jsdom/living/window/navigation.js +87 -0
  528. package/lib/jsdom/living/window-properties.js +241 -0
  529. package/lib/jsdom/living/xhr/FormData-impl.js +191 -0
  530. package/lib/jsdom/living/xhr/XMLHttpRequest-impl.js +1057 -0
  531. package/lib/jsdom/living/xhr/XMLHttpRequestEventTarget-impl.js +17 -0
  532. package/lib/jsdom/living/xhr/XMLHttpRequestUpload-impl.js +4 -0
  533. package/lib/jsdom/living/xhr/multipart-form-data.js +99 -0
  534. package/lib/jsdom/living/xhr/xhr-sync-worker.js +51 -0
  535. package/lib/jsdom/living/xhr/xhr-utils.js +206 -0
  536. package/lib/jsdom/utils.js +105 -0
  537. package/lib/jsdom/virtual-console.js +46 -0
  538. package/package.json +143 -0
@@ -0,0 +1,1000 @@
1
+ "use strict";
2
+
3
+ const { CookieJar } = require("tough-cookie");
4
+ const { DOMSelector } = require("@asamuzakjp/dom-selector");
5
+
6
+ const NodeImpl = require("./Node-impl").implementation;
7
+ const idlUtils = require("../../../generated/idl/utils");
8
+ const NODE_TYPE = require("../node-type");
9
+ const { mixin, memoizeQuery } = require("../../utils");
10
+ const { firstChildWithLocalName, firstChildWithLocalNames, firstDescendantWithLocalName } =
11
+ require("../helpers/traversal");
12
+ const whatwgURL = require("whatwg-url");
13
+ const StyleSheetList = require("../../../generated/idl/StyleSheetList.js");
14
+ const { domSymbolTree } = require("../helpers/internal-constants");
15
+ const eventAccessors = require("../helpers/create-event-accessor");
16
+ const { asciiLowercase, stripAndCollapseASCIIWhitespace } = require("../helpers/strings");
17
+ const { childTextContent } = require("../helpers/text");
18
+ const { HTML_NS, SVG_NS } = require("../helpers/namespaces");
19
+ const DOMException = require("../../../generated/idl/DOMException");
20
+ const { parseIntoDocument } = require("../../browser/parser");
21
+ const History = require("../../../generated/idl/History");
22
+ const Location = require("../../../generated/idl/Location");
23
+ const HTMLCollection = require("../../../generated/idl/HTMLCollection");
24
+ const NodeList = require("../../../generated/idl/NodeList");
25
+ const validateName = require("../helpers/validate-names").name;
26
+ const { validateAndExtract } = require("../helpers/validate-names");
27
+ const { fireAnEvent } = require("../helpers/events");
28
+ const { shadowIncludingInclusiveDescendantsIterator } = require("../helpers/shadow-dom");
29
+ const { enqueueCECallbackReaction } = require("../helpers/custom-elements");
30
+ const { createElement, internalCreateElementNSSteps } = require("../helpers/create-element");
31
+ const IterableWeakSet = require("../helpers/iterable-weak-set");
32
+
33
+ const DocumentOrShadowRootImpl = require("./DocumentOrShadowRoot-impl").implementation;
34
+ const GlobalEventHandlersImpl = require("./GlobalEventHandlers-impl").implementation;
35
+ const NonElementParentNodeImpl = require("./NonElementParentNode-impl").implementation;
36
+ const ParentNodeImpl = require("./ParentNode-impl").implementation;
37
+
38
+ const { clone, listOfElementsWithQualifiedName, listOfElementsWithNamespaceAndLocalName,
39
+ listOfElementsWithClassNames } = require("../node");
40
+ const generatedAttr = require("../../../generated/idl/Attr");
41
+ const Comment = require("../../../generated/idl/Comment");
42
+ const ProcessingInstruction = require("../../../generated/idl/ProcessingInstruction");
43
+ const CDATASection = require("../../../generated/idl/CDATASection");
44
+ const Text = require("../../../generated/idl/Text");
45
+ const DocumentFragment = require("../../../generated/idl/DocumentFragment");
46
+ const DOMImplementation = require("../../../generated/idl/DOMImplementation");
47
+ const TreeWalker = require("../../../generated/idl/TreeWalker");
48
+ const NodeIterator = require("../../../generated/idl/NodeIterator");
49
+ const ShadowRoot = require("../../../generated/idl/ShadowRoot");
50
+ const Range = require("../../../generated/idl/Range");
51
+ const documents = require("../documents.js");
52
+
53
+ const BeforeUnloadEvent = require("../../../generated/idl/BeforeUnloadEvent");
54
+ const CompositionEvent = require("../../../generated/idl/CompositionEvent");
55
+ const CustomEvent = require("../../../generated/idl/CustomEvent");
56
+ const DeviceMotionEvent = require("../../../generated/idl/DeviceMotionEvent");
57
+ const DeviceOrientationEvent = require("../../../generated/idl/DeviceOrientationEvent");
58
+ const Event = require("../../../generated/idl/Event");
59
+ const FocusEvent = require("../../../generated/idl/FocusEvent");
60
+ const HashChangeEvent = require("../../../generated/idl/HashChangeEvent");
61
+ const KeyboardEvent = require("../../../generated/idl/KeyboardEvent");
62
+ const MessageEvent = require("../../../generated/idl/MessageEvent");
63
+ const MouseEvent = require("../../../generated/idl/MouseEvent");
64
+ const StorageEvent = require("../../../generated/idl/StorageEvent");
65
+ const TouchEvent = require("../../../generated/idl/TouchEvent");
66
+ const UIEvent = require("../../../generated/idl/UIEvent");
67
+
68
+ const RequestManager = require("../../browser/resources/request-manager");
69
+ const AsyncResourceQueue = require("../../browser/resources/async-resource-queue");
70
+ const ResourceQueue = require("../../browser/resources/resource-queue");
71
+ const PerDocumentResourceLoader = require("../../browser/resources/per-document-resource-loader");
72
+ const ByIdCache = require("../helpers/by-id-cache");
73
+
74
+ function clearChildNodes(node) {
75
+ for (let child = domSymbolTree.firstChild(node); child; child = domSymbolTree.firstChild(node)) {
76
+ node.removeChild(child);
77
+ }
78
+ }
79
+
80
+ function pad(number) {
81
+ if (number < 10) {
82
+ return "0" + number;
83
+ }
84
+ return number;
85
+ }
86
+
87
+ function toLastModifiedString(date) {
88
+ return pad(date.getMonth() + 1) +
89
+ "/" + pad(date.getDate()) +
90
+ "/" + date.getFullYear() +
91
+ " " + pad(date.getHours()) +
92
+ ":" + pad(date.getMinutes()) +
93
+ ":" + pad(date.getSeconds());
94
+ }
95
+
96
+ const eventInterfaceTable = {
97
+ beforeunloadevent: BeforeUnloadEvent,
98
+ compositionevent: CompositionEvent,
99
+ customevent: CustomEvent,
100
+ devicemotionevent: DeviceMotionEvent,
101
+ deviceorientationevent: DeviceOrientationEvent,
102
+ event: Event,
103
+ events: Event,
104
+ focusevent: FocusEvent,
105
+ hashchangeevent: HashChangeEvent,
106
+ htmlevents: Event,
107
+ keyboardevent: KeyboardEvent,
108
+ messageevent: MessageEvent,
109
+ mouseevent: MouseEvent,
110
+ mouseevents: MouseEvent,
111
+ storageevent: StorageEvent,
112
+ svgevents: Event,
113
+ touchevent: TouchEvent,
114
+ uievent: UIEvent,
115
+ uievents: UIEvent
116
+ };
117
+
118
+ class DocumentImpl extends NodeImpl {
119
+ constructor(globalObject, args, privateData) {
120
+ super(globalObject, args, privateData);
121
+
122
+ this._initGlobalEvents();
123
+
124
+ this._ownerDocument = this;
125
+ this.nodeType = NODE_TYPE.DOCUMENT_NODE;
126
+ if (!privateData.options) {
127
+ privateData.options = {};
128
+ }
129
+ if (!privateData.options.parsingMode) {
130
+ privateData.options.parsingMode = "xml";
131
+ }
132
+ if (!privateData.options.encoding) {
133
+ privateData.options.encoding = "UTF-8";
134
+ }
135
+ if (!privateData.options.contentType) {
136
+ privateData.options.contentType = privateData.options.parsingMode === "xml" ? "application/xml" : "text/html";
137
+ }
138
+
139
+ this._parsingMode = privateData.options.parsingMode;
140
+
141
+ this._implementation = DOMImplementation.createImpl(this._globalObject, [], {
142
+ ownerDocument: this
143
+ });
144
+
145
+ this._defaultView = privateData.options.defaultView || null;
146
+ this._global = privateData.options.global;
147
+ this._byIdCache = new ByIdCache(this);
148
+ this._attached = true;
149
+ this._currentScript = null;
150
+ this._pageShowingFlag = false;
151
+ this._cookieJar = privateData.options.cookieJar;
152
+ this._parseOptions = privateData.options.parseOptions || {};
153
+ this._scriptingDisabled = privateData.options.scriptingDisabled;
154
+ if (this._cookieJar === undefined) {
155
+ this._cookieJar = new CookieJar(null, { looseMode: true });
156
+ }
157
+
158
+ if (this._scriptingDisabled) {
159
+ this._parseOptions.scriptingEnabled = false;
160
+ }
161
+
162
+ this.contentType = privateData.options.contentType;
163
+ this._encoding = privateData.options.encoding;
164
+
165
+ const urlOption = privateData.options.url === undefined ? "about:blank" : privateData.options.url;
166
+ const parsed = whatwgURL.parseURL(urlOption);
167
+ if (parsed === null) {
168
+ throw new TypeError(`Could not parse "${urlOption}" as a URL`);
169
+ }
170
+
171
+ this._URL = parsed;
172
+ this._origin = urlOption === "about:blank" && privateData.options.parentOrigin ?
173
+ privateData.options.parentOrigin :
174
+ whatwgURL.serializeURLOrigin(this._URL);
175
+
176
+ this._location = Location.createImpl(this._globalObject, [], { relevantDocument: this });
177
+ this._history = History.createImpl(this._globalObject, [], {
178
+ window: this._defaultView,
179
+ document: this,
180
+ actAsIfLocationReloadCalled: () => this._location.reload()
181
+ });
182
+
183
+ this._workingNodeIterators = new IterableWeakSet();
184
+
185
+ this._referrer = privateData.options.referrer || "";
186
+ this._lastModified = toLastModifiedString(privateData.options.lastModified || new Date());
187
+ this._asyncQueue = new AsyncResourceQueue();
188
+ this._queue = new ResourceQueue({ asyncQueue: this._asyncQueue, paused: false });
189
+ this._deferQueue = new ResourceQueue({ paused: true });
190
+ this._requestManager = new RequestManager();
191
+ this._currentDocumentReadiness = privateData.options.readyState || "loading";
192
+
193
+ this._lastFocusedElement = null;
194
+
195
+ this._resourceLoader = new PerDocumentResourceLoader(this);
196
+
197
+ // Each Document in a browsing context can also have a latest entry. This is the entry for that Document
198
+ // to which the browsing context's session history was most recently traversed. When a Document is created,
199
+ // it initially has no latest entry.
200
+ this._latestEntry = null;
201
+
202
+ // https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#throw-on-dynamic-markup-insertion-counter
203
+ this._throwOnDynamicMarkupInsertionCounter = 0;
204
+
205
+ // Create DOMSelector instance
206
+ this._domSelector = new DOMSelector(this._globalObject, this._ownerDocument, {
207
+ domSymbolTree,
208
+ idlUtils
209
+ });
210
+
211
+ // Cache of computed element styles
212
+ this._styleCache = new WeakMap();
213
+
214
+ // Cache of document base URL
215
+ this._baseURLCache = null;
216
+ this._baseURLSerializedCache = null;
217
+ }
218
+
219
+ _clearBaseURLCache() {
220
+ this._baseURLCache = null;
221
+ this._baseURLSerializedCache = null;
222
+ }
223
+
224
+ // https://html.spec.whatwg.org/multipage/infrastructure.html#document-base-url
225
+ baseURL() {
226
+ if (this._baseURLCache) {
227
+ return this._baseURLCache;
228
+ }
229
+
230
+ const firstBase = this.querySelector("base[href]");
231
+
232
+ this._baseURLCache = firstBase === null ?
233
+ this._fallbackBaseURL() :
234
+ this._frozenBaseURL(firstBase, this._fallbackBaseURL());
235
+ return this._baseURLCache;
236
+ }
237
+
238
+ baseURLSerialized() {
239
+ if (this._baseURLSerializedCache) {
240
+ return this._baseURLSerializedCache;
241
+ }
242
+
243
+ const result = whatwgURL.serializeURL(this.baseURL());
244
+ this._baseURLSerializedCache = result;
245
+ return result;
246
+ }
247
+
248
+ // https://html.spec.whatwg.org/#encoding-parsing-a-url
249
+ encodingParseAURL(url) {
250
+ return whatwgURL.parseURL(url, { baseURL: this.baseURL(), encoding: this._encoding });
251
+ }
252
+
253
+ // https://html.spec.whatwg.org/#frozen-base-url
254
+ _frozenBaseURL(baseElement, fallbackBaseURL) {
255
+ // The spec is eager (setting the frozen base URL when things change); we are lazy (getting it when we need to).
256
+ //
257
+ // There is a slight difference, which is when history.pushState() is involved. The frozen base URL does not get
258
+ // updated in response to history.pushState() per spec, but since we're lazy, it will get updated.
259
+ //
260
+ // The test in to-port-to-wpts/history.js checks for the current jsdom behavior (which is incorrect).
261
+ // We could make it pass by not invalidating the base URL cache, actually. But that would just make the fallback
262
+ // base URL case use the stale base URL.
263
+ //
264
+ // TODO: implement, with tests for all code paths, the spec's behavior.
265
+
266
+ const baseHrefAttribute = baseElement.getAttributeNS(null, "href");
267
+ const result = whatwgURL.parseURL(baseHrefAttribute, { baseURL: fallbackBaseURL });
268
+ return result === null ? fallbackBaseURL : result;
269
+ }
270
+
271
+ // https://html.spec.whatwg.org/#fallback-base-url
272
+ _fallbackBaseURL() {
273
+ if (this.URL === "about:blank" && this._defaultView &&
274
+ this._defaultView._parent !== this._defaultView) {
275
+ const parentDocument = idlUtils.implForWrapper(this._defaultView._parent._document);
276
+ return parentDocument.baseURL();
277
+ }
278
+
279
+ return this._URL;
280
+ }
281
+
282
+ _getTheParent(event) {
283
+ if (event.type === "load" || !this._defaultView) {
284
+ return null;
285
+ }
286
+
287
+ return idlUtils.implForWrapper(this._defaultView);
288
+ }
289
+
290
+ get compatMode() {
291
+ return this._parsingMode === "xml" || this.doctype ? "CSS1Compat" : "BackCompat";
292
+ }
293
+ get charset() {
294
+ return this._encoding;
295
+ }
296
+ get characterSet() {
297
+ return this._encoding;
298
+ }
299
+ get inputEncoding() {
300
+ return this._encoding;
301
+ }
302
+ get doctype() {
303
+ for (const childNode of domSymbolTree.childrenIterator(this)) {
304
+ if (childNode.nodeType === NODE_TYPE.DOCUMENT_TYPE_NODE) {
305
+ return childNode;
306
+ }
307
+ }
308
+ return null;
309
+ }
310
+ get URL() {
311
+ return whatwgURL.serializeURL(this._URL);
312
+ }
313
+ get documentURI() {
314
+ return whatwgURL.serializeURL(this._URL);
315
+ }
316
+ get location() {
317
+ return this._defaultView ? this._location : null;
318
+ }
319
+
320
+ // https://dom.spec.whatwg.org/#dom-document-documentelement
321
+ get documentElement() {
322
+ for (const childNode of domSymbolTree.childrenIterator(this)) {
323
+ if (childNode.nodeType === NODE_TYPE.ELEMENT_NODE) {
324
+ return childNode;
325
+ }
326
+ }
327
+
328
+ return null;
329
+ }
330
+
331
+ get implementation() {
332
+ return this._implementation;
333
+ }
334
+ set implementation(implementation) {
335
+ this._implementation = implementation;
336
+ }
337
+
338
+ get defaultView() {
339
+ return this._defaultView;
340
+ }
341
+
342
+ get currentScript() {
343
+ return this._currentScript;
344
+ }
345
+
346
+ get readyState() {
347
+ return this._currentDocumentReadiness;
348
+ }
349
+
350
+ set readyState(state) {
351
+ this._currentDocumentReadiness = state;
352
+ fireAnEvent("readystatechange", this);
353
+ }
354
+
355
+ hasFocus() {
356
+ return Boolean(this._lastFocusedElement);
357
+ }
358
+
359
+ _descendantRemoved(parent, child) {
360
+ if (child.tagName === "STYLE") {
361
+ this.styleSheets._remove(child.sheet);
362
+ }
363
+
364
+ super._descendantRemoved(parent, child);
365
+ }
366
+
367
+ write(...args) {
368
+ let text = "";
369
+ for (let i = 0; i < args.length; ++i) {
370
+ text += args[i];
371
+ }
372
+
373
+ if (this._parsingMode === "xml") {
374
+ throw DOMException.create(this._globalObject, [
375
+ "Cannot use document.write on XML documents",
376
+ "InvalidStateError"
377
+ ]);
378
+ }
379
+
380
+ if (this._throwOnDynamicMarkupInsertionCounter > 0) {
381
+ throw DOMException.create(this._globalObject, [
382
+ "Cannot use document.write while a custom element upgrades",
383
+ "InvalidStateError"
384
+ ]);
385
+ }
386
+
387
+ if (this._writeAfterElement) {
388
+ // If called from an script element directly (during the first tick),
389
+ // the new elements are inserted right after that element.
390
+ const tempDiv = this.createElement("div");
391
+ tempDiv.innerHTML = text;
392
+
393
+ let child = tempDiv.firstChild;
394
+ let previous = this._writeAfterElement;
395
+ const parent = this._writeAfterElement.parentNode;
396
+
397
+ while (child) {
398
+ const node = child;
399
+ child = child.nextSibling;
400
+
401
+ node._isMovingDueToDocumentWrite = true; // hack for script execution
402
+ parent.insertBefore(node, previous.nextSibling);
403
+ node._isMovingDueToDocumentWrite = false;
404
+
405
+ previous = node;
406
+ }
407
+ } else if (this.readyState === "loading") {
408
+ // During page loading, document.write appends to the current element
409
+ // Find the last child that has been added to the document.
410
+ if (this.lastChild) {
411
+ let node = this;
412
+ while (node.lastChild && node.lastChild.nodeType === NODE_TYPE.ELEMENT_NODE) {
413
+ node = node.lastChild;
414
+ }
415
+ node.innerHTML = text;
416
+ } else {
417
+ clearChildNodes(this);
418
+ parseIntoDocument(text, this);
419
+ }
420
+ } else if (text) {
421
+ clearChildNodes(this);
422
+ parseIntoDocument(text, this);
423
+ }
424
+ }
425
+
426
+ writeln(...args) {
427
+ this.write(...args, "\n");
428
+ }
429
+
430
+ // This is implemented separately for Document (which has a _byIdCache) and DocumentFragment (which does not).
431
+ getElementById(id) {
432
+ return this._byIdCache.get(id);
433
+ }
434
+
435
+ get referrer() {
436
+ return this._referrer || "";
437
+ }
438
+ get lastModified() {
439
+ return this._lastModified;
440
+ }
441
+ get images() {
442
+ return this.getElementsByTagName("IMG");
443
+ }
444
+ get embeds() {
445
+ return this.getElementsByTagName("EMBED");
446
+ }
447
+ get plugins() {
448
+ return this.embeds;
449
+ }
450
+ get links() {
451
+ return HTMLCollection.createImpl(this._globalObject, [], {
452
+ element: this,
453
+ query: () => domSymbolTree.treeToArray(this, {
454
+ filter: node => (node._localName === "a" || node._localName === "area") &&
455
+ node.hasAttributeNS(null, "href") &&
456
+ node._namespaceURI === HTML_NS
457
+ })
458
+ });
459
+ }
460
+ get forms() {
461
+ return this.getElementsByTagName("FORM");
462
+ }
463
+ get scripts() {
464
+ return this.getElementsByTagName("SCRIPT");
465
+ }
466
+ get anchors() {
467
+ return HTMLCollection.createImpl(this._globalObject, [], {
468
+ element: this,
469
+ query: () => domSymbolTree.treeToArray(this, {
470
+ filter: node => node._localName === "a" &&
471
+ node.hasAttributeNS(null, "name") &&
472
+ node._namespaceURI === HTML_NS
473
+ })
474
+ });
475
+ }
476
+
477
+ // The applets attribute must return an
478
+ // HTMLCollection rooted at the Document node,
479
+ // whose filter matches nothing.
480
+ // (It exists for historical reasons.)
481
+ get applets() {
482
+ return HTMLCollection.createImpl(this._globalObject, [], {
483
+ element: this,
484
+ query: () => []
485
+ });
486
+ }
487
+
488
+ open() {
489
+ let child = domSymbolTree.firstChild(this);
490
+ while (child) {
491
+ this.removeChild(child);
492
+ child = domSymbolTree.firstChild(this);
493
+ }
494
+ this._modified();
495
+ return this;
496
+ }
497
+ close(noQueue) {
498
+ // In some cases like when creating an empty iframe, I want to emit the
499
+ // events right away to avoid problems if later I asign the property src.
500
+ if (noQueue) {
501
+ this.readyState = "complete";
502
+
503
+ fireAnEvent("DOMContentLoaded", this, undefined, { bubbles: true });
504
+ fireAnEvent("load", this);
505
+
506
+ return;
507
+ }
508
+ this._queue.resume();
509
+
510
+ const dummyPromise = Promise.resolve();
511
+
512
+ const onDOMContentLoad = () => {
513
+ const doc = this;
514
+ function dispatchEvent() {
515
+ // https://html.spec.whatwg.org/#the-end
516
+ doc.readyState = "interactive";
517
+ fireAnEvent("DOMContentLoaded", doc, undefined, { bubbles: true });
518
+ }
519
+
520
+ return new Promise(resolve => {
521
+ if (!this._deferQueue.tail) {
522
+ dispatchEvent();
523
+ resolve();
524
+ return;
525
+ }
526
+
527
+ this._deferQueue.setListener(() => {
528
+ dispatchEvent();
529
+ resolve();
530
+ });
531
+
532
+ this._deferQueue.resume();
533
+ });
534
+ };
535
+
536
+ const onLoad = () => {
537
+ const doc = this;
538
+ function dispatchEvent() {
539
+ doc.readyState = "complete";
540
+ fireAnEvent("load", doc);
541
+ }
542
+
543
+ return new Promise(resolve => {
544
+ if (this._asyncQueue.count() === 0) {
545
+ dispatchEvent();
546
+ resolve();
547
+ return;
548
+ }
549
+
550
+ this._asyncQueue.setListener(() => {
551
+ dispatchEvent();
552
+ resolve();
553
+ });
554
+ });
555
+ };
556
+
557
+ this._queue.push(dummyPromise, onDOMContentLoad, null);
558
+ // Set the readyState to 'complete' once all resources are loaded.
559
+ // As a side-effect the document's load-event will be dispatched.
560
+ this._queue.push(dummyPromise, onLoad, null, true);
561
+ }
562
+
563
+ getElementsByName(elementName) {
564
+ return NodeList.createImpl(this._globalObject, [], {
565
+ element: this,
566
+ query: () => domSymbolTree.treeToArray(this, {
567
+ filter: node => node.getAttributeNS && node.getAttributeNS(null, "name") === elementName
568
+ })
569
+ });
570
+ }
571
+
572
+ get title() {
573
+ const { documentElement } = this;
574
+ let value = "";
575
+
576
+ if (documentElement && documentElement._localName === "svg") {
577
+ const svgTitleElement = firstChildWithLocalName(documentElement, "title", SVG_NS);
578
+
579
+ if (svgTitleElement) {
580
+ value = childTextContent(svgTitleElement);
581
+ }
582
+ } else {
583
+ const titleElement = firstDescendantWithLocalName(this, "title");
584
+
585
+ if (titleElement) {
586
+ value = childTextContent(titleElement);
587
+ }
588
+ }
589
+
590
+ value = stripAndCollapseASCIIWhitespace(value);
591
+
592
+ return value;
593
+ }
594
+
595
+ set title(value) {
596
+ const { documentElement } = this;
597
+ let element;
598
+
599
+ if (documentElement && documentElement._localName === "svg") {
600
+ element = firstChildWithLocalName(documentElement, "title", SVG_NS);
601
+
602
+ if (!element) {
603
+ element = this.createElementNS(SVG_NS, "title");
604
+
605
+ this._insert(element, documentElement.firstChild);
606
+ }
607
+
608
+ element.textContent = value;
609
+ } else if (documentElement && documentElement._namespaceURI === HTML_NS) {
610
+ const titleElement = firstDescendantWithLocalName(this, "title");
611
+ const headElement = this.head;
612
+
613
+ if (titleElement === null && headElement === null) {
614
+ return;
615
+ }
616
+
617
+ if (titleElement !== null) {
618
+ element = titleElement;
619
+ } else {
620
+ element = this.createElement("title");
621
+ headElement._append(element);
622
+ }
623
+
624
+ element.textContent = value;
625
+ }
626
+ }
627
+
628
+ get dir() {
629
+ return this.documentElement ? this.documentElement.dir : "";
630
+ }
631
+ set dir(value) {
632
+ if (this.documentElement) {
633
+ this.documentElement.dir = value;
634
+ }
635
+ }
636
+
637
+ get head() {
638
+ return this.documentElement ? firstChildWithLocalName(this.documentElement, "head") : null;
639
+ }
640
+
641
+ get body() {
642
+ const { documentElement } = this;
643
+ if (!documentElement || documentElement._localName !== "html" ||
644
+ documentElement._namespaceURI !== HTML_NS) {
645
+ return null;
646
+ }
647
+
648
+ return firstChildWithLocalNames(this.documentElement, new Set(["body", "frameset"]));
649
+ }
650
+
651
+ set body(value) {
652
+ if (value === null ||
653
+ value._namespaceURI !== HTML_NS ||
654
+ (value._localName !== "body" && value._localName !== "frameset")) {
655
+ throw DOMException.create(this._globalObject, [
656
+ "Cannot set the body to null or a non-body/frameset element",
657
+ "HierarchyRequestError"
658
+ ]);
659
+ }
660
+
661
+ const bodyElement = this.body;
662
+ if (value === bodyElement) {
663
+ return;
664
+ }
665
+
666
+ if (bodyElement !== null) {
667
+ bodyElement.parentNode._replace(value, bodyElement);
668
+ return;
669
+ }
670
+
671
+ const { documentElement } = this;
672
+ if (documentElement === null) {
673
+ throw DOMException.create(this._globalObject, [
674
+ "Cannot set the body when there is no document element",
675
+ "HierarchyRequestError"
676
+ ]);
677
+ }
678
+
679
+ documentElement._append(value);
680
+ }
681
+
682
+ _runPreRemovingSteps(oldNode) {
683
+ // https://html.spec.whatwg.org/#focus-fixup-rule
684
+ if (oldNode === this.activeElement) {
685
+ this._lastFocusedElement = this.body;
686
+ }
687
+ for (const activeNodeIterator of this._workingNodeIterators) {
688
+ activeNodeIterator._preRemovingSteps(oldNode);
689
+ }
690
+ }
691
+
692
+ createEvent(type) {
693
+ const typeLower = type.toLowerCase();
694
+ const eventWrapper = eventInterfaceTable[typeLower] || null;
695
+
696
+ if (!eventWrapper) {
697
+ throw DOMException.create(this._globalObject, [
698
+ "The provided event type (\"" + type + "\") is invalid",
699
+ "NotSupportedError"
700
+ ]);
701
+ }
702
+
703
+ const impl = eventWrapper.createImpl(this._globalObject, [""]);
704
+ impl._initializedFlag = false;
705
+ return impl;
706
+ }
707
+
708
+ createRange() {
709
+ return Range.createImpl(this._globalObject, [], {
710
+ start: { node: this, offset: 0 },
711
+ end: { node: this, offset: 0 }
712
+ });
713
+ }
714
+
715
+ createProcessingInstruction(target, data) {
716
+ validateName(this._globalObject, target);
717
+
718
+ if (data.includes("?>")) {
719
+ throw DOMException.create(this._globalObject, [
720
+ "Processing instruction data cannot contain the string \"?>\"",
721
+ "InvalidCharacterError"
722
+ ]);
723
+ }
724
+
725
+ return ProcessingInstruction.createImpl(this._globalObject, [], {
726
+ ownerDocument: this,
727
+ target,
728
+ data
729
+ });
730
+ }
731
+
732
+ // https://dom.spec.whatwg.org/#dom-document-createcdatasection
733
+ createCDATASection(data) {
734
+ if (this._parsingMode === "html") {
735
+ throw DOMException.create(this._globalObject, [
736
+ "Cannot create CDATA sections in HTML documents",
737
+ "NotSupportedError"
738
+ ]);
739
+ }
740
+
741
+ if (data.includes("]]>")) {
742
+ throw DOMException.create(this._globalObject, [
743
+ "CDATA section data cannot contain the string \"]]>\"",
744
+ "InvalidCharacterError"
745
+ ]);
746
+ }
747
+
748
+ return CDATASection.createImpl(this._globalObject, [], {
749
+ ownerDocument: this,
750
+ data
751
+ });
752
+ }
753
+
754
+ createTextNode(data) {
755
+ return Text.createImpl(this._globalObject, [], {
756
+ ownerDocument: this,
757
+ data
758
+ });
759
+ }
760
+
761
+ createComment(data) {
762
+ return Comment.createImpl(this._globalObject, [], {
763
+ ownerDocument: this,
764
+ data
765
+ });
766
+ }
767
+
768
+ // https://dom.spec.whatwg.org/#dom-document-createelement
769
+ createElement(localName, options) {
770
+ validateName(this._globalObject, localName);
771
+
772
+ if (this._parsingMode === "html") {
773
+ localName = asciiLowercase(localName);
774
+ }
775
+
776
+ let isValue = null;
777
+ if (options && options.is !== undefined) {
778
+ isValue = options.is;
779
+ }
780
+
781
+ const namespace = this._parsingMode === "html" || this.contentType === "application/xhtml+xml" ? HTML_NS : null;
782
+
783
+ return createElement(this, localName, namespace, null, isValue, true);
784
+ }
785
+
786
+ // https://dom.spec.whatwg.org/#dom-document-createelementns
787
+ createElementNS(namespace, qualifiedName, options) {
788
+ return internalCreateElementNSSteps(this, namespace, qualifiedName, options);
789
+ }
790
+
791
+ createDocumentFragment() {
792
+ return DocumentFragment.createImpl(this._globalObject, [], { ownerDocument: this });
793
+ }
794
+
795
+ createAttribute(localName) {
796
+ validateName(this._globalObject, localName);
797
+
798
+ if (this._parsingMode === "html") {
799
+ localName = asciiLowercase(localName);
800
+ }
801
+
802
+ return this._createAttribute({ localName });
803
+ }
804
+
805
+ createAttributeNS(namespace, name) {
806
+ if (namespace === undefined) {
807
+ namespace = null;
808
+ }
809
+ namespace = namespace !== null ? String(namespace) : namespace;
810
+
811
+ const extracted = validateAndExtract(this._globalObject, namespace, name);
812
+ return this._createAttribute({
813
+ namespace: extracted.namespace,
814
+ namespacePrefix: extracted.prefix,
815
+ localName: extracted.localName
816
+ });
817
+ }
818
+
819
+ // Using this helper function rather than directly calling generatedAttr.createImpl may be preferred in some files,
820
+ // to avoid introducing a potentially cyclic dependency on generated/Attr.js.
821
+ _createAttribute({
822
+ localName,
823
+ value,
824
+ namespace,
825
+ namespacePrefix
826
+ }) {
827
+ return generatedAttr.createImpl(this._globalObject, [], {
828
+ localName,
829
+ value,
830
+ namespace,
831
+ namespacePrefix,
832
+ ownerDocument: this
833
+ });
834
+ }
835
+
836
+ createTreeWalker(root, whatToShow, filter) {
837
+ return TreeWalker.createImpl(this._globalObject, [], { root, whatToShow, filter });
838
+ }
839
+
840
+ createNodeIterator(root, whatToShow, filter) {
841
+ const nodeIterator = NodeIterator.createImpl(this._globalObject, [], { root, whatToShow, filter });
842
+ this._workingNodeIterators.add(nodeIterator);
843
+ return nodeIterator;
844
+ }
845
+
846
+ importNode(node, deep) {
847
+ if (node.nodeType === NODE_TYPE.DOCUMENT_NODE) {
848
+ throw DOMException.create(this._globalObject, [
849
+ "Cannot import a document node",
850
+ "NotSupportedError"
851
+ ]);
852
+ } else if (ShadowRoot.isImpl(node)) {
853
+ throw DOMException.create(this._globalObject, [
854
+ "Cannot adopt a shadow root",
855
+ "NotSupportedError"
856
+ ]);
857
+ }
858
+
859
+ return clone(node, this, deep);
860
+ }
861
+
862
+ // https://dom.spec.whatwg.org/#dom-document-adoptnode
863
+ adoptNode(node) {
864
+ if (node.nodeType === NODE_TYPE.DOCUMENT_NODE) {
865
+ throw DOMException.create(this._globalObject, [
866
+ "Cannot adopt a document node",
867
+ "NotSupportedError"
868
+ ]);
869
+ } else if (ShadowRoot.isImpl(node)) {
870
+ throw DOMException.create(this._globalObject, [
871
+ "Cannot adopt a shadow root",
872
+ "HierarchyRequestError"
873
+ ]);
874
+ }
875
+
876
+ this._adoptNode(node);
877
+
878
+ return node;
879
+ }
880
+
881
+ // https://dom.spec.whatwg.org/#concept-node-adopt
882
+ _adoptNode(node) {
883
+ const newDocument = this;
884
+ const oldDocument = node._ownerDocument;
885
+
886
+ const parent = domSymbolTree.parent(node);
887
+ if (parent) {
888
+ parent._remove(node);
889
+ }
890
+
891
+ if (oldDocument !== newDocument) {
892
+ for (const inclusiveDescendant of shadowIncludingInclusiveDescendantsIterator(node)) {
893
+ inclusiveDescendant._ownerDocument = newDocument;
894
+ }
895
+
896
+ for (const inclusiveDescendant of shadowIncludingInclusiveDescendantsIterator(node)) {
897
+ if (inclusiveDescendant._ceState === "custom") {
898
+ enqueueCECallbackReaction(inclusiveDescendant, "adoptedCallback", [
899
+ idlUtils.wrapperForImpl(oldDocument),
900
+ idlUtils.wrapperForImpl(newDocument)
901
+ ]);
902
+ }
903
+ }
904
+
905
+ for (const inclusiveDescendant of shadowIncludingInclusiveDescendantsIterator(node)) {
906
+ if (inclusiveDescendant._adoptingSteps) {
907
+ inclusiveDescendant._adoptingSteps(oldDocument);
908
+ }
909
+ }
910
+ }
911
+ }
912
+
913
+ get cookie() {
914
+ return this._cookieJar.getCookieStringSync(this.URL, { http: false });
915
+ }
916
+ set cookie(cookieStr) {
917
+ cookieStr = String(cookieStr);
918
+ this._cookieJar.setCookieSync(cookieStr, this.URL, {
919
+ http: false,
920
+ ignoreError: true
921
+ });
922
+ }
923
+
924
+ // The clear(), captureEvents(), and releaseEvents() methods must do nothing
925
+ clear() {}
926
+
927
+ captureEvents() {}
928
+
929
+ releaseEvents() {}
930
+
931
+ get styleSheets() {
932
+ if (!this._styleSheets) {
933
+ this._styleSheets = StyleSheetList.createImpl(this._globalObject);
934
+ }
935
+
936
+ // TODO: each style and link element should register its sheet on creation
937
+ // and remove it on removal.
938
+ return this._styleSheets;
939
+ }
940
+
941
+ get hidden() {
942
+ if (this._defaultView && this._defaultView._pretendToBeVisual) {
943
+ return false;
944
+ }
945
+
946
+ return true;
947
+ }
948
+
949
+ get visibilityState() {
950
+ if (this._defaultView && this._defaultView._pretendToBeVisual) {
951
+ return "visible";
952
+ }
953
+
954
+ return "prerender";
955
+ }
956
+
957
+ // https://w3c.github.io/selection-api/#extensions-to-document-interface
958
+ getSelection() {
959
+ return this._defaultView ? this._defaultView._selection : null;
960
+ }
961
+
962
+ // Needed to ensure that the resulting document has the correct prototype chain:
963
+ // https://dom.spec.whatwg.org/#concept-node-clone says "that implements the same interfaces as node".
964
+ _cloneDocument() {
965
+ const copy = documents.createImpl(
966
+ this._globalObject,
967
+ {
968
+ contentType: this.contentType,
969
+ encoding: this._encoding,
970
+ parsingMode: this._parsingMode
971
+ }
972
+ );
973
+
974
+ copy._URL = this._URL;
975
+ copy._origin = this._origin;
976
+ return copy;
977
+ }
978
+ }
979
+
980
+ eventAccessors.createEventAccessor(DocumentImpl.prototype, "readystatechange");
981
+ mixin(DocumentImpl.prototype, DocumentOrShadowRootImpl.prototype);
982
+ mixin(DocumentImpl.prototype, GlobalEventHandlersImpl.prototype);
983
+ mixin(DocumentImpl.prototype, NonElementParentNodeImpl.prototype);
984
+ mixin(DocumentImpl.prototype, ParentNodeImpl.prototype);
985
+
986
+ DocumentImpl.prototype.getElementsByTagName = memoizeQuery(function (qualifiedName) {
987
+ return listOfElementsWithQualifiedName(qualifiedName, this);
988
+ });
989
+
990
+ DocumentImpl.prototype.getElementsByTagNameNS = memoizeQuery(function (namespace, localName) {
991
+ return listOfElementsWithNamespaceAndLocalName(namespace, localName, this);
992
+ });
993
+
994
+ DocumentImpl.prototype.getElementsByClassName = memoizeQuery(function getElementsByClassName(classNames) {
995
+ return listOfElementsWithClassNames(classNames, this);
996
+ });
997
+
998
+ module.exports = {
999
+ implementation: DocumentImpl
1000
+ };