@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,148 @@
1
+ "use strict";
2
+ const DOMException = require("../../../generated/idl/DOMException");
3
+ const { serializeURL } = require("whatwg-url");
4
+
5
+ // https://html.spec.whatwg.org/#history-3
6
+ exports.implementation = class HistoryImpl {
7
+ constructor(globalObject, args, privateData) {
8
+ this._window = privateData.window;
9
+ this._document = privateData.document;
10
+ this._actAsIfLocationReloadCalled = privateData.actAsIfLocationReloadCalled;
11
+ this._state = null;
12
+
13
+ this._globalObject = globalObject;
14
+ }
15
+
16
+ _guardAgainstInactiveDocuments() {
17
+ if (!this._window) {
18
+ throw DOMException.create(this._globalObject, [
19
+ "History object is associated with a document that is not fully active.",
20
+ "SecurityError"
21
+ ]);
22
+ }
23
+ }
24
+
25
+ get length() {
26
+ this._guardAgainstInactiveDocuments();
27
+
28
+ return this._window._sessionHistory.length;
29
+ }
30
+
31
+ get state() {
32
+ this._guardAgainstInactiveDocuments();
33
+
34
+ return this._state;
35
+ }
36
+
37
+ go(delta) {
38
+ this._guardAgainstInactiveDocuments();
39
+
40
+ if (delta === 0) {
41
+ // When the go(delta) method is invoked, if delta is zero, the user agent must act as
42
+ // if the location.reload() method was called instead.
43
+ this._actAsIfLocationReloadCalled();
44
+ } else {
45
+ // Otherwise, the user agent must traverse the history by a delta whose value is delta
46
+ this._window._sessionHistory.traverseByDelta(delta);
47
+ }
48
+ }
49
+
50
+ back() {
51
+ this.go(-1);
52
+ }
53
+
54
+ forward() {
55
+ this.go(+1);
56
+ }
57
+
58
+ pushState(data, unused, url) {
59
+ this._sharedPushAndReplaceState(data, url, "push");
60
+ }
61
+ replaceState(data, unused, url) {
62
+ this._sharedPushAndReplaceState(data, url, "replace");
63
+ }
64
+
65
+ // https://html.spec.whatwg.org/#shared-history-push/replace-state-steps
66
+ _sharedPushAndReplaceState(data, url, historyHandling) {
67
+ this._guardAgainstInactiveDocuments();
68
+
69
+ // TODO structured clone data
70
+
71
+ let newURL = this._document._URL;
72
+ if (url !== null && url.length > 0) {
73
+ newURL = this._document.encodingParseAURL(url);
74
+
75
+ if (newURL === null) {
76
+ throw DOMException.create(this._globalObject, [
77
+ `Could not parse url argument "${url}" to ${historyHandling}State() against base URL ` +
78
+ `"${this._document.baseURLSerialized()}".`,
79
+ "SecurityError"
80
+ ]);
81
+ }
82
+
83
+ if (!canHaveItsURLRewritten(this._document, newURL)) {
84
+ throw DOMException.create(this._globalObject, [
85
+ `${historyHandling}State() cannot update history to the URL ${serializeURL(newURL)}.`,
86
+ "SecurityError"
87
+ ]);
88
+ }
89
+ }
90
+
91
+ // What follows is very unlike the spec's URL and history update steps. Maybe if we implement real session
92
+ // history/navigation, we can fix that.
93
+
94
+ if (historyHandling === "push") {
95
+ this._window._sessionHistory.removeAllEntriesAfterCurrentEntry();
96
+
97
+ this._window._sessionHistory.clearHistoryTraversalTasks();
98
+
99
+ const newEntry = {
100
+ document: this._document,
101
+ stateObject: data,
102
+ url: newURL
103
+ };
104
+ this._window._sessionHistory.addEntryAfterCurrentEntry(newEntry);
105
+ this._window._sessionHistory.updateCurrentEntry(newEntry);
106
+ } else {
107
+ const { currentEntry } = this._window._sessionHistory;
108
+ currentEntry.stateObject = data;
109
+ currentEntry.url = newURL;
110
+ }
111
+
112
+ // TODO: If the current entry in the session history represents a non-GET request
113
+ // (e.g. it was the result of a POST submission) then update it to instead represent
114
+ // a GET request.
115
+
116
+ this._document._URL = newURL;
117
+ this._document._clearBaseURLCache();
118
+
119
+ // arguably it's a bit odd that the state and latestEntry do not belong to the SessionHistory
120
+ // but the spec gives them to "History" and "Document" respecively.
121
+ this._state = data; // TODO clone again!! O_o
122
+ this._document._latestEntry = this._window._sessionHistory.currentEntry;
123
+ }
124
+ };
125
+
126
+ function canHaveItsURLRewritten(document, targetURL) {
127
+ const documentURL = document._URL;
128
+
129
+ if (targetURL.scheme !== documentURL.scheme || targetURL.username !== documentURL.username ||
130
+ targetURL.password !== documentURL.password || targetURL.host !== documentURL.host ||
131
+ targetURL.port !== documentURL.port) {
132
+ return false;
133
+ }
134
+
135
+ if (targetURL.scheme === "https" || targetURL.scheme === "http") {
136
+ return true;
137
+ }
138
+
139
+ if (targetURL.scheme === "file" && targetURL.path !== documentURL.path) {
140
+ return false;
141
+ }
142
+
143
+ if (targetURL.path.join("/") !== documentURL.path.join("/") || targetURL.query !== documentURL.query) {
144
+ return false;
145
+ }
146
+
147
+ return true;
148
+ }
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ const whatwgURL = require("whatwg-url");
3
+ const DOMException = require("../../../generated/idl/DOMException");
4
+ const { navigate } = require("./navigation");
5
+
6
+ // Not implemented: use of entry settings object's API base URL in href setter, assign, and replace. Instead we just
7
+ // use the document base URL. The difference matters in the case of cross-frame calls.
8
+
9
+ exports.implementation = class LocationImpl {
10
+ constructor(globalObject, args, privateData) {
11
+ this._relevantDocument = privateData.relevantDocument;
12
+ this.url = null;
13
+
14
+ this._globalObject = globalObject;
15
+ }
16
+
17
+ get _url() {
18
+ return this._relevantDocument._URL;
19
+ }
20
+
21
+ _locationObjectSetterNavigate(url) {
22
+ // Not implemented: extra steps here to determine replacement flag.
23
+
24
+ return this._locationObjectNavigate(url);
25
+ }
26
+
27
+ _locationObjectNavigate(url, { replacement = false } = {}) {
28
+ // Not implemented: the setup for calling navigate, which doesn't apply to our stub navigate anyway.
29
+
30
+ navigate(this._relevantDocument._defaultView, url, { replacement, exceptionsEnabled: true });
31
+ }
32
+
33
+ toString() {
34
+ return this.href;
35
+ }
36
+
37
+ get href() {
38
+ return whatwgURL.serializeURL(this._url);
39
+ }
40
+ set href(v) {
41
+ const newURL = whatwgURL.parseURL(v, { baseURL: this._relevantDocument.baseURL() });
42
+ if (newURL === null) {
43
+ throw new TypeError(`Could not parse "${v}" as a URL`);
44
+ }
45
+
46
+ this._locationObjectSetterNavigate(newURL);
47
+ }
48
+
49
+ get origin() {
50
+ return whatwgURL.serializeURLOrigin(this._url);
51
+ }
52
+
53
+ get protocol() {
54
+ return this._url.scheme + ":";
55
+ }
56
+ set protocol(v) {
57
+ const copyURL = { ...this._url };
58
+
59
+ const possibleFailure = whatwgURL.basicURLParse(v + ":", { url: copyURL, stateOverride: "scheme start" });
60
+ if (possibleFailure === null) {
61
+ throw new TypeError(`Could not parse the URL after setting the procol to "${v}"`);
62
+ }
63
+
64
+ if (copyURL.scheme !== "http" && copyURL.scheme !== "https") {
65
+ return;
66
+ }
67
+
68
+ this._locationObjectSetterNavigate(copyURL);
69
+ }
70
+
71
+ get host() {
72
+ const url = this._url;
73
+
74
+ if (url.host === null) {
75
+ return "";
76
+ }
77
+ if (url.port === null) {
78
+ return whatwgURL.serializeHost(url.host);
79
+ }
80
+
81
+ return whatwgURL.serializeHost(url.host) + ":" + whatwgURL.serializeInteger(url.port);
82
+ }
83
+ set host(v) {
84
+ const copyURL = { ...this._url };
85
+
86
+ if (whatwgURL.hasAnOpaquePath(copyURL)) {
87
+ return;
88
+ }
89
+
90
+ whatwgURL.basicURLParse(v, { url: copyURL, stateOverride: "host" });
91
+
92
+ this._locationObjectSetterNavigate(copyURL);
93
+ }
94
+
95
+ get hostname() {
96
+ if (this._url.host === null) {
97
+ return "";
98
+ }
99
+
100
+ return whatwgURL.serializeHost(this._url.host);
101
+ }
102
+ set hostname(v) {
103
+ const copyURL = { ...this._url };
104
+
105
+ if (whatwgURL.hasAnOpaquePath(copyURL)) {
106
+ return;
107
+ }
108
+
109
+ whatwgURL.basicURLParse(v, { url: copyURL, stateOverride: "hostname" });
110
+
111
+ this._locationObjectSetterNavigate(copyURL);
112
+ }
113
+
114
+ get port() {
115
+ if (this._url.port === null) {
116
+ return "";
117
+ }
118
+
119
+ return whatwgURL.serializeInteger(this._url.port);
120
+ }
121
+ set port(v) {
122
+ const copyURL = { ...this._url };
123
+
124
+ if (whatwgURL.cannotHaveAUsernamePasswordPort(copyURL)) {
125
+ return;
126
+ }
127
+
128
+ whatwgURL.basicURLParse(v, { url: copyURL, stateOverride: "port" });
129
+
130
+ this._locationObjectSetterNavigate(copyURL);
131
+ }
132
+
133
+ get pathname() {
134
+ return whatwgURL.serializePath(this._url);
135
+ }
136
+ set pathname(v) {
137
+ const copyURL = { ...this._url };
138
+
139
+ if (whatwgURL.hasAnOpaquePath(copyURL)) {
140
+ return;
141
+ }
142
+
143
+ copyURL.path = [];
144
+ whatwgURL.basicURLParse(v, { url: copyURL, stateOverride: "path start" });
145
+
146
+ this._locationObjectSetterNavigate(copyURL);
147
+ }
148
+
149
+ get search() {
150
+ if (this._url.query === null || this._url.query === "") {
151
+ return "";
152
+ }
153
+
154
+ return "?" + this._url.query;
155
+ }
156
+ set search(v) {
157
+ const copyURL = { ...this._url };
158
+
159
+ if (v === "") {
160
+ copyURL.query = null;
161
+ } else {
162
+ const input = v[0] === "?" ? v.substring(1) : v;
163
+ copyURL.query = "";
164
+ whatwgURL.basicURLParse(input, {
165
+ url: copyURL,
166
+ stateOverride: "query",
167
+ encodingOverride: this._relevantDocument.charset
168
+ });
169
+ }
170
+
171
+ this._locationObjectSetterNavigate(copyURL);
172
+ }
173
+
174
+ get hash() {
175
+ if (this._url.fragment === null || this._url.fragment === "") {
176
+ return "";
177
+ }
178
+
179
+ return "#" + this._url.fragment;
180
+ }
181
+ set hash(v) {
182
+ const copyURL = { ...this._url };
183
+
184
+ const input = v[0] === "#" ? v.substring(1) : v;
185
+ copyURL.fragment = "";
186
+ whatwgURL.basicURLParse(input, { url: copyURL, stateOverride: "fragment" });
187
+
188
+ if (copyURL.fragment === this._url.fragment) {
189
+ return;
190
+ }
191
+
192
+ this._locationObjectSetterNavigate(copyURL);
193
+ }
194
+
195
+ assign(url) {
196
+ // Should be entry settings object; oh well
197
+ const parsedURL = this._relevantDocument.encodingParseAURL(url);
198
+
199
+ if (parsedURL === null) {
200
+ throw DOMException.create(this._globalObject, [
201
+ `Could not resolve the given string "${url}" relative to the base URL "${this._relevantDocument.URL}"`,
202
+ "SyntaxError"
203
+ ]);
204
+ }
205
+
206
+ this._locationObjectNavigate(parsedURL);
207
+ }
208
+
209
+ replace(url) {
210
+ // Should be entry settings object; oh well
211
+ const parsedURL = this._relevantDocument.encodingParseAURL(url);
212
+
213
+ if (parsedURL === null) {
214
+ throw DOMException.create(this._globalObject, [
215
+ `Could not resolve the given string "${url}" relative to the base URL "${this._relevantDocument.URL}"`,
216
+ "SyntaxError"
217
+ ]);
218
+ }
219
+
220
+ this._locationObjectNavigate(parsedURL, { replacement: true });
221
+ }
222
+
223
+ reload() {
224
+ const flags = { replace: true, reloadTriggered: true, exceptionsEnabled: true };
225
+ navigate(this._relevantDocument._defaultView, this._url, flags);
226
+ }
227
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ // https://drafts.csswg.org/cssom-view-1/#the-screen-interface
4
+ class ScreenImpl {}
5
+
6
+ ScreenImpl.prototype.availWidth = 0;
7
+ ScreenImpl.prototype.availHeight = 0;
8
+ ScreenImpl.prototype.width = 0;
9
+ ScreenImpl.prototype.height = 0;
10
+ ScreenImpl.prototype.colorDepth = 24;
11
+ ScreenImpl.prototype.pixelDepth = 24;
12
+
13
+ exports.implementation = ScreenImpl;
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ const whatwgURL = require("whatwg-url");
3
+ const HashChangeEvent = require("../../../generated/idl/HashChangeEvent.js");
4
+ const PopStateEvent = require("../../../generated/idl/PopStateEvent.js");
5
+ const notImplemented = require("../../browser/not-implemented.js");
6
+ const idlUtils = require("../../../generated/idl/utils.js");
7
+ const { fireAnEvent } = require("../helpers/events");
8
+
9
+ // https://html.spec.whatwg.org/#session-history
10
+ class SessionHistory {
11
+ constructor(initialEntry, window) {
12
+ this._window = window;
13
+ this._windowImpl = idlUtils.implForWrapper(window);
14
+ this._historyTraversalQueue = new Set();
15
+ this._entries = [initialEntry];
16
+ this._currentIndex = 0;
17
+ }
18
+
19
+ _queueHistoryTraversalTask(fn) {
20
+ const timeoutId = this._window.setTimeout(() => {
21
+ this._historyTraversalQueue.delete(timeoutId);
22
+ fn();
23
+ }, 0);
24
+
25
+ this._historyTraversalQueue.add(timeoutId);
26
+ }
27
+
28
+ clearHistoryTraversalTasks() {
29
+ for (const timeoutId of this._historyTraversalQueue) {
30
+ this._window.clearTimeout(timeoutId);
31
+ }
32
+ this._historyTraversalQueue.clear();
33
+ }
34
+
35
+ get length() {
36
+ return this._entries.length;
37
+ }
38
+
39
+ get currentEntry() {
40
+ return this._entries[this._currentIndex];
41
+ }
42
+
43
+ // https://html.spec.whatwg.org/#dom-history-pushstate
44
+ removeAllEntriesAfterCurrentEntry() {
45
+ this._entries.splice(this._currentIndex + 1, Infinity);
46
+ }
47
+
48
+ // https://html.spec.whatwg.org/#traverse-the-history-by-a-delta
49
+ traverseByDelta(delta) {
50
+ this._queueHistoryTraversalTask(() => {
51
+ const newIndex = this._currentIndex + delta;
52
+ if (newIndex < 0 || newIndex >= this.length) {
53
+ return;
54
+ }
55
+
56
+ const specifiedEntry = this._entries[newIndex];
57
+
58
+ // Not implemented: unload a document guard
59
+
60
+ // Not clear that this should be queued. html/browsers/history/the-history-interface/004.html can be fixed
61
+ // by removing the queue, but doing so breaks some tests in history.js that also pass in browsers.
62
+ this._queueHistoryTraversalTask(() => {
63
+ // If there is an ongoing attempt to navigate specified browsing context that has not yet matured,
64
+ // then cancel that attempt to navigate the browsing context.
65
+
66
+ // Doing this seems to break tests involving navigating via push/pop state and via fragments. I think this
67
+ // is because these navigations should already count as having "matured" because the document is not changing.
68
+
69
+ // this.clearHistoryTraversalTasks();
70
+
71
+ if (specifiedEntry.document !== this.currentEntry.document) {
72
+ // TODO: unload the active document with the recycle parameter set to false
73
+ notImplemented(this._window, "traversing history to another Document");
74
+ }
75
+ this.traverseHistory(specifiedEntry);
76
+ });
77
+ });
78
+ }
79
+
80
+ // https://html.spec.whatwg.org/#traverse-the-history
81
+ traverseHistory(specifiedEntry, flags = {}) {
82
+ if (!specifiedEntry.document) {
83
+ // If entry no longer holds a Document object, then navigate the browsing context to entry's URL
84
+ // to perform an entry update of entry, and abort these steps
85
+ notImplemented(this._window, "traversing the history to an entry that no longer holds a Document");
86
+ }
87
+ // Not spec compliant, just minimal. Lots of missing steps.
88
+
89
+ const nonBlockingEvents = Boolean(flags.nonBlockingEvents);
90
+
91
+ const document = idlUtils.implForWrapper(this._window._document);
92
+
93
+ const { currentEntry } = this;
94
+
95
+ // If the current entry's title was not set by the pushState() or replaceState() methods, then set its title
96
+ // to the value returned by the document.title IDL attribute.
97
+ if (currentEntry.title === undefined) {
98
+ currentEntry.title = document.title;
99
+ }
100
+
101
+
102
+ if (specifiedEntry.document !== currentEntry.document) {
103
+ // If entry has a different Document object than the current entry, then...
104
+ notImplemented(this._window, "traversing the history to an entry with a different Document");
105
+ }
106
+
107
+ document._URL = specifiedEntry.url;
108
+
109
+ const hashChanged =
110
+ specifiedEntry.url.fragment !== currentEntry.url.fragment && specifiedEntry.document === currentEntry.document;
111
+ let oldURL, newURL;
112
+ if (hashChanged) {
113
+ oldURL = currentEntry.url;
114
+ newURL = specifiedEntry.url;
115
+ }
116
+
117
+ if (flags.replacement) {
118
+ // If the traversal was initiated with replacement enabled, remove the entry immediately before the
119
+ // specified entry in the session history.
120
+ this._entries.splice(this._entries.indexOf(specifiedEntry) - 1, 1);
121
+ }
122
+
123
+ this.updateCurrentEntry(specifiedEntry);
124
+
125
+ const state = specifiedEntry.stateObject; // TODO structured clone
126
+
127
+ // arguably it's a bit odd that the state and latestEntry do not belong to the SessionHistory
128
+ // but the spec gives them to "History" and "Document" respecively.
129
+ document._history._state = state;
130
+ const stateChanged = specifiedEntry.document._latestEntry !== specifiedEntry;
131
+ specifiedEntry.document._latestEntry = specifiedEntry;
132
+
133
+ const fireEvents = () => this._fireEvents(stateChanged, hashChanged, state, oldURL, newURL);
134
+
135
+ if (nonBlockingEvents) {
136
+ this._window.setTimeout(fireEvents, 0);
137
+ } else {
138
+ fireEvents();
139
+ }
140
+ }
141
+
142
+ _fireEvents(stateChanged, hashChanged, state, oldURL, newURL) {
143
+ if (stateChanged) {
144
+ fireAnEvent("popstate", this._windowImpl, PopStateEvent, { state });
145
+ }
146
+
147
+ if (hashChanged) {
148
+ fireAnEvent("hashchange", this._windowImpl, HashChangeEvent, {
149
+ oldURL: whatwgURL.serializeURL(oldURL),
150
+ newURL: whatwgURL.serializeURL(newURL)
151
+ });
152
+ }
153
+ }
154
+
155
+ addEntryAfterCurrentEntry(entry) {
156
+ this._entries.splice(this._currentIndex + 1, 0, entry);
157
+ }
158
+
159
+ updateCurrentEntry(entry) {
160
+ this._currentIndex = this._entries.indexOf(entry);
161
+ }
162
+ }
163
+ module.exports = SessionHistory;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ const whatwgURL = require("whatwg-url");
3
+ const { notImplemented } = require("../../browser/not-implemented.js");
4
+ const reportException = require("../helpers/runtime-script-errors.js");
5
+ const { utf8Decode } = require("../helpers/encoding.js");
6
+ const idlUtils = require("../../../generated/idl/utils.js");
7
+
8
+ // https://html.spec.whatwg.org/#evaluate-a-javascript:-url, kind of
9
+ exports.evaluateJavaScriptURL = (window, urlRecord) => {
10
+ const urlString = whatwgURL.serializeURL(urlRecord);
11
+ const encodedScriptSource = urlString.substring("javascript:".length);
12
+ const scriptSource = utf8Decode(whatwgURL.percentDecodeString(encodedScriptSource));
13
+ if (window._runScripts === "dangerously") {
14
+ try {
15
+ return window.eval(scriptSource);
16
+ } catch (e) {
17
+ reportException(window, e, urlString);
18
+ }
19
+ }
20
+ return undefined;
21
+ };
22
+
23
+ // https://html.spec.whatwg.org/#navigating-across-documents
24
+ exports.navigate = (window, newURL, flags) => {
25
+ // This is NOT a spec-compliant implementation of navigation in any way. It implements a few selective steps that
26
+ // are nice for jsdom users, regarding hash changes and JavaScript URLs. Full navigation support is being worked on
27
+ // and will likely require some additional hooks to be implemented.
28
+ if (!window._document) {
29
+ return;
30
+ }
31
+
32
+ const document = idlUtils.implForWrapper(window._document);
33
+ const currentURL = document._URL;
34
+
35
+ if (!flags.reloadTriggered && urlEquals(currentURL, newURL, { excludeFragments: true })) {
36
+ if (newURL.fragment !== currentURL.fragment) {
37
+ navigateToFragment(window, newURL, flags);
38
+ }
39
+ return;
40
+ }
41
+
42
+ // NOT IMPLEMENTED: Prompt to unload the active document of browsingContext.
43
+
44
+ // NOT IMPLEMENTED: form submission algorithm
45
+ // const navigationType = 'other';
46
+
47
+ // NOT IMPLEMENTED: if resource is a response...
48
+ if (newURL.scheme === "javascript") {
49
+ setTimeout(() => {
50
+ const result = exports.evaluateJavaScriptURL(window, newURL);
51
+ if (typeof result === "string") {
52
+ notImplemented(window, "string results from 'javascript:' URLs");
53
+ }
54
+ }, 0);
55
+ return;
56
+ }
57
+ navigateFetch(window);
58
+ };
59
+
60
+ // https://html.spec.whatwg.org/#scroll-to-fragid
61
+ function navigateToFragment(window, newURL, flags) {
62
+ const document = idlUtils.implForWrapper(window._document);
63
+
64
+ window._sessionHistory.clearHistoryTraversalTasks();
65
+
66
+ if (!flags.replacement) {
67
+ // handling replacement=true here deviates from spec, but matches real browser behaviour
68
+ // see https://github.com/whatwg/html/issues/2796 for spec bug
69
+ window._sessionHistory.removeAllEntriesAfterCurrentEntry();
70
+ }
71
+ const newEntry = { document, url: newURL };
72
+ window._sessionHistory.addEntryAfterCurrentEntry(newEntry);
73
+ window._sessionHistory.traverseHistory(newEntry, { nonBlockingEvents: true, replacement: flags.replacement });
74
+ }
75
+
76
+ // https://html.spec.whatwg.org/#process-a-navigate-fetch
77
+ function navigateFetch(window) {
78
+ // TODO:
79
+ notImplemented(window, "navigation to another Document");
80
+ }
81
+
82
+ // https://url.spec.whatwg.org/#concept-url-equals
83
+ function urlEquals(a, b, flags) {
84
+ const serializedA = whatwgURL.serializeURL(a, flags.excludeFragments);
85
+ const serializedB = whatwgURL.serializeURL(b, flags.excludeFragments);
86
+ return serializedA === serializedB;
87
+ }