happy-dom 15.11.7 → 16.0.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.
Files changed (476) 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/custom-element/CustomElementReactionStack.cjs +100 -0
  24. package/cjs/custom-element/CustomElementReactionStack.cjs.map +1 -0
  25. package/cjs/custom-element/CustomElementReactionStack.d.ts +27 -0
  26. package/cjs/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  27. package/cjs/custom-element/CustomElementRegistry.cjs +32 -45
  28. package/cjs/custom-element/CustomElementRegistry.cjs.map +1 -1
  29. package/cjs/custom-element/CustomElementRegistry.d.ts +2 -6
  30. package/cjs/custom-element/CustomElementRegistry.d.ts.map +1 -1
  31. package/cjs/custom-element/CustomElementUtility.cjs +35 -0
  32. package/cjs/custom-element/CustomElementUtility.cjs.map +1 -0
  33. package/cjs/custom-element/CustomElementUtility.d.ts +14 -0
  34. package/cjs/custom-element/CustomElementUtility.d.ts.map +1 -0
  35. package/cjs/custom-element/ICustomElementDefinition.cjs +3 -0
  36. package/cjs/custom-element/ICustomElementDefinition.cjs.map +1 -0
  37. package/cjs/custom-element/ICustomElementDefinition.d.ts +12 -0
  38. package/cjs/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  39. package/cjs/dom/DOMStringMap.cjs +8 -8
  40. package/cjs/dom/DOMStringMap.cjs.map +1 -1
  41. package/cjs/dom/DOMStringMap.d.ts.map +1 -1
  42. package/cjs/dom/DOMTokenList.cjs +1 -1
  43. package/cjs/dom/DOMTokenList.cjs.map +1 -1
  44. package/cjs/dom-parser/DOMParser.cjs +5 -67
  45. package/cjs/dom-parser/DOMParser.cjs.map +1 -1
  46. package/cjs/dom-parser/DOMParser.d.ts +0 -1
  47. package/cjs/dom-parser/DOMParser.d.ts.map +1 -1
  48. package/cjs/exception/DOMExceptionNameEnum.cjs +1 -0
  49. package/cjs/exception/DOMExceptionNameEnum.cjs.map +1 -1
  50. package/cjs/exception/DOMExceptionNameEnum.d.ts +2 -1
  51. package/cjs/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  52. package/cjs/history/History.cjs +6 -6
  53. package/cjs/history/History.cjs.map +1 -1
  54. package/cjs/html-parser/HTMLParser.cjs +726 -0
  55. package/cjs/html-parser/HTMLParser.cjs.map +1 -0
  56. package/cjs/html-parser/HTMLParser.d.ts +91 -0
  57. package/cjs/html-parser/HTMLParser.d.ts.map +1 -0
  58. package/cjs/html-serializer/HTMLSerializer.cjs +152 -0
  59. package/cjs/html-serializer/HTMLSerializer.cjs.map +1 -0
  60. package/cjs/html-serializer/HTMLSerializer.d.ts +36 -0
  61. package/cjs/html-serializer/HTMLSerializer.d.ts.map +1 -0
  62. package/cjs/nodes/document/Document.cjs +105 -121
  63. package/cjs/nodes/document/Document.cjs.map +1 -1
  64. package/cjs/nodes/document/Document.d.ts +8 -0
  65. package/cjs/nodes/document/Document.d.ts.map +1 -1
  66. package/cjs/nodes/element/Element.cjs +35 -53
  67. package/cjs/nodes/element/Element.cjs.map +1 -1
  68. package/cjs/nodes/element/Element.d.ts +2 -12
  69. package/cjs/nodes/element/Element.d.ts.map +1 -1
  70. package/cjs/nodes/element/HTMLCollection.cjs +5 -9
  71. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  72. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  73. package/cjs/nodes/element/NamedNodeMap.cjs +39 -52
  74. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  75. package/cjs/nodes/element/NamedNodeMap.d.ts +1 -16
  76. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  77. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +12 -14
  78. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
  79. package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  80. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +1 -1
  81. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  82. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  83. package/cjs/nodes/html-document/HTMLDocument.cjs +33 -2
  84. package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
  85. package/cjs/nodes/html-document/HTMLDocument.d.ts +10 -0
  86. package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  87. package/cjs/nodes/html-element/HTMLElement.cjs +52 -22
  88. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  89. package/cjs/nodes/html-element/HTMLElement.d.ts +34 -0
  90. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  91. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs +1 -1
  92. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs.map +1 -1
  93. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  94. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +5 -8
  95. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  96. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  97. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +1 -1
  98. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  99. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +1 -1
  100. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  101. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  102. package/cjs/nodes/html-media-element/TextTrackList.cjs +1 -1
  103. package/cjs/nodes/html-media-element/TextTrackList.cjs.map +1 -1
  104. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +1 -1
  105. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
  106. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  107. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs +1 -1
  108. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs.map +1 -1
  109. package/cjs/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  110. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -1
  111. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  112. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  113. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -2
  114. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  115. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  116. package/cjs/nodes/html-table-element/HTMLTableElement.cjs +9 -1
  117. package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
  118. package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  119. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +1 -1
  120. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +15 -17
  121. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
  122. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  123. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  124. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -1
  125. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  126. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  127. package/cjs/nodes/node/Node.cjs +44 -48
  128. package/cjs/nodes/node/Node.cjs.map +1 -1
  129. package/cjs/nodes/node/Node.d.ts +2 -10
  130. package/cjs/nodes/node/Node.d.ts.map +1 -1
  131. package/cjs/nodes/node/NodeList.cjs +1 -1
  132. package/cjs/nodes/node/NodeList.cjs.map +1 -1
  133. package/cjs/nodes/node/NodeUtility.cjs +4 -3
  134. package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
  135. package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
  136. package/cjs/nodes/parent-node/ParentNodeUtility.cjs +5 -2
  137. package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
  138. package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  139. package/cjs/nodes/shadow-root/ShadowRoot.cjs +8 -8
  140. package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
  141. package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  142. package/cjs/nodes/xml-document/XMLDocument.cjs +26 -0
  143. package/cjs/nodes/xml-document/XMLDocument.cjs.map +1 -1
  144. package/cjs/nodes/xml-document/XMLDocument.d.ts +2 -0
  145. package/cjs/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  146. package/cjs/query-selector/SelectorItem.cjs +1 -2
  147. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  148. package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
  149. package/cjs/range/Range.cjs +3 -3
  150. package/cjs/range/Range.cjs.map +1 -1
  151. package/cjs/range/Range.d.ts.map +1 -1
  152. package/cjs/storage/Storage.cjs +1 -1
  153. package/cjs/storage/Storage.cjs.map +1 -1
  154. package/cjs/svg/SVGLengthList.cjs +1 -1
  155. package/cjs/svg/SVGLengthList.cjs.map +1 -1
  156. package/cjs/svg/SVGNumberList.cjs +1 -1
  157. package/cjs/svg/SVGNumberList.cjs.map +1 -1
  158. package/cjs/svg/SVGPointList.cjs +1 -1
  159. package/cjs/svg/SVGPointList.cjs.map +1 -1
  160. package/cjs/svg/SVGStringList.cjs +1 -1
  161. package/cjs/svg/SVGStringList.cjs.map +1 -1
  162. package/cjs/svg/SVGTransformList.cjs +1 -1
  163. package/cjs/svg/SVGTransformList.cjs.map +1 -1
  164. package/cjs/tree-walker/NodeIterator.cjs +63 -6
  165. package/cjs/tree-walker/NodeIterator.cjs.map +1 -1
  166. package/cjs/tree-walker/NodeIterator.d.ts +18 -3
  167. package/cjs/tree-walker/NodeIterator.d.ts.map +1 -1
  168. package/cjs/tree-walker/TreeWalker.cjs +6 -6
  169. package/cjs/tree-walker/TreeWalker.cjs.map +1 -1
  170. package/cjs/tree-walker/TreeWalker.d.ts +2 -1
  171. package/cjs/tree-walker/TreeWalker.d.ts.map +1 -1
  172. package/cjs/utilities/ClassMethodBinder.cjs.map +1 -0
  173. package/cjs/utilities/ClassMethodBinder.d.ts.map +1 -0
  174. package/cjs/utilities/StringUtility.cjs.map +1 -0
  175. package/cjs/utilities/StringUtility.d.ts.map +1 -0
  176. package/cjs/utilities/XMLEncodeUtility.cjs +119 -0
  177. package/cjs/utilities/XMLEncodeUtility.cjs.map +1 -0
  178. package/cjs/utilities/XMLEncodeUtility.d.ts +48 -0
  179. package/cjs/utilities/XMLEncodeUtility.d.ts.map +1 -0
  180. package/cjs/window/BrowserWindow.cjs +9 -3
  181. package/cjs/window/BrowserWindow.cjs.map +1 -1
  182. package/cjs/window/BrowserWindow.d.ts +2 -0
  183. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  184. package/cjs/window/WindowErrorUtility.cjs +1 -1
  185. package/cjs/window/WindowErrorUtility.cjs.map +1 -1
  186. package/cjs/xml-http-request/XMLHttpRequest.cjs +2 -1
  187. package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
  188. package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  189. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs +1 -1
  190. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs.map +1 -1
  191. package/cjs/xml-parser/XMLParser.cjs +531 -242
  192. package/cjs/xml-parser/XMLParser.cjs.map +1 -1
  193. package/cjs/xml-parser/XMLParser.d.ts +89 -19
  194. package/cjs/xml-parser/XMLParser.d.ts.map +1 -1
  195. package/cjs/xml-serializer/XMLSerializer.cjs +136 -40
  196. package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
  197. package/cjs/xml-serializer/XMLSerializer.d.ts +6 -17
  198. package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
  199. package/lib/PropertySymbol.d.ts +4 -1
  200. package/lib/PropertySymbol.d.ts.map +1 -1
  201. package/lib/PropertySymbol.js +4 -1
  202. package/lib/PropertySymbol.js.map +1 -1
  203. package/lib/config/HTMLElementConfig.d.ts +7 -0
  204. package/lib/config/HTMLElementConfig.d.ts.map +1 -1
  205. package/lib/config/HTMLElementConfig.js +42 -16
  206. package/lib/config/HTMLElementConfig.js.map +1 -1
  207. package/lib/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  208. package/lib/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  209. package/lib/config/HTMLElementConfigContentModelEnum.js +3 -0
  210. package/lib/config/HTMLElementConfigContentModelEnum.js.map +1 -1
  211. package/lib/config/NamespaceURI.d.ts +2 -0
  212. package/lib/config/NamespaceURI.d.ts.map +1 -1
  213. package/lib/config/NamespaceURI.js +2 -0
  214. package/lib/config/NamespaceURI.js.map +1 -1
  215. package/lib/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  216. package/lib/css/declaration/CSSStyleDeclaration.js +1 -1
  217. package/lib/css/declaration/CSSStyleDeclaration.js.map +1 -1
  218. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  219. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js +2 -2
  220. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js.map +1 -1
  221. package/lib/custom-element/CustomElementReactionStack.d.ts +27 -0
  222. package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  223. package/lib/custom-element/CustomElementReactionStack.js +71 -0
  224. package/lib/custom-element/CustomElementReactionStack.js.map +1 -0
  225. package/lib/custom-element/CustomElementRegistry.d.ts +2 -6
  226. package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
  227. package/lib/custom-element/CustomElementRegistry.js +32 -45
  228. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  229. package/lib/custom-element/CustomElementUtility.d.ts +14 -0
  230. package/lib/custom-element/CustomElementUtility.d.ts.map +1 -0
  231. package/lib/custom-element/CustomElementUtility.js +32 -0
  232. package/lib/custom-element/CustomElementUtility.js.map +1 -0
  233. package/lib/custom-element/ICustomElementDefinition.d.ts +12 -0
  234. package/lib/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  235. package/lib/custom-element/ICustomElementDefinition.js +2 -0
  236. package/lib/custom-element/ICustomElementDefinition.js.map +1 -0
  237. package/lib/dom/DOMStringMap.d.ts.map +1 -1
  238. package/lib/dom/DOMStringMap.js +8 -8
  239. package/lib/dom/DOMStringMap.js.map +1 -1
  240. package/lib/dom/DOMTokenList.js +1 -1
  241. package/lib/dom/DOMTokenList.js.map +1 -1
  242. package/lib/dom-parser/DOMParser.d.ts +0 -1
  243. package/lib/dom-parser/DOMParser.d.ts.map +1 -1
  244. package/lib/dom-parser/DOMParser.js +5 -67
  245. package/lib/dom-parser/DOMParser.js.map +1 -1
  246. package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
  247. package/lib/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  248. package/lib/exception/DOMExceptionNameEnum.js +1 -0
  249. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  250. package/lib/history/History.js +6 -6
  251. package/lib/history/History.js.map +1 -1
  252. package/lib/html-parser/HTMLParser.d.ts +91 -0
  253. package/lib/html-parser/HTMLParser.d.ts.map +1 -0
  254. package/lib/html-parser/HTMLParser.js +697 -0
  255. package/lib/html-parser/HTMLParser.js.map +1 -0
  256. package/lib/html-serializer/HTMLSerializer.d.ts +36 -0
  257. package/lib/html-serializer/HTMLSerializer.d.ts.map +1 -0
  258. package/lib/html-serializer/HTMLSerializer.js +123 -0
  259. package/lib/html-serializer/HTMLSerializer.js.map +1 -0
  260. package/lib/nodes/document/Document.d.ts +8 -0
  261. package/lib/nodes/document/Document.d.ts.map +1 -1
  262. package/lib/nodes/document/Document.js +106 -122
  263. package/lib/nodes/document/Document.js.map +1 -1
  264. package/lib/nodes/element/Element.d.ts +2 -12
  265. package/lib/nodes/element/Element.d.ts.map +1 -1
  266. package/lib/nodes/element/Element.js +35 -53
  267. package/lib/nodes/element/Element.js.map +1 -1
  268. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  269. package/lib/nodes/element/HTMLCollection.js +5 -9
  270. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  271. package/lib/nodes/element/NamedNodeMap.d.ts +1 -16
  272. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  273. package/lib/nodes/element/NamedNodeMap.js +39 -52
  274. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  275. package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  276. package/lib/nodes/element/NamedNodeMapProxyFactory.js +12 -14
  277. package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
  278. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  279. package/lib/nodes/html-button-element/HTMLButtonElement.js +1 -1
  280. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  281. package/lib/nodes/html-document/HTMLDocument.d.ts +10 -0
  282. package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  283. package/lib/nodes/html-document/HTMLDocument.js +33 -2
  284. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  285. package/lib/nodes/html-element/HTMLElement.d.ts +34 -0
  286. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  287. package/lib/nodes/html-element/HTMLElement.js +52 -22
  288. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  289. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  290. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js +1 -1
  291. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js.map +1 -1
  292. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  293. package/lib/nodes/html-form-element/HTMLFormElement.js +5 -8
  294. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  295. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +1 -1
  296. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  297. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  298. package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
  299. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  300. package/lib/nodes/html-media-element/TextTrackList.js +1 -1
  301. package/lib/nodes/html-media-element/TextTrackList.js.map +1 -1
  302. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  303. package/lib/nodes/html-object-element/HTMLObjectElement.js +1 -1
  304. package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
  305. package/lib/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  306. package/lib/nodes/html-output-element/HTMLOutputElement.js +1 -1
  307. package/lib/nodes/html-output-element/HTMLOutputElement.js.map +1 -1
  308. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  309. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -1
  310. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  311. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  312. package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -2
  313. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  314. package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  315. package/lib/nodes/html-table-element/HTMLTableElement.js +9 -1
  316. package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
  317. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +1 -1
  318. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  319. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  320. package/lib/nodes/html-template-element/HTMLTemplateElement.js +15 -17
  321. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  322. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  323. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -1
  324. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  325. package/lib/nodes/node/Node.d.ts +2 -10
  326. package/lib/nodes/node/Node.d.ts.map +1 -1
  327. package/lib/nodes/node/Node.js +44 -48
  328. package/lib/nodes/node/Node.js.map +1 -1
  329. package/lib/nodes/node/NodeList.js +1 -1
  330. package/lib/nodes/node/NodeList.js.map +1 -1
  331. package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
  332. package/lib/nodes/node/NodeUtility.js +4 -3
  333. package/lib/nodes/node/NodeUtility.js.map +1 -1
  334. package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  335. package/lib/nodes/parent-node/ParentNodeUtility.js +5 -2
  336. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  337. package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  338. package/lib/nodes/shadow-root/ShadowRoot.js +8 -8
  339. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  340. package/lib/nodes/xml-document/XMLDocument.d.ts +2 -0
  341. package/lib/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  342. package/lib/nodes/xml-document/XMLDocument.js +3 -0
  343. package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
  344. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  345. package/lib/query-selector/SelectorItem.js +1 -2
  346. package/lib/query-selector/SelectorItem.js.map +1 -1
  347. package/lib/range/Range.d.ts.map +1 -1
  348. package/lib/range/Range.js +3 -3
  349. package/lib/range/Range.js.map +1 -1
  350. package/lib/storage/Storage.js +1 -1
  351. package/lib/storage/Storage.js.map +1 -1
  352. package/lib/svg/SVGLengthList.js +1 -1
  353. package/lib/svg/SVGLengthList.js.map +1 -1
  354. package/lib/svg/SVGNumberList.js +1 -1
  355. package/lib/svg/SVGNumberList.js.map +1 -1
  356. package/lib/svg/SVGPointList.js +1 -1
  357. package/lib/svg/SVGPointList.js.map +1 -1
  358. package/lib/svg/SVGStringList.js +1 -1
  359. package/lib/svg/SVGStringList.js.map +1 -1
  360. package/lib/svg/SVGTransformList.js +1 -1
  361. package/lib/svg/SVGTransformList.js.map +1 -1
  362. package/lib/tree-walker/NodeIterator.d.ts +18 -3
  363. package/lib/tree-walker/NodeIterator.d.ts.map +1 -1
  364. package/lib/tree-walker/NodeIterator.js +40 -6
  365. package/lib/tree-walker/NodeIterator.js.map +1 -1
  366. package/lib/tree-walker/TreeWalker.d.ts +2 -1
  367. package/lib/tree-walker/TreeWalker.d.ts.map +1 -1
  368. package/lib/tree-walker/TreeWalker.js +6 -6
  369. package/lib/tree-walker/TreeWalker.js.map +1 -1
  370. package/lib/utilities/ClassMethodBinder.d.ts.map +1 -0
  371. package/lib/utilities/ClassMethodBinder.js.map +1 -0
  372. package/lib/utilities/StringUtility.d.ts.map +1 -0
  373. package/lib/utilities/StringUtility.js.map +1 -0
  374. package/lib/utilities/XMLEncodeUtility.d.ts +48 -0
  375. package/lib/utilities/XMLEncodeUtility.d.ts.map +1 -0
  376. package/lib/utilities/XMLEncodeUtility.js +116 -0
  377. package/lib/utilities/XMLEncodeUtility.js.map +1 -0
  378. package/lib/window/BrowserWindow.d.ts +2 -0
  379. package/lib/window/BrowserWindow.d.ts.map +1 -1
  380. package/lib/window/BrowserWindow.js +9 -3
  381. package/lib/window/BrowserWindow.js.map +1 -1
  382. package/lib/window/WindowErrorUtility.js +1 -1
  383. package/lib/window/WindowErrorUtility.js.map +1 -1
  384. package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  385. package/lib/xml-http-request/XMLHttpRequest.js +2 -1
  386. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
  387. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js +1 -1
  388. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js.map +1 -1
  389. package/lib/xml-parser/XMLParser.d.ts +89 -19
  390. package/lib/xml-parser/XMLParser.d.ts.map +1 -1
  391. package/lib/xml-parser/XMLParser.js +531 -242
  392. package/lib/xml-parser/XMLParser.js.map +1 -1
  393. package/lib/xml-serializer/XMLSerializer.d.ts +6 -17
  394. package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
  395. package/lib/xml-serializer/XMLSerializer.js +136 -40
  396. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  397. package/package.json +1 -2
  398. package/src/PropertySymbol.ts +4 -1
  399. package/src/config/HTMLElementConfig.ts +53 -17
  400. package/src/config/HTMLElementConfigContentModelEnum.ts +3 -0
  401. package/src/config/NamespaceURI.ts +2 -0
  402. package/src/css/declaration/CSSStyleDeclaration.ts +1 -4
  403. package/src/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.ts +2 -4
  404. package/src/custom-element/CustomElementReactionStack.ts +81 -0
  405. package/src/custom-element/CustomElementRegistry.ts +35 -54
  406. package/src/custom-element/CustomElementUtility.ts +34 -0
  407. package/src/custom-element/ICustomElementDefinition.ts +16 -0
  408. package/src/dom/DOMStringMap.ts +12 -10
  409. package/src/dom/DOMTokenList.ts +1 -1
  410. package/src/dom-parser/DOMParser.ts +5 -75
  411. package/src/exception/DOMExceptionNameEnum.ts +2 -1
  412. package/src/history/History.ts +6 -6
  413. package/src/html-parser/HTMLParser.ts +864 -0
  414. package/src/html-serializer/HTMLSerializer.ts +162 -0
  415. package/src/nodes/document/Document.ts +118 -137
  416. package/src/nodes/element/Element.ts +48 -95
  417. package/src/nodes/element/HTMLCollection.ts +5 -30
  418. package/src/nodes/element/NamedNodeMap.ts +58 -72
  419. package/src/nodes/element/NamedNodeMapProxyFactory.ts +12 -15
  420. package/src/nodes/html-button-element/HTMLButtonElement.ts +1 -4
  421. package/src/nodes/html-document/HTMLDocument.ts +58 -2
  422. package/src/nodes/html-element/HTMLElement.ts +107 -25
  423. package/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +1 -4
  424. package/src/nodes/html-form-element/HTMLFormElement.ts +5 -27
  425. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +1 -1
  426. package/src/nodes/html-input-element/HTMLInputElement.ts +1 -4
  427. package/src/nodes/html-media-element/TextTrackList.ts +1 -1
  428. package/src/nodes/html-object-element/HTMLObjectElement.ts +1 -4
  429. package/src/nodes/html-output-element/HTMLOutputElement.ts +1 -4
  430. package/src/nodes/html-script-element/HTMLScriptElement.ts +4 -1
  431. package/src/nodes/html-select-element/HTMLSelectElement.ts +2 -5
  432. package/src/nodes/html-table-element/HTMLTableElement.ts +8 -1
  433. package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +1 -1
  434. package/src/nodes/html-template-element/HTMLTemplateElement.ts +23 -17
  435. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -4
  436. package/src/nodes/node/Node.ts +57 -70
  437. package/src/nodes/node/NodeList.ts +1 -1
  438. package/src/nodes/node/NodeUtility.ts +4 -3
  439. package/src/nodes/parent-node/ParentNodeUtility.ts +6 -6
  440. package/src/nodes/shadow-root/ShadowRoot.ts +8 -8
  441. package/src/nodes/xml-document/XMLDocument.ts +5 -1
  442. package/src/query-selector/SelectorItem.ts +1 -2
  443. package/src/range/Range.ts +3 -3
  444. package/src/storage/Storage.ts +1 -1
  445. package/src/svg/SVGLengthList.ts +1 -1
  446. package/src/svg/SVGNumberList.ts +1 -1
  447. package/src/svg/SVGPointList.ts +1 -1
  448. package/src/svg/SVGStringList.ts +1 -1
  449. package/src/svg/SVGTransformList.ts +1 -1
  450. package/src/tree-walker/NodeIterator.ts +44 -8
  451. package/src/tree-walker/TreeWalker.ts +6 -6
  452. package/src/utilities/XMLEncodeUtility.ts +127 -0
  453. package/src/window/BrowserWindow.ts +18 -5
  454. package/src/window/WindowErrorUtility.ts +1 -1
  455. package/src/xml-http-request/XMLHttpRequest.ts +3 -1
  456. package/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +1 -1
  457. package/src/xml-parser/XMLParser.ts +627 -313
  458. package/src/xml-serializer/XMLSerializer.ts +204 -58
  459. package/cjs/ClassMethodBinder.cjs.map +0 -1
  460. package/cjs/ClassMethodBinder.d.ts.map +0 -1
  461. package/cjs/StringUtility.cjs.map +0 -1
  462. package/cjs/StringUtility.d.ts.map +0 -1
  463. package/lib/ClassMethodBinder.d.ts.map +0 -1
  464. package/lib/ClassMethodBinder.js.map +0 -1
  465. package/lib/StringUtility.d.ts.map +0 -1
  466. package/lib/StringUtility.js.map +0 -1
  467. /package/cjs/{ClassMethodBinder.cjs → utilities/ClassMethodBinder.cjs} +0 -0
  468. /package/cjs/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  469. /package/cjs/{StringUtility.cjs → utilities/StringUtility.cjs} +0 -0
  470. /package/cjs/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  471. /package/lib/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  472. /package/lib/{ClassMethodBinder.js → utilities/ClassMethodBinder.js} +0 -0
  473. /package/lib/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  474. /package/lib/{StringUtility.js → utilities/StringUtility.js} +0 -0
  475. /package/src/{ClassMethodBinder.ts → utilities/ClassMethodBinder.ts} +0 -0
  476. /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,59 @@ 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
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
617
+ this,
618
+ 'connectedCallback'
619
+ );
620
+ }
621
+
622
+ /**
623
+ * @override
624
+ */
625
+ public override [PropertySymbol.disconnectedFromDocument](): void {
626
+ super[PropertySymbol.disconnectedFromDocument]();
627
+
628
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
629
+ this,
630
+ 'disconnectedCallback'
631
+ );
632
+ }
633
+
634
+ /**
635
+ * @override
636
+ */
637
+ public override [PropertySymbol.onSetAttribute](
638
+ attribute: Attr,
639
+ replacedAttribute: Attr | null
640
+ ): void {
641
+ super[PropertySymbol.onSetAttribute](attribute, replacedAttribute);
642
+
643
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
644
+ this,
645
+ 'attributeChangedCallback',
646
+ [attribute.name, replacedAttribute?.value ?? null, attribute.value]
647
+ );
648
+ }
649
+
650
+ /**
651
+ * @override
652
+ */
653
+ public override [PropertySymbol.onRemoveAttribute](removedAttribute: Attr): void {
654
+ super[PropertySymbol.onRemoveAttribute](removedAttribute);
655
+
656
+ this[PropertySymbol.window][PropertySymbol.customElementReactionStack].enqueueReaction(
657
+ this,
658
+ 'attributeChangedCallback',
659
+ [removedAttribute.name, removedAttribute.value, null]
660
+ );
661
+ }
662
+
590
663
  /**
591
664
  * Triggered when a custom element is connected to the DOM.
592
665
  */
@@ -595,6 +668,7 @@ export default class HTMLElement extends Element {
595
668
  return;
596
669
  }
597
670
 
671
+ const window = this[PropertySymbol.window];
598
672
  const localName = this[PropertySymbol.localName];
599
673
  const newElement = <HTMLElement>this[PropertySymbol.ownerDocument].createElement(localName);
600
674
  const newCache = newElement[PropertySymbol.cache];
@@ -604,7 +678,6 @@ export default class HTMLElement extends Element {
604
678
  newElement[PropertySymbol.childNodes] = null;
605
679
  newElement[PropertySymbol.children] = null;
606
680
  newElement[PropertySymbol.isConnected] = this[PropertySymbol.isConnected];
607
-
608
681
  newElement[PropertySymbol.rootNode] = this[PropertySymbol.rootNode];
609
682
  newElement[PropertySymbol.formNode] = this[PropertySymbol.formNode];
610
683
  newElement[PropertySymbol.parentNode] = this[PropertySymbol.parentNode];
@@ -619,19 +692,25 @@ export default class HTMLElement extends Element {
619
692
  newElement[PropertySymbol.attributes][PropertySymbol.namespaceItems] =
620
693
  this[PropertySymbol.attributes][PropertySymbol.namespaceItems];
621
694
 
622
- for (const attr of newElement[PropertySymbol.attributes][PropertySymbol.namedItems].values()) {
695
+ for (const attr of newElement[PropertySymbol.attributes][
696
+ PropertySymbol.namespaceItems
697
+ ].values()) {
623
698
  attr[PropertySymbol.ownerElement] = newElement;
624
699
  }
625
700
 
701
+ this[PropertySymbol.clearCache]();
702
+
626
703
  this[PropertySymbol.nodeArray] = [];
627
704
  this[PropertySymbol.elementArray] = [];
628
705
  this[PropertySymbol.childNodes] = null;
629
706
  this[PropertySymbol.children] = null;
630
707
 
708
+ this[PropertySymbol.parentNode] = null;
631
709
  this[PropertySymbol.rootNode] = null;
632
710
  this[PropertySymbol.formNode] = null;
633
711
  this[PropertySymbol.selectNode] = null;
634
712
  this[PropertySymbol.textAreaNode] = null;
713
+
635
714
  this[PropertySymbol.mutationListeners] = [];
636
715
  this[PropertySymbol.isValue] = null;
637
716
  this[PropertySymbol.cache] = newCache;
@@ -639,32 +718,35 @@ export default class HTMLElement extends Element {
639
718
  this[PropertySymbol.attributes][PropertySymbol.namedItems] = new Map();
640
719
  this[PropertySymbol.attributes][PropertySymbol.namespaceItems] = new Map();
641
720
 
642
- const parentChildNodes = this[PropertySymbol.parentNode][PropertySymbol.nodeArray];
643
- const parentChildElements = this[PropertySymbol.parentNode][PropertySymbol.elementArray];
721
+ for (const node of newElement[PropertySymbol.nodeArray]) {
722
+ node[PropertySymbol.parentNode] = newElement;
723
+ }
724
+
725
+ const parentChildNodes = newElement[PropertySymbol.parentNode][PropertySymbol.nodeArray];
726
+ const parentChildElements = newElement[PropertySymbol.parentNode][PropertySymbol.elementArray];
727
+
644
728
  parentChildNodes[parentChildNodes.indexOf(this)] = newElement;
645
729
  parentChildElements[parentChildElements.indexOf(this)] = newElement;
646
730
 
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
- }
731
+ const allCallbacks = window.customElements[PropertySymbol.callbacks];
732
+ const callbacks = allCallbacks.get(localName);
733
+
734
+ if (callbacks && this.#customElementDefineCallback) {
735
+ const index = callbacks.indexOf(this.#customElementDefineCallback);
736
+
737
+ if (index !== -1) {
738
+ callbacks.splice(index, 1);
739
+ }
740
+
741
+ if (!callbacks.length) {
742
+ allCallbacks.delete(localName);
665
743
  }
744
+
745
+ this.#customElementDefineCallback = null;
666
746
  }
667
747
 
668
- this[PropertySymbol.disconnectedFromDocument]();
748
+ if (newElement[PropertySymbol.isConnected]) {
749
+ newElement[PropertySymbol.connectedToDocument]();
750
+ }
669
751
  }
670
752
  }
@@ -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
  }