happy-dom 2.54.0 → 3.1.0

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.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

Files changed (299) hide show
  1. package/README.md +26 -6
  2. package/lib/async-task-manager/AsyncTaskManager.js +34 -78
  3. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
  4. package/lib/attribute/Attr.js +19 -28
  5. package/lib/attribute/Attr.js.map +1 -1
  6. package/lib/config/ElementTag.d.ts +2 -1
  7. package/lib/config/ElementTag.js +16 -15
  8. package/lib/config/ElementTag.js.map +1 -1
  9. package/lib/config/NonImplemenetedElementClasses.js +0 -1
  10. package/lib/config/NonImplemenetedElementClasses.js.map +1 -1
  11. package/lib/cookie/CookieUtility.js +21 -26
  12. package/lib/cookie/CookieUtility.js.map +1 -1
  13. package/lib/css/CSS.js +12 -18
  14. package/lib/css/CSS.js.map +1 -1
  15. package/lib/css/CSSParser.js +29 -33
  16. package/lib/css/CSSParser.js.map +1 -1
  17. package/lib/css/CSSRule.js +24 -29
  18. package/lib/css/CSSRule.js.map +1 -1
  19. package/lib/css/CSSStyleDeclaration.js +4516 -6005
  20. package/lib/css/CSSStyleDeclaration.js.map +1 -1
  21. package/lib/css/CSSStyleSheet.js +17 -59
  22. package/lib/css/CSSStyleSheet.js.map +1 -1
  23. package/lib/css/CSSUnitValue.js +4 -5
  24. package/lib/css/CSSUnitValue.js.map +1 -1
  25. package/lib/css/MediaList.js +23 -28
  26. package/lib/css/MediaList.js.map +1 -1
  27. package/lib/css/rules/CSSFontFaceRule.js +6 -24
  28. package/lib/css/rules/CSSFontFaceRule.js.map +1 -1
  29. package/lib/css/rules/CSSKeyframeRule.js +14 -36
  30. package/lib/css/rules/CSSKeyframeRule.js.map +1 -1
  31. package/lib/css/rules/CSSKeyframesRule.js +31 -54
  32. package/lib/css/rules/CSSKeyframesRule.js.map +1 -1
  33. package/lib/css/rules/CSSMediaRule.js +29 -56
  34. package/lib/css/rules/CSSMediaRule.js.map +1 -1
  35. package/lib/css/rules/CSSStyleRule.js +16 -38
  36. package/lib/css/rules/CSSStyleRule.js.map +1 -1
  37. package/lib/custom-element/CustomElementRegistry.js +21 -24
  38. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  39. package/lib/dom-implementation/DOMImplementation.js +12 -13
  40. package/lib/dom-implementation/DOMImplementation.js.map +1 -1
  41. package/lib/dom-parser/DOMParser.js +29 -35
  42. package/lib/dom-parser/DOMParser.js.map +1 -1
  43. package/lib/dom-token-list/DOMTokenList.js +64 -79
  44. package/lib/dom-token-list/DOMTokenList.js.map +1 -1
  45. package/lib/event/DataTransfer.js +4 -5
  46. package/lib/event/DataTransfer.js.map +1 -1
  47. package/lib/event/DataTransferItem.js +7 -8
  48. package/lib/event/DataTransferItem.js.map +1 -1
  49. package/lib/event/DataTransferItemList.js +10 -11
  50. package/lib/event/DataTransferItemList.js.map +1 -1
  51. package/lib/event/Event.js +11 -15
  52. package/lib/event/Event.js.map +1 -1
  53. package/lib/event/EventTarget.js +14 -16
  54. package/lib/event/EventTarget.js.map +1 -1
  55. package/lib/event/IUIEventInit.d.ts +2 -2
  56. package/lib/event/UIEvent.d.ts +2 -2
  57. package/lib/event/UIEvent.js +25 -46
  58. package/lib/event/UIEvent.js.map +1 -1
  59. package/lib/event/events/AnimationEvent.js +11 -29
  60. package/lib/event/events/AnimationEvent.js.map +1 -1
  61. package/lib/event/events/CustomEvent.js +9 -31
  62. package/lib/event/events/CustomEvent.js.map +1 -1
  63. package/lib/event/events/ErrorEvent.js +15 -34
  64. package/lib/event/events/ErrorEvent.js.map +1 -1
  65. package/lib/event/events/FocusEvent.js +7 -26
  66. package/lib/event/events/FocusEvent.js.map +1 -1
  67. package/lib/event/events/InputEvent.js +13 -32
  68. package/lib/event/events/InputEvent.js.map +1 -1
  69. package/lib/event/events/KeyboardEvent.js +27 -46
  70. package/lib/event/events/KeyboardEvent.js.map +1 -1
  71. package/lib/event/events/MouseEvent.js +33 -52
  72. package/lib/event/events/MouseEvent.js.map +1 -1
  73. package/lib/event/events/PointerEvent.js +25 -44
  74. package/lib/event/events/PointerEvent.js.map +1 -1
  75. package/lib/event/events/ProgressEvent.js +11 -30
  76. package/lib/event/events/ProgressEvent.js.map +1 -1
  77. package/lib/event/events/StorageEvent.js +13 -32
  78. package/lib/event/events/StorageEvent.js.map +1 -1
  79. package/lib/event/events/WheelEvent.js +16 -35
  80. package/lib/event/events/WheelEvent.js.map +1 -1
  81. package/lib/exception/DOMException.js +5 -24
  82. package/lib/exception/DOMException.js.map +1 -1
  83. package/lib/fetch/FetchHandler.js +18 -22
  84. package/lib/fetch/FetchHandler.js.map +1 -1
  85. package/lib/fetch/Headers.js +3 -23
  86. package/lib/fetch/Headers.js.map +1 -1
  87. package/lib/fetch/Request.js +61 -81
  88. package/lib/fetch/Request.js.map +1 -1
  89. package/lib/fetch/ResourceFetchHandler.js +18 -67
  90. package/lib/fetch/ResourceFetchHandler.js.map +1 -1
  91. package/lib/fetch/Response.js +61 -81
  92. package/lib/fetch/Response.js.map +1 -1
  93. package/lib/file/Blob.js +29 -78
  94. package/lib/file/Blob.js.map +1 -1
  95. package/lib/file/File.js +9 -27
  96. package/lib/file/File.js.map +1 -1
  97. package/lib/file/FileReader.js +57 -78
  98. package/lib/file/FileReader.js.map +1 -1
  99. package/lib/history/History.js +32 -37
  100. package/lib/history/History.js.map +1 -1
  101. package/lib/index.d.ts +5 -3
  102. package/lib/index.js +71 -69
  103. package/lib/index.js.map +1 -1
  104. package/lib/location/Location.js +11 -28
  105. package/lib/location/Location.js.map +1 -1
  106. package/lib/location/RelativeURL.js +5 -8
  107. package/lib/location/RelativeURL.js.map +1 -1
  108. package/lib/location/URL.js +46 -59
  109. package/lib/location/URL.js.map +1 -1
  110. package/lib/match-media/MediaQueryList.js +28 -54
  111. package/lib/match-media/MediaQueryList.js.map +1 -1
  112. package/lib/mutation-observer/MutationListener.js +3 -4
  113. package/lib/mutation-observer/MutationListener.js.map +1 -1
  114. package/lib/mutation-observer/MutationObserver.js +12 -13
  115. package/lib/mutation-observer/MutationObserver.js.map +1 -1
  116. package/lib/mutation-observer/MutationRecord.js +3 -4
  117. package/lib/mutation-observer/MutationRecord.js.map +1 -1
  118. package/lib/navigator/MimeType.js +5 -6
  119. package/lib/navigator/MimeType.js.map +1 -1
  120. package/lib/navigator/MimeTypeArray.js +10 -11
  121. package/lib/navigator/MimeTypeArray.js.map +1 -1
  122. package/lib/navigator/Navigator.js +7 -8
  123. package/lib/navigator/Navigator.js.map +1 -1
  124. package/lib/navigator/Plugin.js +10 -11
  125. package/lib/navigator/Plugin.js.map +1 -1
  126. package/lib/navigator/PluginArray.js +12 -13
  127. package/lib/navigator/PluginArray.js.map +1 -1
  128. package/lib/nodes/character-data/CharacterData.js +119 -184
  129. package/lib/nodes/character-data/CharacterData.js.map +1 -1
  130. package/lib/nodes/character-data/CharacterDataUtility.js +12 -15
  131. package/lib/nodes/character-data/CharacterDataUtility.js.map +1 -1
  132. package/lib/nodes/child-node/ChildNodeUtility.js +24 -45
  133. package/lib/nodes/child-node/ChildNodeUtility.js.map +1 -1
  134. package/lib/nodes/child-node/NonDocumentChildNodeUtility.js +9 -12
  135. package/lib/nodes/child-node/NonDocumentChildNodeUtility.js.map +1 -1
  136. package/lib/nodes/comment/Comment.js +20 -43
  137. package/lib/nodes/comment/Comment.js.map +1 -1
  138. package/lib/nodes/document/Document.d.ts +3 -3
  139. package/lib/nodes/document/Document.js +334 -461
  140. package/lib/nodes/document/Document.js.map +1 -1
  141. package/lib/nodes/document/DocumentReadyStateManager.js +16 -19
  142. package/lib/nodes/document/DocumentReadyStateManager.js.map +1 -1
  143. package/lib/nodes/document/IDocument.d.ts +2 -2
  144. package/lib/nodes/document-fragment/DocumentFragment.js +93 -153
  145. package/lib/nodes/document-fragment/DocumentFragment.js.map +1 -1
  146. package/lib/nodes/document-type/DocumentType.js +22 -45
  147. package/lib/nodes/document-type/DocumentType.js.map +1 -1
  148. package/lib/nodes/element/DOMRect.js +3 -4
  149. package/lib/nodes/element/DOMRect.js.map +1 -1
  150. package/lib/nodes/element/Element.js +367 -496
  151. package/lib/nodes/element/Element.js.map +1 -1
  152. package/lib/nodes/element/HTMLCollection.js +4 -24
  153. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  154. package/lib/nodes/element/HTMLCollectionFactory.js +6 -9
  155. package/lib/nodes/element/HTMLCollectionFactory.js.map +1 -1
  156. package/lib/nodes/element/Range.js +89 -114
  157. package/lib/nodes/element/Range.js.map +1 -1
  158. package/lib/nodes/html-base-element/HTMLBaseElement.d.ts +42 -0
  159. package/lib/nodes/html-base-element/HTMLBaseElement.js +62 -0
  160. package/lib/nodes/html-base-element/HTMLBaseElement.js.map +1 -0
  161. package/lib/nodes/html-base-element/IHTMLBaseElement.d.ts +19 -0
  162. package/lib/nodes/html-base-element/IHTMLBaseElement.js +3 -0
  163. package/lib/nodes/html-base-element/IHTMLBaseElement.js.map +1 -0
  164. package/lib/nodes/html-document/HTMLDocument.js +3 -23
  165. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  166. package/lib/nodes/html-element/DatasetUtility.js +9 -12
  167. package/lib/nodes/html-element/DatasetUtility.js.map +1 -1
  168. package/lib/nodes/html-element/HTMLElement.js +232 -290
  169. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  170. package/lib/nodes/html-form-element/HTMLFormElement.js +170 -235
  171. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  172. package/lib/nodes/html-image-element/HTMLImageElement.js +178 -237
  173. package/lib/nodes/html-image-element/HTMLImageElement.js.map +1 -1
  174. package/lib/nodes/html-image-element/Image.js +7 -27
  175. package/lib/nodes/html-image-element/Image.js.map +1 -1
  176. package/lib/nodes/html-input-element/HTMLInputElement.js +705 -872
  177. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  178. package/lib/nodes/html-input-element/HTMLInputElementValueSanitizer.js +9 -12
  179. package/lib/nodes/html-input-element/HTMLInputElementValueSanitizer.js.map +1 -1
  180. package/lib/nodes/html-input-element/HTMLInputElementValueStepping.js +5 -8
  181. package/lib/nodes/html-input-element/HTMLInputElementValueStepping.js.map +1 -1
  182. package/lib/nodes/html-input-element/ValidityState.js +47 -69
  183. package/lib/nodes/html-input-element/ValidityState.js.map +1 -1
  184. package/lib/nodes/html-label-element/HTMLLabelElement.js +53 -87
  185. package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
  186. package/lib/nodes/html-link-element/HTMLLinkElement.js +197 -252
  187. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  188. package/lib/nodes/html-meta-element/HTMLMetaElement.js +66 -102
  189. package/lib/nodes/html-meta-element/HTMLMetaElement.js.map +1 -1
  190. package/lib/nodes/html-script-element/HTMLScriptElement.js +145 -193
  191. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  192. package/lib/nodes/html-script-element/ScriptUtility.js +58 -112
  193. package/lib/nodes/html-script-element/ScriptUtility.js.map +1 -1
  194. package/lib/nodes/html-slot-element/HTMLSlotElement.js +33 -65
  195. package/lib/nodes/html-slot-element/HTMLSlotElement.js.map +1 -1
  196. package/lib/nodes/html-style-element/HTMLStyleElement.js +75 -109
  197. package/lib/nodes/html-style-element/HTMLStyleElement.js.map +1 -1
  198. package/lib/nodes/html-template-element/HTMLTemplateElement.js +60 -99
  199. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  200. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +349 -444
  201. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  202. package/lib/nodes/html-unknown-element/HTMLUnknownElement.js +17 -37
  203. package/lib/nodes/html-unknown-element/HTMLUnknownElement.js.map +1 -1
  204. package/lib/nodes/node/INode.d.ts +1 -0
  205. package/lib/nodes/node/Node.d.ts +6 -0
  206. package/lib/nodes/node/Node.js +193 -244
  207. package/lib/nodes/node/Node.js.map +1 -1
  208. package/lib/nodes/node/NodeList.js +4 -24
  209. package/lib/nodes/node/NodeList.js.map +1 -1
  210. package/lib/nodes/node/NodeListFactory.js +6 -9
  211. package/lib/nodes/node/NodeListFactory.js.map +1 -1
  212. package/lib/nodes/parent-node/ParentNodeUtility.js +43 -78
  213. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  214. package/lib/nodes/shadow-root/ShadowRoot.js +53 -83
  215. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  216. package/lib/nodes/svg-document/SVGDocument.js +3 -23
  217. package/lib/nodes/svg-document/SVGDocument.js.map +1 -1
  218. package/lib/nodes/svg-element/DOMMatrix.js +3 -4
  219. package/lib/nodes/svg-element/DOMMatrix.js.map +1 -1
  220. package/lib/nodes/svg-element/SVGAngle.js +10 -11
  221. package/lib/nodes/svg-element/SVGAngle.js.map +1 -1
  222. package/lib/nodes/svg-element/SVGAnimatedRect.js +4 -5
  223. package/lib/nodes/svg-element/SVGAnimatedRect.js.map +1 -1
  224. package/lib/nodes/svg-element/SVGElement.js +58 -93
  225. package/lib/nodes/svg-element/SVGElement.js.map +1 -1
  226. package/lib/nodes/svg-element/SVGGraphicsElement.js +14 -32
  227. package/lib/nodes/svg-element/SVGGraphicsElement.js.map +1 -1
  228. package/lib/nodes/svg-element/SVGLength.js +16 -17
  229. package/lib/nodes/svg-element/SVGLength.js.map +1 -1
  230. package/lib/nodes/svg-element/SVGNumber.js +3 -4
  231. package/lib/nodes/svg-element/SVGNumber.js.map +1 -1
  232. package/lib/nodes/svg-element/SVGPoint.js +3 -4
  233. package/lib/nodes/svg-element/SVGPoint.js.map +1 -1
  234. package/lib/nodes/svg-element/SVGRect.js +3 -4
  235. package/lib/nodes/svg-element/SVGRect.js.map +1 -1
  236. package/lib/nodes/svg-element/SVGSVGElement.js +187 -248
  237. package/lib/nodes/svg-element/SVGSVGElement.js.map +1 -1
  238. package/lib/nodes/svg-element/SVGTransform.js +16 -17
  239. package/lib/nodes/svg-element/SVGTransform.js.map +1 -1
  240. package/lib/nodes/text/Text.js +20 -43
  241. package/lib/nodes/text/Text.js.map +1 -1
  242. package/lib/nodes/xml-document/XMLDocument.js +3 -23
  243. package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
  244. package/lib/query-selector/QuerySelector.js +36 -44
  245. package/lib/query-selector/QuerySelector.js.map +1 -1
  246. package/lib/query-selector/SelectorItem.js +62 -66
  247. package/lib/query-selector/SelectorItem.js.map +1 -1
  248. package/lib/resize-observer/ResizeObserver.js +8 -11
  249. package/lib/resize-observer/ResizeObserver.js.map +1 -1
  250. package/lib/screen/Screen.js +3 -4
  251. package/lib/screen/Screen.js.map +1 -1
  252. package/lib/selection/Selection.js +29 -30
  253. package/lib/selection/Selection.js.map +1 -1
  254. package/lib/storage/Storage.js +22 -27
  255. package/lib/storage/Storage.js.map +1 -1
  256. package/lib/tree-walker/NodeFilterMask.js +1 -1
  257. package/lib/tree-walker/NodeFilterMask.js.map +1 -1
  258. package/lib/tree-walker/TreeWalker.js +30 -33
  259. package/lib/tree-walker/TreeWalker.js.map +1 -1
  260. package/lib/window/GlobalWindow.d.ts +84 -0
  261. package/lib/window/GlobalWindow.js +90 -0
  262. package/lib/window/GlobalWindow.js.map +1 -0
  263. package/lib/window/IWindow.d.ts +37 -18
  264. package/lib/window/VMGlobalPropertyScript.d.ts +2 -0
  265. package/lib/window/VMGlobalPropertyScript.js +65 -0
  266. package/lib/window/VMGlobalPropertyScript.js.map +1 -0
  267. package/lib/window/Window.d.ts +78 -105
  268. package/lib/window/Window.js +277 -489
  269. package/lib/window/Window.js.map +1 -1
  270. package/lib/xml-parser/XMLParser.js +65 -71
  271. package/lib/xml-parser/XMLParser.js.map +1 -1
  272. package/lib/xml-serializer/XMLSerializer.js +30 -37
  273. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  274. package/package.json +6 -7
  275. package/src/config/ElementTag.ts +2 -1
  276. package/src/config/NonImplemenetedElementClasses.ts +0 -1
  277. package/src/dom-parser/DOMParser.ts +4 -5
  278. package/src/event/IUIEventInit.ts +2 -2
  279. package/src/event/UIEvent.ts +2 -2
  280. package/src/fetch/FetchHandler.ts +3 -3
  281. package/src/fetch/ResourceFetchHandler.ts +3 -3
  282. package/src/index.ts +7 -3
  283. package/src/nodes/document/Document.ts +4 -4
  284. package/src/nodes/document/IDocument.ts +2 -2
  285. package/src/nodes/html-base-element/HTMLBaseElement.ts +61 -0
  286. package/src/nodes/html-base-element/IHTMLBaseElement.ts +21 -0
  287. package/src/nodes/html-link-element/HTMLLinkElement.ts +8 -2
  288. package/src/nodes/html-script-element/ScriptUtility.ts +4 -4
  289. package/src/nodes/node/INode.ts +1 -0
  290. package/src/nodes/node/Node.ts +14 -0
  291. package/src/window/GlobalWindow.ts +82 -0
  292. package/src/window/IWindow.ts +33 -12
  293. package/src/window/VMGlobalPropertyScript.ts +62 -0
  294. package/src/window/Window.ts +115 -173
  295. package/tsconfig.json +1 -1
  296. package/lib/window/AsyncWindow.d.ts +0 -10
  297. package/lib/window/AsyncWindow.js +0 -38
  298. package/lib/window/AsyncWindow.js.map +0 -1
  299. package/src/window/AsyncWindow.ts +0 -17
@@ -1,6 +1,7 @@
1
1
  import RelativeURL from '../location/RelativeURL';
2
2
  import DOMException from '../exception/DOMException';
3
3
  import IDocument from '../nodes/document/IDocument';
4
+ import SyncRequest from 'sync-request';
4
5
 
5
6
  /**
6
7
  * Helper class for performing fetch of resources.
@@ -32,9 +33,8 @@ export default class ResourceFetchHandler {
32
33
  */
33
34
  public static fetchSync(document: IDocument, url: string): string {
34
35
  // We want to only load SyncRequest when it is needed to improve performance and not have direct dependencies to server side packages.
35
- const syncRequest = require('sync-request');
36
36
  const absoluteURL = RelativeURL.getAbsoluteURL(document.defaultView.location, url);
37
- const response = syncRequest('GET', absoluteURL);
37
+ const response = SyncRequest('GET', absoluteURL);
38
38
 
39
39
  if (response.isError()) {
40
40
  throw new DOMException(
@@ -42,6 +42,6 @@ export default class ResourceFetchHandler {
42
42
  );
43
43
  }
44
44
 
45
- return response.getBody();
45
+ return response.getBody().toString();
46
46
  }
47
47
  }
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
- import Window from './window/Window';
1
+ import GlobalWindow from './window/GlobalWindow';
2
2
  import IWindow from './window/IWindow';
3
+ import Window from './window/Window';
3
4
  import DataTransfer from './event/DataTransfer';
4
5
  import DataTransferItem from './event/DataTransferItem';
5
6
  import DataTransferItemList from './event/DataTransferItemList';
@@ -40,7 +41,6 @@ import KeyboardEvent from './event/events/KeyboardEvent';
40
41
  import MouseEvent from './event/events/MouseEvent';
41
42
  import ProgressEvent from './event/events/ProgressEvent';
42
43
  import WheelEvent from './event/events/WheelEvent';
43
- import AsyncWindow from './window/AsyncWindow';
44
44
  import DOMParser from './dom-parser/DOMParser';
45
45
  import Document from './nodes/document/Document';
46
46
  import IDocument from './nodes/document/IDocument';
@@ -74,6 +74,8 @@ import HTMLLabelElement from './nodes/html-label-element/HTMLLabelElement';
74
74
  import IHTMLLabelElement from './nodes/html-label-element/IHTMLLabelElement';
75
75
  import HTMLMetaElement from './nodes/html-meta-element/HTMLMetaElement';
76
76
  import IHTMLMetaElement from './nodes/html-meta-element/IHTMLMetaElement';
77
+ import HTMLBaseElement from './nodes/html-base-element/HTMLBaseElement';
78
+ import IHTMLBaseElement from './nodes/html-base-element/IHTMLBaseElement';
77
79
  import SVGElement from './nodes/svg-element/SVGElement';
78
80
  import ISVGElement from './nodes/svg-element/ISVGElement';
79
81
  import SVGGraphicsElement from './nodes/svg-element/SVGGraphicsElement';
@@ -103,7 +105,7 @@ import { URLSearchParams } from 'url';
103
105
  import Selection from './selection/Selection';
104
106
 
105
107
  export {
106
- AsyncWindow,
108
+ GlobalWindow,
107
109
  Window,
108
110
  IWindow,
109
111
  DataTransfer,
@@ -179,6 +181,8 @@ export {
179
181
  IHTMLLabelElement,
180
182
  HTMLMetaElement,
181
183
  IHTMLMetaElement,
184
+ HTMLBaseElement,
185
+ IHTMLBaseElement,
182
186
  SVGElement,
183
187
  ISVGElement,
184
188
  SVGGraphicsElement,
@@ -2,7 +2,7 @@ import Element from '../element/Element';
2
2
  import HTMLUnknownElement from '../html-unknown-element/HTMLUnknownElement';
3
3
  import Text from '../text/Text';
4
4
  import Comment from '../comment/Comment';
5
- import Window from '../../window/Window';
5
+ import IWindow from '../../window/IWindow';
6
6
  import Node from '../node/Node';
7
7
  import TreeWalker from '../../tree-walker/TreeWalker';
8
8
  import DocumentFragment from '../document-fragment/DocumentFragment';
@@ -54,7 +54,7 @@ export default class Document extends Node implements IDocument {
54
54
  public _activeElement: IHTMLElement = null;
55
55
  protected _isFirstWrite = true;
56
56
  protected _isFirstWriteAfterOpen = false;
57
- private _defaultView: Window = null;
57
+ private _defaultView: IWindow = null;
58
58
  private _cookie = '';
59
59
 
60
60
  /**
@@ -103,7 +103,7 @@ export default class Document extends Node implements IDocument {
103
103
  *
104
104
  * @returns Default view.
105
105
  */
106
- public get defaultView(): Window {
106
+ public get defaultView(): IWindow {
107
107
  return this._defaultView;
108
108
  }
109
109
 
@@ -112,7 +112,7 @@ export default class Document extends Node implements IDocument {
112
112
  *
113
113
  * @param defaultView Default view.
114
114
  */
115
- public set defaultView(defaultView: Window) {
115
+ public set defaultView(defaultView: IWindow) {
116
116
  this._defaultView = defaultView;
117
117
  this._readyStateManager = new DocumentReadyStateManager(defaultView);
118
118
  this._readyStateManager.whenComplete().then(() => {
@@ -1,6 +1,6 @@
1
1
  import IElement from '../element/IElement';
2
2
  import IHTMLElement from '../html-element/IHTMLElement';
3
- import Window from '../../window/Window';
3
+ import IWindow from '../../window/IWindow';
4
4
  import TreeWalker from '../../tree-walker/TreeWalker';
5
5
  import Event from '../../event/Event';
6
6
  import DOMImplementation from '../../dom-implementation/DOMImplementation';
@@ -24,7 +24,7 @@ import INodeList from '../node/INodeList';
24
24
  */
25
25
  export default interface IDocument extends IParentNode {
26
26
  onreadystatechange: (event: Event) => void;
27
- readonly defaultView: Window;
27
+ readonly defaultView: IWindow;
28
28
  readonly implementation: DOMImplementation;
29
29
  readonly documentElement: IHTMLElement;
30
30
  readonly doctype: IDocumentType;
@@ -0,0 +1,61 @@
1
+ import HTMLElement from '../html-element/HTMLElement';
2
+ import IHTMLBaseElement from './IHTMLBaseElement';
3
+
4
+ /**
5
+ * HTML Base Element.
6
+ *
7
+ * Reference:
8
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base.
9
+ */
10
+ export default class HTMLBaseElement extends HTMLElement implements IHTMLBaseElement {
11
+ /**
12
+ * Returns href.
13
+ *
14
+ * @returns Href.
15
+ */
16
+ public get href(): string {
17
+ const href = this.getAttributeNS(null, 'href');
18
+ if (href !== null) {
19
+ return href;
20
+ }
21
+ return this.ownerDocument.location.href;
22
+ }
23
+
24
+ /**
25
+ * Sets href.
26
+ *
27
+ * @param href Href.
28
+ */
29
+ public set href(href: string) {
30
+ this.setAttributeNS(null, 'href', href);
31
+ }
32
+
33
+ /**
34
+ * Returns target.
35
+ *
36
+ * @returns Target.
37
+ */
38
+ public get target(): string {
39
+ return this.getAttributeNS(null, 'target') || '';
40
+ }
41
+
42
+ /**
43
+ * Sets target.
44
+ *
45
+ * @param target Target.
46
+ */
47
+ public set target(target: string) {
48
+ this.setAttributeNS(null, 'target', target);
49
+ }
50
+
51
+ /**
52
+ * Clones a node.
53
+ *
54
+ * @override
55
+ * @param [deep=false] "true" to clone deep.
56
+ * @returns Cloned node.
57
+ */
58
+ public cloneNode(deep = false): IHTMLBaseElement {
59
+ return <IHTMLBaseElement>super.cloneNode(deep);
60
+ }
61
+ }
@@ -0,0 +1,21 @@
1
+ import IHTMLElement from '../html-element/IHTMLElement';
2
+
3
+ /**
4
+ * HTML Base Element.
5
+ *
6
+ * Reference:
7
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base.
8
+ */
9
+ export default interface IHTMLBaseElement extends IHTMLElement {
10
+ href: string;
11
+ target: string;
12
+
13
+ /**
14
+ * Clones a node.
15
+ *
16
+ * @override
17
+ * @param [deep=false] "true" to clone deep.
18
+ * @returns Cloned node.
19
+ */
20
+ cloneNode(deep: boolean): IHTMLBaseElement;
21
+ }
@@ -221,7 +221,10 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
221
221
  })
222
222
  );
223
223
  (<Document>this.ownerDocument)._readyStateManager.endTask();
224
- if (!this._listeners['error'] && !this.ownerDocument.defaultView._listeners['error']) {
224
+ if (
225
+ !this['_listeners']['error'] &&
226
+ !this.ownerDocument.defaultView['_listeners']['error']
227
+ ) {
225
228
  this.ownerDocument.defaultView.console.error(error);
226
229
  }
227
230
  });
@@ -267,7 +270,10 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
267
270
  })
268
271
  );
269
272
  (<Document>this.ownerDocument)._readyStateManager.endTask();
270
- if (!this._listeners['error'] && !this.ownerDocument.defaultView._listeners['error']) {
273
+ if (
274
+ !this['_listeners']['error'] &&
275
+ !this.ownerDocument.defaultView['_listeners']['error']
276
+ ) {
271
277
  this.ownerDocument.defaultView.console.error(error);
272
278
  }
273
279
  });
@@ -37,8 +37,8 @@ export default class ScriptUtility {
37
37
  })
38
38
  );
39
39
  if (
40
- !element._listeners['error'] &&
41
- !element.ownerDocument.defaultView._listeners['error']
40
+ !element['_listeners']['error'] &&
41
+ !element.ownerDocument.defaultView['_listeners']['error']
42
42
  ) {
43
43
  element.ownerDocument.defaultView.console.error(error);
44
44
  }
@@ -66,8 +66,8 @@ export default class ScriptUtility {
66
66
  })
67
67
  );
68
68
  if (
69
- !element._listeners['error'] &&
70
- !element.ownerDocument.defaultView._listeners['error']
69
+ !element['_listeners']['error'] &&
70
+ !element.ownerDocument.defaultView['_listeners']['error']
71
71
  ) {
72
72
  element.ownerDocument.defaultView.console.error(error);
73
73
  }
@@ -21,6 +21,7 @@ export default interface INode extends IEventTarget {
21
21
  readonly nextSibling: INode;
22
22
  readonly firstChild: INode;
23
23
  readonly lastChild: INode;
24
+ readonly baseURI: string;
24
25
  nodeValue: string;
25
26
  textContent: string;
26
27
  connectedCallback?(): void;
@@ -7,6 +7,7 @@ import INode from './INode';
7
7
  import DOMException from '../../exception/DOMException';
8
8
  import IDocument from '../document/IDocument';
9
9
  import IElement from '../element/IElement';
10
+ import IHTMLBaseElement from '../html-base-element/IHTMLBaseElement';
10
11
  import INodeList from './INodeList';
11
12
  import NodeListFactory from './NodeListFactory';
12
13
 
@@ -156,6 +157,19 @@ export default class Node extends EventTarget implements INode {
156
157
  return <IElement>parent;
157
158
  }
158
159
 
160
+ /**
161
+ * Returns base URI.
162
+ *
163
+ * @returns Base URI.
164
+ */
165
+ public get baseURI(): string {
166
+ const base = <IHTMLBaseElement>this.ownerDocument.querySelector('base');
167
+ if (base) {
168
+ return base.href;
169
+ }
170
+ return this.ownerDocument.location.href;
171
+ }
172
+
159
173
  /**
160
174
  * Connected callback.
161
175
  */
@@ -0,0 +1,82 @@
1
+ import Window from './Window';
2
+
3
+ /**
4
+ * Browser window.
5
+ *
6
+ * Reference:
7
+ * https://developer.mozilla.org/en-US/docs/Web/API/Window.
8
+ */
9
+ export default class GlobalWindow extends Window {
10
+ // Node.js Globals
11
+ public ArrayBuffer = globalThis.ArrayBuffer;
12
+ public Boolean = globalThis.Boolean;
13
+ public Buffer = globalThis.global ? globalThis.global.Buffer : Buffer;
14
+ public DataView = globalThis.DataView;
15
+ public Date = globalThis.Date;
16
+ public Error = globalThis.Error;
17
+ public EvalError = globalThis.EvalError;
18
+ public Float32Array = globalThis.Float32Array;
19
+ public Float64Array = globalThis.Float64Array;
20
+ public GLOBAL = globalThis.GLOBAL;
21
+ public Infinity = globalThis.Infinity;
22
+ public Int16Array = globalThis.Int16Array;
23
+ public Int32Array = globalThis.Int32Array;
24
+ public Int8Array = globalThis.Int8Array;
25
+ public Intl = globalThis.Intl;
26
+ public JSON = globalThis.JSON;
27
+ public Map = globalThis.Map;
28
+ public Math = globalThis.Math;
29
+ public NaN = globalThis.NaN;
30
+ public Number = globalThis.Number;
31
+ public Promise = globalThis.Promise;
32
+ public RangeError = globalThis.RangeError;
33
+ public ReferenceError = globalThis.ReferenceError;
34
+ public RegExp = globalThis.RegExp;
35
+ public Reflect = globalThis.ArrayBuffer;
36
+ public Set = globalThis.Set;
37
+ public Symbol = globalThis.Symbol;
38
+ public SyntaxError = globalThis.SyntaxError;
39
+ public String = globalThis.String;
40
+ public TypeError = globalThis.TypeError;
41
+ public URIError = globalThis.URIError;
42
+ public Uint16Array = globalThis.Uint16Array;
43
+ public Uint32Array = globalThis.Uint32Array;
44
+ public Uint8Array = globalThis.Uint8Array;
45
+ public Uint8ClampedArray = globalThis.Uint8ClampedArray;
46
+ public WeakMap = globalThis.WeakMap;
47
+ public WeakSet = globalThis.WeakSet;
48
+ public clearImmediate = globalThis.clearImmediate;
49
+ public decodeURI = globalThis.decodeURI;
50
+ public decodeURIComponent = globalThis.decodeURIComponent;
51
+ public encodeURI = globalThis.encodeURI;
52
+ public encodeURIComponent = globalThis.encodeURIComponent;
53
+ public escape = globalThis.escape;
54
+ public global = globalThis.global;
55
+ public isFinite = globalThis.isFinite;
56
+ public isNaN = globalThis.isNaN;
57
+ public parseFloat = globalThis.parseFloat;
58
+ public parseInt = globalThis.parseInt;
59
+ public process = globalThis.process;
60
+ public root = globalThis.ArrayBuffer;
61
+ public setImmediate = globalThis.setImmediate;
62
+ public queueMicrotask = globalThis.queueMicrotask;
63
+ public undefined = globalThis.ArrayBuffer;
64
+ public unescape = globalThis.unescape;
65
+ public gc = globalThis.gc;
66
+ public v8debug = globalThis.v8debug;
67
+ public AbortController = globalThis.AbortController;
68
+ public AbortSignal = globalThis.AbortSignal;
69
+ public Array = globalThis.Array;
70
+ public Object = globalThis.Object;
71
+ public Function = globalThis.Function;
72
+
73
+ /**
74
+ * Evaluates code.
75
+ *
76
+ * @param code Code.
77
+ * @returns Result.
78
+ */
79
+ public eval(code: string): unknown {
80
+ return eval(code);
81
+ }
82
+ }
@@ -11,6 +11,7 @@ import Element from '../nodes/element/Element';
11
11
  import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement';
12
12
  import HTMLFormElement from '../nodes/html-form-element/HTMLFormElement';
13
13
  import HTMLElement from '../nodes/html-element/HTMLElement';
14
+ import IHTMLElement from '../nodes/html-element/IHTMLElement';
14
15
  import HTMLUnknownElement from '../nodes/html-unknown-element/HTMLUnknownElement';
15
16
  import HTMLInputElement from '../nodes/html-input-element/HTMLInputElement';
16
17
  import HTMLTextAreaElement from '../nodes/html-text-area-element/HTMLTextAreaElement';
@@ -19,6 +20,7 @@ import HTMLStyleElement from '../nodes/html-style-element/HTMLStyleElement';
19
20
  import HTMLSlotElement from '../nodes/html-slot-element/HTMLSlotElement';
20
21
  import HTMLLabelElement from '../nodes/html-label-element/HTMLLabelElement';
21
22
  import HTMLMetaElement from '../nodes/html-meta-element/HTMLMetaElement';
23
+ import HTMLBaseElement from '../nodes/html-base-element/HTMLBaseElement';
22
24
  import SVGSVGElement from '../nodes/svg-element/SVGSVGElement';
23
25
  import SVGElement from '../nodes/svg-element/SVGElement';
24
26
  import HTMLScriptElement from '../nodes/html-script-element/HTMLScriptElement';
@@ -61,14 +63,8 @@ import ErrorEvent from '../event/events/ErrorEvent';
61
63
  import StorageEvent from '../event/events/StorageEvent';
62
64
  import Screen from '../screen/Screen';
63
65
  import AsyncTaskManager from '../async-task-manager/AsyncTaskManager';
64
- import IResponse from '../fetch/IResponse';
65
- import IResponseInit from '../fetch/IResponseInit';
66
- import IRequest from '../fetch/IRequest';
67
- import IRequestInit from '../fetch/IRequestInit';
68
- import IHeaders from '../fetch/IHeaders';
69
66
  import Storage from '../storage/Storage';
70
67
  import NodeFilter from '../tree-walker/NodeFilter';
71
- import Window from './Window';
72
68
  import HTMLCollection from '../nodes/element/HTMLCollection';
73
69
  import NodeList from '../nodes/node/NodeList';
74
70
  import Selection from '../selection/Selection';
@@ -78,12 +74,20 @@ import MimeType from '../navigator/MimeType';
78
74
  import MimeTypeArray from '../navigator/MimeTypeArray';
79
75
  import Plugin from '../navigator/Plugin';
80
76
  import PluginArray from '../navigator/PluginArray';
77
+ import IResponseInit from '../fetch/IResponseInit';
78
+ import IRequest from '../fetch/IRequest';
79
+ import IHeaders from '../fetch/IHeaders';
80
+ import IRequestInit from '../fetch/IRequestInit';
81
+ import IResponse from '../fetch/IResponse';
82
+ import MediaQueryList from '../match-media/MediaQueryList';
83
+ import Window from './Window';
81
84
  import { URLSearchParams } from 'url';
85
+ import { Performance } from 'perf_hooks';
82
86
 
83
87
  /**
84
- * Window.
88
+ * Window without dependencies to server side specific packages.
85
89
  */
86
- export default interface IWindow extends IEventTarget {
90
+ export default interface IWindow extends IEventTarget, NodeJS.Global {
87
91
  // Public Properties
88
92
  readonly happyDOM: {
89
93
  whenAsyncComplete: () => Promise<void>;
@@ -106,6 +110,7 @@ export default interface IWindow extends IEventTarget {
106
110
  readonly HTMLSlotElement: typeof HTMLSlotElement;
107
111
  readonly HTMLLabelElement: typeof HTMLLabelElement;
108
112
  readonly HTMLMetaElement: typeof HTMLMetaElement;
113
+ readonly HTMLBaseElement: typeof HTMLBaseElement;
109
114
  readonly SVGSVGElement: typeof SVGSVGElement;
110
115
  readonly SVGElement: typeof SVGElement;
111
116
  readonly Image: typeof Image;
@@ -144,9 +149,6 @@ export default interface IWindow extends IEventTarget {
144
149
  readonly Location: typeof Location;
145
150
  readonly CustomElementRegistry: typeof CustomElementRegistry;
146
151
  readonly Window: typeof Window;
147
- readonly Headers: { new (init?: string[][] | Record<string, string> | IHeaders): IHeaders };
148
- readonly Request: { new (input: string | IRequest, init?: IRequestInit): IRequest };
149
- readonly Response: { new (body?: unknown | null, init?: IResponseInit): IResponse };
150
152
  readonly XMLSerializer: typeof XMLSerializer;
151
153
  readonly ResizeObserver: typeof ResizeObserver;
152
154
  readonly CSSStyleSheet: typeof CSSStyleSheet;
@@ -168,6 +170,9 @@ export default interface IWindow extends IEventTarget {
168
170
  readonly MimeTypeArray: typeof MimeTypeArray;
169
171
  readonly Plugin: typeof Plugin;
170
172
  readonly PluginArray: typeof PluginArray;
173
+ readonly Headers: { new (init?: string[][] | Record<string, string> | IHeaders): IHeaders };
174
+ readonly Request: { new (input: string | IRequest, init?: IRequestInit): IRequest };
175
+ readonly Response: { new (body?: unknown | null, init?: IResponseInit): IResponse };
171
176
 
172
177
  // Events
173
178
  onload: (event: Event) => void;
@@ -190,6 +195,7 @@ export default interface IWindow extends IEventTarget {
190
195
  readonly innerHeight: number;
191
196
  readonly sessionStorage: Storage;
192
197
  readonly localStorage: Storage;
198
+ readonly performance: Performance;
193
199
 
194
200
  /**
195
201
  * Evaluates code.
@@ -205,7 +211,14 @@ export default interface IWindow extends IEventTarget {
205
211
  * @param element Element.
206
212
  * @returns CSS style declaration.
207
213
  */
208
- getComputedStyle(element: HTMLElement): CSSStyleDeclaration;
214
+ getComputedStyle(element: IHTMLElement): CSSStyleDeclaration;
215
+
216
+ /**
217
+ * Returns selection.
218
+ *
219
+ * @returns Selection.
220
+ */
221
+ getSelection(): Selection;
209
222
 
210
223
  /**
211
224
  * Scrolls to a particular set of coordinates.
@@ -223,6 +236,14 @@ export default interface IWindow extends IEventTarget {
223
236
  */
224
237
  scrollTo(x: { top?: number; left?: number; behavior?: string } | number, y?: number): void;
225
238
 
239
+ /**
240
+ * Returns a new MediaQueryList object that can then be used to determine if the document matches the media query string.
241
+ *
242
+ * @param mediaQueryString A string specifying the media query to parse into a MediaQueryList.
243
+ * @returns A new MediaQueryList.
244
+ */
245
+ matchMedia(mediaQueryString: string): MediaQueryList;
246
+
226
247
  /**
227
248
  * Sets a timer which executes a function once the timer expires.
228
249
  *
@@ -0,0 +1,62 @@
1
+ export default `
2
+ this.ArrayBuffer = globalThis.ArrayBuffer;
3
+ this.Boolean = globalThis.Boolean;
4
+ this.DataView = globalThis.DataView;
5
+ this.Date = globalThis.Date;
6
+ this.Error = globalThis.Error;
7
+ this.EvalError = globalThis.EvalError;
8
+ this.Float32Array = globalThis.Float32Array;
9
+ this.Float64Array = globalThis.Float64Array;
10
+ this.GLOBAL = globalThis.GLOBAL;
11
+ this.Infinity = globalThis.Infinity;
12
+ this.Int16Array = globalThis.Int16Array;
13
+ this.Int32Array = globalThis.Int32Array;
14
+ this.Int8Array = globalThis.Int8Array;
15
+ this.Intl = globalThis.Intl;
16
+ this.JSON = globalThis.JSON;
17
+ this.Map = globalThis.Map;
18
+ this.Math = globalThis.Math;
19
+ this.NaN = globalThis.NaN;
20
+ this.Number = globalThis.Number;
21
+ this.Promise = globalThis.Promise;
22
+ this.RangeError = globalThis.RangeError;
23
+ this.ReferenceError = globalThis.ReferenceError;
24
+ this.RegExp = globalThis.RegExp;
25
+ this.Reflect = globalThis.Reflect;
26
+ this.Set = globalThis.Set;
27
+ this.Symbol = globalThis.Symbol;
28
+ this.SyntaxError = globalThis.SyntaxError;
29
+ this.String = globalThis.String;
30
+ this.TypeError = globalThis.TypeError;
31
+ this.URIError = globalThis.URIError;
32
+ this.Uint16Array = globalThis.Uint16Array;
33
+ this.Uint32Array = globalThis.Uint32Array;
34
+ this.Uint8Array = globalThis.Uint8Array;
35
+ this.Uint8ClampedArray = globalThis.Uint8ClampedArray;
36
+ this.WeakMap = globalThis.WeakMap;
37
+ this.WeakSet = globalThis.WeakSet;
38
+ this.clearImmediate = globalThis.clearImmediate;
39
+ this.decodeURI = globalThis.decodeURI;
40
+ this.decodeURIComponent = globalThis.decodeURIComponent;
41
+ this.encodeURI = globalThis.encodeURI;
42
+ this.encodeURIComponent = globalThis.encodeURIComponent;
43
+ this.escape = globalThis.escape;
44
+ this.global = globalThis.global;
45
+ this.isFinite = globalThis.isFinite;
46
+ this.isNaN = globalThis.isNaN;
47
+ this.parseFloat = globalThis.parseFloat;
48
+ this.parseInt = globalThis.parseInt;
49
+ this.process = globalThis.process;
50
+ this.root = globalThis.root;
51
+ this.setImmediate = globalThis.setImmediate;
52
+ this.queueMicrotask = globalThis.queueMicrotask;
53
+ this.undefined = globalThis.undefined;
54
+ this.unescape = globalThis.unescape;
55
+ this.gc = globalThis.gc;
56
+ this.v8debug = globalThis.v8debug;
57
+ this.AbortController = globalThis.AbortController;
58
+ this.AbortSignal = globalThis.AbortSignal;
59
+ this.Array = globalThis.Array;
60
+ this.Object = globalThis.Object;
61
+ this.Function = globalThis.Function;
62
+ `;