@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,404 @@
1
+ "use strict";
2
+
3
+ const fs = require("node:fs");
4
+ const path = require("node:path");
5
+ const cssom = require("@acemir/cssom");
6
+ const Specificity = require("@bramus/specificity").default;
7
+ const { CSSStyleDeclaration } = require("cssstyle");
8
+ const { wrapperForImpl } = require("../../../generated/idl/utils");
9
+ const { getSpecifiedColor, getComputedOrUsedColor } = require("./colors");
10
+ const { asciiLowercase } = require("./strings");
11
+ const { deprecatedAliases, systemColors } = require("./system-colors");
12
+
13
+ const defaultStyleSheet = fs.readFileSync(
14
+ path.resolve(__dirname, "../../browser/default-stylesheet.css"),
15
+ { encoding: "utf-8" }
16
+ );
17
+ let parsedDefaultStyleSheet;
18
+
19
+ // Properties for which getResolvedValue is implemented. This is less than
20
+ // every supported property.
21
+ // https://drafts.csswg.org/indexes/#properties
22
+ const propertiesWithResolvedValueImplemented = {
23
+ "__proto__": null,
24
+
25
+ // https://drafts.csswg.org/css2/visufx.html#visibility
26
+ "visibility": {
27
+ inherited: true,
28
+ initial: "visible",
29
+ computedValue: "as-specified"
30
+ },
31
+ // https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty
32
+ "pointer-events": {
33
+ inherited: true,
34
+ initial: "auto",
35
+ computedValue: "as-specified"
36
+ },
37
+ // https://drafts.csswg.org/css-backgrounds-3/#propdef-background-color
38
+ "background-color": {
39
+ inherited: false,
40
+ initial: "transparent",
41
+ computedValue: "computed-color"
42
+ },
43
+ // https://drafts.csswg.org/css-logical-1/#propdef-border-block-end-color
44
+ "border-block-start-color": {
45
+ inherited: false,
46
+ initial: "currentcolor",
47
+ computedValue: "computed-color"
48
+ },
49
+ "border-block-end-color": {
50
+ inherited: false,
51
+ initial: "currentcolor",
52
+ computedValue: "computed-color"
53
+ },
54
+ "border-inline-start-color": {
55
+ inherited: false,
56
+ initial: "currentcolor",
57
+ computedValue: "computed-color"
58
+ },
59
+ "border-inline-end-color": {
60
+ inherited: false,
61
+ initial: "currentcolor",
62
+ computedValue: "computed-color"
63
+ },
64
+ // https://drafts.csswg.org/css-backgrounds-3/#propdef-border-bottom-color
65
+ "border-top-color": {
66
+ inherited: false,
67
+ initial: "currentcolor",
68
+ computedValue: "computed-color"
69
+ },
70
+ "border-right-color": {
71
+ inherited: false,
72
+ initial: "currentcolor",
73
+ computedValue: "computed-color"
74
+ },
75
+ "border-bottom-color": {
76
+ inherited: false,
77
+ initial: "currentcolor",
78
+ computedValue: "computed-color"
79
+ },
80
+ "border-left-color": {
81
+ inherited: false,
82
+ initial: "currentcolor",
83
+ computedValue: "computed-color"
84
+ },
85
+ // https://drafts.csswg.org/css-ui-4/#propdef-caret-color
86
+ "caret-color": {
87
+ inherited: true,
88
+ initial: "auto",
89
+ computedValue: "computed-color"
90
+ },
91
+ // https://drafts.csswg.org/css-color-4/#propdef-color
92
+ "color": {
93
+ inherited: true,
94
+ initial: "canvastext",
95
+ computedValue: "computed-color"
96
+ },
97
+ // https://drafts.csswg.org/css-ui-4/#propdef-outline-color
98
+ "outline-color": {
99
+ inherited: false,
100
+ initial: "invert",
101
+ computedValue: "computed-color"
102
+ },
103
+ // https://drafts.csswg.org/css-display/#the-display-properties
104
+ // Currently only "as-specified" is supported as a computed value
105
+ "display": {
106
+ inherited: false,
107
+ initial: "inline",
108
+ computedValue: "as-specified"
109
+ }
110
+ };
111
+ const implementedProperties = Object.keys(propertiesWithResolvedValueImplemented);
112
+
113
+ function getComputedStyleDeclaration(elementImpl) {
114
+ const styleCache = elementImpl._ownerDocument._styleCache;
115
+ const cachedDeclaration = styleCache.get(elementImpl);
116
+ if (cachedDeclaration) {
117
+ const opts = prepareCssstyleOpts(elementImpl);
118
+ const clonedDeclaration = new CSSStyleDeclaration(null, opts);
119
+ // TODO: Remove when cssstyle options are ready.
120
+ clonedDeclaration._global = elementImpl._globalObject;
121
+ clonedDeclaration._computed = true;
122
+
123
+ for (let i = 0; i < cachedDeclaration.length; i++) {
124
+ const property = cachedDeclaration.item(i);
125
+ const value = cachedDeclaration.getPropertyValue(property);
126
+ const priority = cachedDeclaration.getPropertyPriority(property);
127
+ clonedDeclaration.setProperty(property, value, priority);
128
+ }
129
+
130
+ return clonedDeclaration;
131
+ }
132
+
133
+ const declaration = prepareComputedStyleDeclaration(elementImpl, { styleCache });
134
+
135
+ // TODO: Remove later.
136
+ for (const property of implementedProperties) {
137
+ declaration.setProperty(property, getResolvedValue(elementImpl, property));
138
+ }
139
+ declaration._readonly = true;
140
+
141
+ return declaration;
142
+ }
143
+
144
+ function prepareComputedStyleDeclaration(elementImpl, { styleCache }) {
145
+ const opts = prepareCssstyleOpts(elementImpl);
146
+ const declaration = new CSSStyleDeclaration(null, opts);
147
+ // TODO: Remove when cssstyle options are ready.
148
+ declaration._global = elementImpl._globalObject;
149
+ declaration._computed = true;
150
+
151
+ applyStyleSheetRules(elementImpl, declaration);
152
+
153
+ for (let i = 0; i < elementImpl.style.length; i++) {
154
+ const { style } = elementImpl;
155
+ handlePropertyForInlineStyle(style.item(i), declaration, style);
156
+ }
157
+
158
+ styleCache.set(elementImpl, declaration);
159
+
160
+ return declaration;
161
+ }
162
+
163
+ function prepareCssstyleOpts(elementImpl) {
164
+ // TODO: Prepare options for cssstyle.
165
+ const opts = {
166
+ context: wrapperForImpl(elementImpl)
167
+ };
168
+
169
+ return opts;
170
+ }
171
+
172
+ function applyStyleSheetRules(elementImpl, declaration) {
173
+ if (!parsedDefaultStyleSheet) {
174
+ parsedDefaultStyleSheet = cssom.parse(defaultStyleSheet);
175
+ }
176
+
177
+ const specificities = new Map();
178
+ handleSheet(parsedDefaultStyleSheet, elementImpl, declaration, specificities);
179
+ for (const sheet of elementImpl._ownerDocument.styleSheets._list) {
180
+ handleSheet(sheet, elementImpl, declaration, specificities);
181
+ }
182
+ }
183
+
184
+ function handleSheet(sheet, elementImpl, declaration, specificities) {
185
+ for (const rule of sheet.cssRules) {
186
+ if (rule.media) {
187
+ let hasMediaScreen = false;
188
+ for (let i = 0; i < rule.media.length; i++) {
189
+ const mediaType = rule.media[i];
190
+ hasMediaScreen = mediaType === "screen";
191
+ if (hasMediaScreen) {
192
+ break;
193
+ }
194
+ }
195
+ if (rule.constructor.name === "CSSImportRule") {
196
+ // Handle @import rules if:
197
+ // - imported sheet loaded successfully
198
+ // - media is empty or matches "screen"
199
+ if (rule.styleSheet !== null && (rule.media.length === 0 || hasMediaScreen)) {
200
+ for (const innerRule of rule.styleSheet.cssRules) {
201
+ const { ast, match } = matches(innerRule, elementImpl);
202
+ if (match) {
203
+ handleRule(innerRule, declaration, specificities, ast);
204
+ }
205
+ }
206
+ }
207
+ // Keep handling @media rules only if media matches "screen"
208
+ } else if (hasMediaScreen) {
209
+ for (const innerRule of rule.cssRules) {
210
+ const { ast, match } = matches(innerRule, elementImpl);
211
+ if (match) {
212
+ handleRule(innerRule, declaration, specificities, ast);
213
+ }
214
+ }
215
+ }
216
+ } else {
217
+ const { ast, match } = matches(rule, elementImpl);
218
+ if (match) {
219
+ handleRule(rule, declaration, specificities, ast);
220
+ }
221
+ }
222
+ }
223
+ }
224
+
225
+ function handleRule(rule, declaration, specificities, ast) {
226
+ const { style } = rule;
227
+ for (let i = 0; i < style.length; i++) {
228
+ const property = style[i];
229
+ handleProperty(property, declaration, style, specificities, ast);
230
+ }
231
+ }
232
+
233
+ function handleProperty(property, declaration, style, specificities, ast) {
234
+ const value = style.getPropertyValue(property);
235
+ const priority = style.getPropertyPriority(property);
236
+ if (priority) {
237
+ declaration.setProperty(property, value, priority);
238
+ } else if (!declaration.getPropertyPriority(property)) {
239
+ const { value: specificity } = Specificity.max(...Specificity.calculate(ast));
240
+ if (specificities.has(property)) {
241
+ if (Specificity.compare(specificity, specificities.get(property)) >= 0) {
242
+ specificities.set(property, specificity);
243
+ declaration.setProperty(property, value);
244
+ }
245
+ } else {
246
+ specificities.set(property, specificity);
247
+ declaration.setProperty(property, value);
248
+ }
249
+ }
250
+ }
251
+
252
+ function handlePropertyForInlineStyle(property, declaration, style) {
253
+ const value = style.getPropertyValue(property);
254
+ const priority = style.getPropertyPriority(property);
255
+ if (!declaration.getPropertyPriority(property) || priority) {
256
+ declaration.setProperty(property, value, priority);
257
+ }
258
+ }
259
+
260
+ function matches(rule, elementImpl) {
261
+ try {
262
+ const { selectorText } = rule;
263
+ const domSelector = elementImpl._ownerDocument._domSelector;
264
+ const { ast, match, pseudoElement } = domSelector.check(selectorText, elementImpl);
265
+ // `pseudoElement` is a pseudo-element selector (e.g. `::before`).
266
+ // However, we do not support getComputedStyle(element, pseudoElement), so `match` is set to `false`.
267
+ if (pseudoElement) {
268
+ return {
269
+ match: false
270
+ };
271
+ }
272
+ return { ast, match, pseudoElement };
273
+ } catch {
274
+ // fall through
275
+ }
276
+ return {
277
+ match: false
278
+ };
279
+ }
280
+
281
+ // Naive implementation of https://drafts.csswg.org/css-cascade-4/#cascading
282
+ // based on the previous jsdom implementation of getComputedStyle.
283
+ // Does not implement https://drafts.csswg.org/css-cascade-4/#cascade-specificity,
284
+ // or rather specificity is only implemented by the order in which the matching
285
+ // rules appear. The last rule is the most specific while the first rule is
286
+ // the least specific.
287
+ function getCascadedPropertyValue(element, property) {
288
+ return getComputedStyleDeclaration(element).getPropertyValue(property);
289
+ }
290
+
291
+ // https://drafts.csswg.org/css-cascade-4/#specified-value
292
+ function getSpecifiedValue(element, property) {
293
+ const { initial, inherited, computedValue } = propertiesWithResolvedValueImplemented[property];
294
+ const cascade = getCascadedPropertyValue(element, property);
295
+
296
+ if (cascade !== "") {
297
+ if (computedValue === "computed-color") {
298
+ return getSpecifiedColor(cascade);
299
+ }
300
+
301
+ return cascade;
302
+ }
303
+
304
+ // Defaulting
305
+ if (inherited && element.parentElement !== null) {
306
+ return getComputedValue(element.parentElement, property);
307
+ }
308
+
309
+ // root element without parent element or inherited property
310
+ return initial;
311
+ }
312
+
313
+ // https://drafts.csswg.org/css-cascade-4/#computed-value
314
+ function getComputedValue(element, property) {
315
+ const { computedValue, inherited, initial } = propertiesWithResolvedValueImplemented[property];
316
+ let specifiedValue = getSpecifiedValue(element, property);
317
+ // https://drafts.csswg.org/css-cascade/#defaulting-keywords
318
+ switch (specifiedValue) {
319
+ case "initial": {
320
+ specifiedValue = initial;
321
+ break;
322
+ }
323
+ case "inherit": {
324
+ if (element.parentElement !== null) {
325
+ specifiedValue = getComputedValue(element.parentElement, property);
326
+ } else {
327
+ specifiedValue = initial;
328
+ }
329
+ break;
330
+ }
331
+ case "unset": {
332
+ if (inherited && element.parentElement !== null) {
333
+ specifiedValue = getComputedValue(element.parentElement, property);
334
+ } else {
335
+ specifiedValue = initial;
336
+ }
337
+ break;
338
+ }
339
+ // TODO: https://drafts.csswg.org/css-cascade-5/#revert-layer
340
+ case "revert-layer": {
341
+ break;
342
+ }
343
+ // TODO: https://drafts.csswg.org/css-cascade-5/#default
344
+ case "revert": {
345
+ break;
346
+ }
347
+ default: {
348
+ // fall through; specifiedValue is not a CSS-wide keyword.
349
+ }
350
+ }
351
+ if (computedValue === "as-specified") {
352
+ return specifiedValue;
353
+ } else if (computedValue === "computed-color") {
354
+ let value = asciiLowercase(specifiedValue);
355
+ // https://drafts.csswg.org/css-color-4/#resolving-other-colors
356
+ if (specifiedValue === "currentcolor") {
357
+ if (property === "color") {
358
+ if (element.parentElement !== null) {
359
+ return getComputedValue(element.parentElement, "color");
360
+ }
361
+ value = initial;
362
+ } else {
363
+ return getComputedValue(element, "color");
364
+ }
365
+ }
366
+ if (systemColors.has(value) || deprecatedAliases.has(value)) {
367
+ let key = value;
368
+ if (deprecatedAliases.has(value)) {
369
+ key = deprecatedAliases.get(value);
370
+ }
371
+ const { light, dark } = systemColors.get(key);
372
+ const colorScheme = getCascadedPropertyValue(element, "color-scheme");
373
+ if (colorScheme === "dark") {
374
+ return dark;
375
+ }
376
+ return light;
377
+ }
378
+ return getComputedOrUsedColor(specifiedValue);
379
+ }
380
+
381
+ throw new TypeError(`Internal error: unrecognized computed value instruction '${computedValue}'`);
382
+ }
383
+
384
+ // https://drafts.csswg.org/cssom/#resolved-value
385
+ // Only implements the properties that are defined in propertiesWithResolvedValueImplemented.
386
+ function getResolvedValue(element, property) {
387
+ // We can always use the computed value with the current set of propertiesWithResolvedValueImplemented:
388
+ // * Color properties end up with the used value, but we don't implement any actual differences between used and
389
+ // computed that https://drafts.csswg.org/css-cascade-5/#used-value gestures at.
390
+ // * The other properties fall back to the "any other property: The resolved value is the computed value." case.
391
+ return getComputedValue(element, property);
392
+ }
393
+
394
+ function invalidateStyleCache(elementImpl) {
395
+ if (elementImpl._attached) {
396
+ elementImpl._ownerDocument._styleCache = new WeakMap();
397
+ }
398
+ }
399
+
400
+ module.exports = {
401
+ SHADOW_DOM_PSEUDO_REGEXP: /^::(?:part|slotted)\(/i,
402
+ getComputedStyleDeclaration,
403
+ invalidateStyleCache
404
+ };
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ const cssom = require("@acemir/cssom");
3
+ const { legacyHookDecode } = require("@exodus/bytes/encoding.js");
4
+ const whatwgURL = require("whatwg-url");
5
+ const { invalidateStyleCache } = require("./style-rules");
6
+
7
+ // TODO: this should really implement https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet
8
+ // It (and the things it calls) is nowhere close right now.
9
+ exports.fetchStylesheet = (elementImpl, urlString, importRule) => {
10
+ const document = elementImpl._ownerDocument;
11
+ let defaultEncodingLabel = document._encoding;
12
+ const resourceLoader = document._resourceLoader;
13
+
14
+ if (elementImpl.localName === "link" && elementImpl.hasAttributeNS(null, "charset")) {
15
+ defaultEncodingLabel = elementImpl.getAttributeNS(null, "charset");
16
+ }
17
+
18
+ function onStylesheetLoad(data, response) {
19
+ if (!response.ok) {
20
+ throw new Error("Status code: " + response.status);
21
+ }
22
+
23
+ // if the element was detached before the load could finish, don't process the data
24
+ if (!elementImpl._attached) {
25
+ return;
26
+ }
27
+
28
+ const css = legacyHookDecode(data, defaultEncodingLabel);
29
+
30
+ // TODO: MIME type checking?
31
+ if (!importRule && elementImpl.sheet) {
32
+ exports.removeStylesheet(elementImpl.sheet, elementImpl);
33
+ }
34
+
35
+ if (importRule) {
36
+ // According to the spec, we don't add the stylesheet to the document's
37
+ // stylesheet list when it's loaded via an @import rule.
38
+ exports.createStylesheet(css, elementImpl, urlString, {
39
+ ownerRule: importRule,
40
+ styleSheet: importRule.styleSheet
41
+ });
42
+ } else {
43
+ const createdSheet = exports.createStylesheet(css, elementImpl, urlString, {
44
+ ownerNode: elementImpl
45
+ });
46
+ exports.addStylesheet(createdSheet, elementImpl);
47
+ }
48
+ }
49
+
50
+ resourceLoader.fetch(urlString, {
51
+ element: elementImpl,
52
+ onLoad: onStylesheetLoad
53
+ });
54
+ };
55
+
56
+ // https://drafts.csswg.org/cssom/#remove-a-css-style-sheet
57
+ exports.removeStylesheet = (sheet, elementImpl) => {
58
+ const { styleSheets } = elementImpl._ownerDocument;
59
+ styleSheets._remove(sheet);
60
+
61
+ // Remove the association explicitly; in the spec it's implicit so this step doesn't exist.
62
+ elementImpl.sheet = null;
63
+
64
+ invalidateStyleCache(elementImpl);
65
+
66
+ // TODO: "Set the CSS style sheet’s parent CSS style sheet, owner node and owner CSS rule to null."
67
+ // Probably when we have a real CSSOM implementation.
68
+ };
69
+
70
+ // https://drafts.csswg.org/cssom/#create-a-css-style-sheet kinda:
71
+ // - Parsing failures are now handled gracefully
72
+ // - Like the browser's behaviour, when css.parse() passes trough some invalid CSS
73
+ // it will try it's best to ignore the invalid parts without blocking the parsing operations
74
+ // returning a stylesheet with the valid parts only.
75
+ // - css.parse() now receives a funcion that we can use to handle the error as it's second argument
76
+ // - The import rules stuff seems out of place, and probably should affect the load event...
77
+ exports.createStylesheet = (sheetText, elementImpl, baseURLString, parserOptions) => {
78
+ const sheet = cssom.parse(sheetText, {
79
+ globalObject: elementImpl._globalObject,
80
+ ...parserOptions
81
+ }, err => {
82
+ if (elementImpl._ownerDocument._defaultView) {
83
+ const error = new Error("Could not parse CSS stylesheet", { cause: err });
84
+ error.sheetText = sheetText;
85
+ error.type = "css-parsing";
86
+
87
+ elementImpl._ownerDocument._defaultView._virtualConsole.emit("jsdomError", error);
88
+ }
89
+ });
90
+
91
+ scanForImportRules(elementImpl, sheet.cssRules, baseURLString);
92
+
93
+ return sheet;
94
+ };
95
+
96
+ // https://drafts.csswg.org/cssom/#add-a-css-style-sheet
97
+ exports.addStylesheet = (sheet, elementImpl) => {
98
+ elementImpl._ownerDocument.styleSheets._add(sheet);
99
+
100
+ // Set the association explicitly; in the spec it's implicit.
101
+ elementImpl.sheet = sheet;
102
+
103
+ invalidateStyleCache(elementImpl);
104
+
105
+ // TODO: title and disabled stuff
106
+ };
107
+
108
+ // Tracking in https://github.com/jsdom/jsdom/issues/2124
109
+ function scanForImportRules(elementImpl, cssRules, baseURLString) {
110
+ if (!cssRules) {
111
+ return;
112
+ }
113
+
114
+ for (let i = 0; i < cssRules.length; ++i) {
115
+ if (cssRules[i].cssRules) {
116
+ // @media rule: keep searching inside it.
117
+ scanForImportRules(elementImpl, cssRules[i].cssRules, baseURLString);
118
+ } else if (cssRules[i].href) {
119
+ // @import rule: fetch the resource and evaluate it.
120
+ // See http://dev.w3.org/csswg/cssom/#css-import-rule
121
+ // If loading of the style sheet fails its cssRules list is simply
122
+ // empty. I.e. an @import rule always has an associated style sheet.
123
+
124
+ // Use whatwgURL.URL instead of whatwgURL.parseURL so that we get an error we can use as the cause if the URL
125
+ // doesn't parse.
126
+ let parsed;
127
+ try {
128
+ parsed = new whatwgURL.URL(cssRules[i].href, baseURLString);
129
+ } catch (cause) {
130
+ const window = elementImpl._ownerDocument._defaultView;
131
+ if (window) {
132
+ // Synthetic cause to ensure that all resource loading errors have causes.
133
+ const error = new Error(
134
+ `Could not parse CSS @import URL "${cssRules[i].href}" relative to base URL "${baseURLString}"`,
135
+ { cause }
136
+ );
137
+ error.type = "resource-loading";
138
+ error.url = cssRules[i].href;
139
+ window._virtualConsole.emit("jsdomError", error);
140
+ }
141
+ }
142
+
143
+ if (parsed) {
144
+ exports.fetchStylesheet(elementImpl, parsed.href, cssRules[i]);
145
+ }
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ // https://svgwg.org/svg2-draft/types.html#TermDetach
4
+ function detach(value) {
5
+ if (typeof value === "string") {
6
+ return;
7
+ }
8
+
9
+ throw new TypeError(`jsdom internal error: detaching object of wrong type ${value}`);
10
+ }
11
+ exports.detach = detach;
12
+
13
+ // https://svgwg.org/svg2-draft/types.html#TermAttach
14
+ // listObject corresponds to the parameter taken by the algorithm in the spec, but is currently unused because only
15
+ // DOMString type is supported by jsdom (and this function) right now.
16
+ // eslint-disable-next-line no-unused-vars
17
+ function attach(value, listObject) {
18
+ if (typeof value === "string") {
19
+ return;
20
+ }
21
+
22
+ throw new TypeError(`jsdom internal error: attaching object of wrong type ${value}`);
23
+ }
24
+ exports.attach = attach;
25
+
26
+ // https://svgwg.org/svg2-draft/types.html#TermReserialize for DOMString.
27
+ function reserializeSpaceSeparatedTokens(elements) {
28
+ return elements.join(" ");
29
+ }
30
+ exports.reserializeSpaceSeparatedTokens = reserializeSpaceSeparatedTokens;
31
+
32
+ // Used for systemLanguage attribute, whose value is a set of comma-separated tokens:
33
+ // https://svgwg.org/svg2-draft/struct.html#SystemLanguageAttribute
34
+ // SVG 2 spec (https://svgwg.org/svg2-draft/types.html#TermReserialize) says any SVGStringList should reserialize the
35
+ // same way, as space-separated tokens, but doing so for systemLanguage is illogical and contradicts the Firefox
36
+ // behavior.
37
+ // I cannot find a description of reserialization of SVGStringList in the SVG 1.1 spec.
38
+ function reserializeCommaSeparatedTokens(elements) {
39
+ return elements.join(", ");
40
+ }
41
+ exports.reserializeCommaSeparatedTokens = reserializeCommaSeparatedTokens;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ const { SVG_NS } = require("../namespaces");
3
+
4
+ // https://svgwg.org/svg2-draft/render.html#TermNeverRenderedElement
5
+ const neverRenderedElements = new Set([
6
+ "clipPath",
7
+ "defs",
8
+ "desc",
9
+ "linearGradient",
10
+ "marker",
11
+ "mask",
12
+ "metadata",
13
+ "pattern",
14
+ "radialGradient",
15
+ "script",
16
+ "style",
17
+ "title",
18
+ "symbol"
19
+ ]);
20
+
21
+ // https://svgwg.org/svg2-draft/render.html#Rendered-vs-NonRendered
22
+ exports.isRenderedElement = elImpl => {
23
+ if (neverRenderedElements.has(elImpl._localName)) {
24
+ return false;
25
+ }
26
+
27
+ // This does not check for elements excluded because of conditional processing attributes or ‘switch’ structures,
28
+ // because conditional processing is not implemented.
29
+ // https://svgwg.org/svg2-draft/struct.html#ConditionalProcessing
30
+
31
+ // This does not check for computed style of display being none, since that is not yet implemented for HTML
32
+ // focusability either (and there are no tests yet).
33
+
34
+ if (!elImpl.isConnected) {
35
+ return false;
36
+ }
37
+
38
+ // The spec is unclear about how to deal with non-SVG parents, so we only perform this check for SVG-namespace
39
+ // parents.
40
+ if (elImpl.parentElement && elImpl.parentElement._namespaceURI === SVG_NS &&
41
+ !exports.isRenderedElement(elImpl.parentNode)) {
42
+ return false;
43
+ }
44
+
45
+ return true;
46
+ };