@dooboostore/dom-parser 1.0.1 → 1.0.3

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 (519) hide show
  1. package/dist/cjs/DomParser.js +43 -13
  2. package/dist/cjs/DomParser.js.map +2 -2
  3. package/dist/cjs/factory/ElementFactory.js +27 -6
  4. package/dist/cjs/factory/ElementFactory.js.map +2 -2
  5. package/dist/cjs/index.js +4 -0
  6. package/dist/cjs/index.js.map +2 -2
  7. package/dist/cjs/node/CharacterData.js.map +1 -1
  8. package/dist/cjs/node/ChildNode.js +0 -15
  9. package/dist/cjs/node/ChildNode.js.map +3 -3
  10. package/dist/cjs/node/ChildNodeBase.js +20 -0
  11. package/dist/cjs/node/ChildNodeBase.js.map +2 -2
  12. package/dist/cjs/node/Comment.js.map +2 -2
  13. package/dist/cjs/node/Document.js +0 -27
  14. package/dist/cjs/node/Document.js.map +4 -4
  15. package/dist/cjs/node/DocumentBase.js +169 -202
  16. package/dist/cjs/node/DocumentBase.js.map +2 -2
  17. package/dist/cjs/node/DocumentFragment.js +0 -15
  18. package/dist/cjs/node/DocumentFragment.js.map +3 -3
  19. package/dist/cjs/node/DocumentFragmentBase.js.map +2 -2
  20. package/dist/cjs/node/Node.js.map +1 -1
  21. package/dist/cjs/node/NodeBase.js +44 -2
  22. package/dist/cjs/node/NodeBase.js.map +2 -2
  23. package/dist/cjs/node/NodeFilter.js +43 -0
  24. package/dist/cjs/node/NodeFilter.js.map +7 -0
  25. package/dist/cjs/node/NodeIterator.js +1 -28
  26. package/dist/cjs/node/NodeIterator.js.map +2 -2
  27. package/dist/cjs/node/ParentNode.js +0 -15
  28. package/dist/cjs/node/ParentNode.js.map +3 -3
  29. package/dist/cjs/node/ParentNodeBase.js +10 -10
  30. package/dist/cjs/node/ParentNodeBase.js.map +3 -3
  31. package/dist/cjs/node/ShadowRootBase.js +79 -0
  32. package/dist/cjs/node/ShadowRootBase.js.map +7 -0
  33. package/dist/cjs/node/Text.js +0 -15
  34. package/dist/cjs/node/Text.js.map +3 -3
  35. package/dist/cjs/node/TextBase.js +0 -3
  36. package/dist/cjs/node/TextBase.js.map +2 -2
  37. package/dist/cjs/node/TreeWalker.js +272 -0
  38. package/dist/cjs/node/TreeWalker.js.map +7 -0
  39. package/dist/cjs/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +7 -6
  40. package/dist/cjs/node/collection/HTMLCollectionImp.js.map +7 -0
  41. package/dist/cjs/node/collection/HTMLCollectionOfImp.js +26 -0
  42. package/dist/cjs/node/collection/HTMLCollectionOfImp.js.map +7 -0
  43. package/dist/cjs/node/collection/NodeList.js.map +1 -1
  44. package/dist/cjs/node/collection/{NodeListOf.js → NodeListOfImp.js} +6 -6
  45. package/dist/cjs/node/collection/NodeListOfImp.js.map +7 -0
  46. package/dist/cjs/node/collection/StylePropertyMapImpl.js +65 -0
  47. package/dist/cjs/node/collection/StylePropertyMapImpl.js.map +7 -0
  48. package/dist/cjs/node/collection/index.js +6 -6
  49. package/dist/cjs/node/collection/index.js.map +2 -2
  50. package/dist/cjs/node/elements/Element.js +0 -15
  51. package/dist/cjs/node/elements/Element.js.map +3 -3
  52. package/dist/cjs/node/elements/ElementBase.js +164 -322
  53. package/dist/cjs/node/elements/ElementBase.js.map +3 -3
  54. package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
  55. package/dist/cjs/node/{collection/HTMLCollectionOf.js → elements/HTMLAudioElement.js} +9 -16
  56. package/dist/cjs/node/elements/HTMLAudioElement.js.map +7 -0
  57. package/dist/cjs/node/elements/HTMLButtonElement.js +1 -1
  58. package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
  59. package/dist/cjs/node/elements/HTMLDListElement.js +29 -0
  60. package/dist/cjs/node/elements/HTMLDListElement.js.map +7 -0
  61. package/dist/cjs/node/elements/HTMLDataElement.js +29 -0
  62. package/dist/cjs/node/elements/HTMLDataElement.js.map +7 -0
  63. package/dist/cjs/node/elements/HTMLDataListElement.js +29 -0
  64. package/dist/cjs/node/elements/HTMLDataListElement.js.map +7 -0
  65. package/dist/cjs/node/elements/HTMLDetailsElement.js +29 -0
  66. package/dist/cjs/node/elements/HTMLDetailsElement.js.map +7 -0
  67. package/dist/cjs/node/elements/HTMLDialogElement.js +29 -0
  68. package/dist/cjs/node/elements/HTMLDialogElement.js.map +7 -0
  69. package/dist/cjs/node/elements/HTMLElement.js +10 -0
  70. package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
  71. package/dist/cjs/node/elements/HTMLElementBase.js +153 -3
  72. package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
  73. package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
  74. package/dist/cjs/node/elements/HTMLFieldSetElement.js +29 -0
  75. package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +7 -0
  76. package/dist/cjs/node/elements/HTMLHRElement.js +29 -0
  77. package/dist/cjs/node/elements/HTMLHRElement.js.map +7 -0
  78. package/dist/cjs/node/elements/HTMLIFrameElement.js +29 -0
  79. package/dist/cjs/node/elements/HTMLIFrameElement.js.map +7 -0
  80. package/dist/cjs/node/elements/HTMLLabelElement.js +29 -0
  81. package/dist/cjs/node/elements/HTMLLabelElement.js.map +7 -0
  82. package/dist/cjs/node/elements/HTMLLegendElement.js +29 -0
  83. package/dist/cjs/node/elements/HTMLLegendElement.js.map +7 -0
  84. package/dist/cjs/node/elements/HTMLMapElement.js +29 -0
  85. package/dist/cjs/node/elements/HTMLMapElement.js.map +7 -0
  86. package/dist/cjs/node/elements/HTMLMeterElement.js +29 -0
  87. package/dist/cjs/node/elements/HTMLMeterElement.js.map +7 -0
  88. package/dist/cjs/node/elements/HTMLModElement.js +29 -0
  89. package/dist/cjs/node/elements/HTMLModElement.js.map +7 -0
  90. package/dist/cjs/node/elements/HTMLObjectElement.js +29 -0
  91. package/dist/cjs/node/elements/HTMLObjectElement.js.map +7 -0
  92. package/dist/cjs/node/elements/HTMLOptGroupElement.js +29 -0
  93. package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +7 -0
  94. package/dist/cjs/node/elements/HTMLOptionElement.js +29 -0
  95. package/dist/cjs/node/elements/HTMLOptionElement.js.map +7 -0
  96. package/dist/cjs/node/elements/HTMLOutputElement.js +29 -0
  97. package/dist/cjs/node/elements/HTMLOutputElement.js.map +7 -0
  98. package/dist/cjs/node/elements/HTMLParamElement.js +29 -0
  99. package/dist/cjs/node/elements/HTMLParamElement.js.map +7 -0
  100. package/dist/cjs/node/elements/HTMLPictureElement.js +29 -0
  101. package/dist/cjs/node/elements/HTMLPictureElement.js.map +7 -0
  102. package/dist/cjs/node/elements/HTMLPreElement.js +29 -0
  103. package/dist/cjs/node/elements/HTMLPreElement.js.map +7 -0
  104. package/dist/cjs/node/elements/HTMLProgressElement.js +29 -0
  105. package/dist/cjs/node/elements/HTMLProgressElement.js.map +7 -0
  106. package/dist/cjs/node/elements/HTMLQuoteElement.js +29 -0
  107. package/dist/cjs/node/elements/HTMLQuoteElement.js.map +7 -0
  108. package/dist/cjs/node/elements/HTMLSelectElement.js +29 -0
  109. package/dist/cjs/node/elements/HTMLSelectElement.js.map +7 -0
  110. package/dist/cjs/node/elements/HTMLSlotElement.js +29 -0
  111. package/dist/cjs/node/elements/HTMLSlotElement.js.map +7 -0
  112. package/dist/cjs/node/elements/HTMLSourceElement.js +29 -0
  113. package/dist/cjs/node/elements/HTMLSourceElement.js.map +7 -0
  114. package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
  115. package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
  116. package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
  117. package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
  118. package/dist/cjs/node/elements/HTMLTextAreaElement.js +29 -0
  119. package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +7 -0
  120. package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
  121. package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
  122. package/dist/cjs/node/elements/HTMLTimeElement.js +29 -0
  123. package/dist/cjs/node/elements/HTMLTimeElement.js.map +7 -0
  124. package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
  125. package/dist/cjs/node/elements/HTMLTrackElement.js +29 -0
  126. package/dist/cjs/node/elements/HTMLTrackElement.js.map +7 -0
  127. package/dist/cjs/node/elements/HTMLVideoElement.js +29 -0
  128. package/dist/cjs/node/elements/HTMLVideoElement.js.map +7 -0
  129. package/dist/cjs/node/elements/index.js +181 -92
  130. package/dist/cjs/node/elements/index.js.map +2 -2
  131. package/dist/cjs/node/index.js +6 -16
  132. package/dist/cjs/node/index.js.map +2 -2
  133. package/dist/cjs/utils/CSSSelector.js.map +2 -2
  134. package/dist/cjs/window/CustomElementRegistryImp.js +105 -0
  135. package/dist/cjs/window/CustomElementRegistryImp.js.map +7 -0
  136. package/dist/cjs/window/Window.js +0 -15
  137. package/dist/cjs/window/Window.js.map +3 -3
  138. package/dist/cjs/window/WindowBase.js +233 -515
  139. package/dist/cjs/window/WindowBase.js.map +2 -2
  140. package/dist/cjs/window/index.js +0 -5
  141. package/dist/cjs/window/index.js.map +2 -2
  142. package/dist/esm/DomParser.js +43 -13
  143. package/dist/esm/DomParser.js.map +2 -2
  144. package/dist/esm/factory/ElementFactory.js +27 -6
  145. package/dist/esm/factory/ElementFactory.js.map +2 -2
  146. package/dist/esm/index.js +4 -0
  147. package/dist/esm/index.js.map +2 -2
  148. package/dist/esm/node/ChildNodeBase.js +20 -0
  149. package/dist/esm/node/ChildNodeBase.js.map +2 -2
  150. package/dist/esm/node/Comment.js.map +2 -2
  151. package/dist/esm/node/Document.js +0 -8
  152. package/dist/esm/node/Document.js.map +4 -4
  153. package/dist/esm/node/DocumentBase.js +166 -199
  154. package/dist/esm/node/DocumentBase.js.map +2 -2
  155. package/dist/esm/node/DocumentFragmentBase.js.map +2 -2
  156. package/dist/esm/node/Node.js.map +1 -1
  157. package/dist/esm/node/NodeBase.js +45 -22
  158. package/dist/esm/node/NodeBase.js.map +2 -2
  159. package/dist/esm/node/NodeFilter.js +24 -0
  160. package/dist/esm/node/NodeFilter.js.map +7 -0
  161. package/dist/esm/node/NodeIterator.js +1 -28
  162. package/dist/esm/node/NodeIterator.js.map +2 -2
  163. package/dist/esm/node/ParentNodeBase.js +4 -4
  164. package/dist/esm/node/ParentNodeBase.js.map +2 -2
  165. package/dist/esm/node/ShadowRootBase.js +60 -0
  166. package/dist/esm/node/ShadowRootBase.js.map +7 -0
  167. package/dist/esm/node/TextBase.js +0 -3
  168. package/dist/esm/node/TextBase.js.map +2 -2
  169. package/dist/esm/node/TreeWalker.js +253 -0
  170. package/dist/esm/node/TreeWalker.js.map +7 -0
  171. package/dist/esm/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +4 -3
  172. package/dist/esm/node/collection/HTMLCollectionImp.js.map +7 -0
  173. package/dist/esm/node/collection/HTMLCollectionOfImp.js +7 -0
  174. package/dist/esm/node/collection/HTMLCollectionOfImp.js.map +7 -0
  175. package/dist/esm/node/collection/NodeList.js.map +1 -1
  176. package/dist/esm/node/collection/{NodeListOf.js → NodeListOfImp.js} +3 -3
  177. package/dist/esm/node/collection/NodeListOfImp.js.map +7 -0
  178. package/dist/esm/node/collection/StylePropertyMapImpl.js +46 -0
  179. package/dist/esm/node/collection/StylePropertyMapImpl.js.map +7 -0
  180. package/dist/esm/node/collection/index.js +6 -6
  181. package/dist/esm/node/collection/index.js.map +2 -2
  182. package/dist/esm/node/elements/ElementBase.js +164 -322
  183. package/dist/esm/node/elements/ElementBase.js.map +3 -3
  184. package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
  185. package/dist/esm/node/elements/HTMLAudioElement.js +10 -0
  186. package/dist/esm/node/elements/HTMLAudioElement.js.map +7 -0
  187. package/dist/esm/node/elements/HTMLButtonElement.js +1 -1
  188. package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
  189. package/dist/esm/node/elements/HTMLDListElement.js +10 -0
  190. package/dist/esm/node/elements/HTMLDListElement.js.map +7 -0
  191. package/dist/esm/node/elements/HTMLDataElement.js +10 -0
  192. package/dist/esm/node/elements/HTMLDataElement.js.map +7 -0
  193. package/dist/esm/node/elements/HTMLDataListElement.js +10 -0
  194. package/dist/esm/node/elements/HTMLDataListElement.js.map +7 -0
  195. package/dist/esm/node/elements/HTMLDetailsElement.js +10 -0
  196. package/dist/esm/node/elements/HTMLDetailsElement.js.map +7 -0
  197. package/dist/esm/node/elements/HTMLDialogElement.js +10 -0
  198. package/dist/esm/node/elements/HTMLDialogElement.js.map +7 -0
  199. package/dist/esm/node/elements/HTMLElement.js +6 -0
  200. package/dist/esm/node/elements/HTMLElement.js.map +3 -3
  201. package/dist/esm/node/elements/HTMLElementBase.js +153 -3
  202. package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
  203. package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
  204. package/dist/esm/node/elements/HTMLFieldSetElement.js +10 -0
  205. package/dist/esm/node/elements/HTMLFieldSetElement.js.map +7 -0
  206. package/dist/esm/node/elements/HTMLHRElement.js +10 -0
  207. package/dist/esm/node/elements/HTMLHRElement.js.map +7 -0
  208. package/dist/esm/node/elements/HTMLIFrameElement.js +10 -0
  209. package/dist/esm/node/elements/HTMLIFrameElement.js.map +7 -0
  210. package/dist/esm/node/elements/HTMLLabelElement.js +10 -0
  211. package/dist/esm/node/elements/HTMLLabelElement.js.map +7 -0
  212. package/dist/esm/node/elements/HTMLLegendElement.js +10 -0
  213. package/dist/esm/node/elements/HTMLLegendElement.js.map +7 -0
  214. package/dist/esm/node/elements/HTMLMapElement.js +10 -0
  215. package/dist/esm/node/elements/HTMLMapElement.js.map +7 -0
  216. package/dist/esm/node/elements/HTMLMeterElement.js +10 -0
  217. package/dist/esm/node/elements/HTMLMeterElement.js.map +7 -0
  218. package/dist/esm/node/elements/HTMLModElement.js +10 -0
  219. package/dist/esm/node/elements/HTMLModElement.js.map +7 -0
  220. package/dist/esm/node/elements/HTMLObjectElement.js +10 -0
  221. package/dist/esm/node/elements/HTMLObjectElement.js.map +7 -0
  222. package/dist/esm/node/elements/HTMLOptGroupElement.js +10 -0
  223. package/dist/esm/node/elements/HTMLOptGroupElement.js.map +7 -0
  224. package/dist/esm/node/elements/HTMLOptionElement.js +10 -0
  225. package/dist/esm/node/elements/HTMLOptionElement.js.map +7 -0
  226. package/dist/esm/node/elements/HTMLOutputElement.js +10 -0
  227. package/dist/esm/node/elements/HTMLOutputElement.js.map +7 -0
  228. package/dist/esm/node/elements/HTMLParamElement.js +10 -0
  229. package/dist/esm/node/elements/HTMLParamElement.js.map +7 -0
  230. package/dist/esm/node/elements/HTMLPictureElement.js +10 -0
  231. package/dist/esm/node/elements/HTMLPictureElement.js.map +7 -0
  232. package/dist/esm/node/elements/HTMLPreElement.js +10 -0
  233. package/dist/esm/node/elements/HTMLPreElement.js.map +7 -0
  234. package/dist/esm/node/elements/HTMLProgressElement.js +10 -0
  235. package/dist/esm/node/elements/HTMLProgressElement.js.map +7 -0
  236. package/dist/esm/node/elements/HTMLQuoteElement.js +10 -0
  237. package/dist/esm/node/elements/HTMLQuoteElement.js.map +7 -0
  238. package/dist/esm/node/elements/HTMLSelectElement.js +10 -0
  239. package/dist/esm/node/elements/HTMLSelectElement.js.map +7 -0
  240. package/dist/esm/node/elements/HTMLSlotElement.js +10 -0
  241. package/dist/esm/node/elements/HTMLSlotElement.js.map +7 -0
  242. package/dist/esm/node/elements/HTMLSourceElement.js +10 -0
  243. package/dist/esm/node/elements/HTMLSourceElement.js.map +7 -0
  244. package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
  245. package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
  246. package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
  247. package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
  248. package/dist/esm/node/elements/HTMLTextAreaElement.js +10 -0
  249. package/dist/esm/node/elements/HTMLTextAreaElement.js.map +7 -0
  250. package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
  251. package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
  252. package/dist/esm/node/elements/HTMLTimeElement.js +10 -0
  253. package/dist/esm/node/elements/HTMLTimeElement.js.map +7 -0
  254. package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
  255. package/dist/esm/node/elements/HTMLTrackElement.js +10 -0
  256. package/dist/esm/node/elements/HTMLTrackElement.js.map +7 -0
  257. package/dist/esm/node/elements/HTMLVideoElement.js +10 -0
  258. package/dist/esm/node/elements/HTMLVideoElement.js.map +7 -0
  259. package/dist/esm/node/elements/index.js +182 -93
  260. package/dist/esm/node/elements/index.js.map +2 -2
  261. package/dist/esm/node/index.js +7 -17
  262. package/dist/esm/node/index.js.map +2 -2
  263. package/dist/esm/utils/CSSSelector.js.map +2 -2
  264. package/dist/esm/window/CustomElementRegistryImp.js +86 -0
  265. package/dist/esm/window/CustomElementRegistryImp.js.map +7 -0
  266. package/dist/esm/window/WindowBase.js +282 -499
  267. package/dist/esm/window/WindowBase.js.map +2 -2
  268. package/dist/esm/window/index.js +0 -5
  269. package/dist/esm/window/index.js.map +2 -2
  270. package/dist/esm-bundle/dooboostore-dom-parser.esm.js +3755 -3548
  271. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +4 -4
  272. package/dist/types/DomParser.d.ts +4 -0
  273. package/dist/types/DomParser.d.ts.map +1 -1
  274. package/dist/types/factory/ElementFactory.d.ts +1 -1
  275. package/dist/types/factory/ElementFactory.d.ts.map +1 -1
  276. package/dist/types/index.d.ts +3 -1
  277. package/dist/types/index.d.ts.map +1 -1
  278. package/dist/types/node/CharacterData.d.ts +0 -2
  279. package/dist/types/node/CharacterData.d.ts.map +1 -1
  280. package/dist/types/node/ChildNode.d.ts +0 -38
  281. package/dist/types/node/ChildNode.d.ts.map +1 -1
  282. package/dist/types/node/ChildNodeBase.d.ts +6 -4
  283. package/dist/types/node/ChildNodeBase.d.ts.map +1 -1
  284. package/dist/types/node/Comment.d.ts +1 -1
  285. package/dist/types/node/Comment.d.ts.map +1 -1
  286. package/dist/types/node/Document.d.ts +0 -856
  287. package/dist/types/node/Document.d.ts.map +1 -1
  288. package/dist/types/node/DocumentBase.d.ts +68 -108
  289. package/dist/types/node/DocumentBase.d.ts.map +1 -1
  290. package/dist/types/node/DocumentFragment.d.ts +0 -38
  291. package/dist/types/node/DocumentFragment.d.ts.map +1 -1
  292. package/dist/types/node/DocumentFragmentBase.d.ts +1 -8
  293. package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -1
  294. package/dist/types/node/Node.d.ts +0 -213
  295. package/dist/types/node/Node.d.ts.map +1 -1
  296. package/dist/types/node/NodeBase.d.ts +11 -8
  297. package/dist/types/node/NodeBase.d.ts.map +1 -1
  298. package/dist/types/node/NodeFilter.d.ts +25 -0
  299. package/dist/types/node/NodeFilter.d.ts.map +1 -0
  300. package/dist/types/node/NodeIterator.d.ts +0 -34
  301. package/dist/types/node/NodeIterator.d.ts.map +1 -1
  302. package/dist/types/node/ParentNode.d.ts +0 -84
  303. package/dist/types/node/ParentNode.d.ts.map +1 -1
  304. package/dist/types/node/ParentNodeBase.d.ts +0 -5
  305. package/dist/types/node/ParentNodeBase.d.ts.map +1 -1
  306. package/dist/types/node/ShadowRootBase.d.ts +36 -0
  307. package/dist/types/node/ShadowRootBase.d.ts.map +1 -0
  308. package/dist/types/node/Text.d.ts +0 -24
  309. package/dist/types/node/Text.d.ts.map +1 -1
  310. package/dist/types/node/TextBase.d.ts +2 -3
  311. package/dist/types/node/TextBase.d.ts.map +1 -1
  312. package/dist/types/node/TreeWalker.d.ts +48 -0
  313. package/dist/types/node/TreeWalker.d.ts.map +1 -0
  314. package/dist/types/node/collection/{HTMLCollection.d.ts → HTMLCollectionImp.d.ts} +2 -3
  315. package/dist/types/node/collection/HTMLCollectionImp.d.ts.map +1 -0
  316. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts +9 -0
  317. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts.map +1 -0
  318. package/dist/types/node/collection/NodeList.d.ts +0 -1
  319. package/dist/types/node/collection/NodeList.d.ts.map +1 -1
  320. package/dist/types/node/collection/{NodeListOf.d.ts → NodeListOfImp.d.ts} +3 -4
  321. package/dist/types/node/collection/NodeListOfImp.d.ts.map +1 -0
  322. package/dist/types/node/collection/StylePropertyMapImpl.d.ts +20 -0
  323. package/dist/types/node/collection/StylePropertyMapImpl.d.ts.map +1 -0
  324. package/dist/types/node/collection/index.d.ts +3 -3
  325. package/dist/types/node/collection/index.d.ts.map +1 -1
  326. package/dist/types/node/elements/Element.d.ts +0 -686
  327. package/dist/types/node/elements/Element.d.ts.map +1 -1
  328. package/dist/types/node/elements/ElementBase.d.ts +97 -73
  329. package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
  330. package/dist/types/node/elements/HTMLAreaElement.d.ts +0 -1
  331. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
  332. package/dist/types/node/elements/HTMLAudioElement.d.ts +8 -0
  333. package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -0
  334. package/dist/types/node/elements/HTMLButtonElement.d.ts +1 -1
  335. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
  336. package/dist/types/node/elements/HTMLDListElement.d.ts +5 -0
  337. package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -0
  338. package/dist/types/node/elements/HTMLDataElement.d.ts +5 -0
  339. package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -0
  340. package/dist/types/node/elements/HTMLDataListElement.d.ts +5 -0
  341. package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -0
  342. package/dist/types/node/elements/HTMLDetailsElement.d.ts +5 -0
  343. package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -0
  344. package/dist/types/node/elements/HTMLDialogElement.d.ts +5 -0
  345. package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -0
  346. package/dist/types/node/elements/HTMLElement.d.ts +2 -88
  347. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
  348. package/dist/types/node/elements/HTMLElementBase.d.ts +133 -3
  349. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
  350. package/dist/types/node/elements/HTMLEmbedElement.d.ts +0 -1
  351. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
  352. package/dist/types/node/elements/HTMLFieldSetElement.d.ts +5 -0
  353. package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -0
  354. package/dist/types/node/elements/HTMLHRElement.d.ts +5 -0
  355. package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -0
  356. package/dist/types/node/elements/HTMLIFrameElement.d.ts +5 -0
  357. package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -0
  358. package/dist/types/node/elements/HTMLLabelElement.d.ts +5 -0
  359. package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -0
  360. package/dist/types/node/elements/HTMLLegendElement.d.ts +5 -0
  361. package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -0
  362. package/dist/types/node/elements/HTMLMapElement.d.ts +5 -0
  363. package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -0
  364. package/dist/types/node/elements/HTMLMeterElement.d.ts +5 -0
  365. package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -0
  366. package/dist/types/node/elements/HTMLModElement.d.ts +5 -0
  367. package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -0
  368. package/dist/types/node/elements/HTMLObjectElement.d.ts +5 -0
  369. package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -0
  370. package/dist/types/node/elements/HTMLOptGroupElement.d.ts +5 -0
  371. package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -0
  372. package/dist/types/node/elements/HTMLOptionElement.d.ts +5 -0
  373. package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -0
  374. package/dist/types/node/elements/HTMLOutputElement.d.ts +5 -0
  375. package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -0
  376. package/dist/types/node/elements/HTMLParamElement.d.ts +5 -0
  377. package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -0
  378. package/dist/types/node/elements/HTMLPictureElement.d.ts +5 -0
  379. package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -0
  380. package/dist/types/node/elements/HTMLPreElement.d.ts +5 -0
  381. package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -0
  382. package/dist/types/node/elements/HTMLProgressElement.d.ts +5 -0
  383. package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -0
  384. package/dist/types/node/elements/HTMLQuoteElement.d.ts +5 -0
  385. package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -0
  386. package/dist/types/node/elements/HTMLSelectElement.d.ts +5 -0
  387. package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -0
  388. package/dist/types/node/elements/HTMLSlotElement.d.ts +5 -0
  389. package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -0
  390. package/dist/types/node/elements/HTMLSourceElement.d.ts +5 -0
  391. package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -0
  392. package/dist/types/node/elements/HTMLTableElement.d.ts +3 -4
  393. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
  394. package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -3
  395. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
  396. package/dist/types/node/elements/HTMLTemplateElement.d.ts +0 -1
  397. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
  398. package/dist/types/node/elements/HTMLTextAreaElement.d.ts +5 -0
  399. package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -0
  400. package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -3
  401. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
  402. package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -3
  403. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
  404. package/dist/types/node/elements/HTMLTimeElement.d.ts +5 -0
  405. package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -0
  406. package/dist/types/node/elements/HTMLTrElement.d.ts +2 -3
  407. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
  408. package/dist/types/node/elements/HTMLTrackElement.d.ts +5 -0
  409. package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -0
  410. package/dist/types/node/elements/HTMLVideoElement.d.ts +8 -0
  411. package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -0
  412. package/dist/types/node/elements/index.d.ts +106 -52
  413. package/dist/types/node/elements/index.d.ts.map +1 -1
  414. package/dist/types/node/index.d.ts +4 -7
  415. package/dist/types/node/index.d.ts.map +1 -1
  416. package/dist/types/utils/CSSSelector.d.ts +0 -1
  417. package/dist/types/utils/CSSSelector.d.ts.map +1 -1
  418. package/dist/types/window/CustomElementRegistryImp.d.ts +18 -0
  419. package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -0
  420. package/dist/types/window/Window.d.ts +0 -619
  421. package/dist/types/window/Window.d.ts.map +1 -1
  422. package/dist/types/window/WindowBase.d.ts +261 -284
  423. package/dist/types/window/WindowBase.d.ts.map +1 -1
  424. package/dist/types/window/index.d.ts +0 -1
  425. package/dist/types/window/index.d.ts.map +1 -1
  426. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +3765 -3558
  427. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +4 -4
  428. package/package.json +1 -1
  429. package/src/DomParser.ts +458 -429
  430. package/src/factory/ElementFactory.ts +79 -53
  431. package/src/index.ts +11 -10
  432. package/src/node/CharacterData.ts +0 -2
  433. package/src/node/ChildNode.ts +42 -42
  434. package/src/node/ChildNodeBase.ts +60 -39
  435. package/src/node/Comment.ts +60 -60
  436. package/src/node/Document.ts +129 -882
  437. package/src/node/DocumentBase.ts +371 -462
  438. package/src/node/DocumentFragment.ts +38 -44
  439. package/src/node/DocumentFragmentBase.ts +4 -9
  440. package/src/node/Node.ts +231 -224
  441. package/src/node/NodeBase.ts +469 -443
  442. package/src/node/NodeFilter.ts +50 -0
  443. package/src/node/NodeIterator.ts +117 -172
  444. package/src/node/ParentNode.ts +93 -93
  445. package/src/node/ParentNodeBase.ts +7 -10
  446. package/src/node/ShadowRootBase.ts +87 -0
  447. package/src/node/Text.ts +30 -30
  448. package/src/node/TextBase.ts +92 -94
  449. package/src/node/TreeWalker.ts +280 -0
  450. package/src/node/collection/{HTMLCollection.ts → HTMLCollectionImp.ts} +3 -2
  451. package/src/node/collection/HTMLCollectionOfImp.ts +12 -0
  452. package/src/node/collection/NodeList.ts +1 -1
  453. package/src/node/collection/{NodeListOf.ts → NodeListOfImp.ts} +3 -3
  454. package/src/node/collection/StylePropertyMapImpl.ts +60 -0
  455. package/src/node/collection/index.ts +3 -3
  456. package/src/node/elements/Element.ts +212 -771
  457. package/src/node/elements/ElementBase.ts +840 -1195
  458. package/src/node/elements/HTMLAreaElement.ts +0 -1
  459. package/src/node/elements/HTMLAudioElement.ts +10 -0
  460. package/src/node/elements/HTMLButtonElement.ts +63 -63
  461. package/src/node/elements/HTMLDListElement.ts +2 -0
  462. package/src/node/elements/HTMLDataElement.ts +6 -0
  463. package/src/node/elements/HTMLDataListElement.ts +2 -0
  464. package/src/node/elements/HTMLDetailsElement.ts +2 -0
  465. package/src/node/elements/HTMLDialogElement.ts +2 -0
  466. package/src/node/elements/HTMLElement.ts +2 -102
  467. package/src/node/elements/HTMLElementBase.ts +453 -156
  468. package/src/node/elements/HTMLEmbedElement.ts +0 -1
  469. package/src/node/elements/HTMLFieldSetElement.ts +2 -0
  470. package/src/node/elements/HTMLHRElement.ts +2 -0
  471. package/src/node/elements/HTMLIFrameElement.ts +2 -0
  472. package/src/node/elements/HTMLLabelElement.ts +2 -0
  473. package/src/node/elements/HTMLLegendElement.ts +2 -0
  474. package/src/node/elements/HTMLMapElement.ts +2 -0
  475. package/src/node/elements/HTMLMeterElement.ts +2 -0
  476. package/src/node/elements/HTMLModElement.ts +2 -0
  477. package/src/node/elements/HTMLObjectElement.ts +2 -0
  478. package/src/node/elements/HTMLOptGroupElement.ts +2 -0
  479. package/src/node/elements/HTMLOptionElement.ts +2 -0
  480. package/src/node/elements/HTMLOutputElement.ts +2 -0
  481. package/src/node/elements/HTMLParamElement.ts +2 -0
  482. package/src/node/elements/HTMLPictureElement.ts +2 -0
  483. package/src/node/elements/HTMLPreElement.ts +2 -0
  484. package/src/node/elements/HTMLProgressElement.ts +2 -0
  485. package/src/node/elements/HTMLQuoteElement.ts +2 -0
  486. package/src/node/elements/HTMLSelectElement.ts +2 -0
  487. package/src/node/elements/HTMLSlotElement.ts +2 -0
  488. package/src/node/elements/HTMLSourceElement.ts +2 -0
  489. package/src/node/elements/HTMLTableElement.ts +3 -7
  490. package/src/node/elements/HTMLTbodyElement.ts +2 -3
  491. package/src/node/elements/HTMLTdElement.ts +1 -1
  492. package/src/node/elements/HTMLTemplateElement.ts +3 -6
  493. package/src/node/elements/HTMLTextAreaElement.ts +2 -0
  494. package/src/node/elements/HTMLTfootElement.ts +2 -3
  495. package/src/node/elements/HTMLTheadElement.ts +2 -3
  496. package/src/node/elements/HTMLTimeElement.ts +2 -0
  497. package/src/node/elements/HTMLTrElement.ts +3 -4
  498. package/src/node/elements/HTMLTrackElement.ts +2 -0
  499. package/src/node/elements/HTMLVideoElement.ts +10 -0
  500. package/src/node/elements/index.ts +226 -149
  501. package/src/node/index.ts +8 -8
  502. package/src/utils/CSSSelector.ts +0 -1
  503. package/src/window/CustomElementRegistryImp.ts +120 -0
  504. package/src/window/Window.ts +716 -715
  505. package/src/window/WindowBase.ts +842 -998
  506. package/src/window/index.ts +0 -1
  507. package/tsconfig.json +1 -0
  508. package/dist/cjs/node/collection/HTMLCollection.js.map +0 -7
  509. package/dist/cjs/node/collection/HTMLCollectionOf.js.map +0 -7
  510. package/dist/cjs/node/collection/NodeListOf.js.map +0 -7
  511. package/dist/esm/node/collection/HTMLCollection.js.map +0 -7
  512. package/dist/esm/node/collection/HTMLCollectionOf.js +0 -17
  513. package/dist/esm/node/collection/HTMLCollectionOf.js.map +0 -7
  514. package/dist/esm/node/collection/NodeListOf.js.map +0 -7
  515. package/dist/types/node/collection/HTMLCollection.d.ts.map +0 -1
  516. package/dist/types/node/collection/HTMLCollectionOf.d.ts +0 -14
  517. package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +0 -1
  518. package/dist/types/node/collection/NodeListOf.d.ts.map +0 -1
  519. package/src/node/collection/HTMLCollectionOf.ts +0 -26
@@ -20,51 +20,81 @@ __export(DomParser_exports, {
20
20
  DomParser: () => DomParser
21
21
  });
22
22
  module.exports = __toCommonJS(DomParser_exports);
23
- var import_DocumentBase = require("./node/DocumentBase");
24
23
  var import_TextBase = require("./node/TextBase");
25
24
  var import_Comment = require("./node/Comment");
26
25
  var import_WindowBase = require("./window/WindowBase");
26
+ var import_ElementBase = require("./node/elements/ElementBase");
27
+ var import_ElementFactory = require("./factory/ElementFactory");
28
+ import_ElementBase.ElementBase.dependencies = {
29
+ ElementFactory: import_ElementFactory.ElementFactory,
30
+ TextBase: import_TextBase.TextBase,
31
+ Comment: import_Comment.Comment
32
+ };
27
33
  class DomParser {
28
34
  constructor(html, option) {
29
- const document = new import_DocumentBase.DocumentBase();
30
- const windowBase = new import_WindowBase.WindowBase(document, option?.href);
35
+ const windowBase = new import_WindowBase.WindowBase({ initialUrl: option?.href });
31
36
  this._window = windowBase;
32
- this._document = document;
37
+ this._document = windowBase.document;
33
38
  this.parseHTML(html);
34
39
  this.setupDocumentReferences();
35
- if (document && document.simulateLoading) {
36
- document.simulateLoading();
40
+ if (this._document && this._document.simulateLoading) {
41
+ this._document.simulateLoading();
37
42
  }
38
43
  }
39
44
  get window() {
45
+ if (!this._window) {
46
+ throw new Error("DomParser has been destroyed");
47
+ }
40
48
  return this._window;
41
49
  }
42
50
  get document() {
51
+ if (!this._document) {
52
+ throw new Error("DomParser has been destroyed");
53
+ }
43
54
  return this._document;
44
55
  }
56
+ /**
57
+ * Destroy the DomParser instance and free memory
58
+ */
59
+ destroy() {
60
+ if (this._window) {
61
+ this._window.close();
62
+ this._window = null;
63
+ }
64
+ this._document = null;
65
+ }
45
66
  /**
46
67
  * Load new HTML content and replace the current document
47
68
  */
48
69
  loadHTML(html) {
70
+ if (!this._document) {
71
+ throw new Error("DomParser has been destroyed");
72
+ }
49
73
  this.clearDocument();
50
74
  this.parseHTML(html);
51
75
  this.setupDocumentReferences();
52
76
  }
53
77
  clearDocument() {
54
- if (this.document.head) {
55
- while (this.document.head.firstChild) {
56
- this.document.head.removeChild(this.document.head.firstChild);
78
+ if (!this._document) return;
79
+ if (this._document.head) {
80
+ while (this._document.head.firstChild) {
81
+ this._document.head.removeChild(this._document.head.firstChild);
57
82
  }
58
83
  }
59
- if (this.document.body) {
60
- while (this.document.body.firstChild) {
61
- this.document.body.removeChild(this.document.body.firstChild);
84
+ if (this._document.body) {
85
+ while (this._document.body.firstChild) {
86
+ this._document.body.removeChild(this._document.body.firstChild);
62
87
  }
63
88
  }
64
89
  }
65
90
  parseHTML(html) {
91
+ if (!this._document) {
92
+ throw new Error("DomParser has been destroyed");
93
+ }
66
94
  if (!html.trim()) {
67
- return;
95
+ html = "<html><head></head><body></body></html>";
96
+ } else if (!/<html/i.test(html)) {
97
+ html = `<html><head></head><body>${html}</body></html>`;
68
98
  }
69
99
  this.parseHTMLString(html, this.document);
70
100
  }
@@ -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';\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window;\n private _document: Document;\n\n constructor(html: string, option?: DomParserOptions) {\n // Create a new document instance\n const document = new DocumentBase();\n\n // Create WindowBase instance with the document\n const windowBase = new WindowBase(document, option?.href);\n \n this._window = windowBase as unknown as Window;\n this._document = 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 (document && (document as any).simulateLoading) {\n (document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n return this._window;\n }\n\n get document(): Document {\n return this._document;\n }\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\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 // 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 // Simple HTML parsing implementation\n if (!html.trim()) {\n return;\n }\n\n // Basic HTML parsing - this is a simplified version\n // In a real implementation, you'd use a proper HTML parser\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\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n\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 \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\n \n // For now, just use the elements as they are parsed\n // TODO: Implement proper DOM structure reorganization later\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}"],
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 // 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
  }
@@ -25,8 +25,33 @@ class ElementFactory {
25
25
  /**
26
26
  * Creates an HTML element based on the tag name
27
27
  */
28
- static createElement(tagName, ownerDocument) {
28
+ static createElement(tagName, ownerDocument, options) {
29
29
  const normalizedTagName = tagName.toLowerCase();
30
+ const customElements = ownerDocument?.defaultView?.customElements;
31
+ const isAttribute = typeof options === "string" ? options : options?.is;
32
+ if (isAttribute && customElements && typeof customElements.get === "function") {
33
+ const CustomElementClass = customElements.get(isAttribute);
34
+ if (CustomElementClass) {
35
+ const element = new CustomElementClass();
36
+ element._tagName = tagName.toUpperCase();
37
+ element.nodeName = tagName.toUpperCase();
38
+ element._ownerDocument = ownerDocument;
39
+ if (element.setAttribute) {
40
+ element.setAttribute("is", isAttribute);
41
+ }
42
+ return element;
43
+ }
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;
53
+ }
54
+ }
30
55
  for (const [tag, ElementClass] of Object.entries(import_elements.htmlElements)) {
31
56
  if (tag === normalizedTagName) {
32
57
  return new ElementClass(tagName.toUpperCase(), ownerDocument);
@@ -66,11 +91,7 @@ class ElementFactory {
66
91
  * Get all supported tag names
67
92
  */
68
93
  static getSupportedTagNames() {
69
- return [
70
- ...ElementFactory.getSupportedHTMLTagNames(),
71
- ...ElementFactory.getSupportedSVGTagNames(),
72
- ...ElementFactory.getSupportedMathMLTagNames()
73
- ];
94
+ return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];
74
95
  }
75
96
  }
76
97
  //# sourceMappingURL=ElementFactory.js.map
@@ -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): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n \n // Check HTML elements\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 [\n ...ElementFactory.getSupportedHTMLTagNames(),\n ...ElementFactory.getSupportedSVGTagNames(),\n ...ElementFactory.getSupportedMathMLTagNames()\n ];\n }\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA+F;AAKxF,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAIxB,OAAO,cAAc,SAAiB,eAAsC;AACxE,UAAM,oBAAoB,QAAQ,YAAY;AAG9C,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,4BAAY,GAAG;AAC5D,UAAI,QAAQ,mBAAmB;AAC3B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAChE;AAAA,IACJ;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,2BAAW,GAAG;AAC3D,UAAI,QAAQ,mBAAmB;AAC3B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAChE;AAAA,IACJ;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,8BAAc,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC3B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAChE;AAAA,IACJ;AAGA,WAAO,IAAI,mCAAmB,QAAQ,YAAY,GAAG,aAAa;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AACxC,WAAO,OAAO,KAAK,4BAAY;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACvC,WAAO,OAAO,KAAK,2BAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC1C,WAAO,OAAO,KAAK,8BAAc;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACpC,WAAO;AAAA,MACH,GAAG,eAAe,yBAAyB;AAAA,MAC3C,GAAG,eAAe,wBAAwB;AAAA,MAC1C,GAAG,eAAe,2BAA2B;AAAA,IACjD;AAAA,EACJ;AACJ;",
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;",
6
6
  "names": []
7
7
  }
package/dist/cjs/index.js CHANGED
@@ -18,11 +18,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
18
18
  var src_exports = {};
19
19
  __export(src_exports, {
20
20
  DomParser: () => import_DomParser.DomParser,
21
+ NodeFilter: () => import_NodeFilter.NodeFilter,
22
+ NodeIterator: () => import_NodeIterator.NodeIterator,
21
23
  default: () => src_default,
22
24
  parseHTML: () => parseHTML
23
25
  });
24
26
  module.exports = __toCommonJS(src_exports);
25
27
  var import_DomParser = require("./DomParser");
28
+ var import_NodeIterator = require("./node/NodeIterator");
29
+ var import_NodeFilter = require("./node/NodeFilter");
26
30
  const parseHTML = (html, option) => {
27
31
  const parser = new import_DomParser.DomParser(html, option);
28
32
  return parser.window;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["import { DomParser, DomParserOptions } from \"./DomParser\";\n\n// Main exports - what users actually need\nexport { DomParser };\n\n// Utility function to parse HTML and return window object\nexport const parseHTML = (html: string, option?: DomParserOptions) => {\n const parser = new DomParser(html, option);\n return parser.window;\n}\n\n// Default export\nexport default {\n DomParser,\n parseHTML\n}\n\n// Internal exports (commented out - users don't need these)\n// export { WindowBase } from './window/WindowBase';\n// export { Window } from './window/Window';\n// export { Document } from \"./node/Document\";\n// export { NodeIterator, NodeFilter } from \"./node/NodeIterator\";\n// export * from \"./factory\";\n// export * from \"./node/elements\";\n// export { DocumentBase } from \"./node/DocumentBase\";\n// export * from \"./node/DocumentFragment\";\n// export { DocumentFragmentBase } from \"./node/DocumentFragmentBase\";\n// export * from \"./node/Node\";"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA4C;AAMrC,MAAM,YAAY,CAAC,MAAc,WAA8B;AAClE,QAAM,SAAS,IAAI,2BAAU,MAAM,MAAM;AACzC,SAAO,OAAO;AAClB;AAGA,IAAO,cAAQ;AAAA,EACX;AAAA,EACA;AACJ;",
4
+ "sourcesContent": ["import {DomParser, DomParserOptions} from './DomParser';\n\n// Main exports - what users actually need\nexport {DomParser};\nexport {NodeIterator} from './node/NodeIterator';\nexport {NodeFilter} from './node/NodeFilter'\n// Utility function to parse HTML and return window object\nexport const parseHTML = (html: string, option?: DomParserOptions) => {\n const parser = new DomParser(html, option);\n return parser.window;\n};\n\n// Default export\nexport default {\n DomParser,\n parseHTML\n};\n\n// Internal exports (commented out - users don't need these)\n// export { WindowBase } from './window/WindowBase';\n// export { Window } from './window/Window';\n// export { Document } from \"./node/Document\";\n// export { NodeIterator, NodeFilter } from \"./node/NodeIterator\";\n// export * from \"./factory\";\n// export * from \"./node/elements\";\n// export { DocumentBase } from \"./node/DocumentBase\";\n// export * from \"./node/DocumentFragment\";\n// export { DocumentFragmentBase } from \"./node/DocumentFragmentBase\";\n// export * from \"./node/Node\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA0C;AAI1C,0BAA2B;AAC3B,wBAAyB;AAElB,MAAM,YAAY,CAAC,MAAc,WAA8B;AACpE,QAAM,SAAS,IAAI,2BAAU,MAAM,MAAM;AACzC,SAAO,OAAO;AAChB;AAGA,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/node/CharacterData.ts"],
4
- "sourcesContent": ["import { Node } from './Node';\nimport { ChildNode } from './ChildNode';\n\n/**\n * The **`CharacterData`** abstract interface represents a Node object that contains characters.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData)\n */\nexport interface CharacterData extends Node, ChildNode {\n /**\n * The **`CharacterData.data`** property represents the textual data contained in this object.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/data)\n */\n data: string;\n \n /**\n * The **`CharacterData.length`** read-only property returns the number of characters in the contained data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/length)\n */\n readonly length: number;\n \n /**\n * The **`CharacterData.appendData()`** method appends the given string to the CharacterData.data string.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/appendData)\n */\n appendData(data: string): void;\n \n /**\n * The **`CharacterData.deleteData()`** method removes the specified amount of characters.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/deleteData)\n */\n deleteData(offset: number, count: number): void;\n \n /**\n * The **`CharacterData.insertData()`** method inserts the provided data into this CharacterData node's current data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/insertData)\n */\n insertData(offset: number, data: string): void;\n \n /**\n * The **`CharacterData.replaceData()`** method replaces a portion of the existing data with the specified data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/replaceData)\n */\n replaceData(offset: number, count: number, data: string): void;\n \n /**\n * The **`CharacterData.substringData()`** method returns a portion of the existing data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/substringData)\n */\n substringData(offset: number, count: number): string;\n}"],
4
+ "sourcesContent": ["\n/**\n * The **`CharacterData`** abstract interface represents a Node object that contains characters.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData)\n */\nexport interface CharacterData extends Node, ChildNode {\n /**\n * The **`CharacterData.data`** property represents the textual data contained in this object.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/data)\n */\n data: string;\n \n /**\n * The **`CharacterData.length`** read-only property returns the number of characters in the contained data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/length)\n */\n readonly length: number;\n \n /**\n * The **`CharacterData.appendData()`** method appends the given string to the CharacterData.data string.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/appendData)\n */\n appendData(data: string): void;\n \n /**\n * The **`CharacterData.deleteData()`** method removes the specified amount of characters.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/deleteData)\n */\n deleteData(offset: number, count: number): void;\n \n /**\n * The **`CharacterData.insertData()`** method inserts the provided data into this CharacterData node's current data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/insertData)\n */\n insertData(offset: number, data: string): void;\n \n /**\n * The **`CharacterData.replaceData()`** method replaces a portion of the existing data with the specified data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/replaceData)\n */\n replaceData(offset: number, count: number, data: string): void;\n \n /**\n * The **`CharacterData.substringData()`** method returns a portion of the existing data.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/substringData)\n */\n substringData(offset: number, count: number): string;\n}"],
5
5
  "mappings": ";;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,16 +1 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from === "object" || typeof from === "function") {
7
- for (let key of __getOwnPropNames(from))
8
- if (!__hasOwnProp.call(to, key) && key !== except)
9
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
- }
11
- return to;
12
- };
13
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
- var ChildNode_exports = {};
15
- module.exports = __toCommonJS(ChildNode_exports);
16
1
  //# sourceMappingURL=ChildNode.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/node/ChildNode.ts"],
4
- "sourcesContent": ["import { Node } from './Node';\n\n/**\n * The **`ChildNode`** interface contains methods and properties that are common to all types of Node objects that can have a parent.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ChildNode)\n */\nexport interface ChildNode extends Node {\n /**\n * Inserts nodes just after node, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/after)\n */\n after(...nodes: (Node | string)[]): void;\n\n /**\n * Inserts nodes just before node, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/before)\n */\n before(...nodes: (Node | string)[]): void;\n\n /**\n * Removes node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/remove)\n */\n remove(): void;\n\n /**\n * Replaces node with nodes, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/replaceWith)\n */\n replaceWith(...nodes: (Node | string)[]): void;\n}"],
5
- "mappings": ";;;;;;;;;;;;;AAAA;AAAA;",
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
6
  "names": []
7
7
  }
@@ -20,8 +20,28 @@ __export(ChildNodeBase_exports, {
20
20
  ChildNodeBase: () => ChildNodeBase
21
21
  });
22
22
  module.exports = __toCommonJS(ChildNodeBase_exports);
23
+ var import_Node = require("./Node");
23
24
  var import_NodeBase = require("./NodeBase");
24
25
  class ChildNodeBase extends import_NodeBase.NodeBase {
26
+ get nextElementSibling() {
27
+ let next = this.nextSibling;
28
+ while (next) {
29
+ if (next.nodeType === import_Node.ELEMENT_NODE) return next;
30
+ next = next.nextSibling;
31
+ }
32
+ return null;
33
+ }
34
+ get previousElementSibling() {
35
+ let prev = this.previousSibling;
36
+ while (prev) {
37
+ if (prev.nodeType === import_Node.ELEMENT_NODE) return prev;
38
+ prev = prev.previousSibling;
39
+ }
40
+ return null;
41
+ }
42
+ get assignedSlot() {
43
+ return null;
44
+ }
25
45
  // ChildNode interface implementation
26
46
  after(...nodes) {
27
47
  if (!this.parentNode) return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/node/ChildNodeBase.ts"],
4
- "sourcesContent": ["import { NodeBase } from './NodeBase';\nimport { ChildNode } from './ChildNode';\n// import {Text} from \"./Text\";\n\n/**\n * Base implementation of the ChildNode interface\n */\nexport abstract class ChildNodeBase extends NodeBase implements ChildNode {\n \n // ChildNode interface implementation\n after(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n const nextSibling = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, nextSibling);\n } else {\n this.parentNode.insertBefore(node, nextSibling);\n }\n }\n }\n\n before(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, this);\n } else {\n this.parentNode.insertBefore(node, this);\n }\n }\n }\n\n remove(): void {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n }\n\n replaceWith(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n this.before(...nodes);\n this.remove();\n }\n}\n\n// TextNode is now in a separate file"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AAOlB,MAAe,sBAAsB,yBAA8B;AAAA;AAAA,EAGtE,SAAS,OAAoC;AACzC,QAAI,CAAC,KAAK,WAAY;AAEtB,UAAM,cAAc,KAAK;AACzB,eAAW,QAAQ,OAAO;AACtB,UAAI,OAAO,SAAS,UAAU;AAC1B,cAAM,EAAE,SAAS,IAAI,QAAQ,YAAY;AACzC,cAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,aAAK,WAAW,aAAa,UAAU,WAAW;AAAA,MACtD,OAAO;AACH,aAAK,WAAW,aAAa,MAAM,WAAW;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,UAAU,OAAoC;AAC1C,QAAI,CAAC,KAAK,WAAY;AAEtB,eAAW,QAAQ,OAAO;AACtB,UAAI,OAAO,SAAS,UAAU;AAC1B,cAAM,EAAE,SAAS,IAAI,QAAQ,YAAY;AACzC,cAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,aAAK,WAAW,aAAa,UAAU,IAAI;AAAA,MAC/C,OAAO;AACH,aAAK,WAAW,aAAa,MAAM,IAAI;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,SAAe;AACX,QAAI,KAAK,YAAY;AACjB,WAAK,WAAW,YAAY,IAAI;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,eAAe,OAAoC;AAC/C,QAAI,CAAC,KAAK,WAAY;AAEtB,SAAK,OAAO,GAAG,KAAK;AACpB,SAAK,OAAO;AAAA,EAChB;AACJ;",
4
+ "sourcesContent": ["import { ELEMENT_NODE } from './Node';\nimport { NodeBase } from './NodeBase';\n\n/**\n * Base implementation of the ChildNode interface\n */\n// @ts-ignore\nexport abstract class ChildNodeBase extends NodeBase implements ChildNode {\n get nextElementSibling(): Element | null {\n let next = this.nextSibling;\n while (next) {\n if (next.nodeType === ELEMENT_NODE) return next as unknown as Element;\n next = next.nextSibling;\n }\n return null;\n }\n\n get previousElementSibling(): Element | null {\n let prev = this.previousSibling;\n while (prev) {\n if (prev.nodeType === ELEMENT_NODE) return prev as unknown as Element;\n prev = prev.previousSibling;\n }\n return null;\n }\n\n get assignedSlot(): any | null {\n return null;\n }\n\n // ChildNode interface implementation\n after(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n const nextSibling = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, nextSibling);\n } else {\n this.parentNode.insertBefore(node, nextSibling);\n }\n }\n }\n\n before(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, this as unknown as Node);\n } else {\n this.parentNode.insertBefore(node, this as unknown as Node);\n }\n }\n }\n\n remove(): void {\n if (this.parentNode) {\n this.parentNode.removeChild(this as unknown as Node);\n }\n }\n\n replaceWith(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n this.before(...nodes);\n this.remove();\n }\n}\n\n// TextNode is now in a separate file\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAC7B,sBAAyB;AAMlB,MAAe,sBAAsB,yBAA8B;AAAA,EACxE,IAAI,qBAAqC;AACvC,QAAI,OAAO,KAAK;AAChB,WAAO,MAAM;AACX,UAAI,KAAK,aAAa,yBAAc,QAAO;AAC3C,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,yBAAyC;AAC3C,QAAI,OAAO,KAAK;AAChB,WAAO,MAAM;AACX,UAAI,KAAK,aAAa,yBAAc,QAAO;AAC3C,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,eAA2B;AAC7B,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,OAAgC;AACvC,QAAI,CAAC,KAAK,WAAY;AAEtB,UAAM,cAAc,KAAK;AACzB,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,EAAE,SAAS,IAAI,QAAQ,YAAY;AACzC,cAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,aAAK,WAAW,aAAa,UAAU,WAAW;AAAA,MACpD,OAAO;AACL,aAAK,WAAW,aAAa,MAAM,WAAW;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,OAAgC;AACxC,QAAI,CAAC,KAAK,WAAY;AAEtB,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,EAAE,SAAS,IAAI,QAAQ,YAAY;AACzC,cAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,aAAK,WAAW,aAAa,UAAU,IAAuB;AAAA,MAChE,OAAO;AACL,aAAK,WAAW,aAAa,MAAM,IAAuB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAe;AACb,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,YAAY,IAAuB;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,eAAe,OAAgC;AAC7C,QAAI,CAAC,KAAK,WAAY;AAEtB,SAAK,OAAO,GAAG,KAAK;AACpB,SAAK,OAAO;AAAA,EACd;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/node/Comment.ts"],
4
- "sourcesContent": ["import { ChildNodeBase } from './ChildNodeBase';\nimport { COMMENT_NODE } from './Node';\n\n/**\n * The **`Comment`** interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Comment)\n */\n// export interface Comment {\n// readonly nodeType: typeof COMMENT_NODE;\n// readonly nodeName: '#comment';\n// data: string;\n// readonly length: number;\n// appendData(data: string): void;\n// deleteData(offset: number, count: number): void;\n// insertData(offset: number, data: string): void;\n// replaceData(offset: number, count: number, data: string): void;\n// substringData(offset: number, count: number): string;\n// }\n\n/**\n * The **`CommentNode`** class represents a comment node in the DOM.\n */\nexport class Comment extends ChildNodeBase {\n private _data: string;\n\n constructor(data: string, ownerDocument?: any) {\n super(COMMENT_NODE, '#comment', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n return this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n cloneNode(deep?: boolean): Comment {\n return new Comment(this._data, this._ownerDocument);\n }\n\n toString(): string {\n return `<!--${this._data}-->`;\n }\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA8B;AAC9B,kBAA6B;AAsBtB,MAAM,gBAAgB,mCAAe;AAAA,EAGxC,YAAY,MAAc,eAAqB;AAC3C,UAAM,0BAAc,YAAY,aAAa;AAC7C,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK,OAAe;AACpB,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,SAAiB;AACjB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,cAA6B;AAC7B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY,OAAsB;AAClC,SAAK,QAAQ,SAAS;AACtB,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA;AAAA,EAGA,WAAW,MAAoB;AAC3B,SAAK,SAAS;AACd,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,WAAW,QAAgB,OAAqB;AAC5C,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC1C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,SAAS;AACrE,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,WAAW,QAAgB,MAAoB;AAC3C,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC1C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,KAAK,MAAM,MAAM,MAAM;AACzE,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,YAAY,QAAgB,OAAe,MAAoB;AAC3D,SAAK,WAAW,QAAQ,KAAK;AAC7B,SAAK,WAAW,QAAQ,IAAI;AAAA,EAChC;AAAA,EAEA,cAAc,QAAgB,OAAuB;AACjD,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC1C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,WAAO,KAAK,MAAM,MAAM,QAAQ,SAAS;AAAA,EAC7C;AAAA,EAEA,UAAU,MAAyB;AAC/B,WAAO,IAAI,QAAQ,KAAK,OAAO,KAAK,cAAc;AAAA,EACtD;AAAA,EAEA,WAAmB;AACf,WAAO,OAAO,KAAK,KAAK;AAAA,EAC5B;AACJ;",
4
+ "sourcesContent": ["import { ChildNodeBase } from './ChildNodeBase';\nimport { COMMENT_NODE } from './Node';\n\n/**\n * The **`Comment`** interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Comment)\n */\n// export interface Comment {\n// readonly nodeType: typeof COMMENT_NODE;\n// readonly nodeName: '#comment';\n// data: string;\n// readonly length: number;\n// appendData(data: string): void;\n// deleteData(offset: number, count: number): void;\n// insertData(offset: number, data: string): void;\n// replaceData(offset: number, count: number, data: string): void;\n// substringData(offset: number, count: number): string;\n// }\n\n/**\n * The **`CommentNode`** class represents a comment node in the DOM.\n */\nexport class Comment extends ChildNodeBase {\n private _data: string;\n\n constructor(data: string, ownerDocument?: any) {\n super(COMMENT_NODE, '#comment', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n return this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n cloneNode(deep?: boolean): Node {\n return new Comment(this._data, this._ownerDocument) as unknown as Node;\n }\n\n toString(): string {\n return `<!--${this._data}-->`;\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA8B;AAC9B,kBAA6B;AAsBtB,MAAM,gBAAgB,mCAAc;AAAA,EAGzC,YAAY,MAAc,eAAqB;AAC7C,UAAM,0BAAc,YAAY,aAAa;AAC7C,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,cAA6B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY,OAAsB;AACpC,SAAK,QAAQ,SAAS;AACtB,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA;AAAA,EAGA,WAAW,MAAoB;AAC7B,SAAK,SAAS;AACd,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA,EAEA,WAAW,QAAgB,OAAqB;AAC9C,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AACA,UAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,SAAS;AACrE,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA,EAEA,WAAW,QAAgB,MAAoB;AAC7C,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AACA,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,KAAK,MAAM,MAAM,MAAM;AACzE,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA,EAEA,YAAY,QAAgB,OAAe,MAAoB;AAC7D,SAAK,WAAW,QAAQ,KAAK;AAC7B,SAAK,WAAW,QAAQ,IAAI;AAAA,EAC9B;AAAA,EAEA,cAAc,QAAgB,OAAuB;AACnD,QAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AACA,UAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,WAAO,KAAK,MAAM,MAAM,QAAQ,SAAS;AAAA,EAC3C;AAAA,EAEA,UAAU,MAAsB;AAC9B,WAAO,IAAI,QAAQ,KAAK,OAAO,KAAK,cAAc;AAAA,EACpD;AAAA,EAEA,WAAmB;AACjB,WAAO,OAAO,KAAK,KAAK;AAAA,EAC1B;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,28 +1 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var Document_exports = {};
19
- __export(Document_exports, {
20
- Comment: () => import_Comment2.Comment,
21
- DocumentFragment: () => import_DocumentFragment2.DocumentFragment,
22
- Text: () => import_Text2.Text
23
- });
24
- module.exports = __toCommonJS(Document_exports);
25
- var import_Text2 = require("./Text");
26
- var import_Comment2 = require("./Comment");
27
- var import_DocumentFragment2 = require("./DocumentFragment");
28
1
  //# sourceMappingURL=Document.js.map