@dooboostore/dom-parser 1.0.3 → 1.0.4

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 (521) hide show
  1. package/README.MD +369 -6
  2. package/dist/cjs/DomParser.js +1 -0
  3. package/dist/cjs/DomParser.js.map +2 -2
  4. package/dist/cjs/bundle-entry.js +36 -0
  5. package/dist/cjs/bundle-entry.js.map +7 -0
  6. package/dist/cjs/factory/ElementFactory.js +12 -9
  7. package/dist/cjs/factory/ElementFactory.js.map +2 -2
  8. package/dist/cjs/index.js +22 -0
  9. package/dist/cjs/index.js.map +2 -2
  10. package/dist/cjs/node/elements/HTMLAnchorElement.js +2 -2
  11. package/dist/cjs/node/elements/HTMLAnchorElement.js.map +2 -2
  12. package/dist/cjs/node/elements/HTMLAreaElement.js +2 -2
  13. package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
  14. package/dist/cjs/node/elements/HTMLAudioElement.js +2 -2
  15. package/dist/cjs/node/elements/HTMLAudioElement.js.map +2 -2
  16. package/dist/cjs/node/elements/HTMLBaseElement.js +2 -2
  17. package/dist/cjs/node/elements/HTMLBaseElement.js.map +2 -2
  18. package/dist/cjs/node/elements/HTMLBodyElement.js +2 -2
  19. package/dist/cjs/node/elements/HTMLBodyElement.js.map +2 -2
  20. package/dist/cjs/node/elements/HTMLButtonElement.js +2 -2
  21. package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
  22. package/dist/cjs/node/elements/HTMLCanvasElement.js +2 -2
  23. package/dist/cjs/node/elements/HTMLCanvasElement.js.map +2 -2
  24. package/dist/cjs/node/elements/HTMLCaptionElement.js +2 -2
  25. package/dist/cjs/node/elements/HTMLCaptionElement.js.map +2 -2
  26. package/dist/cjs/node/elements/HTMLDListElement.js +2 -2
  27. package/dist/cjs/node/elements/HTMLDListElement.js.map +2 -2
  28. package/dist/cjs/node/elements/HTMLDataElement.js +2 -2
  29. package/dist/cjs/node/elements/HTMLDataElement.js.map +2 -2
  30. package/dist/cjs/node/elements/HTMLDataListElement.js +2 -2
  31. package/dist/cjs/node/elements/HTMLDataListElement.js.map +2 -2
  32. package/dist/cjs/node/elements/HTMLDetailsElement.js +2 -2
  33. package/dist/cjs/node/elements/HTMLDetailsElement.js.map +2 -2
  34. package/dist/cjs/node/elements/HTMLDialogElement.js +2 -2
  35. package/dist/cjs/node/elements/HTMLDialogElement.js.map +2 -2
  36. package/dist/cjs/node/elements/HTMLDivElement.js +2 -2
  37. package/dist/cjs/node/elements/HTMLDivElement.js.map +2 -2
  38. package/dist/cjs/node/elements/HTMLElement.js +3 -0
  39. package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
  40. package/dist/cjs/node/elements/HTMLElementBase.js +3 -1
  41. package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
  42. package/dist/cjs/node/elements/HTMLEmbedElement.js +2 -2
  43. package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
  44. package/dist/cjs/node/elements/HTMLFieldSetElement.js +2 -2
  45. package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +2 -2
  46. package/dist/cjs/node/elements/HTMLFormElement.js +2 -2
  47. package/dist/cjs/node/elements/HTMLFormElement.js.map +2 -2
  48. package/dist/cjs/node/elements/HTMLH1Element.js +2 -2
  49. package/dist/cjs/node/elements/HTMLH1Element.js.map +2 -2
  50. package/dist/cjs/node/elements/HTMLHRElement.js +2 -2
  51. package/dist/cjs/node/elements/HTMLHRElement.js.map +2 -2
  52. package/dist/cjs/node/elements/HTMLHeadElement.js +2 -2
  53. package/dist/cjs/node/elements/HTMLHeadElement.js.map +2 -2
  54. package/dist/cjs/node/elements/HTMLHtmlElement.js +2 -2
  55. package/dist/cjs/node/elements/HTMLHtmlElement.js.map +2 -2
  56. package/dist/cjs/node/elements/HTMLIFrameElement.js +2 -2
  57. package/dist/cjs/node/elements/HTMLIFrameElement.js.map +2 -2
  58. package/dist/cjs/node/elements/HTMLImgElement.js +2 -2
  59. package/dist/cjs/node/elements/HTMLImgElement.js.map +2 -2
  60. package/dist/cjs/node/elements/HTMLInputElement.js +2 -2
  61. package/dist/cjs/node/elements/HTMLInputElement.js.map +2 -2
  62. package/dist/cjs/node/elements/HTMLLIElement.js +2 -2
  63. package/dist/cjs/node/elements/HTMLLIElement.js.map +2 -2
  64. package/dist/cjs/node/elements/HTMLLabelElement.js +2 -2
  65. package/dist/cjs/node/elements/HTMLLabelElement.js.map +2 -2
  66. package/dist/cjs/node/elements/HTMLLegendElement.js +2 -2
  67. package/dist/cjs/node/elements/HTMLLegendElement.js.map +2 -2
  68. package/dist/cjs/node/elements/HTMLLinkElement.js +2 -2
  69. package/dist/cjs/node/elements/HTMLLinkElement.js.map +2 -2
  70. package/dist/cjs/node/elements/HTMLMapElement.js +2 -2
  71. package/dist/cjs/node/elements/HTMLMapElement.js.map +2 -2
  72. package/dist/cjs/node/elements/HTMLMetaElement.js +2 -2
  73. package/dist/cjs/node/elements/HTMLMetaElement.js.map +2 -2
  74. package/dist/cjs/node/elements/HTMLMeterElement.js +2 -2
  75. package/dist/cjs/node/elements/HTMLMeterElement.js.map +2 -2
  76. package/dist/cjs/node/elements/HTMLModElement.js +2 -2
  77. package/dist/cjs/node/elements/HTMLModElement.js.map +2 -2
  78. package/dist/cjs/node/elements/HTMLOListElement.js +2 -2
  79. package/dist/cjs/node/elements/HTMLOListElement.js.map +2 -2
  80. package/dist/cjs/node/elements/HTMLObjectElement.js +2 -2
  81. package/dist/cjs/node/elements/HTMLObjectElement.js.map +2 -2
  82. package/dist/cjs/node/elements/HTMLOptGroupElement.js +2 -2
  83. package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +2 -2
  84. package/dist/cjs/node/elements/HTMLOptionElement.js +2 -2
  85. package/dist/cjs/node/elements/HTMLOptionElement.js.map +2 -2
  86. package/dist/cjs/node/elements/HTMLOutputElement.js +2 -2
  87. package/dist/cjs/node/elements/HTMLOutputElement.js.map +2 -2
  88. package/dist/cjs/node/elements/HTMLPElement.js +2 -2
  89. package/dist/cjs/node/elements/HTMLPElement.js.map +2 -2
  90. package/dist/cjs/node/elements/HTMLParamElement.js +2 -2
  91. package/dist/cjs/node/elements/HTMLParamElement.js.map +2 -2
  92. package/dist/cjs/node/elements/HTMLPictureElement.js +2 -2
  93. package/dist/cjs/node/elements/HTMLPictureElement.js.map +2 -2
  94. package/dist/cjs/node/elements/HTMLPreElement.js +2 -2
  95. package/dist/cjs/node/elements/HTMLPreElement.js.map +2 -2
  96. package/dist/cjs/node/elements/HTMLProgressElement.js +2 -2
  97. package/dist/cjs/node/elements/HTMLProgressElement.js.map +2 -2
  98. package/dist/cjs/node/elements/HTMLQuoteElement.js +2 -2
  99. package/dist/cjs/node/elements/HTMLQuoteElement.js.map +2 -2
  100. package/dist/cjs/node/elements/HTMLScriptElement.js +2 -2
  101. package/dist/cjs/node/elements/HTMLScriptElement.js.map +2 -2
  102. package/dist/cjs/node/elements/HTMLSelectElement.js +2 -2
  103. package/dist/cjs/node/elements/HTMLSelectElement.js.map +2 -2
  104. package/dist/cjs/node/elements/HTMLSlotElement.js +2 -2
  105. package/dist/cjs/node/elements/HTMLSlotElement.js.map +2 -2
  106. package/dist/cjs/node/elements/HTMLSourceElement.js +2 -2
  107. package/dist/cjs/node/elements/HTMLSourceElement.js.map +2 -2
  108. package/dist/cjs/node/elements/HTMLSpanElement.js +2 -2
  109. package/dist/cjs/node/elements/HTMLSpanElement.js.map +2 -2
  110. package/dist/cjs/node/elements/HTMLStyleElement.js +2 -2
  111. package/dist/cjs/node/elements/HTMLStyleElement.js.map +2 -2
  112. package/dist/cjs/node/elements/HTMLTableElement.js +2 -2
  113. package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
  114. package/dist/cjs/node/elements/HTMLTbodyElement.js +2 -2
  115. package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
  116. package/dist/cjs/node/elements/HTMLTdElement.js +2 -2
  117. package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
  118. package/dist/cjs/node/elements/HTMLTemplateElement.js +2 -2
  119. package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
  120. package/dist/cjs/node/elements/HTMLTextAreaElement.js +2 -2
  121. package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +2 -2
  122. package/dist/cjs/node/elements/HTMLTfootElement.js +2 -2
  123. package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
  124. package/dist/cjs/node/elements/HTMLThElement.js +2 -2
  125. package/dist/cjs/node/elements/HTMLThElement.js.map +2 -2
  126. package/dist/cjs/node/elements/HTMLTheadElement.js +2 -2
  127. package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
  128. package/dist/cjs/node/elements/HTMLTimeElement.js +2 -2
  129. package/dist/cjs/node/elements/HTMLTimeElement.js.map +2 -2
  130. package/dist/cjs/node/elements/HTMLTitleElement.js +2 -2
  131. package/dist/cjs/node/elements/HTMLTitleElement.js.map +2 -2
  132. package/dist/cjs/node/elements/HTMLTrElement.js +2 -2
  133. package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
  134. package/dist/cjs/node/elements/HTMLTrackElement.js +2 -2
  135. package/dist/cjs/node/elements/HTMLTrackElement.js.map +2 -2
  136. package/dist/cjs/node/elements/HTMLUListElement.js +2 -2
  137. package/dist/cjs/node/elements/HTMLUListElement.js.map +2 -2
  138. package/dist/cjs/node/elements/HTMLVideoElement.js +2 -2
  139. package/dist/cjs/node/elements/HTMLVideoElement.js.map +2 -2
  140. package/dist/cjs/node/elements/MathMLElement.js +2 -2
  141. package/dist/cjs/node/elements/MathMLElement.js.map +2 -2
  142. package/dist/cjs/node/elements/SVGElement.js +2 -2
  143. package/dist/cjs/node/elements/SVGElement.js.map +2 -2
  144. package/dist/cjs/node/elements/index.js +1 -3
  145. package/dist/cjs/node/elements/index.js.map +2 -2
  146. package/dist/cjs/window/CustomElementRegistryImp.js +8 -0
  147. package/dist/cjs/window/CustomElementRegistryImp.js.map +2 -2
  148. package/dist/esm/DomParser.js +1 -0
  149. package/dist/esm/DomParser.js.map +2 -2
  150. package/dist/esm/bundle-entry.js +6 -0
  151. package/dist/esm/bundle-entry.js.map +7 -0
  152. package/dist/esm/factory/ElementFactory.js +13 -10
  153. package/dist/esm/factory/ElementFactory.js.map +2 -2
  154. package/dist/esm/index.js +22 -0
  155. package/dist/esm/index.js.map +2 -2
  156. package/dist/esm/node/elements/HTMLAnchorElement.js +2 -2
  157. package/dist/esm/node/elements/HTMLAnchorElement.js.map +2 -2
  158. package/dist/esm/node/elements/HTMLAreaElement.js +2 -2
  159. package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
  160. package/dist/esm/node/elements/HTMLAudioElement.js +2 -2
  161. package/dist/esm/node/elements/HTMLAudioElement.js.map +2 -2
  162. package/dist/esm/node/elements/HTMLBaseElement.js +2 -2
  163. package/dist/esm/node/elements/HTMLBaseElement.js.map +2 -2
  164. package/dist/esm/node/elements/HTMLBodyElement.js +2 -2
  165. package/dist/esm/node/elements/HTMLBodyElement.js.map +2 -2
  166. package/dist/esm/node/elements/HTMLButtonElement.js +2 -2
  167. package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
  168. package/dist/esm/node/elements/HTMLCanvasElement.js +2 -2
  169. package/dist/esm/node/elements/HTMLCanvasElement.js.map +2 -2
  170. package/dist/esm/node/elements/HTMLCaptionElement.js +2 -2
  171. package/dist/esm/node/elements/HTMLCaptionElement.js.map +2 -2
  172. package/dist/esm/node/elements/HTMLDListElement.js +2 -2
  173. package/dist/esm/node/elements/HTMLDListElement.js.map +2 -2
  174. package/dist/esm/node/elements/HTMLDataElement.js +2 -2
  175. package/dist/esm/node/elements/HTMLDataElement.js.map +2 -2
  176. package/dist/esm/node/elements/HTMLDataListElement.js +2 -2
  177. package/dist/esm/node/elements/HTMLDataListElement.js.map +2 -2
  178. package/dist/esm/node/elements/HTMLDetailsElement.js +2 -2
  179. package/dist/esm/node/elements/HTMLDetailsElement.js.map +2 -2
  180. package/dist/esm/node/elements/HTMLDialogElement.js +2 -2
  181. package/dist/esm/node/elements/HTMLDialogElement.js.map +2 -2
  182. package/dist/esm/node/elements/HTMLDivElement.js +2 -2
  183. package/dist/esm/node/elements/HTMLDivElement.js.map +2 -2
  184. package/dist/esm/node/elements/HTMLElement.js +3 -0
  185. package/dist/esm/node/elements/HTMLElement.js.map +2 -2
  186. package/dist/esm/node/elements/HTMLElementBase.js +3 -1
  187. package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
  188. package/dist/esm/node/elements/HTMLEmbedElement.js +2 -2
  189. package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
  190. package/dist/esm/node/elements/HTMLFieldSetElement.js +2 -2
  191. package/dist/esm/node/elements/HTMLFieldSetElement.js.map +2 -2
  192. package/dist/esm/node/elements/HTMLFormElement.js +2 -2
  193. package/dist/esm/node/elements/HTMLFormElement.js.map +2 -2
  194. package/dist/esm/node/elements/HTMLH1Element.js +2 -2
  195. package/dist/esm/node/elements/HTMLH1Element.js.map +2 -2
  196. package/dist/esm/node/elements/HTMLHRElement.js +2 -2
  197. package/dist/esm/node/elements/HTMLHRElement.js.map +2 -2
  198. package/dist/esm/node/elements/HTMLHeadElement.js +2 -2
  199. package/dist/esm/node/elements/HTMLHeadElement.js.map +2 -2
  200. package/dist/esm/node/elements/HTMLHtmlElement.js +2 -2
  201. package/dist/esm/node/elements/HTMLHtmlElement.js.map +2 -2
  202. package/dist/esm/node/elements/HTMLIFrameElement.js +2 -2
  203. package/dist/esm/node/elements/HTMLIFrameElement.js.map +2 -2
  204. package/dist/esm/node/elements/HTMLImgElement.js +2 -2
  205. package/dist/esm/node/elements/HTMLImgElement.js.map +2 -2
  206. package/dist/esm/node/elements/HTMLInputElement.js +2 -2
  207. package/dist/esm/node/elements/HTMLInputElement.js.map +2 -2
  208. package/dist/esm/node/elements/HTMLLIElement.js +2 -2
  209. package/dist/esm/node/elements/HTMLLIElement.js.map +2 -2
  210. package/dist/esm/node/elements/HTMLLabelElement.js +2 -2
  211. package/dist/esm/node/elements/HTMLLabelElement.js.map +2 -2
  212. package/dist/esm/node/elements/HTMLLegendElement.js +2 -2
  213. package/dist/esm/node/elements/HTMLLegendElement.js.map +2 -2
  214. package/dist/esm/node/elements/HTMLLinkElement.js +2 -2
  215. package/dist/esm/node/elements/HTMLLinkElement.js.map +2 -2
  216. package/dist/esm/node/elements/HTMLMapElement.js +2 -2
  217. package/dist/esm/node/elements/HTMLMapElement.js.map +2 -2
  218. package/dist/esm/node/elements/HTMLMetaElement.js +2 -2
  219. package/dist/esm/node/elements/HTMLMetaElement.js.map +2 -2
  220. package/dist/esm/node/elements/HTMLMeterElement.js +2 -2
  221. package/dist/esm/node/elements/HTMLMeterElement.js.map +2 -2
  222. package/dist/esm/node/elements/HTMLModElement.js +2 -2
  223. package/dist/esm/node/elements/HTMLModElement.js.map +2 -2
  224. package/dist/esm/node/elements/HTMLOListElement.js +2 -2
  225. package/dist/esm/node/elements/HTMLOListElement.js.map +2 -2
  226. package/dist/esm/node/elements/HTMLObjectElement.js +2 -2
  227. package/dist/esm/node/elements/HTMLObjectElement.js.map +2 -2
  228. package/dist/esm/node/elements/HTMLOptGroupElement.js +2 -2
  229. package/dist/esm/node/elements/HTMLOptGroupElement.js.map +2 -2
  230. package/dist/esm/node/elements/HTMLOptionElement.js +2 -2
  231. package/dist/esm/node/elements/HTMLOptionElement.js.map +2 -2
  232. package/dist/esm/node/elements/HTMLOutputElement.js +2 -2
  233. package/dist/esm/node/elements/HTMLOutputElement.js.map +2 -2
  234. package/dist/esm/node/elements/HTMLPElement.js +2 -2
  235. package/dist/esm/node/elements/HTMLPElement.js.map +2 -2
  236. package/dist/esm/node/elements/HTMLParamElement.js +2 -2
  237. package/dist/esm/node/elements/HTMLParamElement.js.map +2 -2
  238. package/dist/esm/node/elements/HTMLPictureElement.js +2 -2
  239. package/dist/esm/node/elements/HTMLPictureElement.js.map +2 -2
  240. package/dist/esm/node/elements/HTMLPreElement.js +2 -2
  241. package/dist/esm/node/elements/HTMLPreElement.js.map +2 -2
  242. package/dist/esm/node/elements/HTMLProgressElement.js +2 -2
  243. package/dist/esm/node/elements/HTMLProgressElement.js.map +2 -2
  244. package/dist/esm/node/elements/HTMLQuoteElement.js +2 -2
  245. package/dist/esm/node/elements/HTMLQuoteElement.js.map +2 -2
  246. package/dist/esm/node/elements/HTMLScriptElement.js +2 -2
  247. package/dist/esm/node/elements/HTMLScriptElement.js.map +2 -2
  248. package/dist/esm/node/elements/HTMLSelectElement.js +2 -2
  249. package/dist/esm/node/elements/HTMLSelectElement.js.map +2 -2
  250. package/dist/esm/node/elements/HTMLSlotElement.js +2 -2
  251. package/dist/esm/node/elements/HTMLSlotElement.js.map +2 -2
  252. package/dist/esm/node/elements/HTMLSourceElement.js +2 -2
  253. package/dist/esm/node/elements/HTMLSourceElement.js.map +2 -2
  254. package/dist/esm/node/elements/HTMLSpanElement.js +2 -2
  255. package/dist/esm/node/elements/HTMLSpanElement.js.map +2 -2
  256. package/dist/esm/node/elements/HTMLStyleElement.js +2 -2
  257. package/dist/esm/node/elements/HTMLStyleElement.js.map +2 -2
  258. package/dist/esm/node/elements/HTMLTableElement.js +2 -2
  259. package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
  260. package/dist/esm/node/elements/HTMLTbodyElement.js +2 -2
  261. package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
  262. package/dist/esm/node/elements/HTMLTdElement.js +2 -2
  263. package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
  264. package/dist/esm/node/elements/HTMLTemplateElement.js +2 -2
  265. package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
  266. package/dist/esm/node/elements/HTMLTextAreaElement.js +2 -2
  267. package/dist/esm/node/elements/HTMLTextAreaElement.js.map +2 -2
  268. package/dist/esm/node/elements/HTMLTfootElement.js +2 -2
  269. package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
  270. package/dist/esm/node/elements/HTMLThElement.js +2 -2
  271. package/dist/esm/node/elements/HTMLThElement.js.map +2 -2
  272. package/dist/esm/node/elements/HTMLTheadElement.js +2 -2
  273. package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
  274. package/dist/esm/node/elements/HTMLTimeElement.js +2 -2
  275. package/dist/esm/node/elements/HTMLTimeElement.js.map +2 -2
  276. package/dist/esm/node/elements/HTMLTitleElement.js +2 -2
  277. package/dist/esm/node/elements/HTMLTitleElement.js.map +2 -2
  278. package/dist/esm/node/elements/HTMLTrElement.js +2 -2
  279. package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
  280. package/dist/esm/node/elements/HTMLTrackElement.js +2 -2
  281. package/dist/esm/node/elements/HTMLTrackElement.js.map +2 -2
  282. package/dist/esm/node/elements/HTMLUListElement.js +2 -2
  283. package/dist/esm/node/elements/HTMLUListElement.js.map +2 -2
  284. package/dist/esm/node/elements/HTMLVideoElement.js +2 -2
  285. package/dist/esm/node/elements/HTMLVideoElement.js.map +2 -2
  286. package/dist/esm/node/elements/MathMLElement.js +2 -2
  287. package/dist/esm/node/elements/MathMLElement.js.map +2 -2
  288. package/dist/esm/node/elements/SVGElement.js +2 -2
  289. package/dist/esm/node/elements/SVGElement.js.map +2 -2
  290. package/dist/esm/node/elements/index.js +1 -3
  291. package/dist/esm/node/elements/index.js.map +2 -2
  292. package/dist/esm/window/CustomElementRegistryImp.js +8 -0
  293. package/dist/esm/window/CustomElementRegistryImp.js.map +2 -2
  294. package/dist/esm-bundle/dooboostore-dom-parser.esm.js +109 -88
  295. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +3 -3
  296. package/dist/types/DomParser.d.ts.map +1 -1
  297. package/dist/types/bundle-entry.d.ts +3 -0
  298. package/dist/types/bundle-entry.d.ts.map +1 -0
  299. package/dist/types/factory/ElementFactory.d.ts.map +1 -1
  300. package/dist/types/index.d.ts +11 -0
  301. package/dist/types/index.d.ts.map +1 -1
  302. package/dist/types/node/elements/HTMLAnchorElement.d.ts +2 -2
  303. package/dist/types/node/elements/HTMLAnchorElement.d.ts.map +1 -1
  304. package/dist/types/node/elements/HTMLAreaElement.d.ts +2 -2
  305. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
  306. package/dist/types/node/elements/HTMLAudioElement.d.ts +2 -2
  307. package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -1
  308. package/dist/types/node/elements/HTMLBaseElement.d.ts +2 -2
  309. package/dist/types/node/elements/HTMLBaseElement.d.ts.map +1 -1
  310. package/dist/types/node/elements/HTMLBodyElement.d.ts +2 -2
  311. package/dist/types/node/elements/HTMLBodyElement.d.ts.map +1 -1
  312. package/dist/types/node/elements/HTMLButtonElement.d.ts +2 -2
  313. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
  314. package/dist/types/node/elements/HTMLCanvasElement.d.ts +2 -2
  315. package/dist/types/node/elements/HTMLCanvasElement.d.ts.map +1 -1
  316. package/dist/types/node/elements/HTMLCaptionElement.d.ts +2 -2
  317. package/dist/types/node/elements/HTMLCaptionElement.d.ts.map +1 -1
  318. package/dist/types/node/elements/HTMLDListElement.d.ts +2 -2
  319. package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -1
  320. package/dist/types/node/elements/HTMLDataElement.d.ts +2 -2
  321. package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -1
  322. package/dist/types/node/elements/HTMLDataListElement.d.ts +2 -2
  323. package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -1
  324. package/dist/types/node/elements/HTMLDetailsElement.d.ts +2 -2
  325. package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -1
  326. package/dist/types/node/elements/HTMLDialogElement.d.ts +2 -2
  327. package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -1
  328. package/dist/types/node/elements/HTMLDivElement.d.ts +2 -2
  329. package/dist/types/node/elements/HTMLDivElement.d.ts.map +1 -1
  330. package/dist/types/node/elements/HTMLElement.d.ts +1 -0
  331. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
  332. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
  333. package/dist/types/node/elements/HTMLEmbedElement.d.ts +2 -2
  334. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
  335. package/dist/types/node/elements/HTMLFieldSetElement.d.ts +2 -2
  336. package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -1
  337. package/dist/types/node/elements/HTMLFormElement.d.ts +2 -2
  338. package/dist/types/node/elements/HTMLFormElement.d.ts.map +1 -1
  339. package/dist/types/node/elements/HTMLH1Element.d.ts +2 -2
  340. package/dist/types/node/elements/HTMLH1Element.d.ts.map +1 -1
  341. package/dist/types/node/elements/HTMLHRElement.d.ts +2 -2
  342. package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -1
  343. package/dist/types/node/elements/HTMLHeadElement.d.ts +2 -2
  344. package/dist/types/node/elements/HTMLHeadElement.d.ts.map +1 -1
  345. package/dist/types/node/elements/HTMLHtmlElement.d.ts +2 -2
  346. package/dist/types/node/elements/HTMLHtmlElement.d.ts.map +1 -1
  347. package/dist/types/node/elements/HTMLIFrameElement.d.ts +2 -2
  348. package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -1
  349. package/dist/types/node/elements/HTMLImgElement.d.ts +2 -2
  350. package/dist/types/node/elements/HTMLImgElement.d.ts.map +1 -1
  351. package/dist/types/node/elements/HTMLInputElement.d.ts +2 -2
  352. package/dist/types/node/elements/HTMLInputElement.d.ts.map +1 -1
  353. package/dist/types/node/elements/HTMLLIElement.d.ts +2 -2
  354. package/dist/types/node/elements/HTMLLIElement.d.ts.map +1 -1
  355. package/dist/types/node/elements/HTMLLabelElement.d.ts +2 -2
  356. package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -1
  357. package/dist/types/node/elements/HTMLLegendElement.d.ts +2 -2
  358. package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -1
  359. package/dist/types/node/elements/HTMLLinkElement.d.ts +2 -2
  360. package/dist/types/node/elements/HTMLLinkElement.d.ts.map +1 -1
  361. package/dist/types/node/elements/HTMLMapElement.d.ts +2 -2
  362. package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -1
  363. package/dist/types/node/elements/HTMLMetaElement.d.ts +2 -2
  364. package/dist/types/node/elements/HTMLMetaElement.d.ts.map +1 -1
  365. package/dist/types/node/elements/HTMLMeterElement.d.ts +2 -2
  366. package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -1
  367. package/dist/types/node/elements/HTMLModElement.d.ts +2 -2
  368. package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -1
  369. package/dist/types/node/elements/HTMLOListElement.d.ts +2 -2
  370. package/dist/types/node/elements/HTMLOListElement.d.ts.map +1 -1
  371. package/dist/types/node/elements/HTMLObjectElement.d.ts +2 -2
  372. package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -1
  373. package/dist/types/node/elements/HTMLOptGroupElement.d.ts +2 -2
  374. package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -1
  375. package/dist/types/node/elements/HTMLOptionElement.d.ts +2 -2
  376. package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -1
  377. package/dist/types/node/elements/HTMLOutputElement.d.ts +2 -2
  378. package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -1
  379. package/dist/types/node/elements/HTMLPElement.d.ts +2 -2
  380. package/dist/types/node/elements/HTMLPElement.d.ts.map +1 -1
  381. package/dist/types/node/elements/HTMLParamElement.d.ts +2 -2
  382. package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -1
  383. package/dist/types/node/elements/HTMLPictureElement.d.ts +2 -2
  384. package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -1
  385. package/dist/types/node/elements/HTMLPreElement.d.ts +2 -2
  386. package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -1
  387. package/dist/types/node/elements/HTMLProgressElement.d.ts +2 -2
  388. package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -1
  389. package/dist/types/node/elements/HTMLQuoteElement.d.ts +2 -2
  390. package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -1
  391. package/dist/types/node/elements/HTMLScriptElement.d.ts +2 -2
  392. package/dist/types/node/elements/HTMLScriptElement.d.ts.map +1 -1
  393. package/dist/types/node/elements/HTMLSelectElement.d.ts +2 -2
  394. package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -1
  395. package/dist/types/node/elements/HTMLSlotElement.d.ts +2 -2
  396. package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -1
  397. package/dist/types/node/elements/HTMLSourceElement.d.ts +2 -2
  398. package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -1
  399. package/dist/types/node/elements/HTMLSpanElement.d.ts +2 -2
  400. package/dist/types/node/elements/HTMLSpanElement.d.ts.map +1 -1
  401. package/dist/types/node/elements/HTMLStyleElement.d.ts +2 -2
  402. package/dist/types/node/elements/HTMLStyleElement.d.ts.map +1 -1
  403. package/dist/types/node/elements/HTMLTableElement.d.ts +2 -2
  404. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
  405. package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -2
  406. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
  407. package/dist/types/node/elements/HTMLTdElement.d.ts +2 -2
  408. package/dist/types/node/elements/HTMLTdElement.d.ts.map +1 -1
  409. package/dist/types/node/elements/HTMLTemplateElement.d.ts +2 -2
  410. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
  411. package/dist/types/node/elements/HTMLTextAreaElement.d.ts +2 -2
  412. package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -1
  413. package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -2
  414. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
  415. package/dist/types/node/elements/HTMLThElement.d.ts +2 -2
  416. package/dist/types/node/elements/HTMLThElement.d.ts.map +1 -1
  417. package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -2
  418. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
  419. package/dist/types/node/elements/HTMLTimeElement.d.ts +2 -2
  420. package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -1
  421. package/dist/types/node/elements/HTMLTitleElement.d.ts +2 -2
  422. package/dist/types/node/elements/HTMLTitleElement.d.ts.map +1 -1
  423. package/dist/types/node/elements/HTMLTrElement.d.ts +2 -2
  424. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
  425. package/dist/types/node/elements/HTMLTrackElement.d.ts +2 -2
  426. package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -1
  427. package/dist/types/node/elements/HTMLUListElement.d.ts +2 -2
  428. package/dist/types/node/elements/HTMLUListElement.d.ts.map +1 -1
  429. package/dist/types/node/elements/HTMLVideoElement.d.ts +2 -2
  430. package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -1
  431. package/dist/types/node/elements/MathMLElement.d.ts +2 -2
  432. package/dist/types/node/elements/MathMLElement.d.ts.map +1 -1
  433. package/dist/types/node/elements/SVGElement.d.ts +2 -2
  434. package/dist/types/node/elements/SVGElement.d.ts.map +1 -1
  435. package/dist/types/node/elements/index.d.ts +3 -4
  436. package/dist/types/node/elements/index.d.ts.map +1 -1
  437. package/dist/types/window/CustomElementRegistryImp.d.ts +1 -0
  438. package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -1
  439. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +109 -88
  440. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +3 -3
  441. package/package.json +6 -1
  442. package/src/DomParser.ts +1 -0
  443. package/src/bundle-entry.ts +2 -0
  444. package/src/factory/ElementFactory.ts +18 -11
  445. package/src/index.ts +11 -0
  446. package/src/node/elements/HTMLAnchorElement.ts +2 -1
  447. package/src/node/elements/HTMLAreaElement.ts +2 -1
  448. package/src/node/elements/HTMLAudioElement.ts +2 -1
  449. package/src/node/elements/HTMLBaseElement.ts +2 -1
  450. package/src/node/elements/HTMLBodyElement.ts +2 -1
  451. package/src/node/elements/HTMLButtonElement.ts +2 -1
  452. package/src/node/elements/HTMLCanvasElement.ts +2 -1
  453. package/src/node/elements/HTMLCaptionElement.ts +2 -1
  454. package/src/node/elements/HTMLDListElement.ts +8 -2
  455. package/src/node/elements/HTMLDataElement.ts +2 -1
  456. package/src/node/elements/HTMLDataListElement.ts +8 -2
  457. package/src/node/elements/HTMLDetailsElement.ts +8 -2
  458. package/src/node/elements/HTMLDialogElement.ts +8 -2
  459. package/src/node/elements/HTMLDivElement.ts +2 -1
  460. package/src/node/elements/HTMLElement.ts +4 -0
  461. package/src/node/elements/HTMLElementBase.ts +8 -2
  462. package/src/node/elements/HTMLEmbedElement.ts +2 -1
  463. package/src/node/elements/HTMLFieldSetElement.ts +8 -2
  464. package/src/node/elements/HTMLFormElement.ts +2 -1
  465. package/src/node/elements/HTMLH1Element.ts +2 -1
  466. package/src/node/elements/HTMLHRElement.ts +8 -2
  467. package/src/node/elements/HTMLHeadElement.ts +2 -1
  468. package/src/node/elements/HTMLHtmlElement.ts +2 -1
  469. package/src/node/elements/HTMLIFrameElement.ts +8 -2
  470. package/src/node/elements/HTMLImgElement.ts +2 -1
  471. package/src/node/elements/HTMLInputElement.ts +2 -1
  472. package/src/node/elements/HTMLLIElement.ts +2 -1
  473. package/src/node/elements/HTMLLabelElement.ts +2 -1
  474. package/src/node/elements/HTMLLegendElement.ts +2 -1
  475. package/src/node/elements/HTMLLinkElement.ts +2 -1
  476. package/src/node/elements/HTMLMapElement.ts +2 -1
  477. package/src/node/elements/HTMLMetaElement.ts +2 -1
  478. package/src/node/elements/HTMLMeterElement.ts +2 -1
  479. package/src/node/elements/HTMLModElement.ts +2 -1
  480. package/src/node/elements/HTMLOListElement.ts +2 -1
  481. package/src/node/elements/HTMLObjectElement.ts +2 -1
  482. package/src/node/elements/HTMLOptGroupElement.ts +2 -1
  483. package/src/node/elements/HTMLOptionElement.ts +2 -1
  484. package/src/node/elements/HTMLOutputElement.ts +2 -1
  485. package/src/node/elements/HTMLPElement.ts +2 -1
  486. package/src/node/elements/HTMLParamElement.ts +2 -1
  487. package/src/node/elements/HTMLPictureElement.ts +2 -1
  488. package/src/node/elements/HTMLPreElement.ts +2 -1
  489. package/src/node/elements/HTMLProgressElement.ts +2 -1
  490. package/src/node/elements/HTMLQuoteElement.ts +2 -1
  491. package/src/node/elements/HTMLScriptElement.ts +2 -1
  492. package/src/node/elements/HTMLSelectElement.ts +2 -1
  493. package/src/node/elements/HTMLSlotElement.ts +2 -1
  494. package/src/node/elements/HTMLSourceElement.ts +2 -1
  495. package/src/node/elements/HTMLSpanElement.ts +2 -1
  496. package/src/node/elements/HTMLStyleElement.ts +2 -1
  497. package/src/node/elements/HTMLTableElement.ts +2 -1
  498. package/src/node/elements/HTMLTbodyElement.ts +3 -2
  499. package/src/node/elements/HTMLTdElement.ts +2 -1
  500. package/src/node/elements/HTMLTemplateElement.ts +2 -1
  501. package/src/node/elements/HTMLTextAreaElement.ts +2 -1
  502. package/src/node/elements/HTMLTfootElement.ts +2 -1
  503. package/src/node/elements/HTMLThElement.ts +2 -1
  504. package/src/node/elements/HTMLTheadElement.ts +3 -2
  505. package/src/node/elements/HTMLTimeElement.ts +2 -1
  506. package/src/node/elements/HTMLTitleElement.ts +2 -1
  507. package/src/node/elements/HTMLTrElement.ts +4 -1
  508. package/src/node/elements/HTMLTrackElement.ts +2 -1
  509. package/src/node/elements/HTMLUListElement.ts +2 -1
  510. package/src/node/elements/HTMLVideoElement.ts +2 -1
  511. package/src/node/elements/MathMLElement.ts +2 -1
  512. package/src/node/elements/SVGElement.ts +2 -1
  513. package/src/node/elements/index.ts +5 -4
  514. package/src/window/CustomElementRegistryImp.ts +18 -0
  515. package/dist/cjs/node/elements/HTMLGenericElement.js +0 -32
  516. package/dist/cjs/node/elements/HTMLGenericElement.js.map +0 -7
  517. package/dist/esm/node/elements/HTMLGenericElement.js +0 -13
  518. package/dist/esm/node/elements/HTMLGenericElement.js.map +0 -7
  519. package/dist/types/node/elements/HTMLGenericElement.d.ts +0 -6
  520. package/dist/types/node/elements/HTMLGenericElement.d.ts.map +0 -1
  521. package/src/node/elements/HTMLGenericElement.ts +0 -13
package/README.MD CHANGED
@@ -12,12 +12,16 @@ A lightweight DOM parser for server-side HTML parsing and manipulation with full
12
12
 
13
13
  ## Features
14
14
 
15
- - **⚡ Server-Side DOM**: Complete DOM implementation for Node.js environments
16
- - **🔍 CSS Selector Support**: Full `querySelector` and `querySelectorAll` support
17
- - **📦 Multi-Format**: Available as ESM, CJS, and UMD bundles
18
- - **🛡️ TypeScript**: Full TypeScript definitions included
19
- - **🪶 Zero Dependencies**: Lightweight with fast parsing performance
20
- - **🎯 HTML Templates**: Handles complex HTML templates and attributes
15
+ - **⚡ Server-Side DOM**: Complete DOM implementation for Node.js environments with zero dependencies
16
+ - **🔍 CSS Selector Support**: Full `querySelector` and `querySelectorAll` with complex selectors support
17
+ - **📦 Multi-Format**: Available as ESM, CJS, and UMD bundles for maximum compatibility
18
+ - **🛡️ TypeScript**: Full TypeScript definitions included with JSDoc documentation
19
+ - **🪶 Zero Dependencies**: Lightweight with fast parsing performance, perfect for serverless environments
20
+ - **🎯 HTML Templates**: Handles complex HTML templates, attributes, and custom elements
21
+ - **🌳 DOM Traversal**: Built-in support for `TreeWalker` and `NodeIterator` for efficient tree navigation
22
+ - **🎭 Custom Elements**: Full `customElements.define()` API for registering and using Web Components on the server
23
+ - **📋 Standards Compliant**: Implements standard DOM APIs (querySelector, appendChild, innerHTML, etc.)
24
+ - **💾 Memory Efficient**: Proper garbage collection with `destroy()` method for long-running processes
21
25
 
22
26
  ## Installation
23
27
 
@@ -165,8 +169,13 @@ console.log(h1?.textContent); // "Hello"
165
169
  - `element.innerHTML` / `element.textContent`
166
170
  - `element.setAttribute()` / `element.getAttribute()`
167
171
  - `element.appendChild()` / `element.removeChild()`
172
+ - `document.createElement()` / `document.createTextNode()`
173
+ - `document.createDocumentFragment()`
174
+ - `NodeIterator` / `TreeWalker`
168
175
  - CSS selector parsing with complex expressions
169
176
  - Event handling and DOM manipulation
177
+ - Custom Element registration via `customElements.define()`
178
+
170
179
 
171
180
  ## Use Cases
172
181
 
@@ -198,6 +207,279 @@ function processHtml(html: string) {
198
207
 
199
208
  ### 🔧 Server-Side Rendering (SSR)
200
209
 
210
+ ```typescript
211
+ import { parseHTML } from '@dooboostore/dom-parser';
212
+
213
+ // Quick setup with parseHTML utility
214
+ const templateHtml = fs.readFileSync('template.html', 'utf8');
215
+ const window = parseHTML(templateHtml);
216
+
217
+ // Set up global DOM for SSR
218
+ global.document = window.document;
219
+ global.window = window;
220
+
221
+ // Now your components can use DOM APIs on the server
222
+ ```
223
+
224
+ ### 📧 Email Template Processing
225
+
226
+ ```typescript
227
+ import { DomParser } from '@dooboostore/dom-parser';
228
+
229
+ function generateEmailHtml(userData: {name: string, orderId: string}) {
230
+ const templateHtml = `
231
+ <html>
232
+ <body>
233
+ <h1>Hello <span class="user-name"></span>!</h1>
234
+ <p>Your order <strong class="order-id"></strong> has been confirmed.</p>
235
+ </body>
236
+ </html>
237
+ `;
238
+
239
+ const parser = new DomParser(templateHtml);
240
+ const document = parser.document;
241
+
242
+ // Inject data into the template
243
+ document.querySelector('.user-name')!.textContent = userData.name;
244
+ document.querySelector('.order-id')!.textContent = userData.orderId;
245
+
246
+ return document.documentElement.outerHTML;
247
+ }
248
+ ```
249
+
250
+ ### 🌐 Web Scraping & Data Extraction
251
+
252
+ ```typescript
253
+ import { DomParser } from '@dooboostore/dom-parser';
254
+ import { parseHTML } from '@dooboostore/dom-parser';
255
+
256
+ async function scrapeArticles(html: string) {
257
+ const window = parseHTML(html);
258
+ const document = window.document;
259
+
260
+ const articles = [];
261
+ const articleElements = document.querySelectorAll('article.post');
262
+
263
+ articleElements.forEach(el => {
264
+ const title = el.querySelector('h2')?.textContent || '';
265
+ const author = el.querySelector('.author')?.textContent || '';
266
+ const date = el.querySelector('.date')?.getAttribute('data-date') || '';
267
+
268
+ articles.push({ title, author, date });
269
+ });
270
+
271
+ return articles;
272
+ }
273
+ ```
274
+
275
+ ### 🎭 Custom Element Registration
276
+
277
+ ```typescript
278
+ import { parseHTML } from '@dooboostore/dom-parser';
279
+
280
+ // Define a custom element
281
+ class MyCustomElement extends HTMLElement {
282
+ connectedCallback() {
283
+ this.innerHTML = '<p>Custom Element Works!</p>';
284
+ }
285
+ }
286
+
287
+ const window = parseHTML('<html><body></body></html>');
288
+
289
+ // Register custom element
290
+ window.customElements.define('my-element', MyCustomElement);
291
+
292
+ // Create and use custom element
293
+ const doc = window.document;
294
+ const customEl = doc.createElement('my-element');
295
+ doc.body?.appendChild(customEl);
296
+
297
+ console.log(doc.body?.outerHTML);
298
+ // <body><my-element><p>Custom Element Works!</p></my-element></body>
299
+ ```
300
+
301
+ ### 🔍 Advanced DOM Traversal with TreeWalker
302
+
303
+ ```typescript
304
+ import { parseHTML } from '@dooboostore/dom-parser';
305
+
306
+ const html = `
307
+ <div class="container">
308
+ <h1>Title</h1>
309
+ <section>
310
+ <article>Item 1</article>
311
+ <article>Item 2</article>
312
+ </section>
313
+ </div>
314
+ `;
315
+
316
+ const window = parseHTML(html);
317
+ const document = window.document;
318
+
319
+ // Use TreeWalker for efficient traversal
320
+ const root = document.querySelector('.container');
321
+ const walker = document.createTreeWalker(
322
+ root,
323
+ window.NodeFilter?.SHOW_ELEMENT,
324
+ null,
325
+ false
326
+ );
327
+
328
+ let node = walker.nextNode();
329
+ while (node) {
330
+ console.log((node as Element).tagName, (node as Element).textContent);
331
+ node = walker.nextNode();
332
+ }
333
+ ```
334
+
335
+ ### 🎨 DOM Fragment Creation & Batch Operations
336
+
337
+ ```typescript
338
+ import { parseHTML } from '@dooboostore/dom-parser';
339
+
340
+ const window = parseHTML('<html><body></body></html>');
341
+ const document = window.document;
342
+
343
+ // Create a document fragment for efficient batch operations
344
+ const fragment = document.createDocumentFragment();
345
+
346
+ for (let i = 1; i <= 5; i++) {
347
+ const li = document.createElement('li');
348
+ li.textContent = \`Item \${i}\`;
349
+ fragment.appendChild(li);
350
+ }
351
+
352
+ const ul = document.createElement('ul');
353
+ ul.appendChild(fragment);
354
+ document.body?.appendChild(ul);
355
+
356
+ console.log(document.body?.outerHTML);
357
+ // Creates <ul> with 5 <li> items (fragment prevents multiple reflows)
358
+ ```
359
+
360
+ ### 📋 HTML Validation & Cleanup
361
+
362
+ ```typescript
363
+ import { DomParser } from '@dooboostore/dom-parser';
364
+
365
+ function sanitizeHtml(html: string): string {
366
+ const parser = new DomParser(html);
367
+ const document = parser.document;
368
+
369
+ // Remove all scripts
370
+ document.querySelectorAll('script').forEach(el => {
371
+ el.parentNode?.removeChild(el);
372
+ });
373
+
374
+ // Remove event attributes
375
+ const allElements = document.querySelectorAll('*');
376
+ allElements.forEach(el => {
377
+ Array.from(el.attributes || []).forEach(attr => {
378
+ if (attr.name.startsWith('on')) {
379
+ el.removeAttribute(attr.name);
380
+ }
381
+ });
382
+ });
383
+
384
+ return document.documentElement.outerHTML;
385
+ }
386
+ ```
387
+
388
+ ---
389
+
390
+ ## 🚀 Advanced Features
391
+
392
+ ### Document Reloading
393
+
394
+ Update the parsed document with new HTML content without creating a new parser:
395
+
396
+ ```typescript
397
+ import { DomParser } from '@dooboostore/dom-parser';
398
+
399
+ const parser = new DomParser('<html><body><h1>Original</h1></body></html>');
400
+
401
+ // Later, load new HTML
402
+ parser.loadHTML('<html><body><h2>Updated</h2></body></html>');
403
+
404
+ const title = parser.document.querySelector('h2');
405
+ console.log(title?.textContent); // "Updated"
406
+ ```
407
+
408
+ ### Memory Management
409
+
410
+ Properly clean up parser instances for long-running applications:
411
+
412
+ ```typescript
413
+ import { DomParser } from '@dooboostore/dom-parser';
414
+
415
+ const parser = new DomParser(largeHtml);
416
+
417
+ // Process document
418
+ const results = processDocument(parser.document);
419
+
420
+ // Destroy when done to free memory
421
+ parser.destroy();
422
+ ```
423
+
424
+ ### Base URL Configuration
425
+
426
+ Set a base URL for relative URL resolution and API calls:
427
+
428
+ ```typescript
429
+ import { DomParser } from '@dooboostore/dom-parser';
430
+
431
+ const parser = new DomParser(html, {
432
+ href: 'https://example.com/page/'
433
+ });
434
+
435
+ // Now relative URLs are resolved correctly
436
+ const link = parser.document.querySelector('a');
437
+ console.log(link?.getAttribute('href')); // Resolved relative to base URL
438
+ ```
439
+
440
+ ### CSS Selector Complexity
441
+
442
+ Supports complex CSS selectors for querying:
443
+
444
+ ```typescript
445
+ import { parseHTML } from '@dooboostore/dom-parser';
446
+
447
+ const html = `
448
+ <div class="container">
449
+ <article class="featured">
450
+ <h2>Title</h2>
451
+ <p class="summary">Summary text</p>
452
+ </article>
453
+ <article>
454
+ <h2>Another</h2>
455
+ </article>
456
+ </div>
457
+ `;
458
+
459
+ const window = parseHTML(html);
460
+ const doc = window.document;
461
+
462
+ // Complex selectors
463
+ const featured = doc.querySelector('article.featured > p.summary');
464
+ const allHeadings = doc.querySelectorAll('article > h2');
465
+ const byAttribute = doc.querySelectorAll('[class~="featured"]');
466
+
467
+ console.log(featured?.textContent); // "Summary text"
468
+ console.log(allHeadings.length); // 2
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Performance Characteristics
474
+
475
+ - **Zero External Dependencies**: No jsdom, cheerio, or other heavyweight parsers
476
+ - **Lightweight**: Suitable for microservices and serverless environments
477
+ - **Fast Parsing**: Optimized HTML parsing algorithm
478
+ - **Memory Efficient**: Clean separation of concerns with proper garbage collection
479
+ - **TreeWalker & NodeIterator**: Efficient DOM traversal without loading entire tree into memory
480
+
481
+
482
+
201
483
  ```typescript
202
484
  import { parseHTML } from '@dooboostore/dom-parser';
203
485
 
@@ -222,6 +504,87 @@ global.window = parser.window;
222
504
  ```
223
505
 
224
506
 
507
+ ---
508
+
509
+ ## API Reference
510
+
511
+ ### Core Classes
512
+
513
+ #### DomParser
514
+
515
+ Main class for parsing HTML strings and creating DOM environments.
516
+
517
+ ```typescript
518
+ // Constructor
519
+ new DomParser(html: string, options?: DomParserOptions)
520
+
521
+ // Methods
522
+ get document(): Document // Access the parsed document
523
+ get window(): Window // Access the window object
524
+ loadHTML(html: string): void // Load new HTML and replace current document
525
+ destroy(): void // Destroy parser and free memory
526
+
527
+ // Options
528
+ interface DomParserOptions {
529
+ href?: string; // Base URL for the document
530
+ }
531
+ ```
532
+
533
+ #### parseHTML Utility
534
+
535
+ Quick utility function for SSR setup:
536
+
537
+ ```typescript
538
+ const window = parseHTML(html, { href?: string });
539
+ // Returns Window object directly
540
+ // window.document available immediately
541
+ ```
542
+
543
+ ### DOM Node Classes
544
+
545
+ The package provides TypeScript implementations of standard DOM interfaces:
546
+
547
+ - **DocumentBase**: Full Document implementation with `querySelector`, `getElementById`, `createElement`, etc.
548
+ - **ElementBase**: Base element with attribute management
549
+ - **HTMLElement**: Standard HTML elements (div, span, p, etc.)
550
+ - **TextBase**: Text nodes
551
+ - **Comment**: HTML comments
552
+ - **DocumentFragmentBase**: Document fragments for batch operations
553
+ - **ShadowRootBase**: Shadow DOM support
554
+
555
+ ### Advanced Interfaces
556
+
557
+ ```typescript
558
+ // Node Traversal
559
+ NodeIterator: Traverse DOM nodes sequentially
560
+ TreeWalker: Efficient DOM tree traversal with filters
561
+
562
+ // Node Filtering
563
+ NodeFilter: Define which nodes to include during traversal
564
+
565
+ // Standard Interfaces
566
+ ParentNodeBase: Manage child nodes
567
+ ChildNodeBase: Navigate parent hierarchy
568
+ GetRootNodeOptions: Root node access configuration
569
+ ```
570
+
571
+ ---
572
+
573
+ ## Comparison with Alternatives
574
+
575
+ ### vs. JSDOM
576
+ - **dom-parser**: Lightweight, zero dependencies, single-purpose
577
+ - **jsdom**: Full browser simulation, larger bundle, more overhead
578
+
579
+ ### vs. Cheerio
580
+ - **dom-parser**: Pure DOM API compatibility, TypeScript, no jQuery wrapper needed
581
+ - **cheerio**: jQuery API syntax, familiar for jQuery users
582
+
583
+ ### vs. Linked DOM
584
+ - **dom-parser**: Simpler core, focused on HTML parsing
585
+ - **Linked DOM**: More comprehensive library-level ecosystem
586
+
587
+ ---
225
588
 
226
589
  ## Learn More
227
590
 
@@ -32,6 +32,7 @@ import_ElementBase.ElementBase.dependencies = {
32
32
  };
33
33
  class DomParser {
34
34
  constructor(html, option) {
35
+ console.log("create DomParser==", html);
35
36
  const windowBase = new import_WindowBase.WindowBase({ initialUrl: option?.href });
36
37
  this._window = windowBase;
37
38
  this._document = windowBase.document;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/DomParser.ts"],
4
- "sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\nimport { ElementBase } from './node/elements/ElementBase';\nimport { ElementFactory } from './factory/ElementFactory';\n\n// Inject dependencies into ElementBase to break circular references\n// without using 'require' or 'global' injection magic.\nElementBase.dependencies = {\n ElementFactory,\n TextBase,\n Comment\n};\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window | null;\n private _document: Document | null;\n\n constructor(html: string, option?: DomParserOptions) {\n // Create WindowBase instance with the document\n const windowBase = new WindowBase({ initialUrl: option?.href });\n this._window = windowBase as unknown as Window;\n this._document = windowBase.document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n\n // Simulate document loading process\n if (this._document && (this._document as any).simulateLoading) {\n (this._document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n if (!this._window) {\n throw new Error('DomParser has been destroyed');\n }\n return this._window;\n }\n\n get document(): Document {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n return this._document;\n }\n\n /**\n * Destroy the DomParser instance and free memory\n */\n destroy(): void {\n if (this._window) {\n this._window.close();\n this._window = null;\n }\n\n this._document = null;\n }\n\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Clear current document content\n this.clearDocument();\n\n // Parse new HTML\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n if (!this._document) return;\n\n // Clear document body and head content while preserving structure\n if (this._document.head) {\n while (this._document.head.firstChild) {\n this._document.head.removeChild(this._document.head.firstChild);\n }\n }\n\n if (this._document.body) {\n while (this._document.body.firstChild) {\n this._document.body.removeChild(this._document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Ensure basic HTML structure if input is empty or lacks it\n if (!html.trim()) {\n html = '<html><head></head><body></body></html>';\n } else if (!/<html/i.test(html)) {\n // If it's just a fragment, we still need html/head/body for a full document\n // but only if it's not explicitly intended to be a fragment?\n // Actually, standard DOMParser.parseFromString always creates them.\n html = `<html><head></head><body>${html}</body></html>`;\n }\n\n // Basic HTML parsing - this is a simplified version\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n\n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n\n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n\n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n\n value = attributeString.substring(valueStart, position);\n\n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n\n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#34;': '\"',\n '&apos;': \"'\",\n '&copy;': '\u00A9',\n '&reg;': '\u00AE',\n '&trade;': '\u2122',\n '&nbsp;': ' ',\n '&hellip;': '\u2026',\n '&mdash;': '\u2014',\n '&ndash;': '\u2013',\n '&lsquo;': '\\u2018',\n '&rsquo;': '\\u2019',\n '&ldquo;': '\"',\n '&rdquo;': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n\n // Handle numeric entities like &#39; &#34;\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Handle hex entities like &#x27;\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n\n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n\n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n\n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n\n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n\n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n\n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\nimport { ElementBase } from './node/elements/ElementBase';\nimport { ElementFactory } from './factory/ElementFactory';\n\n// Inject dependencies into ElementBase to break circular references\n// without using 'require' or 'global' injection magic.\nElementBase.dependencies = {\n ElementFactory,\n TextBase,\n Comment\n};\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window | null;\n private _document: Document | null;\n\n constructor(html: string, option?: DomParserOptions) {\n console.log('create DomParser==',html)\n // Create WindowBase instance with the document\n const windowBase = new WindowBase({ initialUrl: option?.href });\n this._window = windowBase as unknown as Window;\n this._document = windowBase.document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n\n // Simulate document loading process\n if (this._document && (this._document as any).simulateLoading) {\n (this._document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n if (!this._window) {\n throw new Error('DomParser has been destroyed');\n }\n return this._window;\n }\n\n get document(): Document {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n return this._document;\n }\n\n /**\n * Destroy the DomParser instance and free memory\n */\n destroy(): void {\n if (this._window) {\n this._window.close();\n this._window = null;\n }\n\n this._document = null;\n }\n\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Clear current document content\n this.clearDocument();\n\n // Parse new HTML\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n if (!this._document) return;\n\n // Clear document body and head content while preserving structure\n if (this._document.head) {\n while (this._document.head.firstChild) {\n this._document.head.removeChild(this._document.head.firstChild);\n }\n }\n\n if (this._document.body) {\n while (this._document.body.firstChild) {\n this._document.body.removeChild(this._document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Ensure basic HTML structure if input is empty or lacks it\n if (!html.trim()) {\n html = '<html><head></head><body></body></html>';\n } else if (!/<html/i.test(html)) {\n // If it's just a fragment, we still need html/head/body for a full document\n // but only if it's not explicitly intended to be a fragment?\n // Actually, standard DOMParser.parseFromString always creates them.\n html = `<html><head></head><body>${html}</body></html>`;\n }\n\n // Basic HTML parsing - this is a simplified version\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n\n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n\n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n\n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n\n value = attributeString.substring(valueStart, position);\n\n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n\n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#34;': '\"',\n '&apos;': \"'\",\n '&copy;': '\u00A9',\n '&reg;': '\u00AE',\n '&trade;': '\u2122',\n '&nbsp;': ' ',\n '&hellip;': '\u2026',\n '&mdash;': '\u2014',\n '&ndash;': '\u2013',\n '&lsquo;': '\\u2018',\n '&rsquo;': '\\u2019',\n '&ldquo;': '\"',\n '&rdquo;': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n\n // Handle numeric entities like &#39; &#34;\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Handle hex entities like &#x27;\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n\n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n\n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n\n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n\n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n\n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n\n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,36 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var bundle_entry_exports = {};
30
+ __export(bundle_entry_exports, {
31
+ DomParserModule: () => DomParserModule
32
+ });
33
+ module.exports = __toCommonJS(bundle_entry_exports);
34
+ __reExport(bundle_entry_exports, require("./index"), module.exports);
35
+ var DomParserModule = __toESM(require("./index"), 1);
36
+ //# sourceMappingURL=bundle-entry.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/bundle-entry.ts"],
4
+ "sourcesContent": ["export * from './index';\nexport * as DomParserModule from './index';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAc,oBAAd;AACA,sBAAiC;",
6
+ "names": []
7
+ }
@@ -42,15 +42,18 @@ class ElementFactory {
42
42
  return element;
43
43
  }
44
44
  }
45
- if (normalizedTagName.includes("-") && customElements && typeof customElements.get === "function") {
46
- const CustomElementClass = customElements.get(normalizedTagName);
47
- if (CustomElementClass) {
48
- const element = new CustomElementClass();
49
- element._tagName = tagName.toUpperCase();
50
- element.nodeName = tagName.toUpperCase();
51
- element._ownerDocument = ownerDocument;
52
- return element;
45
+ if (normalizedTagName.includes("-")) {
46
+ if (customElements && typeof customElements.get === "function") {
47
+ const CustomElementClass = customElements.get(normalizedTagName);
48
+ if (CustomElementClass) {
49
+ const element = new CustomElementClass();
50
+ element._tagName = tagName.toUpperCase();
51
+ element.nodeName = tagName.toUpperCase();
52
+ element._ownerDocument = ownerDocument;
53
+ return element;
54
+ }
53
55
  }
56
+ return new import_elements.HTMLElement(tagName.toUpperCase(), ownerDocument);
54
57
  }
55
58
  for (const [tag, ElementClass] of Object.entries(import_elements.htmlElements)) {
56
59
  if (tag === normalizedTagName) {
@@ -67,7 +70,7 @@ class ElementFactory {
67
70
  return new ElementClass(tagName.toUpperCase(), ownerDocument);
68
71
  }
69
72
  }
70
- return new import_elements.HTMLGenericElement(tagName.toUpperCase(), ownerDocument);
73
+ return new import_elements.HTMLElement(tagName.toUpperCase(), ownerDocument);
71
74
  }
72
75
  /**
73
76
  * Get all supported HTML tag names
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/factory/ElementFactory.ts"],
4
- "sourcesContent": ["import { HTMLElementBase, HTMLGenericElement, htmlElements, svgElements, mathmlElements } from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n /**\n * Creates an HTML element based on the tag name\n */\n static createElement(tagName: string, ownerDocument?: any, options?: any): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n const customElements = (ownerDocument as any)?.defaultView?.customElements;\n\n // 1. Check for Customized Built-in Elements (is=\"\")\n const isAttribute = typeof options === 'string' ? options : options?.is;\n if (isAttribute && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(isAttribute);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n if (element.setAttribute) {\n element.setAttribute('is', isAttribute);\n }\n return element;\n }\n }\n\n // 2. Check for Autonomous Custom Elements\n if (normalizedTagName.includes('-') && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(normalizedTagName);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n return element;\n }\n }\n\n // 3. Check HTML elements\n\n for (const [tag, ElementClass] of Object.entries(htmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check SVG elements\n for (const [tag, ElementClass] of Object.entries(svgElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check MathML elements\n for (const [tag, ElementClass] of Object.entries(mathmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // For unknown elements, create a generic HTMLElement\n return new HTMLGenericElement(tagName.toUpperCase(), ownerDocument);\n }\n\n /**\n * Get all supported HTML tag names\n */\n static getSupportedHTMLTagNames(): string[] {\n return Object.keys(htmlElements);\n }\n\n /**\n * Get all supported SVG tag names\n */\n static getSupportedSVGTagNames(): string[] {\n return Object.keys(svgElements);\n }\n\n /**\n * Get all supported MathML tag names\n */\n static getSupportedMathMLTagNames(): string[] {\n return Object.keys(mathmlElements);\n }\n\n /**\n * Get all supported tag names\n */\n static getSupportedTagNames(): string[] {\n return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA+F;AAKxF,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,iBAAkB,eAAuB,aAAa;AAG5D,UAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,QAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,YAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,YAAI,QAAQ,cAAc;AACxB,kBAAQ,aAAa,MAAM,WAAW;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,QAAI,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AACjG,YAAM,qBAAqB,eAAe,IAAI,iBAAiB;AAC/D,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAIA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,4BAAY,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,2BAAW,GAAG;AAC7D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,8BAAc,GAAG;AAChE,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,WAAO,IAAI,mCAAmB,QAAQ,YAAY,GAAG,aAAa;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AAC1C,WAAO,OAAO,KAAK,4BAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACzC,WAAO,OAAO,KAAK,2BAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC5C,WAAO,OAAO,KAAK,8BAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACtC,WAAO,CAAC,GAAG,eAAe,yBAAyB,GAAG,GAAG,eAAe,wBAAwB,GAAG,GAAG,eAAe,2BAA2B,CAAC;AAAA,EACnJ;AACF;",
4
+ "sourcesContent": ["import {HTMLElementBase, htmlElements, svgElements, mathmlElements, HTMLElement} from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n /**\n * Creates an HTML element based on the tag name\n */\n static createElement(tagName: string, ownerDocument?: any, options?: any): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n const customElements = (ownerDocument as any)?.defaultView?.customElements;\n\n // 1. Check for Customized Built-in Elements (is=\"\")\n const isAttribute = typeof options === 'string' ? options : options?.is;\n if (isAttribute && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(isAttribute);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n if (element.setAttribute) {\n element.setAttribute('is', isAttribute);\n }\n return element;\n }\n }\n\n // 2. Check for Autonomous Custom Elements (or preserve unknown custom tags)\n // console.log('vvv2222222vvvvvvvvv222222vvvvv', tagName, normalizedTagName)\n if (normalizedTagName.includes('-')) {\n // console.log('vvvvvvvvvvvvvvvvv')\n if (customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(normalizedTagName);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n return element;\n }\n }\n\n // No registered custom element yet \u2013 keep the tag name intact.\n return new HTMLElement(tagName.toUpperCase(), ownerDocument);\n }\n\n // 3. Check HTML elements\n\n for (const [tag, ElementClass] of Object.entries(htmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check SVG elements\n for (const [tag, ElementClass] of Object.entries(svgElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check MathML elements\n for (const [tag, ElementClass] of Object.entries(mathmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // For unknown elements, create a generic HTMLElement\n return new HTMLElement(tagName.toUpperCase(), ownerDocument);\n }\n\n /**\n * Get all supported HTML tag names\n */\n static getSupportedHTMLTagNames(): string[] {\n return Object.keys(htmlElements);\n }\n\n /**\n * Get all supported SVG tag names\n */\n static getSupportedSVGTagNames(): string[] {\n return Object.keys(svgElements);\n }\n\n /**\n * Get all supported MathML tag names\n */\n static getSupportedMathMLTagNames(): string[] {\n return Object.keys(mathmlElements);\n }\n\n /**\n * Get all supported tag names\n */\n static getSupportedTagNames(): string[] {\n return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAsF;AAK/E,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,iBAAkB,eAAuB,aAAa;AAG5D,UAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,QAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,YAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,YAAI,QAAQ,cAAc;AACxB,kBAAQ,aAAa,MAAM,WAAW;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAIA,QAAI,kBAAkB,SAAS,GAAG,GAAG;AAEnC,UAAI,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC9D,cAAM,qBAAqB,eAAe,IAAI,iBAAiB;AAC/D,YAAI,oBAAoB;AACtB,gBAAM,UAAU,IAAI,mBAAmB;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,iBAAiB;AACzB,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,aAAO,IAAI,4BAAY,QAAQ,YAAY,GAAG,aAAa;AAAA,IAC7D;AAIA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,4BAAY,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,2BAAW,GAAG;AAC7D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,8BAAc,GAAG;AAChE,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,WAAO,IAAI,4BAAY,QAAQ,YAAY,GAAG,aAAa;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AAC1C,WAAO,OAAO,KAAK,4BAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACzC,WAAO,OAAO,KAAK,2BAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC5C,WAAO,OAAO,KAAK,8BAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACtC,WAAO,CAAC,GAAG,eAAe,yBAAyB,GAAG,GAAG,eAAe,wBAAwB,GAAG,GAAG,eAAe,2BAA2B,CAAC;AAAA,EACnJ;AACF;",
6
6
  "names": []
7
7
  }