@dooboostore/dom-parser 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. package/README.MD +280 -0
  2. package/dist/cjs/DomParser.js +360 -0
  3. package/dist/cjs/DomParser.js.map +7 -0
  4. package/dist/cjs/factory/ElementFactory.js +76 -0
  5. package/dist/cjs/factory/ElementFactory.js.map +7 -0
  6. package/dist/cjs/factory/index.js +24 -0
  7. package/dist/cjs/factory/index.js.map +7 -0
  8. package/dist/cjs/index.js +34 -0
  9. package/dist/cjs/index.js.map +7 -0
  10. package/dist/cjs/node/CharacterData.js +16 -0
  11. package/dist/cjs/node/CharacterData.js.map +7 -0
  12. package/dist/cjs/node/ChildNode.js +16 -0
  13. package/dist/cjs/node/ChildNode.js.map +7 -0
  14. package/dist/cjs/node/ChildNodeBase.js +62 -0
  15. package/dist/cjs/node/ChildNodeBase.js.map +7 -0
  16. package/dist/cjs/node/Comment.js +86 -0
  17. package/dist/cjs/node/Comment.js.map +7 -0
  18. package/dist/cjs/node/Document.js +28 -0
  19. package/dist/cjs/node/Document.js.map +7 -0
  20. package/dist/cjs/node/DocumentBase.js +378 -0
  21. package/dist/cjs/node/DocumentBase.js.map +7 -0
  22. package/dist/cjs/node/DocumentFragment.js +16 -0
  23. package/dist/cjs/node/DocumentFragment.js.map +7 -0
  24. package/dist/cjs/node/DocumentFragmentBase.js +88 -0
  25. package/dist/cjs/node/DocumentFragmentBase.js.map +7 -0
  26. package/dist/cjs/node/GetRootNodeOptions.js +16 -0
  27. package/dist/cjs/node/GetRootNodeOptions.js.map +7 -0
  28. package/dist/cjs/node/Node.js +58 -0
  29. package/dist/cjs/node/Node.js.map +7 -0
  30. package/dist/cjs/node/NodeBase.js +380 -0
  31. package/dist/cjs/node/NodeBase.js.map +7 -0
  32. package/dist/cjs/node/NodeIterator.js +163 -0
  33. package/dist/cjs/node/NodeIterator.js.map +7 -0
  34. package/dist/cjs/node/ParentNode.js +16 -0
  35. package/dist/cjs/node/ParentNode.js.map +7 -0
  36. package/dist/cjs/node/ParentNodeBase.js +134 -0
  37. package/dist/cjs/node/ParentNodeBase.js.map +7 -0
  38. package/dist/cjs/node/Text.js +16 -0
  39. package/dist/cjs/node/Text.js.map +7 -0
  40. package/dist/cjs/node/TextBase.js +106 -0
  41. package/dist/cjs/node/TextBase.js.map +7 -0
  42. package/dist/cjs/node/collection/HTMLCollection.js +105 -0
  43. package/dist/cjs/node/collection/HTMLCollection.js.map +7 -0
  44. package/dist/cjs/node/collection/HTMLCollectionOf.js +36 -0
  45. package/dist/cjs/node/collection/HTMLCollectionOf.js.map +7 -0
  46. package/dist/cjs/node/collection/NodeList.js +135 -0
  47. package/dist/cjs/node/collection/NodeList.js.map +7 -0
  48. package/dist/cjs/node/collection/NodeListOf.js +38 -0
  49. package/dist/cjs/node/collection/NodeListOf.js.map +7 -0
  50. package/dist/cjs/node/collection/index.js +30 -0
  51. package/dist/cjs/node/collection/index.js.map +7 -0
  52. package/dist/cjs/node/elements/Element.js +16 -0
  53. package/dist/cjs/node/elements/Element.js.map +7 -0
  54. package/dist/cjs/node/elements/ElementBase.js +936 -0
  55. package/dist/cjs/node/elements/ElementBase.js.map +7 -0
  56. package/dist/cjs/node/elements/HTMLAnchorElement.js +71 -0
  57. package/dist/cjs/node/elements/HTMLAnchorElement.js.map +7 -0
  58. package/dist/cjs/node/elements/HTMLAreaElement.js +77 -0
  59. package/dist/cjs/node/elements/HTMLAreaElement.js.map +7 -0
  60. package/dist/cjs/node/elements/HTMLBaseElement.js +77 -0
  61. package/dist/cjs/node/elements/HTMLBaseElement.js.map +7 -0
  62. package/dist/cjs/node/elements/HTMLBodyElement.js +29 -0
  63. package/dist/cjs/node/elements/HTMLBodyElement.js.map +7 -0
  64. package/dist/cjs/node/elements/HTMLButtonElement.js +89 -0
  65. package/dist/cjs/node/elements/HTMLButtonElement.js.map +7 -0
  66. package/dist/cjs/node/elements/HTMLCanvasElement.js +79 -0
  67. package/dist/cjs/node/elements/HTMLCanvasElement.js.map +7 -0
  68. package/dist/cjs/node/elements/HTMLCaptionElement.js +41 -0
  69. package/dist/cjs/node/elements/HTMLCaptionElement.js.map +7 -0
  70. package/dist/cjs/node/elements/HTMLDivElement.js +29 -0
  71. package/dist/cjs/node/elements/HTMLDivElement.js.map +7 -0
  72. package/dist/cjs/node/elements/HTMLElement.js +16 -0
  73. package/dist/cjs/node/elements/HTMLElement.js.map +7 -0
  74. package/dist/cjs/node/elements/HTMLElementBase.js +182 -0
  75. package/dist/cjs/node/elements/HTMLElementBase.js.map +7 -0
  76. package/dist/cjs/node/elements/HTMLEmbedElement.js +45 -0
  77. package/dist/cjs/node/elements/HTMLEmbedElement.js.map +7 -0
  78. package/dist/cjs/node/elements/HTMLFormElement.js +127 -0
  79. package/dist/cjs/node/elements/HTMLFormElement.js.map +7 -0
  80. package/dist/cjs/node/elements/HTMLGenericElement.js +32 -0
  81. package/dist/cjs/node/elements/HTMLGenericElement.js.map +7 -0
  82. package/dist/cjs/node/elements/HTMLH1Element.js +29 -0
  83. package/dist/cjs/node/elements/HTMLH1Element.js.map +7 -0
  84. package/dist/cjs/node/elements/HTMLHeadElement.js +29 -0
  85. package/dist/cjs/node/elements/HTMLHeadElement.js.map +7 -0
  86. package/dist/cjs/node/elements/HTMLHtmlElement.js +92 -0
  87. package/dist/cjs/node/elements/HTMLHtmlElement.js.map +7 -0
  88. package/dist/cjs/node/elements/HTMLImgElement.js +99 -0
  89. package/dist/cjs/node/elements/HTMLImgElement.js.map +7 -0
  90. package/dist/cjs/node/elements/HTMLInputElement.js +157 -0
  91. package/dist/cjs/node/elements/HTMLInputElement.js.map +7 -0
  92. package/dist/cjs/node/elements/HTMLLIElement.js +57 -0
  93. package/dist/cjs/node/elements/HTMLLIElement.js.map +7 -0
  94. package/dist/cjs/node/elements/HTMLLinkElement.js +99 -0
  95. package/dist/cjs/node/elements/HTMLLinkElement.js.map +7 -0
  96. package/dist/cjs/node/elements/HTMLMetaElement.js +29 -0
  97. package/dist/cjs/node/elements/HTMLMetaElement.js.map +7 -0
  98. package/dist/cjs/node/elements/HTMLOListElement.js +89 -0
  99. package/dist/cjs/node/elements/HTMLOListElement.js.map +7 -0
  100. package/dist/cjs/node/elements/HTMLPElement.js +29 -0
  101. package/dist/cjs/node/elements/HTMLPElement.js.map +7 -0
  102. package/dist/cjs/node/elements/HTMLScriptElement.js +127 -0
  103. package/dist/cjs/node/elements/HTMLScriptElement.js.map +7 -0
  104. package/dist/cjs/node/elements/HTMLSpanElement.js +29 -0
  105. package/dist/cjs/node/elements/HTMLSpanElement.js.map +7 -0
  106. package/dist/cjs/node/elements/HTMLStyleElement.js +71 -0
  107. package/dist/cjs/node/elements/HTMLStyleElement.js.map +7 -0
  108. package/dist/cjs/node/elements/HTMLTableElement.js +112 -0
  109. package/dist/cjs/node/elements/HTMLTableElement.js.map +7 -0
  110. package/dist/cjs/node/elements/HTMLTbodyElement.js +54 -0
  111. package/dist/cjs/node/elements/HTMLTbodyElement.js.map +7 -0
  112. package/dist/cjs/node/elements/HTMLTdElement.js +72 -0
  113. package/dist/cjs/node/elements/HTMLTdElement.js.map +7 -0
  114. package/dist/cjs/node/elements/HTMLTemplateElement.js +97 -0
  115. package/dist/cjs/node/elements/HTMLTemplateElement.js.map +7 -0
  116. package/dist/cjs/node/elements/HTMLTfootElement.js +56 -0
  117. package/dist/cjs/node/elements/HTMLTfootElement.js.map +7 -0
  118. package/dist/cjs/node/elements/HTMLThElement.js +72 -0
  119. package/dist/cjs/node/elements/HTMLThElement.js.map +7 -0
  120. package/dist/cjs/node/elements/HTMLTheadElement.js +54 -0
  121. package/dist/cjs/node/elements/HTMLTheadElement.js.map +7 -0
  122. package/dist/cjs/node/elements/HTMLTitleElement.js +38 -0
  123. package/dist/cjs/node/elements/HTMLTitleElement.js.map +7 -0
  124. package/dist/cjs/node/elements/HTMLTrElement.js +77 -0
  125. package/dist/cjs/node/elements/HTMLTrElement.js.map +7 -0
  126. package/dist/cjs/node/elements/HTMLUListElement.js +29 -0
  127. package/dist/cjs/node/elements/HTMLUListElement.js.map +7 -0
  128. package/dist/cjs/node/elements/MathMLElement.js +32 -0
  129. package/dist/cjs/node/elements/MathMLElement.js.map +7 -0
  130. package/dist/cjs/node/elements/SVGCircleElement.js +69 -0
  131. package/dist/cjs/node/elements/SVGCircleElement.js.map +7 -0
  132. package/dist/cjs/node/elements/SVGElement.js +32 -0
  133. package/dist/cjs/node/elements/SVGElement.js.map +7 -0
  134. package/dist/cjs/node/elements/SVGRectElement.js +80 -0
  135. package/dist/cjs/node/elements/SVGRectElement.js.map +7 -0
  136. package/dist/cjs/node/elements/index.js +183 -0
  137. package/dist/cjs/node/elements/index.js.map +7 -0
  138. package/dist/cjs/node/index.js +73 -0
  139. package/dist/cjs/node/index.js.map +7 -0
  140. package/dist/cjs/package.json +5 -0
  141. package/dist/cjs/utils/CSSSelector.js +271 -0
  142. package/dist/cjs/utils/CSSSelector.js.map +7 -0
  143. package/dist/cjs/window/Window.js +16 -0
  144. package/dist/cjs/window/Window.js.map +7 -0
  145. package/dist/cjs/window/WindowBase.js +847 -0
  146. package/dist/cjs/window/WindowBase.js.map +7 -0
  147. package/dist/cjs/window/index.js +29 -0
  148. package/dist/cjs/window/index.js.map +7 -0
  149. package/dist/esm/DomParser.js +341 -0
  150. package/dist/esm/DomParser.js.map +7 -0
  151. package/dist/esm/factory/ElementFactory.js +57 -0
  152. package/dist/esm/factory/ElementFactory.js.map +7 -0
  153. package/dist/esm/factory/index.js +5 -0
  154. package/dist/esm/factory/index.js.map +7 -0
  155. package/dist/esm/index.js +15 -0
  156. package/dist/esm/index.js.map +7 -0
  157. package/dist/esm/node/CharacterData.js +1 -0
  158. package/dist/esm/node/CharacterData.js.map +7 -0
  159. package/dist/esm/node/ChildNode.js +1 -0
  160. package/dist/esm/node/ChildNode.js.map +7 -0
  161. package/dist/esm/node/ChildNodeBase.js +43 -0
  162. package/dist/esm/node/ChildNodeBase.js.map +7 -0
  163. package/dist/esm/node/Comment.js +67 -0
  164. package/dist/esm/node/Comment.js.map +7 -0
  165. package/dist/esm/node/Document.js +9 -0
  166. package/dist/esm/node/Document.js.map +7 -0
  167. package/dist/esm/node/DocumentBase.js +359 -0
  168. package/dist/esm/node/DocumentBase.js.map +7 -0
  169. package/dist/esm/node/DocumentFragment.js +1 -0
  170. package/dist/esm/node/DocumentFragment.js.map +7 -0
  171. package/dist/esm/node/DocumentFragmentBase.js +69 -0
  172. package/dist/esm/node/DocumentFragmentBase.js.map +7 -0
  173. package/dist/esm/node/GetRootNodeOptions.js +1 -0
  174. package/dist/esm/node/GetRootNodeOptions.js.map +7 -0
  175. package/dist/esm/node/Node.js +39 -0
  176. package/dist/esm/node/Node.js.map +7 -0
  177. package/dist/esm/node/NodeBase.js +380 -0
  178. package/dist/esm/node/NodeBase.js.map +7 -0
  179. package/dist/esm/node/NodeIterator.js +144 -0
  180. package/dist/esm/node/NodeIterator.js.map +7 -0
  181. package/dist/esm/node/ParentNode.js +1 -0
  182. package/dist/esm/node/ParentNode.js.map +7 -0
  183. package/dist/esm/node/ParentNodeBase.js +115 -0
  184. package/dist/esm/node/ParentNodeBase.js.map +7 -0
  185. package/dist/esm/node/Text.js +1 -0
  186. package/dist/esm/node/Text.js.map +7 -0
  187. package/dist/esm/node/TextBase.js +87 -0
  188. package/dist/esm/node/TextBase.js.map +7 -0
  189. package/dist/esm/node/collection/HTMLCollection.js +86 -0
  190. package/dist/esm/node/collection/HTMLCollection.js.map +7 -0
  191. package/dist/esm/node/collection/HTMLCollectionOf.js +17 -0
  192. package/dist/esm/node/collection/HTMLCollectionOf.js.map +7 -0
  193. package/dist/esm/node/collection/NodeList.js +116 -0
  194. package/dist/esm/node/collection/NodeList.js.map +7 -0
  195. package/dist/esm/node/collection/NodeListOf.js +19 -0
  196. package/dist/esm/node/collection/NodeListOf.js.map +7 -0
  197. package/dist/esm/node/collection/index.js +11 -0
  198. package/dist/esm/node/collection/index.js.map +7 -0
  199. package/dist/esm/node/elements/Element.js +1 -0
  200. package/dist/esm/node/elements/Element.js.map +7 -0
  201. package/dist/esm/node/elements/ElementBase.js +917 -0
  202. package/dist/esm/node/elements/ElementBase.js.map +7 -0
  203. package/dist/esm/node/elements/HTMLAnchorElement.js +52 -0
  204. package/dist/esm/node/elements/HTMLAnchorElement.js.map +7 -0
  205. package/dist/esm/node/elements/HTMLAreaElement.js +58 -0
  206. package/dist/esm/node/elements/HTMLAreaElement.js.map +7 -0
  207. package/dist/esm/node/elements/HTMLBaseElement.js +58 -0
  208. package/dist/esm/node/elements/HTMLBaseElement.js.map +7 -0
  209. package/dist/esm/node/elements/HTMLBodyElement.js +10 -0
  210. package/dist/esm/node/elements/HTMLBodyElement.js.map +7 -0
  211. package/dist/esm/node/elements/HTMLButtonElement.js +70 -0
  212. package/dist/esm/node/elements/HTMLButtonElement.js.map +7 -0
  213. package/dist/esm/node/elements/HTMLCanvasElement.js +60 -0
  214. package/dist/esm/node/elements/HTMLCanvasElement.js.map +7 -0
  215. package/dist/esm/node/elements/HTMLCaptionElement.js +22 -0
  216. package/dist/esm/node/elements/HTMLCaptionElement.js.map +7 -0
  217. package/dist/esm/node/elements/HTMLDivElement.js +10 -0
  218. package/dist/esm/node/elements/HTMLDivElement.js.map +7 -0
  219. package/dist/esm/node/elements/HTMLElement.js +1 -0
  220. package/dist/esm/node/elements/HTMLElement.js.map +7 -0
  221. package/dist/esm/node/elements/HTMLElementBase.js +163 -0
  222. package/dist/esm/node/elements/HTMLElementBase.js.map +7 -0
  223. package/dist/esm/node/elements/HTMLEmbedElement.js +26 -0
  224. package/dist/esm/node/elements/HTMLEmbedElement.js.map +7 -0
  225. package/dist/esm/node/elements/HTMLFormElement.js +108 -0
  226. package/dist/esm/node/elements/HTMLFormElement.js.map +7 -0
  227. package/dist/esm/node/elements/HTMLGenericElement.js +13 -0
  228. package/dist/esm/node/elements/HTMLGenericElement.js.map +7 -0
  229. package/dist/esm/node/elements/HTMLH1Element.js +10 -0
  230. package/dist/esm/node/elements/HTMLH1Element.js.map +7 -0
  231. package/dist/esm/node/elements/HTMLHeadElement.js +10 -0
  232. package/dist/esm/node/elements/HTMLHeadElement.js.map +7 -0
  233. package/dist/esm/node/elements/HTMLHtmlElement.js +73 -0
  234. package/dist/esm/node/elements/HTMLHtmlElement.js.map +7 -0
  235. package/dist/esm/node/elements/HTMLImgElement.js +80 -0
  236. package/dist/esm/node/elements/HTMLImgElement.js.map +7 -0
  237. package/dist/esm/node/elements/HTMLInputElement.js +138 -0
  238. package/dist/esm/node/elements/HTMLInputElement.js.map +7 -0
  239. package/dist/esm/node/elements/HTMLLIElement.js +38 -0
  240. package/dist/esm/node/elements/HTMLLIElement.js.map +7 -0
  241. package/dist/esm/node/elements/HTMLLinkElement.js +80 -0
  242. package/dist/esm/node/elements/HTMLLinkElement.js.map +7 -0
  243. package/dist/esm/node/elements/HTMLMetaElement.js +10 -0
  244. package/dist/esm/node/elements/HTMLMetaElement.js.map +7 -0
  245. package/dist/esm/node/elements/HTMLOListElement.js +70 -0
  246. package/dist/esm/node/elements/HTMLOListElement.js.map +7 -0
  247. package/dist/esm/node/elements/HTMLPElement.js +10 -0
  248. package/dist/esm/node/elements/HTMLPElement.js.map +7 -0
  249. package/dist/esm/node/elements/HTMLScriptElement.js +108 -0
  250. package/dist/esm/node/elements/HTMLScriptElement.js.map +7 -0
  251. package/dist/esm/node/elements/HTMLSpanElement.js +10 -0
  252. package/dist/esm/node/elements/HTMLSpanElement.js.map +7 -0
  253. package/dist/esm/node/elements/HTMLStyleElement.js +52 -0
  254. package/dist/esm/node/elements/HTMLStyleElement.js.map +7 -0
  255. package/dist/esm/node/elements/HTMLTableElement.js +93 -0
  256. package/dist/esm/node/elements/HTMLTableElement.js.map +7 -0
  257. package/dist/esm/node/elements/HTMLTbodyElement.js +35 -0
  258. package/dist/esm/node/elements/HTMLTbodyElement.js.map +7 -0
  259. package/dist/esm/node/elements/HTMLTdElement.js +53 -0
  260. package/dist/esm/node/elements/HTMLTdElement.js.map +7 -0
  261. package/dist/esm/node/elements/HTMLTemplateElement.js +78 -0
  262. package/dist/esm/node/elements/HTMLTemplateElement.js.map +7 -0
  263. package/dist/esm/node/elements/HTMLTfootElement.js +37 -0
  264. package/dist/esm/node/elements/HTMLTfootElement.js.map +7 -0
  265. package/dist/esm/node/elements/HTMLThElement.js +53 -0
  266. package/dist/esm/node/elements/HTMLThElement.js.map +7 -0
  267. package/dist/esm/node/elements/HTMLTheadElement.js +35 -0
  268. package/dist/esm/node/elements/HTMLTheadElement.js.map +7 -0
  269. package/dist/esm/node/elements/HTMLTitleElement.js +19 -0
  270. package/dist/esm/node/elements/HTMLTitleElement.js.map +7 -0
  271. package/dist/esm/node/elements/HTMLTrElement.js +58 -0
  272. package/dist/esm/node/elements/HTMLTrElement.js.map +7 -0
  273. package/dist/esm/node/elements/HTMLUListElement.js +10 -0
  274. package/dist/esm/node/elements/HTMLUListElement.js.map +7 -0
  275. package/dist/esm/node/elements/MathMLElement.js +13 -0
  276. package/dist/esm/node/elements/MathMLElement.js.map +7 -0
  277. package/dist/esm/node/elements/SVGCircleElement.js +50 -0
  278. package/dist/esm/node/elements/SVGCircleElement.js.map +7 -0
  279. package/dist/esm/node/elements/SVGElement.js +13 -0
  280. package/dist/esm/node/elements/SVGElement.js.map +7 -0
  281. package/dist/esm/node/elements/SVGRectElement.js +61 -0
  282. package/dist/esm/node/elements/SVGRectElement.js.map +7 -0
  283. package/dist/esm/node/elements/index.js +164 -0
  284. package/dist/esm/node/elements/index.js.map +7 -0
  285. package/dist/esm/node/index.js +53 -0
  286. package/dist/esm/node/index.js.map +7 -0
  287. package/dist/esm/utils/CSSSelector.js +252 -0
  288. package/dist/esm/utils/CSSSelector.js.map +7 -0
  289. package/dist/esm/window/Window.js +1 -0
  290. package/dist/esm/window/Window.js.map +7 -0
  291. package/dist/esm/window/WindowBase.js +828 -0
  292. package/dist/esm/window/WindowBase.js.map +7 -0
  293. package/dist/esm/window/index.js +10 -0
  294. package/dist/esm/window/index.js.map +7 -0
  295. package/dist/esm-bundle/dooboostore-dom-parser.esm.js +6176 -0
  296. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +7 -0
  297. package/dist/types/DomParser.d.ts +30 -0
  298. package/dist/types/DomParser.d.ts.map +1 -0
  299. package/dist/types/factory/ElementFactory.d.ts +27 -0
  300. package/dist/types/factory/ElementFactory.d.ts.map +1 -0
  301. package/dist/types/factory/index.d.ts +2 -0
  302. package/dist/types/factory/index.d.ts.map +1 -0
  303. package/dist/types/index.d.ts +9 -0
  304. package/dist/types/index.d.ts.map +1 -0
  305. package/dist/types/node/CharacterData.d.ts +52 -0
  306. package/dist/types/node/CharacterData.d.ts.map +1 -0
  307. package/dist/types/node/ChildNode.d.ts +39 -0
  308. package/dist/types/node/ChildNode.d.ts.map +1 -0
  309. package/dist/types/node/ChildNodeBase.d.ts +12 -0
  310. package/dist/types/node/ChildNodeBase.d.ts.map +1 -0
  311. package/dist/types/node/Comment.d.ts +26 -0
  312. package/dist/types/node/Comment.d.ts.map +1 -0
  313. package/dist/types/node/Document.d.ts +857 -0
  314. package/dist/types/node/Document.d.ts.map +1 -0
  315. package/dist/types/node/DocumentBase.d.ts +153 -0
  316. package/dist/types/node/DocumentBase.d.ts.map +1 -0
  317. package/dist/types/node/DocumentFragment.d.ts +39 -0
  318. package/dist/types/node/DocumentFragment.d.ts.map +1 -0
  319. package/dist/types/node/DocumentFragmentBase.d.ts +51 -0
  320. package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -0
  321. package/dist/types/node/GetRootNodeOptions.d.ts +14 -0
  322. package/dist/types/node/GetRootNodeOptions.d.ts.map +1 -0
  323. package/dist/types/node/Node.d.ts +232 -0
  324. package/dist/types/node/Node.d.ts.map +1 -0
  325. package/dist/types/node/NodeBase.d.ts +98 -0
  326. package/dist/types/node/NodeBase.d.ts.map +1 -0
  327. package/dist/types/node/NodeIterator.d.ts +61 -0
  328. package/dist/types/node/NodeIterator.d.ts.map +1 -0
  329. package/dist/types/node/ParentNode.d.ts +85 -0
  330. package/dist/types/node/ParentNode.d.ts.map +1 -0
  331. package/dist/types/node/ParentNodeBase.d.ts +22 -0
  332. package/dist/types/node/ParentNodeBase.d.ts.map +1 -0
  333. package/dist/types/node/Text.d.ts +25 -0
  334. package/dist/types/node/Text.d.ts.map +1 -0
  335. package/dist/types/node/TextBase.d.ts +26 -0
  336. package/dist/types/node/TextBase.d.ts.map +1 -0
  337. package/dist/types/node/collection/HTMLCollection.d.ts +37 -0
  338. package/dist/types/node/collection/HTMLCollection.d.ts.map +1 -0
  339. package/dist/types/node/collection/HTMLCollectionOf.d.ts +14 -0
  340. package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +1 -0
  341. package/dist/types/node/collection/NodeList.d.ts +55 -0
  342. package/dist/types/node/collection/NodeList.d.ts.map +1 -0
  343. package/dist/types/node/collection/NodeListOf.d.ts +14 -0
  344. package/dist/types/node/collection/NodeListOf.d.ts.map +1 -0
  345. package/dist/types/node/collection/index.d.ts +5 -0
  346. package/dist/types/node/collection/index.d.ts.map +1 -0
  347. package/dist/types/node/elements/Element.d.ts +687 -0
  348. package/dist/types/node/elements/Element.d.ts.map +1 -0
  349. package/dist/types/node/elements/ElementBase.d.ts +143 -0
  350. package/dist/types/node/elements/ElementBase.d.ts.map +1 -0
  351. package/dist/types/node/elements/HTMLAnchorElement.d.ts +18 -0
  352. package/dist/types/node/elements/HTMLAnchorElement.d.ts.map +1 -0
  353. package/dist/types/node/elements/HTMLAreaElement.d.ts +59 -0
  354. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -0
  355. package/dist/types/node/elements/HTMLBaseElement.d.ts +25 -0
  356. package/dist/types/node/elements/HTMLBaseElement.d.ts.map +1 -0
  357. package/dist/types/node/elements/HTMLBodyElement.d.ts +10 -0
  358. package/dist/types/node/elements/HTMLBodyElement.d.ts.map +1 -0
  359. package/dist/types/node/elements/HTMLButtonElement.d.ts +21 -0
  360. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -0
  361. package/dist/types/node/elements/HTMLCanvasElement.d.ts +15 -0
  362. package/dist/types/node/elements/HTMLCanvasElement.d.ts.map +1 -0
  363. package/dist/types/node/elements/HTMLCaptionElement.d.ts +18 -0
  364. package/dist/types/node/elements/HTMLCaptionElement.d.ts.map +1 -0
  365. package/dist/types/node/elements/HTMLDivElement.d.ts +10 -0
  366. package/dist/types/node/elements/HTMLDivElement.d.ts.map +1 -0
  367. package/dist/types/node/elements/HTMLElement.d.ts +90 -0
  368. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -0
  369. package/dist/types/node/elements/HTMLElementBase.d.ts +42 -0
  370. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -0
  371. package/dist/types/node/elements/HTMLEmbedElement.d.ts +27 -0
  372. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -0
  373. package/dist/types/node/elements/HTMLFormElement.d.ts +30 -0
  374. package/dist/types/node/elements/HTMLFormElement.d.ts.map +1 -0
  375. package/dist/types/node/elements/HTMLGenericElement.d.ts +6 -0
  376. package/dist/types/node/elements/HTMLGenericElement.d.ts.map +1 -0
  377. package/dist/types/node/elements/HTMLH1Element.d.ts +10 -0
  378. package/dist/types/node/elements/HTMLH1Element.d.ts.map +1 -0
  379. package/dist/types/node/elements/HTMLHeadElement.d.ts +10 -0
  380. package/dist/types/node/elements/HTMLHeadElement.d.ts.map +1 -0
  381. package/dist/types/node/elements/HTMLHtmlElement.d.ts +17 -0
  382. package/dist/types/node/elements/HTMLHtmlElement.d.ts.map +1 -0
  383. package/dist/types/node/elements/HTMLImgElement.d.ts +24 -0
  384. package/dist/types/node/elements/HTMLImgElement.d.ts.map +1 -0
  385. package/dist/types/node/elements/HTMLInputElement.d.ts +33 -0
  386. package/dist/types/node/elements/HTMLInputElement.d.ts.map +1 -0
  387. package/dist/types/node/elements/HTMLLIElement.d.ts +15 -0
  388. package/dist/types/node/elements/HTMLLIElement.d.ts.map +1 -0
  389. package/dist/types/node/elements/HTMLLinkElement.d.ts +24 -0
  390. package/dist/types/node/elements/HTMLLinkElement.d.ts.map +1 -0
  391. package/dist/types/node/elements/HTMLMetaElement.d.ts +10 -0
  392. package/dist/types/node/elements/HTMLMetaElement.d.ts.map +1 -0
  393. package/dist/types/node/elements/HTMLOListElement.d.ts +21 -0
  394. package/dist/types/node/elements/HTMLOListElement.d.ts.map +1 -0
  395. package/dist/types/node/elements/HTMLPElement.d.ts +10 -0
  396. package/dist/types/node/elements/HTMLPElement.d.ts.map +1 -0
  397. package/dist/types/node/elements/HTMLScriptElement.d.ts +29 -0
  398. package/dist/types/node/elements/HTMLScriptElement.d.ts.map +1 -0
  399. package/dist/types/node/elements/HTMLSpanElement.d.ts +10 -0
  400. package/dist/types/node/elements/HTMLSpanElement.d.ts.map +1 -0
  401. package/dist/types/node/elements/HTMLStyleElement.d.ts +18 -0
  402. package/dist/types/node/elements/HTMLStyleElement.d.ts.map +1 -0
  403. package/dist/types/node/elements/HTMLTableElement.d.ts +25 -0
  404. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -0
  405. package/dist/types/node/elements/HTMLTbodyElement.d.ts +15 -0
  406. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -0
  407. package/dist/types/node/elements/HTMLTdElement.d.ts +21 -0
  408. package/dist/types/node/elements/HTMLTdElement.d.ts.map +1 -0
  409. package/dist/types/node/elements/HTMLTemplateElement.d.ts +32 -0
  410. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -0
  411. package/dist/types/node/elements/HTMLTfootElement.d.ts +16 -0
  412. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -0
  413. package/dist/types/node/elements/HTMLThElement.d.ts +21 -0
  414. package/dist/types/node/elements/HTMLThElement.d.ts.map +1 -0
  415. package/dist/types/node/elements/HTMLTheadElement.d.ts +15 -0
  416. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -0
  417. package/dist/types/node/elements/HTMLTitleElement.d.ts +15 -0
  418. package/dist/types/node/elements/HTMLTitleElement.d.ts.map +1 -0
  419. package/dist/types/node/elements/HTMLTrElement.d.ts +17 -0
  420. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -0
  421. package/dist/types/node/elements/HTMLUListElement.d.ts +10 -0
  422. package/dist/types/node/elements/HTMLUListElement.d.ts.map +1 -0
  423. package/dist/types/node/elements/MathMLElement.d.ts +11 -0
  424. package/dist/types/node/elements/MathMLElement.d.ts.map +1 -0
  425. package/dist/types/node/elements/SVGCircleElement.d.ts +20 -0
  426. package/dist/types/node/elements/SVGCircleElement.d.ts.map +1 -0
  427. package/dist/types/node/elements/SVGElement.d.ts +11 -0
  428. package/dist/types/node/elements/SVGElement.d.ts.map +1 -0
  429. package/dist/types/node/elements/SVGRectElement.d.ts +23 -0
  430. package/dist/types/node/elements/SVGRectElement.d.ts.map +1 -0
  431. package/dist/types/node/elements/index.d.ts +128 -0
  432. package/dist/types/node/elements/index.d.ts.map +1 -0
  433. package/dist/types/node/index.d.ts +16 -0
  434. package/dist/types/node/index.d.ts.map +1 -0
  435. package/dist/types/utils/CSSSelector.d.ts +36 -0
  436. package/dist/types/utils/CSSSelector.d.ts.map +1 -0
  437. package/dist/types/window/Window.d.ts +620 -0
  438. package/dist/types/window/Window.d.ts.map +1 -0
  439. package/dist/types/window/WindowBase.d.ts +342 -0
  440. package/dist/types/window/WindowBase.d.ts.map +1 -0
  441. package/dist/types/window/index.d.ts +3 -0
  442. package/dist/types/window/index.d.ts.map +1 -0
  443. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +6182 -0
  444. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +7 -0
  445. package/package.json +120 -0
  446. package/src/DomParser.ts +491 -0
  447. package/src/factory/ElementFactory.ts +69 -0
  448. package/src/factory/index.ts +1 -0
  449. package/src/index.ts +28 -0
  450. package/src/node/CharacterData.ts +58 -0
  451. package/src/node/ChildNode.ts +42 -0
  452. package/src/node/ChildNodeBase.ts +54 -0
  453. package/src/node/Comment.ts +98 -0
  454. package/src/node/Document.ts +882 -0
  455. package/src/node/DocumentBase.ts +465 -0
  456. package/src/node/DocumentFragment.ts +44 -0
  457. package/src/node/DocumentFragmentBase.ts +109 -0
  458. package/src/node/GetRootNodeOptions.ts +13 -0
  459. package/src/node/Node.ts +245 -0
  460. package/src/node/NodeBase.ts +506 -0
  461. package/src/node/NodeIterator.ts +200 -0
  462. package/src/node/ParentNode.ts +93 -0
  463. package/src/node/ParentNodeBase.ts +145 -0
  464. package/src/node/Text.ts +30 -0
  465. package/src/node/TextBase.ts +113 -0
  466. package/src/node/collection/HTMLCollection.ts +107 -0
  467. package/src/node/collection/HTMLCollectionOf.ts +26 -0
  468. package/src/node/collection/NodeList.ts +140 -0
  469. package/src/node/collection/NodeListOf.ts +28 -0
  470. package/src/node/collection/index.ts +4 -0
  471. package/src/node/elements/Element.ts +771 -0
  472. package/src/node/elements/ElementBase.ts +1239 -0
  473. package/src/node/elements/HTMLAnchorElement.ts +63 -0
  474. package/src/node/elements/HTMLAreaElement.ts +73 -0
  475. package/src/node/elements/HTMLBaseElement.ts +70 -0
  476. package/src/node/elements/HTMLBodyElement.ts +12 -0
  477. package/src/node/elements/HTMLButtonElement.ts +83 -0
  478. package/src/node/elements/HTMLCanvasElement.ts +71 -0
  479. package/src/node/elements/HTMLCaptionElement.ts +26 -0
  480. package/src/node/elements/HTMLDivElement.ts +12 -0
  481. package/src/node/elements/HTMLElement.ts +105 -0
  482. package/src/node/elements/HTMLElementBase.ts +198 -0
  483. package/src/node/elements/HTMLEmbedElement.ts +33 -0
  484. package/src/node/elements/HTMLFormElement.ts +131 -0
  485. package/src/node/elements/HTMLGenericElement.ts +13 -0
  486. package/src/node/elements/HTMLH1Element.ts +12 -0
  487. package/src/node/elements/HTMLHeadElement.ts +12 -0
  488. package/src/node/elements/HTMLHtmlElement.ts +82 -0
  489. package/src/node/elements/HTMLImgElement.ts +96 -0
  490. package/src/node/elements/HTMLInputElement.ts +160 -0
  491. package/src/node/elements/HTMLLIElement.ts +47 -0
  492. package/src/node/elements/HTMLLinkElement.ts +95 -0
  493. package/src/node/elements/HTMLMetaElement.ts +12 -0
  494. package/src/node/elements/HTMLOListElement.ts +83 -0
  495. package/src/node/elements/HTMLPElement.ts +12 -0
  496. package/src/node/elements/HTMLScriptElement.ts +127 -0
  497. package/src/node/elements/HTMLSpanElement.ts +12 -0
  498. package/src/node/elements/HTMLStyleElement.ts +63 -0
  499. package/src/node/elements/HTMLTableElement.ts +117 -0
  500. package/src/node/elements/HTMLTbodyElement.ts +46 -0
  501. package/src/node/elements/HTMLTdElement.ts +67 -0
  502. package/src/node/elements/HTMLTemplateElement.ts +112 -0
  503. package/src/node/elements/HTMLTfootElement.ts +47 -0
  504. package/src/node/elements/HTMLThElement.ts +67 -0
  505. package/src/node/elements/HTMLTheadElement.ts +46 -0
  506. package/src/node/elements/HTMLTitleElement.ts +23 -0
  507. package/src/node/elements/HTMLTrElement.ts +72 -0
  508. package/src/node/elements/HTMLUListElement.ts +12 -0
  509. package/src/node/elements/MathMLElement.ts +16 -0
  510. package/src/node/elements/SVGCircleElement.ts +61 -0
  511. package/src/node/elements/SVGElement.ts +16 -0
  512. package/src/node/elements/SVGRectElement.ts +74 -0
  513. package/src/node/elements/index.ts +186 -0
  514. package/src/node/index.ts +28 -0
  515. package/src/utils/CSSSelector.ts +360 -0
  516. package/src/window/Window.ts +715 -0
  517. package/src/window/WindowBase.ts +1018 -0
  518. package/src/window/index.ts +2 -0
  519. package/tsconfig.json +24 -0
@@ -0,0 +1,506 @@
1
+ import { Node,
2
+ ELEMENT_NODE ,
3
+ ATTRIBUTE_NODE ,
4
+ TEXT_NODE ,
5
+ CDATA_SECTION_NODE ,
6
+ ENTITY_REFERENCE_NODE ,
7
+ ENTITY_NODE ,
8
+ PROCESSING_INSTRUCTION_NODE ,
9
+ COMMENT_NODE ,
10
+ DOCUMENT_NODE ,
11
+ DOCUMENT_TYPE_NODE ,
12
+ DOCUMENT_FRAGMENT_NODE ,
13
+ NOTATION_NODE ,
14
+ DOCUMENT_POSITION_DISCONNECTED ,
15
+ DOCUMENT_POSITION_PRECEDING ,
16
+ DOCUMENT_POSITION_FOLLOWING ,
17
+ DOCUMENT_POSITION_CONTAINS ,
18
+ DOCUMENT_POSITION_CONTAINED_BY ,
19
+ DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
20
+ } from './Node';
21
+ import { ChildNode } from './ChildNode';
22
+ import { ParentNode } from './ParentNode';
23
+ import { NodeListOf } from './collection/NodeListOf';
24
+ import { GetRootNodeOptions } from './GetRootNodeOptions';
25
+ import { HTMLElement } from './elements/HTMLElement';
26
+ import { Document } from './Document';
27
+ import { Text } from './Text';
28
+
29
+ /**
30
+ * Base implementation of the Node interface
31
+ */
32
+ export abstract class NodeBase implements Node {
33
+ // Node constants as instance properties
34
+ static readonly ELEMENT_NODE = ELEMENT_NODE;
35
+ static readonly ATTRIBUTE_NODE = ATTRIBUTE_NODE;
36
+ static readonly TEXT_NODE = TEXT_NODE;
37
+ static readonly CDATA_SECTION_NODE = CDATA_SECTION_NODE;
38
+ static readonly ENTITY_REFERENCE_NODE = ENTITY_REFERENCE_NODE;
39
+ static readonly ENTITY_NODE = ENTITY_NODE;
40
+ static readonly PROCESSING_INSTRUCTION_NODE = PROCESSING_INSTRUCTION_NODE;
41
+ static readonly COMMENT_NODE = COMMENT_NODE;
42
+ static readonly DOCUMENT_NODE = DOCUMENT_NODE;
43
+ static readonly DOCUMENT_TYPE_NODE = DOCUMENT_TYPE_NODE;
44
+ static readonly DOCUMENT_FRAGMENT_NODE = DOCUMENT_FRAGMENT_NODE;
45
+ static readonly NOTATION_NODE = NOTATION_NODE;
46
+ static readonly DOCUMENT_POSITION_DISCONNECTED = DOCUMENT_POSITION_DISCONNECTED;
47
+ static readonly DOCUMENT_POSITION_PRECEDING = DOCUMENT_POSITION_PRECEDING;
48
+ static readonly DOCUMENT_POSITION_FOLLOWING = DOCUMENT_POSITION_FOLLOWING;
49
+ static readonly DOCUMENT_POSITION_CONTAINS = DOCUMENT_POSITION_CONTAINS;
50
+ static readonly DOCUMENT_POSITION_CONTAINED_BY = DOCUMENT_POSITION_CONTAINED_BY;
51
+ static readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
52
+
53
+ ELEMENT_NODE: typeof ELEMENT_NODE;
54
+ ATTRIBUTE_NODE: typeof ATTRIBUTE_NODE;
55
+ TEXT_NODE: typeof TEXT_NODE;
56
+ CDATA_SECTION_NODE: typeof CDATA_SECTION_NODE;
57
+ ENTITY_REFERENCE_NODE: typeof ENTITY_REFERENCE_NODE;
58
+ ENTITY_NODE: typeof ENTITY_NODE;
59
+ PROCESSING_INSTRUCTION_NODE: typeof PROCESSING_INSTRUCTION_NODE;
60
+ COMMENT_NODE: typeof COMMENT_NODE;
61
+ DOCUMENT_NODE: typeof DOCUMENT_NODE;
62
+ DOCUMENT_TYPE_NODE: typeof DOCUMENT_TYPE_NODE;
63
+ DOCUMENT_FRAGMENT_NODE: typeof DOCUMENT_FRAGMENT_NODE;
64
+ NOTATION_NODE: typeof NOTATION_NODE;
65
+ DOCUMENT_POSITION_DISCONNECTED: typeof DOCUMENT_POSITION_DISCONNECTED;
66
+ DOCUMENT_POSITION_PRECEDING: typeof DOCUMENT_POSITION_PRECEDING;
67
+ DOCUMENT_POSITION_FOLLOWING: typeof DOCUMENT_POSITION_FOLLOWING;
68
+ DOCUMENT_POSITION_CONTAINS: typeof DOCUMENT_POSITION_CONTAINS;
69
+ DOCUMENT_POSITION_CONTAINED_BY: typeof DOCUMENT_POSITION_CONTAINED_BY;
70
+ DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: typeof DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
71
+ // Internal properties (for Base class implementations)
72
+ protected _childNodesInternal: NodeBase[] = [];
73
+ public _parentNodeInternal: NodeBase | null = null; // Internal parent reference
74
+ public _ownerDocument: Document | null = null; // Made public for ChildNodeBase access
75
+ protected _nodeValue: string | null = null;
76
+ protected _textContent: string | null = null;
77
+
78
+ constructor(
79
+ public readonly nodeType: number,
80
+ public readonly nodeName: string,
81
+ ownerDocument?: Document | null
82
+ ) {
83
+ this._ownerDocument = ownerDocument || null;
84
+ }
85
+
86
+
87
+
88
+ // Node interface implementation
89
+ get baseURI(): string {
90
+ return this._ownerDocument?.URL || '';
91
+ }
92
+
93
+ // External interface - returns proper Node interface types
94
+ get childNodes(): NodeListOf<ChildNode> {
95
+ return new NodeListOf<ChildNode>(this._childNodesInternal as unknown as ChildNode[]);
96
+ }
97
+
98
+ get firstChild(): ChildNode | null {
99
+ return this._childNodesInternal.length > 0 ? this._childNodesInternal[0] as unknown as ChildNode : null;
100
+ }
101
+
102
+ get lastChild(): ChildNode | null {
103
+ const length = this._childNodesInternal.length;
104
+ return length > 0 ? this._childNodesInternal[length - 1] as unknown as ChildNode : null;
105
+ }
106
+
107
+ get nextSibling(): ChildNode | null {
108
+ if (!this._parentNodeInternal) return null;
109
+ const siblings = this._parentNodeInternal._childNodesInternal;
110
+ const index = this._findIndexInParent();
111
+ return index !== -1 && index < siblings.length - 1 ? siblings[index + 1] as unknown as ChildNode : null;
112
+ }
113
+
114
+ get previousSibling(): ChildNode | null {
115
+ if (!this._parentNodeInternal) return null;
116
+ const siblings = this._parentNodeInternal._childNodesInternal;
117
+ const index = this._findIndexInParent();
118
+ return index > 0 ? siblings[index - 1] as unknown as ChildNode : null;
119
+ }
120
+
121
+ get parentNode(): ParentNode | null {
122
+ return this._parentNodeInternal as unknown as ParentNode | null;
123
+ }
124
+
125
+ get parentElement(): HTMLElement | null {
126
+ return this._parentNodeInternal && this._parentNodeInternal.nodeType === ELEMENT_NODE
127
+ ? this._parentNodeInternal as unknown as HTMLElement
128
+ : null;
129
+ }
130
+
131
+ get ownerDocument(): Document | null {
132
+ return this._ownerDocument;
133
+ }
134
+
135
+ get isConnected(): boolean {
136
+ let node: Node | null = this;
137
+ while (node) {
138
+ if (node.nodeType === DOCUMENT_NODE) return true;
139
+ node = node.parentNode;
140
+ }
141
+ return false;
142
+ }
143
+
144
+ get nodeValue(): string | null {
145
+ return this._nodeValue;
146
+ }
147
+
148
+ set nodeValue(value: string | null) {
149
+ this._nodeValue = value;
150
+ }
151
+
152
+ get textContent(): string | null {
153
+ if (this.nodeType === TEXT_NODE || this.nodeType === COMMENT_NODE) {
154
+ // For text nodes, decode HTML entities to return original text
155
+ return this._nodeValue ? this.decodeHTMLEntities(this._nodeValue) : this._nodeValue;
156
+ }
157
+
158
+ // For elements, return the stored original text content if available
159
+ if (this._textContent !== undefined && this._textContent !== null) {
160
+ return this._textContent;
161
+ }
162
+
163
+ // Fallback: collect from children (for HTML parsed content)
164
+ let text = '';
165
+ for (const child of this._childNodesInternal) {
166
+ const childText = child.textContent;
167
+ if (childText !== null && childText !== undefined) {
168
+ text += childText;
169
+ }
170
+ }
171
+ return text.length > 0 ? text : null;
172
+ }
173
+
174
+ set textContent(value: string | null) {
175
+ // Convert to string (including null and undefined)
176
+ const stringValue = String(value);
177
+ // Store original text content
178
+ this._textContent = stringValue;
179
+ // Clear all children and add a single text node
180
+ this._childNodesInternal = [];
181
+ if (stringValue) {
182
+ // Create text node implementation with escaped value for innerHTML
183
+ const escapedValue = this.escapeHTMLEntities(stringValue);
184
+ const { TextBase } = require('./TextBase');
185
+ const textNode = new TextBase(escapedValue, this._ownerDocument);
186
+ this._childNodesInternal.push(textNode);
187
+ textNode._parentNodeInternal = this;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Escape HTML entities in a string to prevent XSS
193
+ */
194
+ protected escapeHTMLEntities(str: string): string {
195
+ const entityMap: { [key: string]: string } = {
196
+ '&': '&amp;',
197
+ '<': '&lt;',
198
+ '>': '&gt;',
199
+ '"': '&quot;',
200
+ "'": '&#39;'
201
+ };
202
+
203
+ return str.replace(/[&<>"']/g, (char) => {
204
+ return entityMap[char] || char;
205
+ });
206
+ }
207
+
208
+ /**
209
+ * Decode HTML entities in a string
210
+ */
211
+ protected decodeHTMLEntities(str: string): string {
212
+ const entityMap: { [key: string]: string } = {
213
+ '&amp;': '&',
214
+ '&lt;': '<',
215
+ '&gt;': '>',
216
+ '&quot;': '"',
217
+ '&#39;': "'",
218
+ '&#34;': '"',
219
+ '&apos;': "'",
220
+ '&copy;': '©',
221
+ '&reg;': '®',
222
+ '&trade;': '™',
223
+ '&nbsp;': ' ',
224
+ '&hellip;': '…',
225
+ '&mdash;': '—',
226
+ '&ndash;': '–',
227
+ '&lsquo;': '\u2018',
228
+ '&rsquo;': '\u2019',
229
+ '&ldquo;': '"',
230
+ '&rdquo;': '"'
231
+ };
232
+
233
+ return str.replace(/&[a-zA-Z0-9#]+;/g, (entity) => {
234
+ // Handle named entities
235
+ if (entityMap[entity]) {
236
+ return entityMap[entity];
237
+ }
238
+
239
+ // Handle numeric entities like &#39; &#34;
240
+ if (entity.startsWith('&#') && entity.endsWith(';')) {
241
+ const numStr = entity.slice(2, -1);
242
+ const num = parseInt(numStr, 10);
243
+ if (!isNaN(num)) {
244
+ return String.fromCharCode(num);
245
+ }
246
+ }
247
+
248
+ // Handle hex entities like &#x27;
249
+ if (entity.startsWith('&#x') && entity.endsWith(';')) {
250
+ const hexStr = entity.slice(3, -1);
251
+ const num = parseInt(hexStr, 16);
252
+ if (!isNaN(num)) {
253
+ return String.fromCharCode(num);
254
+ }
255
+ }
256
+
257
+ // Return original if not recognized
258
+ return entity;
259
+ });
260
+ }
261
+
262
+ // Node methods - external interface uses Node types, internal uses NodeBase
263
+ appendChild<T extends Node>(node: T): T {
264
+ const nodeBase = node as any as NodeBase; // Internal cast
265
+
266
+ // Special handling for DocumentFragment
267
+ if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
268
+ // When appending a DocumentFragment, move its children instead
269
+ const fragment = nodeBase;
270
+
271
+ // Move all children from fragment to this node
272
+ while (fragment._childNodesInternal.length > 0) {
273
+ const child = fragment._childNodesInternal[0];
274
+ if (child) {
275
+ fragment.removeChild(child);
276
+ this.appendChild(child);
277
+ }
278
+ }
279
+
280
+ return node;
281
+ }
282
+
283
+ if (nodeBase._parentNodeInternal) {
284
+ nodeBase._parentNodeInternal.removeChild(nodeBase);
285
+ }
286
+
287
+ this._childNodesInternal.push(nodeBase);
288
+ nodeBase._parentNodeInternal = this;
289
+ nodeBase._ownerDocument = this._ownerDocument;
290
+
291
+ return node;
292
+ }
293
+
294
+ removeChild<T extends Node>(child: T): T {
295
+ const childBase = child as any as NodeBase; // Internal cast
296
+ const index = this._findChildIndex(childBase);
297
+ if (index === -1) {
298
+ throw new Error('Node not found');
299
+ }
300
+
301
+ this._childNodesInternal.splice(index, 1);
302
+ childBase._parentNodeInternal = null;
303
+
304
+ return child;
305
+ }
306
+
307
+ insertBefore<T extends Node>(node: T, child: Node | null): T {
308
+ if (child === null) {
309
+ return this.appendChild(node);
310
+ }
311
+
312
+ const nodeBase = node as any as NodeBase; // Internal cast
313
+ const childBase = child as any as NodeBase; // Internal cast
314
+ const index = this._findChildIndex(childBase);
315
+ if (index === -1) {
316
+ throw new Error('Reference node not found');
317
+ }
318
+
319
+ // Handle DocumentFragment - move all its children
320
+ if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
321
+ const fragment = nodeBase as any;
322
+ const children = [...fragment._childNodesInternal]; // Copy array to avoid modification during iteration
323
+
324
+ let insertIndex = index;
325
+ for (const fragmentChild of children) {
326
+ // Remove from fragment
327
+ fragment.removeChild(fragmentChild);
328
+ // Insert at the current insert position
329
+ this._childNodesInternal.splice(insertIndex, 0, fragmentChild);
330
+ fragmentChild._parentNodeInternal = this;
331
+ fragmentChild._ownerDocument = this._ownerDocument;
332
+ // Increment insert index for next child to maintain order
333
+ insertIndex++;
334
+ }
335
+
336
+ return node;
337
+ }
338
+
339
+ if (nodeBase._parentNodeInternal) {
340
+ nodeBase._parentNodeInternal.removeChild(nodeBase);
341
+ }
342
+
343
+ this._childNodesInternal.splice(index, 0, nodeBase);
344
+ nodeBase._parentNodeInternal = this;
345
+ nodeBase._ownerDocument = this._ownerDocument;
346
+
347
+ return node;
348
+ }
349
+
350
+ replaceChild<T extends Node>(node: Node, child: T): T {
351
+ this.insertBefore(node, child);
352
+ this.removeChild(child);
353
+ return child;
354
+ }
355
+
356
+ cloneNode(deep?: boolean): Node {
357
+ // Basic clone implementation - would need to be overridden by specific node types
358
+ throw new Error('cloneNode must be implemented by subclasses');
359
+ }
360
+
361
+ hasChildNodes(): boolean {
362
+ return this._childNodesInternal.length > 0;
363
+ }
364
+
365
+ contains(other: Node | null): boolean {
366
+ if (!other || other === this) return other === this;
367
+
368
+ let node: Node | null = other;
369
+ while (node) {
370
+ if (node.parentNode === this as unknown as ParentNode) return true;
371
+ node = node.parentNode;
372
+ }
373
+ return false;
374
+ }
375
+
376
+ compareDocumentPosition(other: Node): number {
377
+ if (this === other) return 0;
378
+
379
+ const otherBase = other as any as NodeBase;
380
+
381
+ // Check if nodes are disconnected (not in same tree)
382
+ const thisRoot = this.getRootNode();
383
+ const otherRoot = otherBase.getRootNode();
384
+ if (thisRoot !== otherRoot) {
385
+ return DOCUMENT_POSITION_DISCONNECTED;
386
+ }
387
+
388
+ // Check containment relationships
389
+ if (this.contains(other)) return DOCUMENT_POSITION_CONTAINED_BY;
390
+ if (other.contains(this)) return DOCUMENT_POSITION_CONTAINS;
391
+
392
+ // Find document order by traversing up to common ancestor
393
+ const thisAncestors = this._getAncestors();
394
+ const otherAncestors = otherBase._getAncestors();
395
+
396
+ // Find common ancestor
397
+ let commonAncestor: NodeBase | null = null;
398
+ for (let i = 0; i < thisAncestors.length; i++) {
399
+ if (otherAncestors.includes(thisAncestors[i])) {
400
+ commonAncestor = thisAncestors[i];
401
+ break;
402
+ }
403
+ }
404
+
405
+ if (!commonAncestor) {
406
+ return DOCUMENT_POSITION_DISCONNECTED;
407
+ }
408
+
409
+ // Compare positions within common ancestor
410
+ const thisChild = this._getChildInAncestor(commonAncestor);
411
+ const otherChild = otherBase._getChildInAncestor(commonAncestor);
412
+
413
+ if (thisChild && otherChild && commonAncestor._childNodesInternal) {
414
+ const thisIndex = commonAncestor._childNodesInternal.indexOf(thisChild);
415
+ const otherIndex = commonAncestor._childNodesInternal.indexOf(otherChild);
416
+
417
+ if (thisIndex < otherIndex) {
418
+ return DOCUMENT_POSITION_FOLLOWING;
419
+ } else if (thisIndex > otherIndex) {
420
+ return DOCUMENT_POSITION_PRECEDING;
421
+ }
422
+ }
423
+
424
+ return DOCUMENT_POSITION_DISCONNECTED;
425
+ }
426
+
427
+ getRootNode(options?: GetRootNodeOptions): Node {
428
+ let root: Node = this;
429
+ while (root.parentNode) {
430
+ root = root.parentNode;
431
+ }
432
+ return root;
433
+ }
434
+
435
+ isEqualNode(otherNode: Node | null): boolean {
436
+ if (!otherNode) return false;
437
+ if (this === otherNode) return true;
438
+ if (this.nodeType !== otherNode.nodeType) return false;
439
+ if (this.nodeName !== otherNode.nodeName) return false;
440
+ return true; // Simplified comparison
441
+ }
442
+
443
+ isSameNode(otherNode: Node | null): boolean {
444
+ return this === otherNode;
445
+ }
446
+
447
+ isDefaultNamespace(namespace: string | null): boolean {
448
+ // Simplified implementation
449
+ return namespace === null || namespace === 'http://www.w3.org/1999/xhtml';
450
+ }
451
+
452
+ lookupNamespaceURI(prefix: string | null): string | null {
453
+ // Simplified implementation
454
+ if (prefix === null || prefix === '') {
455
+ return 'http://www.w3.org/1999/xhtml';
456
+ }
457
+ return null;
458
+ }
459
+
460
+ lookupPrefix(namespace: string | null): string | null {
461
+ // Simplified implementation
462
+ return null;
463
+ }
464
+
465
+ normalize(): void {
466
+ // Merge adjacent text nodes
467
+ for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {
468
+ const child = this._childNodesInternal[i];
469
+ if (child && child.nodeType === TEXT_NODE) {
470
+ const nextSibling = child.nextSibling;
471
+ if (nextSibling && nextSibling.nodeType === TEXT_NODE) {
472
+ child.nodeValue = (child.nodeValue || '') + (nextSibling.nodeValue || '');
473
+ this.removeChild(nextSibling);
474
+ }
475
+ }
476
+ }
477
+ }
478
+
479
+ // Helper methods
480
+ private _findIndexInParent(): number {
481
+ if (!this._parentNodeInternal) return -1;
482
+ return this._parentNodeInternal._childNodesInternal.indexOf(this);
483
+ }
484
+
485
+ private _findChildIndex(child: NodeBase): number {
486
+ return this._childNodesInternal.indexOf(child);
487
+ }
488
+
489
+ private _getAncestors(): NodeBase[] {
490
+ const ancestors: NodeBase[] = [];
491
+ let current: NodeBase | null = this._parentNodeInternal;
492
+ while (current) {
493
+ ancestors.push(current);
494
+ current = current._parentNodeInternal;
495
+ }
496
+ return ancestors;
497
+ }
498
+
499
+ private _getChildInAncestor(ancestor: NodeBase): NodeBase | null {
500
+ let current: NodeBase = this;
501
+ while (current._parentNodeInternal && current._parentNodeInternal !== ancestor) {
502
+ current = current._parentNodeInternal;
503
+ }
504
+ return current._parentNodeInternal === ancestor ? current : null;
505
+ }
506
+ }
@@ -0,0 +1,200 @@
1
+ import { Node } from './Node';
2
+ import { NodeBase } from './NodeBase';
3
+
4
+ /**
5
+ * NodeFilter interface for filtering nodes in NodeIterator
6
+ */
7
+ export interface NodeFilter {
8
+ acceptNode(node: Node): number;
9
+ }
10
+
11
+ /**
12
+ * NodeFilter constants
13
+ */
14
+ export const NodeFilter = {
15
+ // Constants for acceptNode return values
16
+ FILTER_ACCEPT: 1,
17
+ FILTER_REJECT: 2,
18
+ FILTER_SKIP: 3,
19
+
20
+ // Constants for whatToShow
21
+ SHOW_ALL: 0xFFFFFFFF,
22
+ SHOW_ELEMENT: 0x1,
23
+ SHOW_ATTRIBUTE: 0x2,
24
+ SHOW_TEXT: 0x4,
25
+ SHOW_CDATA_SECTION: 0x8,
26
+ SHOW_ENTITY_REFERENCE: 0x10,
27
+ SHOW_ENTITY: 0x20,
28
+ SHOW_PROCESSING_INSTRUCTION: 0x40,
29
+ SHOW_COMMENT: 0x80,
30
+ SHOW_DOCUMENT: 0x100,
31
+ SHOW_DOCUMENT_TYPE: 0x200,
32
+ SHOW_DOCUMENT_FRAGMENT: 0x400,
33
+ SHOW_NOTATION: 0x800
34
+ };
35
+
36
+ /**
37
+ * NodeIterator implementation for traversing DOM nodes
38
+ */
39
+ export class NodeIterator {
40
+ private _root: Node;
41
+ private _whatToShow: number;
42
+ private _filter: NodeFilter | null;
43
+ private _currentNode: Node;
44
+ private _beforeReferenceNode: boolean = true;
45
+
46
+ constructor(root: Node, whatToShow: number = NodeFilter.SHOW_ALL, filter: NodeFilter | null = null) {
47
+ this._root = root;
48
+ this._whatToShow = whatToShow;
49
+ this._filter = filter;
50
+ this._currentNode = root;
51
+ }
52
+
53
+ get root(): Node {
54
+ return this._root;
55
+ }
56
+
57
+ get whatToShow(): number {
58
+ return this._whatToShow;
59
+ }
60
+
61
+ get filter(): NodeFilter | null {
62
+ return this._filter;
63
+ }
64
+
65
+ get referenceNode(): Node {
66
+ return this._currentNode;
67
+ }
68
+
69
+ get pointerBeforeReferenceNode(): boolean {
70
+ return this._beforeReferenceNode;
71
+ }
72
+
73
+ /**
74
+ * Move to the next node in document order
75
+ */
76
+ nextNode(): Node | null {
77
+ let node = this._currentNode;
78
+
79
+ // If we're before the reference node, start from the reference node
80
+ if (this._beforeReferenceNode) {
81
+ this._beforeReferenceNode = false;
82
+ if (this._acceptNode(node)) {
83
+ return node;
84
+ }
85
+ }
86
+
87
+ // Traverse in document order
88
+ while (node) {
89
+ // First, try to go to first child
90
+ const firstChild = (node as any).firstChild;
91
+ if (firstChild) {
92
+ node = firstChild;
93
+ if (this._acceptNode(node)) {
94
+ this._currentNode = node;
95
+ return node;
96
+ }
97
+ continue;
98
+ }
99
+
100
+ // If no children, try next sibling
101
+ while (node && !(node as any).nextSibling) {
102
+ node = (node as any).parentNode;
103
+ // Don't go beyond root
104
+ if (!node || node === (this._root as any).parentNode) {
105
+ return null;
106
+ }
107
+ }
108
+
109
+ if (!node) {
110
+ return null;
111
+ }
112
+
113
+ node = (node as any).nextSibling;
114
+ if (this._acceptNode(node)) {
115
+ this._currentNode = node;
116
+ return node;
117
+ }
118
+ }
119
+
120
+ return null;
121
+ }
122
+
123
+ /**
124
+ * Move to the previous node in document order
125
+ */
126
+ previousNode(): Node | null {
127
+ let node = this._currentNode;
128
+
129
+ // If we're after the reference node, start from the reference node
130
+ if (!this._beforeReferenceNode) {
131
+ this._beforeReferenceNode = true;
132
+ if (this._acceptNode(node)) {
133
+ return node;
134
+ }
135
+ }
136
+
137
+ // Traverse in reverse document order
138
+ while (node && node !== this._root) {
139
+ // Try previous sibling
140
+ const prevSibling = (node as any).previousSibling;
141
+ if (prevSibling) {
142
+ node = prevSibling;
143
+
144
+ // Go to the deepest last child
145
+ while ((node as any).lastChild) {
146
+ node = (node as any).lastChild;
147
+ }
148
+
149
+ if (this._acceptNode(node)) {
150
+ this._currentNode = node;
151
+ return node;
152
+ }
153
+ continue;
154
+ }
155
+
156
+ // Go to parent
157
+ node = (node as any).parentNode;
158
+ if (!node || node === (this._root as any).parentNode) {
159
+ return null;
160
+ }
161
+
162
+ if (this._acceptNode(node)) {
163
+ this._currentNode = node;
164
+ return node;
165
+ }
166
+ }
167
+
168
+ return null;
169
+ }
170
+
171
+ /**
172
+ * Detach the iterator (no-op in this implementation)
173
+ */
174
+ detach(): void {
175
+ // Modern browsers don't require this, but we implement for compatibility
176
+ }
177
+
178
+ /**
179
+ * Check if a node should be accepted based on whatToShow and filter
180
+ */
181
+ private _acceptNode(node: Node | null): boolean {
182
+ if (!node) {
183
+ return false;
184
+ }
185
+
186
+ // Check whatToShow filter
187
+ const nodeTypeMask = 1 << (node.nodeType - 1);
188
+ if (!(this._whatToShow & nodeTypeMask)) {
189
+ return false;
190
+ }
191
+
192
+ // Check custom filter
193
+ if (this._filter) {
194
+ const result = this._filter.acceptNode(node);
195
+ return result === NodeFilter.FILTER_ACCEPT;
196
+ }
197
+
198
+ return true;
199
+ }
200
+ }