happy-dom 15.11.7 → 16.0.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 (485) hide show
  1. package/cjs/PropertySymbol.cjs +12 -9
  2. package/cjs/PropertySymbol.cjs.map +1 -1
  3. package/cjs/PropertySymbol.d.ts +4 -1
  4. package/cjs/PropertySymbol.d.ts.map +1 -1
  5. package/cjs/config/HTMLElementConfig.cjs +42 -16
  6. package/cjs/config/HTMLElementConfig.cjs.map +1 -1
  7. package/cjs/config/HTMLElementConfig.d.ts +7 -0
  8. package/cjs/config/HTMLElementConfig.d.ts.map +1 -1
  9. package/cjs/config/HTMLElementConfigContentModelEnum.cjs +3 -0
  10. package/cjs/config/HTMLElementConfigContentModelEnum.cjs.map +1 -1
  11. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  12. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  13. package/cjs/config/NamespaceURI.cjs +2 -0
  14. package/cjs/config/NamespaceURI.cjs.map +1 -1
  15. package/cjs/config/NamespaceURI.d.ts +2 -0
  16. package/cjs/config/NamespaceURI.d.ts.map +1 -1
  17. package/cjs/css/declaration/CSSStyleDeclaration.cjs +1 -1
  18. package/cjs/css/declaration/CSSStyleDeclaration.cjs.map +1 -1
  19. package/cjs/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  20. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs +2 -2
  21. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs.map +1 -1
  22. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  23. package/cjs/css/rules/CSSStyleRule.cjs +1 -1
  24. package/cjs/css/rules/CSSStyleRule.cjs.map +1 -1
  25. package/cjs/css/rules/CSSStyleRule.d.ts +1 -1
  26. package/cjs/css/rules/CSSStyleRule.d.ts.map +1 -1
  27. package/cjs/custom-element/CustomElementReactionStack.cjs +104 -0
  28. package/cjs/custom-element/CustomElementReactionStack.cjs.map +1 -0
  29. package/cjs/custom-element/CustomElementReactionStack.d.ts +27 -0
  30. package/cjs/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  31. package/cjs/custom-element/CustomElementRegistry.cjs +32 -45
  32. package/cjs/custom-element/CustomElementRegistry.cjs.map +1 -1
  33. package/cjs/custom-element/CustomElementRegistry.d.ts +2 -6
  34. package/cjs/custom-element/CustomElementRegistry.d.ts.map +1 -1
  35. package/cjs/custom-element/CustomElementUtility.cjs +35 -0
  36. package/cjs/custom-element/CustomElementUtility.cjs.map +1 -0
  37. package/cjs/custom-element/CustomElementUtility.d.ts +14 -0
  38. package/cjs/custom-element/CustomElementUtility.d.ts.map +1 -0
  39. package/cjs/custom-element/ICustomElementDefinition.cjs +3 -0
  40. package/cjs/custom-element/ICustomElementDefinition.cjs.map +1 -0
  41. package/cjs/custom-element/ICustomElementDefinition.d.ts +12 -0
  42. package/cjs/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  43. package/cjs/dom/DOMStringMap.cjs +8 -8
  44. package/cjs/dom/DOMStringMap.cjs.map +1 -1
  45. package/cjs/dom/DOMStringMap.d.ts.map +1 -1
  46. package/cjs/dom/DOMTokenList.cjs +1 -1
  47. package/cjs/dom/DOMTokenList.cjs.map +1 -1
  48. package/cjs/dom-parser/DOMParser.cjs +5 -67
  49. package/cjs/dom-parser/DOMParser.cjs.map +1 -1
  50. package/cjs/dom-parser/DOMParser.d.ts +0 -1
  51. package/cjs/dom-parser/DOMParser.d.ts.map +1 -1
  52. package/cjs/exception/DOMExceptionNameEnum.cjs +1 -0
  53. package/cjs/exception/DOMExceptionNameEnum.cjs.map +1 -1
  54. package/cjs/exception/DOMExceptionNameEnum.d.ts +2 -1
  55. package/cjs/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  56. package/cjs/history/History.cjs +6 -6
  57. package/cjs/history/History.cjs.map +1 -1
  58. package/cjs/html-parser/HTMLParser.cjs +726 -0
  59. package/cjs/html-parser/HTMLParser.cjs.map +1 -0
  60. package/cjs/html-parser/HTMLParser.d.ts +91 -0
  61. package/cjs/html-parser/HTMLParser.d.ts.map +1 -0
  62. package/cjs/html-serializer/HTMLSerializer.cjs +152 -0
  63. package/cjs/html-serializer/HTMLSerializer.cjs.map +1 -0
  64. package/cjs/html-serializer/HTMLSerializer.d.ts +36 -0
  65. package/cjs/html-serializer/HTMLSerializer.d.ts.map +1 -0
  66. package/cjs/nodes/document/Document.cjs +104 -120
  67. package/cjs/nodes/document/Document.cjs.map +1 -1
  68. package/cjs/nodes/document/Document.d.ts +8 -0
  69. package/cjs/nodes/document/Document.d.ts.map +1 -1
  70. package/cjs/nodes/element/Element.cjs +35 -53
  71. package/cjs/nodes/element/Element.cjs.map +1 -1
  72. package/cjs/nodes/element/Element.d.ts +2 -12
  73. package/cjs/nodes/element/Element.d.ts.map +1 -1
  74. package/cjs/nodes/element/HTMLCollection.cjs +5 -9
  75. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  76. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  77. package/cjs/nodes/element/NamedNodeMap.cjs +39 -52
  78. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  79. package/cjs/nodes/element/NamedNodeMap.d.ts +1 -16
  80. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  81. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +12 -14
  82. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
  83. package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  84. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +1 -1
  85. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  86. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  87. package/cjs/nodes/html-document/HTMLDocument.cjs +33 -2
  88. package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
  89. package/cjs/nodes/html-document/HTMLDocument.d.ts +10 -0
  90. package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  91. package/cjs/nodes/html-element/HTMLElement.cjs +58 -22
  92. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  93. package/cjs/nodes/html-element/HTMLElement.d.ts +34 -0
  94. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  95. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs +1 -1
  96. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs.map +1 -1
  97. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  98. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +5 -8
  99. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  100. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  101. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +1 -1
  102. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  103. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +1 -1
  104. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  105. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  106. package/cjs/nodes/html-media-element/TextTrackList.cjs +1 -1
  107. package/cjs/nodes/html-media-element/TextTrackList.cjs.map +1 -1
  108. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +1 -1
  109. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
  110. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  111. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs +1 -1
  112. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs.map +1 -1
  113. package/cjs/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  114. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -1
  115. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  116. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  117. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -2
  118. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  119. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  120. package/cjs/nodes/html-table-element/HTMLTableElement.cjs +9 -1
  121. package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
  122. package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  123. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +1 -1
  124. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +15 -17
  125. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
  126. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  127. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  128. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -1
  129. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  130. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  131. package/cjs/nodes/node/Node.cjs +44 -48
  132. package/cjs/nodes/node/Node.cjs.map +1 -1
  133. package/cjs/nodes/node/Node.d.ts +2 -10
  134. package/cjs/nodes/node/Node.d.ts.map +1 -1
  135. package/cjs/nodes/node/NodeList.cjs +1 -1
  136. package/cjs/nodes/node/NodeList.cjs.map +1 -1
  137. package/cjs/nodes/node/NodeUtility.cjs +4 -3
  138. package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
  139. package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
  140. package/cjs/nodes/parent-node/ParentNodeUtility.cjs +5 -2
  141. package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
  142. package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  143. package/cjs/nodes/shadow-root/ShadowRoot.cjs +8 -8
  144. package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
  145. package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  146. package/cjs/nodes/xml-document/XMLDocument.cjs +26 -0
  147. package/cjs/nodes/xml-document/XMLDocument.cjs.map +1 -1
  148. package/cjs/nodes/xml-document/XMLDocument.d.ts +2 -0
  149. package/cjs/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  150. package/cjs/query-selector/SelectorItem.cjs +1 -2
  151. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  152. package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
  153. package/cjs/range/Range.cjs +3 -3
  154. package/cjs/range/Range.cjs.map +1 -1
  155. package/cjs/range/Range.d.ts.map +1 -1
  156. package/cjs/storage/Storage.cjs +1 -1
  157. package/cjs/storage/Storage.cjs.map +1 -1
  158. package/cjs/svg/SVGLengthList.cjs +1 -1
  159. package/cjs/svg/SVGLengthList.cjs.map +1 -1
  160. package/cjs/svg/SVGNumberList.cjs +1 -1
  161. package/cjs/svg/SVGNumberList.cjs.map +1 -1
  162. package/cjs/svg/SVGPointList.cjs +1 -1
  163. package/cjs/svg/SVGPointList.cjs.map +1 -1
  164. package/cjs/svg/SVGStringList.cjs +1 -1
  165. package/cjs/svg/SVGStringList.cjs.map +1 -1
  166. package/cjs/svg/SVGTransformList.cjs +1 -1
  167. package/cjs/svg/SVGTransformList.cjs.map +1 -1
  168. package/cjs/tree-walker/NodeIterator.cjs +63 -6
  169. package/cjs/tree-walker/NodeIterator.cjs.map +1 -1
  170. package/cjs/tree-walker/NodeIterator.d.ts +18 -3
  171. package/cjs/tree-walker/NodeIterator.d.ts.map +1 -1
  172. package/cjs/tree-walker/TreeWalker.cjs +6 -6
  173. package/cjs/tree-walker/TreeWalker.cjs.map +1 -1
  174. package/cjs/tree-walker/TreeWalker.d.ts +2 -1
  175. package/cjs/tree-walker/TreeWalker.d.ts.map +1 -1
  176. package/cjs/utilities/ClassMethodBinder.cjs.map +1 -0
  177. package/cjs/utilities/ClassMethodBinder.d.ts.map +1 -0
  178. package/cjs/utilities/StringUtility.cjs.map +1 -0
  179. package/cjs/utilities/StringUtility.d.ts.map +1 -0
  180. package/cjs/utilities/XMLEncodeUtility.cjs +119 -0
  181. package/cjs/utilities/XMLEncodeUtility.cjs.map +1 -0
  182. package/cjs/utilities/XMLEncodeUtility.d.ts +48 -0
  183. package/cjs/utilities/XMLEncodeUtility.d.ts.map +1 -0
  184. package/cjs/window/BrowserWindow.cjs +5 -3
  185. package/cjs/window/BrowserWindow.cjs.map +1 -1
  186. package/cjs/window/BrowserWindow.d.ts +2 -0
  187. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  188. package/cjs/window/WindowErrorUtility.cjs +1 -1
  189. package/cjs/window/WindowErrorUtility.cjs.map +1 -1
  190. package/cjs/xml-http-request/XMLHttpRequest.cjs +2 -1
  191. package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
  192. package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  193. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs +1 -1
  194. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs.map +1 -1
  195. package/cjs/xml-parser/XMLParser.cjs +531 -242
  196. package/cjs/xml-parser/XMLParser.cjs.map +1 -1
  197. package/cjs/xml-parser/XMLParser.d.ts +89 -19
  198. package/cjs/xml-parser/XMLParser.d.ts.map +1 -1
  199. package/cjs/xml-serializer/XMLSerializer.cjs +136 -40
  200. package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
  201. package/cjs/xml-serializer/XMLSerializer.d.ts +6 -17
  202. package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
  203. package/lib/PropertySymbol.d.ts +4 -1
  204. package/lib/PropertySymbol.d.ts.map +1 -1
  205. package/lib/PropertySymbol.js +4 -1
  206. package/lib/PropertySymbol.js.map +1 -1
  207. package/lib/config/HTMLElementConfig.d.ts +7 -0
  208. package/lib/config/HTMLElementConfig.d.ts.map +1 -1
  209. package/lib/config/HTMLElementConfig.js +42 -16
  210. package/lib/config/HTMLElementConfig.js.map +1 -1
  211. package/lib/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  212. package/lib/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  213. package/lib/config/HTMLElementConfigContentModelEnum.js +3 -0
  214. package/lib/config/HTMLElementConfigContentModelEnum.js.map +1 -1
  215. package/lib/config/NamespaceURI.d.ts +2 -0
  216. package/lib/config/NamespaceURI.d.ts.map +1 -1
  217. package/lib/config/NamespaceURI.js +2 -0
  218. package/lib/config/NamespaceURI.js.map +1 -1
  219. package/lib/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  220. package/lib/css/declaration/CSSStyleDeclaration.js +1 -1
  221. package/lib/css/declaration/CSSStyleDeclaration.js.map +1 -1
  222. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  223. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js +2 -2
  224. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js.map +1 -1
  225. package/lib/css/rules/CSSStyleRule.d.ts +1 -1
  226. package/lib/css/rules/CSSStyleRule.d.ts.map +1 -1
  227. package/lib/css/rules/CSSStyleRule.js +1 -1
  228. package/lib/css/rules/CSSStyleRule.js.map +1 -1
  229. package/lib/custom-element/CustomElementReactionStack.d.ts +27 -0
  230. package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  231. package/lib/custom-element/CustomElementReactionStack.js +75 -0
  232. package/lib/custom-element/CustomElementReactionStack.js.map +1 -0
  233. package/lib/custom-element/CustomElementRegistry.d.ts +2 -6
  234. package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
  235. package/lib/custom-element/CustomElementRegistry.js +32 -45
  236. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  237. package/lib/custom-element/CustomElementUtility.d.ts +14 -0
  238. package/lib/custom-element/CustomElementUtility.d.ts.map +1 -0
  239. package/lib/custom-element/CustomElementUtility.js +32 -0
  240. package/lib/custom-element/CustomElementUtility.js.map +1 -0
  241. package/lib/custom-element/ICustomElementDefinition.d.ts +12 -0
  242. package/lib/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  243. package/lib/custom-element/ICustomElementDefinition.js +2 -0
  244. package/lib/custom-element/ICustomElementDefinition.js.map +1 -0
  245. package/lib/dom/DOMStringMap.d.ts.map +1 -1
  246. package/lib/dom/DOMStringMap.js +8 -8
  247. package/lib/dom/DOMStringMap.js.map +1 -1
  248. package/lib/dom/DOMTokenList.js +1 -1
  249. package/lib/dom/DOMTokenList.js.map +1 -1
  250. package/lib/dom-parser/DOMParser.d.ts +0 -1
  251. package/lib/dom-parser/DOMParser.d.ts.map +1 -1
  252. package/lib/dom-parser/DOMParser.js +5 -67
  253. package/lib/dom-parser/DOMParser.js.map +1 -1
  254. package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
  255. package/lib/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  256. package/lib/exception/DOMExceptionNameEnum.js +1 -0
  257. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  258. package/lib/history/History.js +6 -6
  259. package/lib/history/History.js.map +1 -1
  260. package/lib/html-parser/HTMLParser.d.ts +91 -0
  261. package/lib/html-parser/HTMLParser.d.ts.map +1 -0
  262. package/lib/html-parser/HTMLParser.js +697 -0
  263. package/lib/html-parser/HTMLParser.js.map +1 -0
  264. package/lib/html-serializer/HTMLSerializer.d.ts +36 -0
  265. package/lib/html-serializer/HTMLSerializer.d.ts.map +1 -0
  266. package/lib/html-serializer/HTMLSerializer.js +123 -0
  267. package/lib/html-serializer/HTMLSerializer.js.map +1 -0
  268. package/lib/nodes/document/Document.d.ts +8 -0
  269. package/lib/nodes/document/Document.d.ts.map +1 -1
  270. package/lib/nodes/document/Document.js +105 -121
  271. package/lib/nodes/document/Document.js.map +1 -1
  272. package/lib/nodes/element/Element.d.ts +2 -12
  273. package/lib/nodes/element/Element.d.ts.map +1 -1
  274. package/lib/nodes/element/Element.js +35 -53
  275. package/lib/nodes/element/Element.js.map +1 -1
  276. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  277. package/lib/nodes/element/HTMLCollection.js +5 -9
  278. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  279. package/lib/nodes/element/NamedNodeMap.d.ts +1 -16
  280. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  281. package/lib/nodes/element/NamedNodeMap.js +39 -52
  282. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  283. package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  284. package/lib/nodes/element/NamedNodeMapProxyFactory.js +12 -14
  285. package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
  286. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  287. package/lib/nodes/html-button-element/HTMLButtonElement.js +1 -1
  288. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  289. package/lib/nodes/html-document/HTMLDocument.d.ts +10 -0
  290. package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  291. package/lib/nodes/html-document/HTMLDocument.js +33 -2
  292. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  293. package/lib/nodes/html-element/HTMLElement.d.ts +34 -0
  294. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  295. package/lib/nodes/html-element/HTMLElement.js +58 -22
  296. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  297. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  298. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js +1 -1
  299. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js.map +1 -1
  300. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  301. package/lib/nodes/html-form-element/HTMLFormElement.js +5 -8
  302. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  303. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +1 -1
  304. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  305. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  306. package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
  307. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  308. package/lib/nodes/html-media-element/TextTrackList.js +1 -1
  309. package/lib/nodes/html-media-element/TextTrackList.js.map +1 -1
  310. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  311. package/lib/nodes/html-object-element/HTMLObjectElement.js +1 -1
  312. package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
  313. package/lib/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  314. package/lib/nodes/html-output-element/HTMLOutputElement.js +1 -1
  315. package/lib/nodes/html-output-element/HTMLOutputElement.js.map +1 -1
  316. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  317. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -1
  318. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  319. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  320. package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -2
  321. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  322. package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  323. package/lib/nodes/html-table-element/HTMLTableElement.js +9 -1
  324. package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
  325. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +1 -1
  326. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  327. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  328. package/lib/nodes/html-template-element/HTMLTemplateElement.js +15 -17
  329. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  330. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  331. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -1
  332. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  333. package/lib/nodes/node/Node.d.ts +2 -10
  334. package/lib/nodes/node/Node.d.ts.map +1 -1
  335. package/lib/nodes/node/Node.js +44 -48
  336. package/lib/nodes/node/Node.js.map +1 -1
  337. package/lib/nodes/node/NodeList.js +1 -1
  338. package/lib/nodes/node/NodeList.js.map +1 -1
  339. package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
  340. package/lib/nodes/node/NodeUtility.js +4 -3
  341. package/lib/nodes/node/NodeUtility.js.map +1 -1
  342. package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  343. package/lib/nodes/parent-node/ParentNodeUtility.js +5 -2
  344. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  345. package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  346. package/lib/nodes/shadow-root/ShadowRoot.js +8 -8
  347. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  348. package/lib/nodes/xml-document/XMLDocument.d.ts +2 -0
  349. package/lib/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  350. package/lib/nodes/xml-document/XMLDocument.js +3 -0
  351. package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
  352. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  353. package/lib/query-selector/SelectorItem.js +1 -2
  354. package/lib/query-selector/SelectorItem.js.map +1 -1
  355. package/lib/range/Range.d.ts.map +1 -1
  356. package/lib/range/Range.js +3 -3
  357. package/lib/range/Range.js.map +1 -1
  358. package/lib/storage/Storage.js +1 -1
  359. package/lib/storage/Storage.js.map +1 -1
  360. package/lib/svg/SVGLengthList.js +1 -1
  361. package/lib/svg/SVGLengthList.js.map +1 -1
  362. package/lib/svg/SVGNumberList.js +1 -1
  363. package/lib/svg/SVGNumberList.js.map +1 -1
  364. package/lib/svg/SVGPointList.js +1 -1
  365. package/lib/svg/SVGPointList.js.map +1 -1
  366. package/lib/svg/SVGStringList.js +1 -1
  367. package/lib/svg/SVGStringList.js.map +1 -1
  368. package/lib/svg/SVGTransformList.js +1 -1
  369. package/lib/svg/SVGTransformList.js.map +1 -1
  370. package/lib/tree-walker/NodeIterator.d.ts +18 -3
  371. package/lib/tree-walker/NodeIterator.d.ts.map +1 -1
  372. package/lib/tree-walker/NodeIterator.js +40 -6
  373. package/lib/tree-walker/NodeIterator.js.map +1 -1
  374. package/lib/tree-walker/TreeWalker.d.ts +2 -1
  375. package/lib/tree-walker/TreeWalker.d.ts.map +1 -1
  376. package/lib/tree-walker/TreeWalker.js +6 -6
  377. package/lib/tree-walker/TreeWalker.js.map +1 -1
  378. package/lib/utilities/ClassMethodBinder.d.ts.map +1 -0
  379. package/lib/utilities/ClassMethodBinder.js.map +1 -0
  380. package/lib/utilities/StringUtility.d.ts.map +1 -0
  381. package/lib/utilities/StringUtility.js.map +1 -0
  382. package/lib/utilities/XMLEncodeUtility.d.ts +48 -0
  383. package/lib/utilities/XMLEncodeUtility.d.ts.map +1 -0
  384. package/lib/utilities/XMLEncodeUtility.js +116 -0
  385. package/lib/utilities/XMLEncodeUtility.js.map +1 -0
  386. package/lib/window/BrowserWindow.d.ts +2 -0
  387. package/lib/window/BrowserWindow.d.ts.map +1 -1
  388. package/lib/window/BrowserWindow.js +5 -3
  389. package/lib/window/BrowserWindow.js.map +1 -1
  390. package/lib/window/WindowErrorUtility.js +1 -1
  391. package/lib/window/WindowErrorUtility.js.map +1 -1
  392. package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  393. package/lib/xml-http-request/XMLHttpRequest.js +2 -1
  394. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
  395. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js +1 -1
  396. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js.map +1 -1
  397. package/lib/xml-parser/XMLParser.d.ts +89 -19
  398. package/lib/xml-parser/XMLParser.d.ts.map +1 -1
  399. package/lib/xml-parser/XMLParser.js +531 -242
  400. package/lib/xml-parser/XMLParser.js.map +1 -1
  401. package/lib/xml-serializer/XMLSerializer.d.ts +6 -17
  402. package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
  403. package/lib/xml-serializer/XMLSerializer.js +136 -40
  404. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  405. package/package.json +1 -2
  406. package/src/PropertySymbol.ts +4 -1
  407. package/src/config/HTMLElementConfig.ts +53 -17
  408. package/src/config/HTMLElementConfigContentModelEnum.ts +3 -0
  409. package/src/config/NamespaceURI.ts +2 -0
  410. package/src/css/declaration/CSSStyleDeclaration.ts +1 -4
  411. package/src/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.ts +2 -4
  412. package/src/css/rules/CSSStyleRule.ts +1 -1
  413. package/src/custom-element/CustomElementReactionStack.ts +86 -0
  414. package/src/custom-element/CustomElementRegistry.ts +35 -54
  415. package/src/custom-element/CustomElementUtility.ts +34 -0
  416. package/src/custom-element/ICustomElementDefinition.ts +16 -0
  417. package/src/dom/DOMStringMap.ts +12 -10
  418. package/src/dom/DOMTokenList.ts +1 -1
  419. package/src/dom-parser/DOMParser.ts +5 -75
  420. package/src/exception/DOMExceptionNameEnum.ts +2 -1
  421. package/src/history/History.ts +6 -6
  422. package/src/html-parser/HTMLParser.ts +864 -0
  423. package/src/html-serializer/HTMLSerializer.ts +162 -0
  424. package/src/nodes/document/Document.ts +117 -136
  425. package/src/nodes/element/Element.ts +48 -95
  426. package/src/nodes/element/HTMLCollection.ts +5 -30
  427. package/src/nodes/element/NamedNodeMap.ts +58 -72
  428. package/src/nodes/element/NamedNodeMapProxyFactory.ts +12 -15
  429. package/src/nodes/html-button-element/HTMLButtonElement.ts +1 -4
  430. package/src/nodes/html-document/HTMLDocument.ts +58 -2
  431. package/src/nodes/html-element/HTMLElement.ts +117 -25
  432. package/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +1 -4
  433. package/src/nodes/html-form-element/HTMLFormElement.ts +5 -27
  434. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +1 -1
  435. package/src/nodes/html-input-element/HTMLInputElement.ts +1 -4
  436. package/src/nodes/html-media-element/TextTrackList.ts +1 -1
  437. package/src/nodes/html-object-element/HTMLObjectElement.ts +1 -4
  438. package/src/nodes/html-output-element/HTMLOutputElement.ts +1 -4
  439. package/src/nodes/html-script-element/HTMLScriptElement.ts +4 -1
  440. package/src/nodes/html-select-element/HTMLSelectElement.ts +2 -5
  441. package/src/nodes/html-table-element/HTMLTableElement.ts +8 -1
  442. package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +1 -1
  443. package/src/nodes/html-template-element/HTMLTemplateElement.ts +23 -17
  444. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -4
  445. package/src/nodes/node/Node.ts +57 -70
  446. package/src/nodes/node/NodeList.ts +1 -1
  447. package/src/nodes/node/NodeUtility.ts +4 -3
  448. package/src/nodes/parent-node/ParentNodeUtility.ts +6 -6
  449. package/src/nodes/shadow-root/ShadowRoot.ts +8 -8
  450. package/src/nodes/xml-document/XMLDocument.ts +5 -1
  451. package/src/query-selector/SelectorItem.ts +1 -2
  452. package/src/range/Range.ts +3 -3
  453. package/src/storage/Storage.ts +1 -1
  454. package/src/svg/SVGLengthList.ts +1 -1
  455. package/src/svg/SVGNumberList.ts +1 -1
  456. package/src/svg/SVGPointList.ts +1 -1
  457. package/src/svg/SVGStringList.ts +1 -1
  458. package/src/svg/SVGTransformList.ts +1 -1
  459. package/src/tree-walker/NodeIterator.ts +44 -8
  460. package/src/tree-walker/TreeWalker.ts +6 -6
  461. package/src/utilities/XMLEncodeUtility.ts +127 -0
  462. package/src/window/BrowserWindow.ts +7 -5
  463. package/src/window/WindowErrorUtility.ts +1 -1
  464. package/src/xml-http-request/XMLHttpRequest.ts +3 -1
  465. package/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +1 -1
  466. package/src/xml-parser/XMLParser.ts +627 -313
  467. package/src/xml-serializer/XMLSerializer.ts +204 -58
  468. package/cjs/ClassMethodBinder.cjs.map +0 -1
  469. package/cjs/ClassMethodBinder.d.ts.map +0 -1
  470. package/cjs/StringUtility.cjs.map +0 -1
  471. package/cjs/StringUtility.d.ts.map +0 -1
  472. package/lib/ClassMethodBinder.d.ts.map +0 -1
  473. package/lib/ClassMethodBinder.js.map +0 -1
  474. package/lib/StringUtility.d.ts.map +0 -1
  475. package/lib/StringUtility.js.map +0 -1
  476. /package/cjs/{ClassMethodBinder.cjs → utilities/ClassMethodBinder.cjs} +0 -0
  477. /package/cjs/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  478. /package/cjs/{StringUtility.cjs → utilities/StringUtility.cjs} +0 -0
  479. /package/cjs/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  480. /package/lib/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  481. /package/lib/{ClassMethodBinder.js → utilities/ClassMethodBinder.js} +0 -0
  482. /package/lib/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  483. /package/lib/{StringUtility.js → utilities/StringUtility.js} +0 -0
  484. /package/src/{ClassMethodBinder.ts → utilities/ClassMethodBinder.ts} +0 -0
  485. /package/src/{StringUtility.ts → utilities/StringUtility.ts} +0 -0
@@ -1,5 +1,7 @@
1
1
  import Document from '../document/Document.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
+ import Node from '../node/Node.js';
4
+ import NodeTypeEnum from '../node/NodeTypeEnum.js';
3
5
 
4
6
  /**
5
7
  * Document.
@@ -12,15 +14,69 @@ export default class HTMLDocument extends Document {
12
14
  super();
13
15
 
14
16
  // Default document elements
15
- const doctype = this[PropertySymbol.implementation].createDocumentType('html', '', '');
16
17
  const documentElement = this.createElement('html');
17
18
  const bodyElement = this.createElement('body');
18
19
  const headElement = this.createElement('head');
19
20
 
20
- this.appendChild(doctype);
21
21
  this.appendChild(documentElement);
22
22
 
23
23
  documentElement.appendChild(headElement);
24
24
  documentElement.appendChild(bodyElement);
25
25
  }
26
+
27
+ /**
28
+ * @override
29
+ */
30
+ public override [PropertySymbol.appendChild](node: Node, disableValidations = false): Node {
31
+ if (node[PropertySymbol.nodeType] === NodeTypeEnum.textNode) {
32
+ throw new this[PropertySymbol.window].Error(
33
+ `Failed to execute 'appendChild' on 'Node': Nodes of type '#text' may not be inserted inside nodes of type '#document'.`
34
+ );
35
+ }
36
+
37
+ if (node[PropertySymbol.nodeType] === NodeTypeEnum.documentFragmentNode) {
38
+ return;
39
+ }
40
+
41
+ if (
42
+ node[PropertySymbol.nodeType] === NodeTypeEnum.elementNode &&
43
+ this[PropertySymbol.elementArray].length !== 0
44
+ ) {
45
+ throw new this[PropertySymbol.window].Error(
46
+ `Failed to execute 'appendChild' on 'Node': Only one element on document allowed.`
47
+ );
48
+ }
49
+
50
+ return super[PropertySymbol.appendChild](node, disableValidations);
51
+ }
52
+
53
+ /**
54
+ * @override
55
+ */
56
+ public override [PropertySymbol.insertBefore](
57
+ newNode: Node,
58
+ referenceNode: Node | null,
59
+ disableValidations = false
60
+ ): Node {
61
+ if (newNode[PropertySymbol.nodeType] === NodeTypeEnum.textNode) {
62
+ throw new this[PropertySymbol.window].Error(
63
+ `Failed to execute 'insertBefore' on 'Node': Nodes of type '#text' may not be inserted inside nodes of type '#document'.`
64
+ );
65
+ }
66
+
67
+ if (newNode[PropertySymbol.nodeType] === NodeTypeEnum.documentFragmentNode) {
68
+ return;
69
+ }
70
+
71
+ if (
72
+ newNode[PropertySymbol.nodeType] === NodeTypeEnum.elementNode &&
73
+ this[PropertySymbol.elementArray].length !== 0
74
+ ) {
75
+ throw new this[PropertySymbol.window].Error(
76
+ `Failed to execute 'insertBefore' on 'Node': Only one element on document allowed.`
77
+ );
78
+ }
79
+
80
+ return super[PropertySymbol.insertBefore](newNode, referenceNode, disableValidations);
81
+ }
26
82
  }
@@ -6,7 +6,7 @@ import NodeTypeEnum from '../node/NodeTypeEnum.js';
6
6
  import Event from '../../event/Event.js';
7
7
  import HTMLElementUtility from './HTMLElementUtility.js';
8
8
  import DOMStringMap from '../../dom/DOMStringMap.js';
9
- import WindowBrowserContext from '../../window/WindowBrowserContext.js';
9
+ import Attr from '../attr/Attr.js';
10
10
 
11
11
  /**
12
12
  * HTML Element.
@@ -17,6 +17,7 @@ import WindowBrowserContext from '../../window/WindowBrowserContext.js';
17
17
  export default class HTMLElement extends Element {
18
18
  // Public properties
19
19
  public declare cloneNode: (deep?: boolean) => HTMLElement;
20
+ public static observedAttributes?: string[];
20
21
 
21
22
  // Events
22
23
  public oncopy: (event: Event) => void | null = null;
@@ -492,6 +493,25 @@ export default class HTMLElement extends Element {
492
493
  this.setAttribute('popover', value);
493
494
  }
494
495
 
496
+ /**
497
+ * Connected callback.
498
+ */
499
+ public connectedCallback?(): void;
500
+
501
+ /**
502
+ * Disconnected callback.
503
+ */
504
+ public disconnectedCallback?(): void;
505
+
506
+ /**
507
+ * Attribute changed callback.
508
+ *
509
+ * @param name Name.
510
+ * @param oldValue Old value.
511
+ * @param newValue New value.
512
+ */
513
+ public attributeChangedCallback?(name: string, oldValue: string, newValue: string): void;
514
+
495
515
  /**
496
516
  * Triggers a click event.
497
517
  */
@@ -548,7 +568,7 @@ export default class HTMLElement extends Element {
548
568
  const callback = this.#onCustomElementConnected.bind(this);
549
569
  const callbacks = allCallbacks.get(localName);
550
570
  if (callbacks) {
551
- callbacks.push(callback);
571
+ callbacks.unshift(callback);
552
572
  } else {
553
573
  allCallbacks.set(localName, [callback]);
554
574
  }
@@ -587,6 +607,69 @@ export default class HTMLElement extends Element {
587
607
  super[PropertySymbol.disconnectedFromNode]();
588
608
  }
589
609
 
610
+ /**
611
+ * @override
612
+ */
613
+ public override [PropertySymbol.connectedToDocument](): void {
614
+ super[PropertySymbol.connectedToDocument]();
615
+
616
+ if (
617
+ this[PropertySymbol.ownerDocument][PropertySymbol.window].document ===
618
+ this[PropertySymbol.ownerDocument]
619
+ ) {
620
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
621
+ this,
622
+ 'connectedCallback'
623
+ );
624
+ }
625
+ }
626
+
627
+ /**
628
+ * @override
629
+ */
630
+ public override [PropertySymbol.disconnectedFromDocument](): void {
631
+ super[PropertySymbol.disconnectedFromDocument]();
632
+
633
+ if (
634
+ this[PropertySymbol.ownerDocument][PropertySymbol.window].document ===
635
+ this[PropertySymbol.ownerDocument]
636
+ ) {
637
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
638
+ this,
639
+ 'disconnectedCallback'
640
+ );
641
+ }
642
+ }
643
+
644
+ /**
645
+ * @override
646
+ */
647
+ public override [PropertySymbol.onSetAttribute](
648
+ attribute: Attr,
649
+ replacedAttribute: Attr | null
650
+ ): void {
651
+ super[PropertySymbol.onSetAttribute](attribute, replacedAttribute);
652
+
653
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
654
+ this,
655
+ 'attributeChangedCallback',
656
+ [attribute.name, replacedAttribute?.value ?? null, attribute.value]
657
+ );
658
+ }
659
+
660
+ /**
661
+ * @override
662
+ */
663
+ public override [PropertySymbol.onRemoveAttribute](removedAttribute: Attr): void {
664
+ super[PropertySymbol.onRemoveAttribute](removedAttribute);
665
+
666
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
667
+ this,
668
+ 'attributeChangedCallback',
669
+ [removedAttribute.name, removedAttribute.value, null]
670
+ );
671
+ }
672
+
590
673
  /**
591
674
  * Triggered when a custom element is connected to the DOM.
592
675
  */
@@ -595,6 +678,7 @@ export default class HTMLElement extends Element {
595
678
  return;
596
679
  }
597
680
 
681
+ const window = this[PropertySymbol.window];
598
682
  const localName = this[PropertySymbol.localName];
599
683
  const newElement = <HTMLElement>this[PropertySymbol.ownerDocument].createElement(localName);
600
684
  const newCache = newElement[PropertySymbol.cache];
@@ -604,7 +688,6 @@ export default class HTMLElement extends Element {
604
688
  newElement[PropertySymbol.childNodes] = null;
605
689
  newElement[PropertySymbol.children] = null;
606
690
  newElement[PropertySymbol.isConnected] = this[PropertySymbol.isConnected];
607
-
608
691
  newElement[PropertySymbol.rootNode] = this[PropertySymbol.rootNode];
609
692
  newElement[PropertySymbol.formNode] = this[PropertySymbol.formNode];
610
693
  newElement[PropertySymbol.parentNode] = this[PropertySymbol.parentNode];
@@ -619,19 +702,25 @@ export default class HTMLElement extends Element {
619
702
  newElement[PropertySymbol.attributes][PropertySymbol.namespaceItems] =
620
703
  this[PropertySymbol.attributes][PropertySymbol.namespaceItems];
621
704
 
622
- for (const attr of newElement[PropertySymbol.attributes][PropertySymbol.namedItems].values()) {
705
+ for (const attr of newElement[PropertySymbol.attributes][
706
+ PropertySymbol.namespaceItems
707
+ ].values()) {
623
708
  attr[PropertySymbol.ownerElement] = newElement;
624
709
  }
625
710
 
711
+ this[PropertySymbol.clearCache]();
712
+
626
713
  this[PropertySymbol.nodeArray] = [];
627
714
  this[PropertySymbol.elementArray] = [];
628
715
  this[PropertySymbol.childNodes] = null;
629
716
  this[PropertySymbol.children] = null;
630
717
 
718
+ this[PropertySymbol.parentNode] = null;
631
719
  this[PropertySymbol.rootNode] = null;
632
720
  this[PropertySymbol.formNode] = null;
633
721
  this[PropertySymbol.selectNode] = null;
634
722
  this[PropertySymbol.textAreaNode] = null;
723
+
635
724
  this[PropertySymbol.mutationListeners] = [];
636
725
  this[PropertySymbol.isValue] = null;
637
726
  this[PropertySymbol.cache] = newCache;
@@ -639,32 +728,35 @@ export default class HTMLElement extends Element {
639
728
  this[PropertySymbol.attributes][PropertySymbol.namedItems] = new Map();
640
729
  this[PropertySymbol.attributes][PropertySymbol.namespaceItems] = new Map();
641
730
 
642
- const parentChildNodes = this[PropertySymbol.parentNode][PropertySymbol.nodeArray];
643
- const parentChildElements = this[PropertySymbol.parentNode][PropertySymbol.elementArray];
731
+ for (const node of newElement[PropertySymbol.nodeArray]) {
732
+ node[PropertySymbol.parentNode] = newElement;
733
+ }
734
+
735
+ const parentChildNodes = newElement[PropertySymbol.parentNode][PropertySymbol.nodeArray];
736
+ const parentChildElements = newElement[PropertySymbol.parentNode][PropertySymbol.elementArray];
737
+
644
738
  parentChildNodes[parentChildNodes.indexOf(this)] = newElement;
645
739
  parentChildElements[parentChildElements.indexOf(this)] = newElement;
646
740
 
647
- if (newElement[PropertySymbol.isConnected] && newElement.connectedCallback) {
648
- const result = <void | Promise<void>>newElement.connectedCallback();
649
- /**
650
- * It is common to import dependencies in the connectedCallback() method of web components.
651
- * As Happy DOM doesn't have support for dynamic imports yet, this is a temporary solution to wait for imports in connectedCallback().
652
- *
653
- * @see https://github.com/capricorn86/happy-dom/issues/1442
654
- */
655
- if (result instanceof Promise) {
656
- const asyncTaskManager = new WindowBrowserContext(
657
- this[PropertySymbol.window]
658
- ).getAsyncTaskManager();
659
- if (asyncTaskManager) {
660
- const taskID = asyncTaskManager.startTask();
661
- result
662
- .then(() => asyncTaskManager.endTask(taskID))
663
- .catch(() => asyncTaskManager.endTask(taskID));
664
- }
741
+ const allCallbacks = window.customElements[PropertySymbol.callbacks];
742
+ const callbacks = allCallbacks.get(localName);
743
+
744
+ if (callbacks && this.#customElementDefineCallback) {
745
+ const index = callbacks.indexOf(this.#customElementDefineCallback);
746
+
747
+ if (index !== -1) {
748
+ callbacks.splice(index, 1);
749
+ }
750
+
751
+ if (!callbacks.length) {
752
+ allCallbacks.delete(localName);
665
753
  }
754
+
755
+ this.#customElementDefineCallback = null;
666
756
  }
667
757
 
668
- this[PropertySymbol.disconnectedFromDocument]();
758
+ if (newElement[PropertySymbol.isConnected]) {
759
+ newElement[PropertySymbol.connectedToDocument]();
760
+ }
669
761
  }
670
762
  }
@@ -56,10 +56,7 @@ export default class HTMLFieldSetElement extends HTMLElement {
56
56
  if (this[PropertySymbol.formNode]) {
57
57
  return this[PropertySymbol.formNode];
58
58
  }
59
- const id =
60
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
61
- PropertySymbol.value
62
- ];
59
+ const id = this.getAttribute('form');
63
60
  if (!id || !this[PropertySymbol.isConnected]) {
64
61
  return null;
65
62
  }
@@ -13,7 +13,7 @@ import THTMLFormControlElement from './THTMLFormControlElement.js';
13
13
  import QuerySelector from '../../query-selector/QuerySelector.js';
14
14
  import RadioNodeList from './RadioNodeList.js';
15
15
  import WindowBrowserContext from '../../window/WindowBrowserContext.js';
16
- import ClassMethodBinder from '../../ClassMethodBinder.js';
16
+ import ClassMethodBinder from '../../utilities/ClassMethodBinder.js';
17
17
  import Node from '../node/Node.js';
18
18
  import Element from '../element/Element.js';
19
19
  import EventTarget from '../../event/EventTarget.js';
@@ -112,13 +112,7 @@ export default class HTMLFormElement extends HTMLElement {
112
112
 
113
113
  for (let i = 0; i < items.length; i++) {
114
114
  const item = items[i];
115
- const name =
116
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
117
- PropertySymbol.value
118
- ] ||
119
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
120
- PropertySymbol.value
121
- ];
115
+ const name = item.getAttribute('id') || item.getAttribute('name');
122
116
 
123
117
  if (name && name === property) {
124
118
  return true;
@@ -162,13 +156,7 @@ export default class HTMLFormElement extends HTMLElement {
162
156
 
163
157
  for (let i = 0; i < items.length; i++) {
164
158
  const item = items[i];
165
- const name =
166
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
167
- PropertySymbol.value
168
- ] ||
169
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
170
- PropertySymbol.value
171
- ];
159
+ const name = item.getAttribute('id') || item.getAttribute('name');
172
160
 
173
161
  if (name && name === property) {
174
162
  return {
@@ -503,10 +491,7 @@ export default class HTMLFormElement extends HTMLElement {
503
491
  );
504
492
 
505
493
  if (this[PropertySymbol.isConnected]) {
506
- const id =
507
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
508
- PropertySymbol.value
509
- ];
494
+ const id = this.getAttribute('id');
510
495
  if (id) {
511
496
  for (const element of <THTMLFormControlElement[]>(
512
497
  QuerySelector.querySelectorAll(
@@ -539,14 +524,7 @@ export default class HTMLFormElement extends HTMLElement {
539
524
  name = String(name);
540
525
 
541
526
  for (const item of items) {
542
- if (
543
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
544
- PropertySymbol.value
545
- ] === name ||
546
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
547
- PropertySymbol.value
548
- ] === name
549
- ) {
527
+ if (item.getAttribute('id') === name || item.getAttribute('name') === name) {
550
528
  namedItems.push(item);
551
529
  }
552
530
  }
@@ -267,7 +267,7 @@ export default class HTMLIFrameElement extends HTMLElement {
267
267
  if (
268
268
  attribute[PropertySymbol.name] === 'src' &&
269
269
  attribute[PropertySymbol.value] &&
270
- !this[PropertySymbol.attributes][PropertySymbol.namedItems].has('srcdoc') &&
270
+ !this.hasAttribute('srcdoc') &&
271
271
  attribute[PropertySymbol.value] !== replacedAttribute?.[PropertySymbol.value]
272
272
  ) {
273
273
  this.#loadPage();
@@ -206,10 +206,7 @@ export default class HTMLInputElement extends HTMLElement {
206
206
  if (this[PropertySymbol.formNode]) {
207
207
  return this[PropertySymbol.formNode];
208
208
  }
209
- const id =
210
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
211
- PropertySymbol.value
212
- ];
209
+ const id = this.getAttribute('form');
213
210
  if (!id || !this[PropertySymbol.isConnected]) {
214
211
  return null;
215
212
  }
@@ -1,7 +1,7 @@
1
1
  import TextTrack from './TextTrack.js';
2
2
  import EventTarget from '../../event/EventTarget.js';
3
3
  import * as PropertySymbol from '../../PropertySymbol.js';
4
- import ClassMethodBinder from '../../ClassMethodBinder.js';
4
+ import ClassMethodBinder from '../../utilities/ClassMethodBinder.js';
5
5
 
6
6
  /**
7
7
  * TextTrackList.
@@ -69,10 +69,7 @@ export default class HTMLObjectElement extends HTMLElement {
69
69
  if (this[PropertySymbol.formNode]) {
70
70
  return this[PropertySymbol.formNode];
71
71
  }
72
- const id =
73
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
74
- PropertySymbol.value
75
- ];
72
+ const id = this.getAttribute('form');
76
73
  if (!id || !this[PropertySymbol.isConnected]) {
77
74
  return null;
78
75
  }
@@ -44,10 +44,7 @@ export default class HTMLOutputElement extends HTMLElement {
44
44
  if (this[PropertySymbol.formNode]) {
45
45
  return this[PropertySymbol.formNode];
46
46
  }
47
- const id =
48
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
49
- PropertySymbol.value
50
- ];
47
+ const id = this.getAttribute('form');
51
48
  if (!id || !this[PropertySymbol.isConnected]) {
52
49
  return null;
53
50
  }
@@ -249,7 +249,10 @@ export default class HTMLScriptElement extends HTMLElement {
249
249
  async #loadScript(url: string): Promise<void> {
250
250
  const window = this[PropertySymbol.window];
251
251
  const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
252
- const async = this.getAttribute('async') !== null;
252
+ const async =
253
+ this.getAttribute('async') !== null ||
254
+ this.getAttribute('defer') !== null ||
255
+ this.getAttribute('type') === 'module';
253
256
 
254
257
  if (!browserFrame) {
255
258
  return;
@@ -11,7 +11,7 @@ import HTMLCollection from '../element/HTMLCollection.js';
11
11
  import NodeTypeEnum from '../node/NodeTypeEnum.js';
12
12
  import QuerySelector from '../../query-selector/QuerySelector.js';
13
13
  import NodeList from '../node/NodeList.js';
14
- import ClassMethodBinder from '../../ClassMethodBinder.js';
14
+ import ClassMethodBinder from '../../utilities/ClassMethodBinder.js';
15
15
  import Node from '../node/Node.js';
16
16
  import Element from '../element/Element.js';
17
17
  import EventTarget from '../../event/EventTarget.js';
@@ -493,10 +493,7 @@ export default class HTMLSelectElement extends HTMLElement {
493
493
  if (this[PropertySymbol.formNode]) {
494
494
  return this[PropertySymbol.formNode];
495
495
  }
496
- const id =
497
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
498
- PropertySymbol.value
499
- ];
496
+ const id = this.getAttribute('form');
500
497
  if (!id || !this[PropertySymbol.isConnected]) {
501
498
  return null;
502
499
  }
@@ -286,7 +286,14 @@ export default class HTMLTableElement extends HTMLElement {
286
286
  const row = this[PropertySymbol.ownerDocument].createElement('tr');
287
287
 
288
288
  if (index === -1 || index === rows.length) {
289
- this.appendChild(row);
289
+ const tbody = QuerySelector.querySelector(this, 'tbody');
290
+ if (tbody) {
291
+ tbody.appendChild(row);
292
+ } else {
293
+ const tbody = this[PropertySymbol.ownerDocument].createElement('tbody');
294
+ tbody.appendChild(row);
295
+ this.appendChild(tbody);
296
+ }
290
297
  return row;
291
298
  }
292
299
 
@@ -95,7 +95,7 @@ export default class HTMLTableRowElement extends HTMLElement {
95
95
  );
96
96
  }
97
97
 
98
- const cell = this[PropertySymbol.ownerDocument].createElement('th');
98
+ const cell = this[PropertySymbol.ownerDocument].createElement('td');
99
99
 
100
100
  if (index === -1 || index === cells.length) {
101
101
  this.appendChild(cell);
@@ -2,9 +2,9 @@ import HTMLElement from '../html-element/HTMLElement.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import DocumentFragment from '../document-fragment/DocumentFragment.js';
4
4
  import Node from '../node/Node.js';
5
- import XMLSerializer from '../../xml-serializer/XMLSerializer.js';
6
- import XMLParser from '../../xml-parser/XMLParser.js';
7
5
  import ShadowRoot from '../shadow-root/ShadowRoot.js';
6
+ import HTMLSerializer from '../../html-serializer/HTMLSerializer.js';
7
+ import HTMLParser from '../../html-parser/HTMLParser.js';
8
8
 
9
9
  /**
10
10
  * HTML Template Element.
@@ -47,9 +47,7 @@ export default class HTMLTemplateElement extends HTMLElement {
47
47
  content.removeChild(childNodes[0]);
48
48
  }
49
49
 
50
- XMLParser.parse(this[PropertySymbol.ownerDocument], html, {
51
- rootNode: this[PropertySymbol.content]
52
- });
50
+ new HTMLParser(this[PropertySymbol.window]).parse(html, this[PropertySymbol.content]);
53
51
  }
54
52
 
55
53
  /**
@@ -71,18 +69,18 @@ export default class HTMLTemplateElement extends HTMLElement {
71
69
  * @override
72
70
  */
73
71
  public override getInnerHTML(_options?: { includeShadowRoots?: boolean }): string {
74
- const xmlSerializer = new XMLSerializer();
72
+ const serializer = new HTMLSerializer();
75
73
 
76
74
  // Options should be ignored as shadow roots should not be serialized for HTMLTemplateElement.
77
75
 
78
76
  const content = <DocumentFragment>this[PropertySymbol.content];
79
- let xml = '';
77
+ let html = '';
80
78
 
81
79
  for (const node of content[PropertySymbol.nodeArray]) {
82
- xml += xmlSerializer.serializeToString(node);
80
+ html += serializer.serializeToString(node);
83
81
  }
84
82
 
85
- return xml;
83
+ return html;
86
84
  }
87
85
 
88
86
  /**
@@ -92,25 +90,25 @@ export default class HTMLTemplateElement extends HTMLElement {
92
90
  serializableShadowRoots?: boolean;
93
91
  shadowRoots?: ShadowRoot[];
94
92
  }): string {
95
- const xmlSerializer = new XMLSerializer();
93
+ const serializer = new HTMLSerializer();
96
94
 
97
95
  // Options should be ignored as shadow roots should not be serialized for HTMLTemplateElement.
98
96
 
99
97
  const content = <DocumentFragment>this[PropertySymbol.content];
100
- let xml = '';
98
+ let html = '';
101
99
 
102
100
  for (const node of content[PropertySymbol.nodeArray]) {
103
- xml += xmlSerializer.serializeToString(node);
101
+ html += serializer.serializeToString(node);
104
102
  }
105
103
 
106
- return xml;
104
+ return html;
107
105
  }
108
106
 
109
107
  /**
110
108
  * @override
111
109
  */
112
- public override [PropertySymbol.appendChild](node: Node, isDuringParsing = false): Node {
113
- return this[PropertySymbol.content][PropertySymbol.appendChild](node, isDuringParsing);
110
+ public override [PropertySymbol.appendChild](node: Node, disableValidations = false): Node {
111
+ return this[PropertySymbol.content][PropertySymbol.appendChild](node, disableValidations);
114
112
  }
115
113
 
116
114
  /**
@@ -123,8 +121,16 @@ export default class HTMLTemplateElement extends HTMLElement {
123
121
  /**
124
122
  * @override
125
123
  */
126
- public override [PropertySymbol.insertBefore](newNode: Node, referenceNode: Node): Node {
127
- return this[PropertySymbol.content][PropertySymbol.insertBefore](newNode, referenceNode);
124
+ public override [PropertySymbol.insertBefore](
125
+ newNode: Node,
126
+ referenceNode: Node,
127
+ disableValidations = false
128
+ ): Node {
129
+ return this[PropertySymbol.content][PropertySymbol.insertBefore](
130
+ newNode,
131
+ referenceNode,
132
+ disableValidations
133
+ );
128
134
  }
129
135
 
130
136
  /**
@@ -413,10 +413,7 @@ export default class HTMLTextAreaElement extends HTMLElement {
413
413
  if (this[PropertySymbol.formNode]) {
414
414
  return this[PropertySymbol.formNode];
415
415
  }
416
- const id =
417
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
418
- PropertySymbol.value
419
- ];
416
+ const id = this.getAttribute('form');
420
417
  if (!id || !this[PropertySymbol.isConnected]) {
421
418
  return null;
422
419
  }