happy-dom 15.11.6 → 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 (489) 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/browser/utilities/BrowserFrameURL.cjs +1 -1
  6. package/cjs/browser/utilities/BrowserFrameURL.cjs.map +1 -1
  7. package/cjs/browser/utilities/BrowserFrameURL.d.ts +1 -1
  8. package/cjs/browser/utilities/BrowserFrameURL.d.ts.map +1 -1
  9. package/cjs/config/HTMLElementConfig.cjs +42 -16
  10. package/cjs/config/HTMLElementConfig.cjs.map +1 -1
  11. package/cjs/config/HTMLElementConfig.d.ts +7 -0
  12. package/cjs/config/HTMLElementConfig.d.ts.map +1 -1
  13. package/cjs/config/HTMLElementConfigContentModelEnum.cjs +3 -0
  14. package/cjs/config/HTMLElementConfigContentModelEnum.cjs.map +1 -1
  15. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  16. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  17. package/cjs/config/NamespaceURI.cjs +2 -0
  18. package/cjs/config/NamespaceURI.cjs.map +1 -1
  19. package/cjs/config/NamespaceURI.d.ts +2 -0
  20. package/cjs/config/NamespaceURI.d.ts.map +1 -1
  21. package/cjs/css/declaration/CSSStyleDeclaration.cjs +1 -1
  22. package/cjs/css/declaration/CSSStyleDeclaration.cjs.map +1 -1
  23. package/cjs/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  24. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs +2 -2
  25. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs.map +1 -1
  26. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  27. package/cjs/custom-element/CustomElementReactionStack.cjs +100 -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 +8 -8
  57. package/cjs/history/History.cjs.map +1 -1
  58. package/cjs/history/History.d.ts +2 -2
  59. package/cjs/history/History.d.ts.map +1 -1
  60. package/cjs/html-parser/HTMLParser.cjs +726 -0
  61. package/cjs/html-parser/HTMLParser.cjs.map +1 -0
  62. package/cjs/html-parser/HTMLParser.d.ts +91 -0
  63. package/cjs/html-parser/HTMLParser.d.ts.map +1 -0
  64. package/cjs/html-serializer/HTMLSerializer.cjs +152 -0
  65. package/cjs/html-serializer/HTMLSerializer.cjs.map +1 -0
  66. package/cjs/html-serializer/HTMLSerializer.d.ts +36 -0
  67. package/cjs/html-serializer/HTMLSerializer.d.ts.map +1 -0
  68. package/cjs/nodes/document/Document.cjs +105 -121
  69. package/cjs/nodes/document/Document.cjs.map +1 -1
  70. package/cjs/nodes/document/Document.d.ts +8 -0
  71. package/cjs/nodes/document/Document.d.ts.map +1 -1
  72. package/cjs/nodes/element/Element.cjs +35 -53
  73. package/cjs/nodes/element/Element.cjs.map +1 -1
  74. package/cjs/nodes/element/Element.d.ts +2 -12
  75. package/cjs/nodes/element/Element.d.ts.map +1 -1
  76. package/cjs/nodes/element/HTMLCollection.cjs +5 -9
  77. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  78. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  79. package/cjs/nodes/element/NamedNodeMap.cjs +39 -52
  80. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  81. package/cjs/nodes/element/NamedNodeMap.d.ts +1 -16
  82. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  83. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +12 -14
  84. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
  85. package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  86. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +1 -1
  87. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  88. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  89. package/cjs/nodes/html-document/HTMLDocument.cjs +33 -2
  90. package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
  91. package/cjs/nodes/html-document/HTMLDocument.d.ts +10 -0
  92. package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  93. package/cjs/nodes/html-element/HTMLElement.cjs +52 -22
  94. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  95. package/cjs/nodes/html-element/HTMLElement.d.ts +34 -0
  96. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  97. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs +1 -1
  98. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs.map +1 -1
  99. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  100. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +5 -8
  101. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  102. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  103. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +1 -1
  104. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  105. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +1 -1
  106. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  107. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  108. package/cjs/nodes/html-media-element/TextTrackList.cjs +1 -1
  109. package/cjs/nodes/html-media-element/TextTrackList.cjs.map +1 -1
  110. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +1 -1
  111. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
  112. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  113. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs +1 -1
  114. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs.map +1 -1
  115. package/cjs/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  116. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -1
  117. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  118. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  119. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -2
  120. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  121. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  122. package/cjs/nodes/html-table-element/HTMLTableElement.cjs +9 -1
  123. package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
  124. package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  125. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +1 -1
  126. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +15 -17
  127. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
  128. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  129. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  130. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -1
  131. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  132. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  133. package/cjs/nodes/node/Node.cjs +44 -48
  134. package/cjs/nodes/node/Node.cjs.map +1 -1
  135. package/cjs/nodes/node/Node.d.ts +2 -10
  136. package/cjs/nodes/node/Node.d.ts.map +1 -1
  137. package/cjs/nodes/node/NodeList.cjs +1 -1
  138. package/cjs/nodes/node/NodeList.cjs.map +1 -1
  139. package/cjs/nodes/node/NodeUtility.cjs +4 -3
  140. package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
  141. package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
  142. package/cjs/nodes/parent-node/ParentNodeUtility.cjs +5 -2
  143. package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
  144. package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  145. package/cjs/nodes/shadow-root/ShadowRoot.cjs +8 -8
  146. package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
  147. package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  148. package/cjs/nodes/xml-document/XMLDocument.cjs +26 -0
  149. package/cjs/nodes/xml-document/XMLDocument.cjs.map +1 -1
  150. package/cjs/nodes/xml-document/XMLDocument.d.ts +2 -0
  151. package/cjs/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  152. package/cjs/query-selector/SelectorItem.cjs +1 -2
  153. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  154. package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
  155. package/cjs/range/Range.cjs +3 -3
  156. package/cjs/range/Range.cjs.map +1 -1
  157. package/cjs/range/Range.d.ts.map +1 -1
  158. package/cjs/storage/Storage.cjs +1 -1
  159. package/cjs/storage/Storage.cjs.map +1 -1
  160. package/cjs/svg/SVGLengthList.cjs +1 -1
  161. package/cjs/svg/SVGLengthList.cjs.map +1 -1
  162. package/cjs/svg/SVGNumberList.cjs +1 -1
  163. package/cjs/svg/SVGNumberList.cjs.map +1 -1
  164. package/cjs/svg/SVGPointList.cjs +1 -1
  165. package/cjs/svg/SVGPointList.cjs.map +1 -1
  166. package/cjs/svg/SVGStringList.cjs +1 -1
  167. package/cjs/svg/SVGStringList.cjs.map +1 -1
  168. package/cjs/svg/SVGTransformList.cjs +1 -1
  169. package/cjs/svg/SVGTransformList.cjs.map +1 -1
  170. package/cjs/tree-walker/NodeIterator.cjs +63 -6
  171. package/cjs/tree-walker/NodeIterator.cjs.map +1 -1
  172. package/cjs/tree-walker/NodeIterator.d.ts +18 -3
  173. package/cjs/tree-walker/NodeIterator.d.ts.map +1 -1
  174. package/cjs/tree-walker/TreeWalker.cjs +6 -6
  175. package/cjs/tree-walker/TreeWalker.cjs.map +1 -1
  176. package/cjs/tree-walker/TreeWalker.d.ts +2 -1
  177. package/cjs/tree-walker/TreeWalker.d.ts.map +1 -1
  178. package/cjs/utilities/ClassMethodBinder.cjs.map +1 -0
  179. package/cjs/utilities/ClassMethodBinder.d.ts.map +1 -0
  180. package/cjs/utilities/StringUtility.cjs.map +1 -0
  181. package/cjs/utilities/StringUtility.d.ts.map +1 -0
  182. package/cjs/utilities/XMLEncodeUtility.cjs +119 -0
  183. package/cjs/utilities/XMLEncodeUtility.cjs.map +1 -0
  184. package/cjs/utilities/XMLEncodeUtility.d.ts +48 -0
  185. package/cjs/utilities/XMLEncodeUtility.d.ts.map +1 -0
  186. package/cjs/window/BrowserWindow.cjs +9 -3
  187. package/cjs/window/BrowserWindow.cjs.map +1 -1
  188. package/cjs/window/BrowserWindow.d.ts +2 -0
  189. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  190. package/cjs/window/WindowErrorUtility.cjs +1 -1
  191. package/cjs/window/WindowErrorUtility.cjs.map +1 -1
  192. package/cjs/xml-http-request/XMLHttpRequest.cjs +2 -1
  193. package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
  194. package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  195. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs +1 -1
  196. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs.map +1 -1
  197. package/cjs/xml-parser/XMLParser.cjs +531 -242
  198. package/cjs/xml-parser/XMLParser.cjs.map +1 -1
  199. package/cjs/xml-parser/XMLParser.d.ts +89 -19
  200. package/cjs/xml-parser/XMLParser.d.ts.map +1 -1
  201. package/cjs/xml-serializer/XMLSerializer.cjs +136 -40
  202. package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
  203. package/cjs/xml-serializer/XMLSerializer.d.ts +6 -17
  204. package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
  205. package/lib/PropertySymbol.d.ts +4 -1
  206. package/lib/PropertySymbol.d.ts.map +1 -1
  207. package/lib/PropertySymbol.js +4 -1
  208. package/lib/PropertySymbol.js.map +1 -1
  209. package/lib/browser/utilities/BrowserFrameURL.d.ts +1 -1
  210. package/lib/browser/utilities/BrowserFrameURL.d.ts.map +1 -1
  211. package/lib/browser/utilities/BrowserFrameURL.js +1 -1
  212. package/lib/browser/utilities/BrowserFrameURL.js.map +1 -1
  213. package/lib/config/HTMLElementConfig.d.ts +7 -0
  214. package/lib/config/HTMLElementConfig.d.ts.map +1 -1
  215. package/lib/config/HTMLElementConfig.js +42 -16
  216. package/lib/config/HTMLElementConfig.js.map +1 -1
  217. package/lib/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  218. package/lib/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  219. package/lib/config/HTMLElementConfigContentModelEnum.js +3 -0
  220. package/lib/config/HTMLElementConfigContentModelEnum.js.map +1 -1
  221. package/lib/config/NamespaceURI.d.ts +2 -0
  222. package/lib/config/NamespaceURI.d.ts.map +1 -1
  223. package/lib/config/NamespaceURI.js +2 -0
  224. package/lib/config/NamespaceURI.js.map +1 -1
  225. package/lib/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  226. package/lib/css/declaration/CSSStyleDeclaration.js +1 -1
  227. package/lib/css/declaration/CSSStyleDeclaration.js.map +1 -1
  228. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  229. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js +2 -2
  230. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js.map +1 -1
  231. package/lib/custom-element/CustomElementReactionStack.d.ts +27 -0
  232. package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  233. package/lib/custom-element/CustomElementReactionStack.js +71 -0
  234. package/lib/custom-element/CustomElementReactionStack.js.map +1 -0
  235. package/lib/custom-element/CustomElementRegistry.d.ts +2 -6
  236. package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
  237. package/lib/custom-element/CustomElementRegistry.js +32 -45
  238. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  239. package/lib/custom-element/CustomElementUtility.d.ts +14 -0
  240. package/lib/custom-element/CustomElementUtility.d.ts.map +1 -0
  241. package/lib/custom-element/CustomElementUtility.js +32 -0
  242. package/lib/custom-element/CustomElementUtility.js.map +1 -0
  243. package/lib/custom-element/ICustomElementDefinition.d.ts +12 -0
  244. package/lib/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  245. package/lib/custom-element/ICustomElementDefinition.js +2 -0
  246. package/lib/custom-element/ICustomElementDefinition.js.map +1 -0
  247. package/lib/dom/DOMStringMap.d.ts.map +1 -1
  248. package/lib/dom/DOMStringMap.js +8 -8
  249. package/lib/dom/DOMStringMap.js.map +1 -1
  250. package/lib/dom/DOMTokenList.js +1 -1
  251. package/lib/dom/DOMTokenList.js.map +1 -1
  252. package/lib/dom-parser/DOMParser.d.ts +0 -1
  253. package/lib/dom-parser/DOMParser.d.ts.map +1 -1
  254. package/lib/dom-parser/DOMParser.js +5 -67
  255. package/lib/dom-parser/DOMParser.js.map +1 -1
  256. package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
  257. package/lib/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  258. package/lib/exception/DOMExceptionNameEnum.js +1 -0
  259. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  260. package/lib/history/History.d.ts +2 -2
  261. package/lib/history/History.d.ts.map +1 -1
  262. package/lib/history/History.js +8 -8
  263. package/lib/history/History.js.map +1 -1
  264. package/lib/html-parser/HTMLParser.d.ts +91 -0
  265. package/lib/html-parser/HTMLParser.d.ts.map +1 -0
  266. package/lib/html-parser/HTMLParser.js +697 -0
  267. package/lib/html-parser/HTMLParser.js.map +1 -0
  268. package/lib/html-serializer/HTMLSerializer.d.ts +36 -0
  269. package/lib/html-serializer/HTMLSerializer.d.ts.map +1 -0
  270. package/lib/html-serializer/HTMLSerializer.js +123 -0
  271. package/lib/html-serializer/HTMLSerializer.js.map +1 -0
  272. package/lib/nodes/document/Document.d.ts +8 -0
  273. package/lib/nodes/document/Document.d.ts.map +1 -1
  274. package/lib/nodes/document/Document.js +106 -122
  275. package/lib/nodes/document/Document.js.map +1 -1
  276. package/lib/nodes/element/Element.d.ts +2 -12
  277. package/lib/nodes/element/Element.d.ts.map +1 -1
  278. package/lib/nodes/element/Element.js +35 -53
  279. package/lib/nodes/element/Element.js.map +1 -1
  280. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  281. package/lib/nodes/element/HTMLCollection.js +5 -9
  282. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  283. package/lib/nodes/element/NamedNodeMap.d.ts +1 -16
  284. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  285. package/lib/nodes/element/NamedNodeMap.js +39 -52
  286. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  287. package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  288. package/lib/nodes/element/NamedNodeMapProxyFactory.js +12 -14
  289. package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
  290. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  291. package/lib/nodes/html-button-element/HTMLButtonElement.js +1 -1
  292. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  293. package/lib/nodes/html-document/HTMLDocument.d.ts +10 -0
  294. package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  295. package/lib/nodes/html-document/HTMLDocument.js +33 -2
  296. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  297. package/lib/nodes/html-element/HTMLElement.d.ts +34 -0
  298. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  299. package/lib/nodes/html-element/HTMLElement.js +52 -22
  300. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  301. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  302. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js +1 -1
  303. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js.map +1 -1
  304. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  305. package/lib/nodes/html-form-element/HTMLFormElement.js +5 -8
  306. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  307. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +1 -1
  308. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  309. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  310. package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
  311. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  312. package/lib/nodes/html-media-element/TextTrackList.js +1 -1
  313. package/lib/nodes/html-media-element/TextTrackList.js.map +1 -1
  314. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  315. package/lib/nodes/html-object-element/HTMLObjectElement.js +1 -1
  316. package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
  317. package/lib/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  318. package/lib/nodes/html-output-element/HTMLOutputElement.js +1 -1
  319. package/lib/nodes/html-output-element/HTMLOutputElement.js.map +1 -1
  320. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  321. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -1
  322. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  323. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  324. package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -2
  325. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  326. package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  327. package/lib/nodes/html-table-element/HTMLTableElement.js +9 -1
  328. package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
  329. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +1 -1
  330. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  331. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  332. package/lib/nodes/html-template-element/HTMLTemplateElement.js +15 -17
  333. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  334. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  335. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -1
  336. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  337. package/lib/nodes/node/Node.d.ts +2 -10
  338. package/lib/nodes/node/Node.d.ts.map +1 -1
  339. package/lib/nodes/node/Node.js +44 -48
  340. package/lib/nodes/node/Node.js.map +1 -1
  341. package/lib/nodes/node/NodeList.js +1 -1
  342. package/lib/nodes/node/NodeList.js.map +1 -1
  343. package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
  344. package/lib/nodes/node/NodeUtility.js +4 -3
  345. package/lib/nodes/node/NodeUtility.js.map +1 -1
  346. package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  347. package/lib/nodes/parent-node/ParentNodeUtility.js +5 -2
  348. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  349. package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  350. package/lib/nodes/shadow-root/ShadowRoot.js +8 -8
  351. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  352. package/lib/nodes/xml-document/XMLDocument.d.ts +2 -0
  353. package/lib/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  354. package/lib/nodes/xml-document/XMLDocument.js +3 -0
  355. package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
  356. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  357. package/lib/query-selector/SelectorItem.js +1 -2
  358. package/lib/query-selector/SelectorItem.js.map +1 -1
  359. package/lib/range/Range.d.ts.map +1 -1
  360. package/lib/range/Range.js +3 -3
  361. package/lib/range/Range.js.map +1 -1
  362. package/lib/storage/Storage.js +1 -1
  363. package/lib/storage/Storage.js.map +1 -1
  364. package/lib/svg/SVGLengthList.js +1 -1
  365. package/lib/svg/SVGLengthList.js.map +1 -1
  366. package/lib/svg/SVGNumberList.js +1 -1
  367. package/lib/svg/SVGNumberList.js.map +1 -1
  368. package/lib/svg/SVGPointList.js +1 -1
  369. package/lib/svg/SVGPointList.js.map +1 -1
  370. package/lib/svg/SVGStringList.js +1 -1
  371. package/lib/svg/SVGStringList.js.map +1 -1
  372. package/lib/svg/SVGTransformList.js +1 -1
  373. package/lib/svg/SVGTransformList.js.map +1 -1
  374. package/lib/tree-walker/NodeIterator.d.ts +18 -3
  375. package/lib/tree-walker/NodeIterator.d.ts.map +1 -1
  376. package/lib/tree-walker/NodeIterator.js +40 -6
  377. package/lib/tree-walker/NodeIterator.js.map +1 -1
  378. package/lib/tree-walker/TreeWalker.d.ts +2 -1
  379. package/lib/tree-walker/TreeWalker.d.ts.map +1 -1
  380. package/lib/tree-walker/TreeWalker.js +6 -6
  381. package/lib/tree-walker/TreeWalker.js.map +1 -1
  382. package/lib/utilities/ClassMethodBinder.d.ts.map +1 -0
  383. package/lib/utilities/ClassMethodBinder.js.map +1 -0
  384. package/lib/utilities/StringUtility.d.ts.map +1 -0
  385. package/lib/utilities/StringUtility.js.map +1 -0
  386. package/lib/utilities/XMLEncodeUtility.d.ts +48 -0
  387. package/lib/utilities/XMLEncodeUtility.d.ts.map +1 -0
  388. package/lib/utilities/XMLEncodeUtility.js +116 -0
  389. package/lib/utilities/XMLEncodeUtility.js.map +1 -0
  390. package/lib/window/BrowserWindow.d.ts +2 -0
  391. package/lib/window/BrowserWindow.d.ts.map +1 -1
  392. package/lib/window/BrowserWindow.js +9 -3
  393. package/lib/window/BrowserWindow.js.map +1 -1
  394. package/lib/window/WindowErrorUtility.js +1 -1
  395. package/lib/window/WindowErrorUtility.js.map +1 -1
  396. package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  397. package/lib/xml-http-request/XMLHttpRequest.js +2 -1
  398. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
  399. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js +1 -1
  400. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js.map +1 -1
  401. package/lib/xml-parser/XMLParser.d.ts +89 -19
  402. package/lib/xml-parser/XMLParser.d.ts.map +1 -1
  403. package/lib/xml-parser/XMLParser.js +531 -242
  404. package/lib/xml-parser/XMLParser.js.map +1 -1
  405. package/lib/xml-serializer/XMLSerializer.d.ts +6 -17
  406. package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
  407. package/lib/xml-serializer/XMLSerializer.js +136 -40
  408. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  409. package/package.json +1 -2
  410. package/src/PropertySymbol.ts +4 -1
  411. package/src/browser/utilities/BrowserFrameURL.ts +2 -2
  412. package/src/config/HTMLElementConfig.ts +53 -17
  413. package/src/config/HTMLElementConfigContentModelEnum.ts +3 -0
  414. package/src/config/NamespaceURI.ts +2 -0
  415. package/src/css/declaration/CSSStyleDeclaration.ts +1 -4
  416. package/src/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.ts +2 -4
  417. package/src/custom-element/CustomElementReactionStack.ts +81 -0
  418. package/src/custom-element/CustomElementRegistry.ts +35 -54
  419. package/src/custom-element/CustomElementUtility.ts +34 -0
  420. package/src/custom-element/ICustomElementDefinition.ts +16 -0
  421. package/src/dom/DOMStringMap.ts +12 -10
  422. package/src/dom/DOMTokenList.ts +1 -1
  423. package/src/dom-parser/DOMParser.ts +5 -75
  424. package/src/exception/DOMExceptionNameEnum.ts +2 -1
  425. package/src/history/History.ts +10 -10
  426. package/src/html-parser/HTMLParser.ts +864 -0
  427. package/src/html-serializer/HTMLSerializer.ts +162 -0
  428. package/src/nodes/document/Document.ts +118 -137
  429. package/src/nodes/element/Element.ts +48 -95
  430. package/src/nodes/element/HTMLCollection.ts +5 -30
  431. package/src/nodes/element/NamedNodeMap.ts +58 -72
  432. package/src/nodes/element/NamedNodeMapProxyFactory.ts +12 -15
  433. package/src/nodes/html-button-element/HTMLButtonElement.ts +1 -4
  434. package/src/nodes/html-document/HTMLDocument.ts +58 -2
  435. package/src/nodes/html-element/HTMLElement.ts +107 -25
  436. package/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +1 -4
  437. package/src/nodes/html-form-element/HTMLFormElement.ts +5 -27
  438. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +1 -1
  439. package/src/nodes/html-input-element/HTMLInputElement.ts +1 -4
  440. package/src/nodes/html-media-element/TextTrackList.ts +1 -1
  441. package/src/nodes/html-object-element/HTMLObjectElement.ts +1 -4
  442. package/src/nodes/html-output-element/HTMLOutputElement.ts +1 -4
  443. package/src/nodes/html-script-element/HTMLScriptElement.ts +4 -1
  444. package/src/nodes/html-select-element/HTMLSelectElement.ts +2 -5
  445. package/src/nodes/html-table-element/HTMLTableElement.ts +8 -1
  446. package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +1 -1
  447. package/src/nodes/html-template-element/HTMLTemplateElement.ts +23 -17
  448. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -4
  449. package/src/nodes/node/Node.ts +57 -70
  450. package/src/nodes/node/NodeList.ts +1 -1
  451. package/src/nodes/node/NodeUtility.ts +4 -3
  452. package/src/nodes/parent-node/ParentNodeUtility.ts +6 -6
  453. package/src/nodes/shadow-root/ShadowRoot.ts +8 -8
  454. package/src/nodes/xml-document/XMLDocument.ts +5 -1
  455. package/src/query-selector/SelectorItem.ts +1 -2
  456. package/src/range/Range.ts +3 -3
  457. package/src/storage/Storage.ts +1 -1
  458. package/src/svg/SVGLengthList.ts +1 -1
  459. package/src/svg/SVGNumberList.ts +1 -1
  460. package/src/svg/SVGPointList.ts +1 -1
  461. package/src/svg/SVGStringList.ts +1 -1
  462. package/src/svg/SVGTransformList.ts +1 -1
  463. package/src/tree-walker/NodeIterator.ts +44 -8
  464. package/src/tree-walker/TreeWalker.ts +6 -6
  465. package/src/utilities/XMLEncodeUtility.ts +127 -0
  466. package/src/window/BrowserWindow.ts +18 -5
  467. package/src/window/WindowErrorUtility.ts +1 -1
  468. package/src/xml-http-request/XMLHttpRequest.ts +3 -1
  469. package/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +1 -1
  470. package/src/xml-parser/XMLParser.ts +627 -313
  471. package/src/xml-serializer/XMLSerializer.ts +204 -58
  472. package/cjs/ClassMethodBinder.cjs.map +0 -1
  473. package/cjs/ClassMethodBinder.d.ts.map +0 -1
  474. package/cjs/StringUtility.cjs.map +0 -1
  475. package/cjs/StringUtility.d.ts.map +0 -1
  476. package/lib/ClassMethodBinder.d.ts.map +0 -1
  477. package/lib/ClassMethodBinder.js.map +0 -1
  478. package/lib/StringUtility.d.ts.map +0 -1
  479. package/lib/StringUtility.js.map +0 -1
  480. /package/cjs/{ClassMethodBinder.cjs → utilities/ClassMethodBinder.cjs} +0 -0
  481. /package/cjs/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  482. /package/cjs/{StringUtility.cjs → utilities/StringUtility.cjs} +0 -0
  483. /package/cjs/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  484. /package/lib/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  485. /package/lib/{ClassMethodBinder.js → utilities/ClassMethodBinder.js} +0 -0
  486. /package/lib/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  487. /package/lib/{StringUtility.js → utilities/StringUtility.js} +0 -0
  488. /package/src/{ClassMethodBinder.ts → utilities/ClassMethodBinder.ts} +0 -0
  489. /package/src/{StringUtility.ts → utilities/StringUtility.ts} +0 -0
@@ -4,88 +4,110 @@ import Node from '../nodes/node/Node.js';
4
4
  import DocumentType from '../nodes/document-type/DocumentType.js';
5
5
  import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement.js';
6
6
  import NodeTypeEnum from '../nodes/node/NodeTypeEnum.js';
7
- import ProcessingInstruction from '../nodes/processing-instruction/ProcessingInstruction.js';
8
- import * as Entities from 'entities';
9
7
  import DocumentFragment from '../nodes/document-fragment/DocumentFragment.js';
10
- import ShadowRoot from '../nodes/shadow-root/ShadowRoot.js';
11
8
  import HTMLElementConfig from '../config/HTMLElementConfig.js';
12
9
  import HTMLElementConfigContentModelEnum from '../config/HTMLElementConfigContentModelEnum.js';
10
+ import ProcessingInstruction from '../nodes/processing-instruction/ProcessingInstruction.js';
11
+ import NamespaceURI from '../config/NamespaceURI.js';
12
+ import XMLEncodeUtility from '../utilities/XMLEncodeUtility.js';
13
13
 
14
14
  /**
15
- * Utility for converting an element to string.
15
+ * Serializes a node into XML.
16
+ *
17
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer
16
18
  */
17
19
  export default class XMLSerializer {
18
- public [PropertySymbol.options]: {
19
- serializableShadowRoots: boolean;
20
- shadowRoots: ShadowRoot[] | null;
21
- allShadowRoots: boolean;
22
- } = {
23
- serializableShadowRoots: false,
24
- shadowRoots: null,
25
- allShadowRoots: false
26
- };
27
-
28
20
  /**
29
- * Renders an element as HTML.
21
+ * Serializes a node into XML.
30
22
  *
31
- * @param root Root element.
23
+ * @param root Root node.
32
24
  * @returns Result.
33
25
  */
34
26
  public serializeToString(root: Node): string {
35
- const options = this[PropertySymbol.options];
27
+ return this.#serializeToString(root);
28
+ }
36
29
 
30
+ /**
31
+ * Serializes a node into XML.
32
+ *
33
+ * @param root Root node.
34
+ * @param [inheritedDefaultNamespace] Default namespace.
35
+ * @param [inheritedNamespacePrefixes] Inherited namespace prefixes.
36
+ * @returns Result.
37
+ */
38
+ #serializeToString(
39
+ root: Node,
40
+ inheritedDefaultNamespace: string | null = null,
41
+ inheritedNamespacePrefixes: Map<string, string> = null
42
+ ): string {
37
43
  switch (root[PropertySymbol.nodeType]) {
38
44
  case NodeTypeEnum.elementNode:
39
45
  const element = <Element>root;
40
46
  const localName = element[PropertySymbol.localName];
41
- const config = HTMLElementConfig[element[PropertySymbol.localName]];
42
-
43
- if (config?.contentModel === HTMLElementConfigContentModelEnum.noDescendants) {
44
- return `<${localName}${this.getAttributes(element)}>`;
45
- }
46
47
 
47
48
  let innerHTML = '';
48
49
 
49
- // TODO: Should we include closed shadow roots? We are currently only including open shadow roots.
50
- if (
51
- element.shadowRoot &&
52
- (options.allShadowRoots ||
53
- (options.serializableShadowRoots && element.shadowRoot[PropertySymbol.serializable]) ||
54
- options.shadowRoots?.includes(element.shadowRoot))
55
- ) {
56
- innerHTML += `<template shadowrootmode="${element.shadowRoot[PropertySymbol.mode]}"${
57
- element.shadowRoot[PropertySymbol.serializable] ? ' shadowrootserializable=""' : ''
58
- }>`;
59
-
60
- for (const node of (<ShadowRoot>element.shadowRoot)[PropertySymbol.nodeArray]) {
61
- innerHTML += this.serializeToString(node);
62
- }
63
-
64
- innerHTML += '</template>';
65
- }
50
+ const namespacePrefixes = this.#getNamespacePrefixes(element, inheritedNamespacePrefixes);
51
+ const elementPrefix =
52
+ element[PropertySymbol.namespaceURI] === NamespaceURI.html
53
+ ? element[PropertySymbol.prefix]
54
+ : this.#getElementPrefix(element, namespacePrefixes);
55
+ const tagName = `${elementPrefix ? elementPrefix + ':' : ''}${localName}`;
56
+ const defaultNamespace = elementPrefix
57
+ ? inheritedDefaultNamespace
58
+ : element[PropertySymbol.namespaceURI] || inheritedDefaultNamespace;
59
+ const attributes = this.#getAttributes(
60
+ element,
61
+ elementPrefix,
62
+ inheritedDefaultNamespace,
63
+ inheritedNamespacePrefixes
64
+ );
66
65
 
67
66
  const childNodes =
68
- localName === 'template'
67
+ defaultNamespace === NamespaceURI.html && localName === 'template'
69
68
  ? (<DocumentFragment>(<HTMLTemplateElement>root).content)[PropertySymbol.nodeArray]
70
69
  : (<DocumentFragment>root)[PropertySymbol.nodeArray];
71
70
 
72
71
  for (const node of childNodes) {
73
- innerHTML += this.serializeToString(node);
72
+ innerHTML += this.#serializeToString(node, defaultNamespace, namespacePrefixes);
73
+ }
74
+
75
+ if (
76
+ !innerHTML &&
77
+ defaultNamespace === NamespaceURI.html &&
78
+ HTMLElementConfig[localName.toLowerCase()]?.contentModel ===
79
+ HTMLElementConfigContentModelEnum.noDescendants
80
+ ) {
81
+ return `<${tagName}${attributes} />`;
82
+ }
83
+
84
+ if (!innerHTML && defaultNamespace !== NamespaceURI.html) {
85
+ return `<${tagName}${attributes}/>`;
74
86
  }
75
87
 
76
- return `<${localName}${this.getAttributes(element)}>${innerHTML}</${localName}>`;
88
+ return `<${tagName}${attributes}>${innerHTML}</${tagName}>`;
77
89
  case Node.DOCUMENT_FRAGMENT_NODE:
78
90
  case Node.DOCUMENT_NODE:
79
91
  let html = '';
92
+ if (root[PropertySymbol.xmlProcessingInstruction]) {
93
+ html += this.#serializeToString(
94
+ root[PropertySymbol.xmlProcessingInstruction],
95
+ inheritedDefaultNamespace,
96
+ new Map(inheritedNamespacePrefixes)
97
+ );
98
+ }
80
99
  for (const node of (<Node>root)[PropertySymbol.nodeArray]) {
81
- html += this.serializeToString(node);
100
+ html += this.#serializeToString(
101
+ node,
102
+ inheritedDefaultNamespace,
103
+ new Map(inheritedNamespacePrefixes)
104
+ );
82
105
  }
83
106
  return html;
84
107
  case NodeTypeEnum.commentNode:
85
108
  return `<!--${root.textContent}-->`;
86
109
  case NodeTypeEnum.processingInstructionNode:
87
- // TODO: Add support for processing instructions.
88
- return `<!--?${(<ProcessingInstruction>root).target} ${root.textContent}?-->`;
110
+ return `<?${(<ProcessingInstruction>root).target} ${root.textContent}?>`;
89
111
  case NodeTypeEnum.textNode:
90
112
  const parentElement = root.parentElement;
91
113
  if (parentElement) {
@@ -94,7 +116,7 @@ export default class XMLSerializer {
94
116
  return root.textContent;
95
117
  }
96
118
  }
97
- return Entities.escapeText(root.textContent);
119
+ return XMLEncodeUtility.encodeTextContent(root.textContent);
98
120
  case NodeTypeEnum.documentTypeNode:
99
121
  const doctype = <DocumentType>root;
100
122
  const identifier = doctype.publicId ? ' PUBLIC' : doctype.systemId ? ' SYSTEM' : '';
@@ -106,29 +128,153 @@ export default class XMLSerializer {
106
128
  return '';
107
129
  }
108
130
 
131
+ /**
132
+ * Returns namespace prefixes.
133
+ *
134
+ * @param element Element.
135
+ * @param inheritedNamespacePrefixes Inherited namespace prefixes.
136
+ * @returns Namespace prefixes.
137
+ */
138
+ #getNamespacePrefixes(
139
+ element: Element,
140
+ inheritedNamespacePrefixes: Map<string, string> | null
141
+ ): Map<string, string> | null {
142
+ const namespacePrefixes = new Map<string, string>(inheritedNamespacePrefixes);
143
+ const namedItems = (<Element>element)[PropertySymbol.attributes][PropertySymbol.namedItems];
144
+
145
+ for (const attributes of namedItems.values()) {
146
+ if (
147
+ attributes[0][PropertySymbol.namespaceURI] === NamespaceURI.xmlns &&
148
+ attributes[0][PropertySymbol.prefix]
149
+ ) {
150
+ namespacePrefixes.set(
151
+ attributes[0][PropertySymbol.value],
152
+ attributes[0][PropertySymbol.localName]
153
+ );
154
+ }
155
+ }
156
+
157
+ return namespacePrefixes;
158
+ }
159
+
160
+ /**
161
+ * Returns namespace prefixes.
162
+ *
163
+ * @param element Element.
164
+ * @param namespacePrefixes Inherited namespace prefixes.
165
+ * @returns Element prefix.
166
+ */
167
+ #getElementPrefix(
168
+ element: Element,
169
+ namespacePrefixes: Map<string, string> | null
170
+ ): string | null {
171
+ if (element[PropertySymbol.prefix] && !element[PropertySymbol.namespaceURI]) {
172
+ throw new Error('Element has a prefix but no namespace.');
173
+ }
174
+
175
+ if (!element[PropertySymbol.prefix]) {
176
+ return null;
177
+ }
178
+
179
+ const elementPrefix = namespacePrefixes.get(element[PropertySymbol.namespaceURI]);
180
+
181
+ if (elementPrefix) {
182
+ return elementPrefix;
183
+ }
184
+
185
+ const existingPrefixes = new Set(namespacePrefixes.values());
186
+
187
+ if (existingPrefixes.has(element[PropertySymbol.prefix])) {
188
+ let i = 1;
189
+ while (existingPrefixes.has('n' + i)) {
190
+ i++;
191
+ }
192
+ namespacePrefixes.set(element[PropertySymbol.namespaceURI], 'n' + i);
193
+ return 'n' + i;
194
+ }
195
+
196
+ namespacePrefixes.set(element[PropertySymbol.namespaceURI], element[PropertySymbol.prefix]);
197
+
198
+ return element[PropertySymbol.prefix];
199
+ }
200
+
109
201
  /**
110
202
  * Returns attributes as a string.
111
203
  *
112
204
  * @param element Element.
205
+ * @param elementPrefix Element prefix.
206
+ * @param inheritedDefaultNamespace Inherited default namespace.
207
+ * @param inheritedNamespacePrefixes Inherited namespace prefixes.
113
208
  * @returns Attributes.
114
209
  */
115
- private getAttributes(element: Element): string {
210
+ #getAttributes(
211
+ element: Element,
212
+ elementPrefix: string | null,
213
+ inheritedDefaultNamespace: string | null,
214
+ inheritedNamespacePrefixes: Map<string, string> | null
215
+ ): string {
116
216
  let attributeString = '';
217
+ let namespaceString = '';
117
218
 
118
- if (
119
- !(<Element>element)[PropertySymbol.attributes].getNamedItem('is') &&
120
- (<Element>element)[PropertySymbol.isValue]
121
- ) {
122
- attributeString += ' is="' + (<Element>element)[PropertySymbol.isValue] + '"';
219
+ const namedItems = (<Element>element)[PropertySymbol.attributes][PropertySymbol.namedItems];
220
+ const handledNamespaces = new Set();
221
+
222
+ for (const attributes of namedItems.values()) {
223
+ const attribute = attributes[0];
224
+
225
+ // Namespace attributes should be in the beginning of the string.
226
+ if (attribute[PropertySymbol.namespaceURI] === NamespaceURI.xmlns) {
227
+ if (
228
+ elementPrefix &&
229
+ attribute[PropertySymbol.localName] === elementPrefix &&
230
+ element[PropertySymbol.namespaceURI]
231
+ ) {
232
+ namespaceString += ` xmlns:${elementPrefix}="${XMLEncodeUtility.encodeAttributeValue(
233
+ element[PropertySymbol.namespaceURI]
234
+ )}"`;
235
+ handledNamespaces.add(element[PropertySymbol.namespaceURI]);
236
+ } else if (
237
+ !elementPrefix &&
238
+ attribute[PropertySymbol.name] === 'xmlns' &&
239
+ element[PropertySymbol.namespaceURI]
240
+ ) {
241
+ namespaceString += ` xmlns="${XMLEncodeUtility.encodeAttributeValue(
242
+ element[PropertySymbol.namespaceURI]
243
+ )}"`;
244
+ handledNamespaces.add(element[PropertySymbol.namespaceURI]);
245
+ } else {
246
+ namespaceString += ` ${
247
+ attribute[PropertySymbol.name]
248
+ }="${XMLEncodeUtility.encodeAttributeValue(attribute[PropertySymbol.value])}"`;
249
+ handledNamespaces.add(attribute[PropertySymbol.value]);
250
+ }
251
+ } else {
252
+ attributeString += ` ${
253
+ attribute[PropertySymbol.name]
254
+ }="${XMLEncodeUtility.encodeAttributeValue(attribute[PropertySymbol.value])}"`;
255
+ }
123
256
  }
124
257
 
125
- for (const attribute of (<Element>element)[PropertySymbol.attributes][
126
- PropertySymbol.namedItems
127
- ].values()) {
128
- const escapedValue = Entities.escapeAttribute(attribute[PropertySymbol.value]);
129
- attributeString += ' ' + attribute[PropertySymbol.name] + '="' + escapedValue + '"';
258
+ // We should add the namespace as an attribute if it has not been added yet.
259
+ if (
260
+ element[PropertySymbol.namespaceURI] &&
261
+ inheritedDefaultNamespace !== element[PropertySymbol.namespaceURI] &&
262
+ !handledNamespaces.has(element[PropertySymbol.namespaceURI])
263
+ ) {
264
+ if (elementPrefix && !inheritedNamespacePrefixes.has(element[PropertySymbol.namespaceURI])) {
265
+ namespaceString += ` xmlns:${elementPrefix}="${XMLEncodeUtility.encodeAttributeValue(
266
+ element[PropertySymbol.namespaceURI]
267
+ )}"`;
268
+ } else if (
269
+ !elementPrefix &&
270
+ inheritedDefaultNamespace !== element[PropertySymbol.namespaceURI]
271
+ ) {
272
+ namespaceString += ` xmlns="${XMLEncodeUtility.encodeAttributeValue(
273
+ element[PropertySymbol.namespaceURI]
274
+ )}"`;
275
+ }
130
276
  }
131
277
 
132
- return attributeString;
278
+ return namespaceString + attributeString;
133
279
  }
134
280
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassMethodBinder.cjs","sourceRoot":"","sources":["../src/ClassMethodBinder.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,iBAAiB;IAC7B,MAAM,CAAS;IACf,OAAO,CAAQ;IACf,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEpD;;;;;OAKG;IACH,YAAY,MAAc,EAAE,OAAc;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,IAAqB;QAChC,6FAA6F;QAC7F,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3E,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC5C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;wBACnC,GAAG,UAAU;wBACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;qBACpC,CAAC,CAAC;gBACJ,CAAC;qBAAM,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;wBACnC,GAAG,UAAU;wBACb,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;wBACjC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;qBACjC,CAAC,CAAC;gBACJ,CAAC;gBACD,OAAO;YACR,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,IAAqB;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACD;AA/DD,oCA+DC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassMethodBinder.d.ts","sourceRoot":"","sources":["../src/ClassMethodBinder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;IAK1C;;;;OAIG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCxC;;;;OAIG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StringUtility.cjs","sourceRoot":"","sources":["../src/StringUtility.ts"],"names":[],"mappings":";;AAAA,MAAM,sBAAsB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAC9D,MAAM,sBAAsB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAE9D;;GAEG;AACH,MAAqB,aAAa;IACjC;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAChC,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;QACF,CAAC;QACD,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACjC,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;QACF,CAAC;QACD,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AAlDD,gCAkDC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StringUtility.d.ts","sourceRoot":"","sources":["../src/StringUtility.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC;;;;;;OAMG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBlD;;;;;;OAMG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAiBlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassMethodBinder.d.ts","sourceRoot":"","sources":["../src/ClassMethodBinder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;IAK1C;;;;OAIG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCxC;;;;OAIG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassMethodBinder.js","sourceRoot":"","sources":["../src/ClassMethodBinder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAC7B,MAAM,CAAS;IACf,OAAO,CAAQ;IACf,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEpD;;;;;OAKG;IACH,YAAY,MAAc,EAAE,OAAc;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,IAAqB;QAChC,6FAA6F;QAC7F,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3E,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC5C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;wBACnC,GAAG,UAAU;wBACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;qBACpC,CAAC,CAAC;gBACJ,CAAC;qBAAM,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;wBACnC,GAAG,UAAU;wBACb,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;wBACjC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;qBACjC,CAAC,CAAC;gBACJ,CAAC;gBACD,OAAO;YACR,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,IAAqB;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StringUtility.d.ts","sourceRoot":"","sources":["../src/StringUtility.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC;;;;;;OAMG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBlD;;;;;;OAMG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAiBlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StringUtility.js","sourceRoot":"","sources":["../src/StringUtility.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAC9D,MAAM,sBAAsB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAChC,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;QACF,CAAC;QACD,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACjC,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;QACF,CAAC;QACD,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}