@dooboostore/dom-parser 1.0.2 → 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 (518) hide show
  1. package/dist/cjs/DomParser.js +10 -1
  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 +168 -205
  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 +163 -331
  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 +41 -43
  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 +210 -613
  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 +10 -1
  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 +165 -202
  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 +163 -331
  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 +40 -42
  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 +259 -597
  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 +3449 -3551
  271. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +4 -4
  272. package/dist/types/DomParser.d.ts.map +1 -1
  273. package/dist/types/factory/ElementFactory.d.ts +1 -1
  274. package/dist/types/factory/ElementFactory.d.ts.map +1 -1
  275. package/dist/types/index.d.ts +3 -1
  276. package/dist/types/index.d.ts.map +1 -1
  277. package/dist/types/node/CharacterData.d.ts +0 -2
  278. package/dist/types/node/CharacterData.d.ts.map +1 -1
  279. package/dist/types/node/ChildNode.d.ts +0 -38
  280. package/dist/types/node/ChildNode.d.ts.map +1 -1
  281. package/dist/types/node/ChildNodeBase.d.ts +6 -4
  282. package/dist/types/node/ChildNodeBase.d.ts.map +1 -1
  283. package/dist/types/node/Comment.d.ts +1 -1
  284. package/dist/types/node/Comment.d.ts.map +1 -1
  285. package/dist/types/node/Document.d.ts +0 -856
  286. package/dist/types/node/Document.d.ts.map +1 -1
  287. package/dist/types/node/DocumentBase.d.ts +68 -110
  288. package/dist/types/node/DocumentBase.d.ts.map +1 -1
  289. package/dist/types/node/DocumentFragment.d.ts +0 -38
  290. package/dist/types/node/DocumentFragment.d.ts.map +1 -1
  291. package/dist/types/node/DocumentFragmentBase.d.ts +1 -8
  292. package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -1
  293. package/dist/types/node/Node.d.ts +0 -213
  294. package/dist/types/node/Node.d.ts.map +1 -1
  295. package/dist/types/node/NodeBase.d.ts +11 -8
  296. package/dist/types/node/NodeBase.d.ts.map +1 -1
  297. package/dist/types/node/NodeFilter.d.ts +25 -0
  298. package/dist/types/node/NodeFilter.d.ts.map +1 -0
  299. package/dist/types/node/NodeIterator.d.ts +0 -34
  300. package/dist/types/node/NodeIterator.d.ts.map +1 -1
  301. package/dist/types/node/ParentNode.d.ts +0 -84
  302. package/dist/types/node/ParentNode.d.ts.map +1 -1
  303. package/dist/types/node/ParentNodeBase.d.ts +0 -5
  304. package/dist/types/node/ParentNodeBase.d.ts.map +1 -1
  305. package/dist/types/node/ShadowRootBase.d.ts +36 -0
  306. package/dist/types/node/ShadowRootBase.d.ts.map +1 -0
  307. package/dist/types/node/Text.d.ts +0 -24
  308. package/dist/types/node/Text.d.ts.map +1 -1
  309. package/dist/types/node/TextBase.d.ts +2 -3
  310. package/dist/types/node/TextBase.d.ts.map +1 -1
  311. package/dist/types/node/TreeWalker.d.ts +48 -0
  312. package/dist/types/node/TreeWalker.d.ts.map +1 -0
  313. package/dist/types/node/collection/{HTMLCollection.d.ts → HTMLCollectionImp.d.ts} +2 -3
  314. package/dist/types/node/collection/HTMLCollectionImp.d.ts.map +1 -0
  315. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts +9 -0
  316. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts.map +1 -0
  317. package/dist/types/node/collection/NodeList.d.ts +0 -1
  318. package/dist/types/node/collection/NodeList.d.ts.map +1 -1
  319. package/dist/types/node/collection/{NodeListOf.d.ts → NodeListOfImp.d.ts} +3 -4
  320. package/dist/types/node/collection/NodeListOfImp.d.ts.map +1 -0
  321. package/dist/types/node/collection/StylePropertyMapImpl.d.ts +20 -0
  322. package/dist/types/node/collection/StylePropertyMapImpl.d.ts.map +1 -0
  323. package/dist/types/node/collection/index.d.ts +3 -3
  324. package/dist/types/node/collection/index.d.ts.map +1 -1
  325. package/dist/types/node/elements/Element.d.ts +0 -687
  326. package/dist/types/node/elements/Element.d.ts.map +1 -1
  327. package/dist/types/node/elements/ElementBase.d.ts +98 -74
  328. package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
  329. package/dist/types/node/elements/HTMLAreaElement.d.ts +0 -1
  330. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
  331. package/dist/types/node/elements/HTMLAudioElement.d.ts +8 -0
  332. package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -0
  333. package/dist/types/node/elements/HTMLButtonElement.d.ts +1 -1
  334. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
  335. package/dist/types/node/elements/HTMLDListElement.d.ts +5 -0
  336. package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -0
  337. package/dist/types/node/elements/HTMLDataElement.d.ts +5 -0
  338. package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -0
  339. package/dist/types/node/elements/HTMLDataListElement.d.ts +5 -0
  340. package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -0
  341. package/dist/types/node/elements/HTMLDetailsElement.d.ts +5 -0
  342. package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -0
  343. package/dist/types/node/elements/HTMLDialogElement.d.ts +5 -0
  344. package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -0
  345. package/dist/types/node/elements/HTMLElement.d.ts +2 -119
  346. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
  347. package/dist/types/node/elements/HTMLElementBase.d.ts +126 -5
  348. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
  349. package/dist/types/node/elements/HTMLEmbedElement.d.ts +0 -1
  350. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
  351. package/dist/types/node/elements/HTMLFieldSetElement.d.ts +5 -0
  352. package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -0
  353. package/dist/types/node/elements/HTMLHRElement.d.ts +5 -0
  354. package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -0
  355. package/dist/types/node/elements/HTMLIFrameElement.d.ts +5 -0
  356. package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -0
  357. package/dist/types/node/elements/HTMLLabelElement.d.ts +5 -0
  358. package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -0
  359. package/dist/types/node/elements/HTMLLegendElement.d.ts +5 -0
  360. package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -0
  361. package/dist/types/node/elements/HTMLMapElement.d.ts +5 -0
  362. package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -0
  363. package/dist/types/node/elements/HTMLMeterElement.d.ts +5 -0
  364. package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -0
  365. package/dist/types/node/elements/HTMLModElement.d.ts +5 -0
  366. package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -0
  367. package/dist/types/node/elements/HTMLObjectElement.d.ts +5 -0
  368. package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -0
  369. package/dist/types/node/elements/HTMLOptGroupElement.d.ts +5 -0
  370. package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -0
  371. package/dist/types/node/elements/HTMLOptionElement.d.ts +5 -0
  372. package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -0
  373. package/dist/types/node/elements/HTMLOutputElement.d.ts +5 -0
  374. package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -0
  375. package/dist/types/node/elements/HTMLParamElement.d.ts +5 -0
  376. package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -0
  377. package/dist/types/node/elements/HTMLPictureElement.d.ts +5 -0
  378. package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -0
  379. package/dist/types/node/elements/HTMLPreElement.d.ts +5 -0
  380. package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -0
  381. package/dist/types/node/elements/HTMLProgressElement.d.ts +5 -0
  382. package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -0
  383. package/dist/types/node/elements/HTMLQuoteElement.d.ts +5 -0
  384. package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -0
  385. package/dist/types/node/elements/HTMLSelectElement.d.ts +5 -0
  386. package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -0
  387. package/dist/types/node/elements/HTMLSlotElement.d.ts +5 -0
  388. package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -0
  389. package/dist/types/node/elements/HTMLSourceElement.d.ts +5 -0
  390. package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -0
  391. package/dist/types/node/elements/HTMLTableElement.d.ts +3 -4
  392. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
  393. package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -3
  394. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
  395. package/dist/types/node/elements/HTMLTemplateElement.d.ts +0 -1
  396. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
  397. package/dist/types/node/elements/HTMLTextAreaElement.d.ts +5 -0
  398. package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -0
  399. package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -3
  400. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
  401. package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -3
  402. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
  403. package/dist/types/node/elements/HTMLTimeElement.d.ts +5 -0
  404. package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -0
  405. package/dist/types/node/elements/HTMLTrElement.d.ts +2 -3
  406. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
  407. package/dist/types/node/elements/HTMLTrackElement.d.ts +5 -0
  408. package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -0
  409. package/dist/types/node/elements/HTMLVideoElement.d.ts +8 -0
  410. package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -0
  411. package/dist/types/node/elements/index.d.ts +106 -52
  412. package/dist/types/node/elements/index.d.ts.map +1 -1
  413. package/dist/types/node/index.d.ts +4 -7
  414. package/dist/types/node/index.d.ts.map +1 -1
  415. package/dist/types/utils/CSSSelector.d.ts +0 -1
  416. package/dist/types/utils/CSSSelector.d.ts.map +1 -1
  417. package/dist/types/window/CustomElementRegistryImp.d.ts +18 -0
  418. package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -0
  419. package/dist/types/window/Window.d.ts +0 -619
  420. package/dist/types/window/Window.d.ts.map +1 -1
  421. package/dist/types/window/WindowBase.d.ts +253 -286
  422. package/dist/types/window/WindowBase.d.ts.map +1 -1
  423. package/dist/types/window/index.d.ts +0 -1
  424. package/dist/types/window/index.d.ts.map +1 -1
  425. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +3460 -3562
  426. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +4 -4
  427. package/package.json +1 -1
  428. package/src/DomParser.ts +28 -20
  429. package/src/factory/ElementFactory.ts +79 -53
  430. package/src/index.ts +11 -10
  431. package/src/node/CharacterData.ts +0 -2
  432. package/src/node/ChildNode.ts +42 -42
  433. package/src/node/ChildNodeBase.ts +60 -39
  434. package/src/node/Comment.ts +60 -60
  435. package/src/node/Document.ts +129 -882
  436. package/src/node/DocumentBase.ts +371 -467
  437. package/src/node/DocumentFragment.ts +38 -44
  438. package/src/node/DocumentFragmentBase.ts +4 -9
  439. package/src/node/Node.ts +231 -224
  440. package/src/node/NodeBase.ts +469 -443
  441. package/src/node/NodeFilter.ts +50 -0
  442. package/src/node/NodeIterator.ts +117 -172
  443. package/src/node/ParentNode.ts +93 -93
  444. package/src/node/ParentNodeBase.ts +7 -10
  445. package/src/node/ShadowRootBase.ts +87 -0
  446. package/src/node/Text.ts +30 -30
  447. package/src/node/TextBase.ts +92 -94
  448. package/src/node/TreeWalker.ts +280 -0
  449. package/src/node/collection/{HTMLCollection.ts → HTMLCollectionImp.ts} +3 -2
  450. package/src/node/collection/HTMLCollectionOfImp.ts +12 -0
  451. package/src/node/collection/NodeList.ts +1 -1
  452. package/src/node/collection/{NodeListOf.ts → NodeListOfImp.ts} +3 -3
  453. package/src/node/collection/StylePropertyMapImpl.ts +60 -0
  454. package/src/node/collection/index.ts +3 -3
  455. package/src/node/elements/Element.ts +212 -772
  456. package/src/node/elements/ElementBase.ts +840 -1204
  457. package/src/node/elements/HTMLAreaElement.ts +0 -1
  458. package/src/node/elements/HTMLAudioElement.ts +10 -0
  459. package/src/node/elements/HTMLButtonElement.ts +63 -63
  460. package/src/node/elements/HTMLDListElement.ts +2 -0
  461. package/src/node/elements/HTMLDataElement.ts +6 -0
  462. package/src/node/elements/HTMLDataListElement.ts +2 -0
  463. package/src/node/elements/HTMLDetailsElement.ts +2 -0
  464. package/src/node/elements/HTMLDialogElement.ts +2 -0
  465. package/src/node/elements/HTMLElement.ts +2 -137
  466. package/src/node/elements/HTMLElementBase.ts +466 -355
  467. package/src/node/elements/HTMLEmbedElement.ts +0 -1
  468. package/src/node/elements/HTMLFieldSetElement.ts +2 -0
  469. package/src/node/elements/HTMLHRElement.ts +2 -0
  470. package/src/node/elements/HTMLIFrameElement.ts +2 -0
  471. package/src/node/elements/HTMLLabelElement.ts +2 -0
  472. package/src/node/elements/HTMLLegendElement.ts +2 -0
  473. package/src/node/elements/HTMLMapElement.ts +2 -0
  474. package/src/node/elements/HTMLMeterElement.ts +2 -0
  475. package/src/node/elements/HTMLModElement.ts +2 -0
  476. package/src/node/elements/HTMLObjectElement.ts +2 -0
  477. package/src/node/elements/HTMLOptGroupElement.ts +2 -0
  478. package/src/node/elements/HTMLOptionElement.ts +2 -0
  479. package/src/node/elements/HTMLOutputElement.ts +2 -0
  480. package/src/node/elements/HTMLParamElement.ts +2 -0
  481. package/src/node/elements/HTMLPictureElement.ts +2 -0
  482. package/src/node/elements/HTMLPreElement.ts +2 -0
  483. package/src/node/elements/HTMLProgressElement.ts +2 -0
  484. package/src/node/elements/HTMLQuoteElement.ts +2 -0
  485. package/src/node/elements/HTMLSelectElement.ts +2 -0
  486. package/src/node/elements/HTMLSlotElement.ts +2 -0
  487. package/src/node/elements/HTMLSourceElement.ts +2 -0
  488. package/src/node/elements/HTMLTableElement.ts +3 -7
  489. package/src/node/elements/HTMLTbodyElement.ts +2 -3
  490. package/src/node/elements/HTMLTdElement.ts +1 -1
  491. package/src/node/elements/HTMLTemplateElement.ts +3 -6
  492. package/src/node/elements/HTMLTextAreaElement.ts +2 -0
  493. package/src/node/elements/HTMLTfootElement.ts +2 -3
  494. package/src/node/elements/HTMLTheadElement.ts +2 -3
  495. package/src/node/elements/HTMLTimeElement.ts +2 -0
  496. package/src/node/elements/HTMLTrElement.ts +3 -4
  497. package/src/node/elements/HTMLTrackElement.ts +2 -0
  498. package/src/node/elements/HTMLVideoElement.ts +10 -0
  499. package/src/node/elements/index.ts +226 -149
  500. package/src/node/index.ts +8 -8
  501. package/src/utils/CSSSelector.ts +0 -1
  502. package/src/window/CustomElementRegistryImp.ts +120 -0
  503. package/src/window/Window.ts +716 -715
  504. package/src/window/WindowBase.ts +482 -847
  505. package/src/window/index.ts +0 -1
  506. package/tsconfig.json +1 -0
  507. package/dist/cjs/node/collection/HTMLCollection.js.map +0 -7
  508. package/dist/cjs/node/collection/HTMLCollectionOf.js.map +0 -7
  509. package/dist/cjs/node/collection/NodeListOf.js.map +0 -7
  510. package/dist/esm/node/collection/HTMLCollection.js.map +0 -7
  511. package/dist/esm/node/collection/HTMLCollectionOf.js +0 -17
  512. package/dist/esm/node/collection/HTMLCollectionOf.js.map +0 -7
  513. package/dist/esm/node/collection/NodeListOf.js.map +0 -7
  514. package/dist/types/node/collection/HTMLCollection.d.ts.map +0 -1
  515. package/dist/types/node/collection/HTMLCollectionOf.d.ts +0 -14
  516. package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +0 -1
  517. package/dist/types/node/collection/NodeListOf.d.ts.map +0 -1
  518. package/src/node/collection/HTMLCollectionOf.ts +0 -26
@@ -1,40 +1,79 @@
1
- import {Window, Location, History, Navigator} from './Window';
2
- import {Document} from '../node/Document';
3
- import {DocumentBase} from '../node/DocumentBase';
4
- import {NodeBase} from '../node/NodeBase';
5
- import {ElementBase} from '../node/elements/ElementBase';
1
+ // import { Window, Location, History, Navigator } from './Window';
2
+ // import { CustomElementRegistry } from './CustomElementRegistry';
3
+ // import { Document } from '../node/Document';
4
+ import { DocumentBase } from '../node/DocumentBase';
5
+ import { NodeBase } from '../node/NodeBase';
6
+ import { ElementBase } from '../node/elements/ElementBase';
6
7
 
7
8
  // Import all element classes
8
- import {HTMLAnchorElement} from '../node/elements/HTMLAnchorElement';
9
- import {HTMLBodyElement} from '../node/elements/HTMLBodyElement';
10
- import {HTMLButtonElement} from '../node/elements/HTMLButtonElement';
11
- import {HTMLCanvasElement} from '../node/elements/HTMLCanvasElement';
12
- import {HTMLDivElement} from '../node/elements/HTMLDivElement';
13
- import {HTMLH1Element} from '../node/elements/HTMLH1Element';
14
- import {HTMLHeadElement} from '../node/elements/HTMLHeadElement';
15
- import {HTMLHtmlElement} from '../node/elements/HTMLHtmlElement';
16
- import {HTMLImgElement} from '../node/elements/HTMLImgElement';
17
- import {HTMLInputElement} from '../node/elements/HTMLInputElement';
18
- import {HTMLPElement} from '../node/elements/HTMLPElement';
19
- import {HTMLSpanElement} from '../node/elements/HTMLSpanElement';
20
- import {HTMLTitleElement} from '../node/elements/HTMLTitleElement';
21
- import {HTMLLinkElement} from '../node/elements/HTMLLinkElement';
22
- import {HTMLScriptElement} from '../node/elements/HTMLScriptElement';
23
- import {HTMLStyleElement} from '../node/elements/HTMLStyleElement';
24
- import {HTMLFormElement} from '../node/elements/HTMLFormElement';
25
- import {HTMLTableElement} from '../node/elements/HTMLTableElement';
26
- import {HTMLUListElement} from '../node/elements/HTMLUListElement';
27
- import {HTMLOListElement} from '../node/elements/HTMLOListElement';
28
- import {HTMLLIElement} from '../node/elements/HTMLLIElement';
29
- import {HTMLMetaElement} from '../node/elements/HTMLMetaElement';
30
- import {HTMLTemplateElement} from '../node/elements/HTMLTemplateElement';
31
- import {HTMLTheadElement} from '../node/elements/HTMLTheadElement';
32
- import {HTMLTfootElement} from '../node/elements/HTMLTfootElement';
33
- import {HTMLTrElement} from '../node/elements/HTMLTrElement';
34
- import {HTMLTdElement} from '../node/elements/HTMLTdElement';
35
- import {HTMLThElement} from '../node/elements/HTMLThElement';
36
- import {HTMLCaptionElement} from '../node/elements/HTMLCaptionElement';
37
- import {HTMLTbodyElement} from '../node/elements/HTMLTbodyElement';
9
+ import {
10
+ HTMLElement,
11
+ HTMLElementBase,
12
+ HTMLAnchorElement,
13
+ HTMLAreaElement,
14
+ HTMLAudioElement,
15
+ HTMLBaseElement,
16
+ HTMLBodyElement,
17
+ HTMLButtonElement,
18
+ HTMLCanvasElement,
19
+ HTMLCaptionElement,
20
+ HTMLDataElement,
21
+ HTMLDataListElement,
22
+ HTMLDetailsElement,
23
+ HTMLDialogElement,
24
+ HTMLDivElement,
25
+ HTMLDListElement,
26
+ HTMLEmbedElement,
27
+ HTMLFieldSetElement,
28
+ HTMLFormElement,
29
+ HTMLH1Element,
30
+ HTMLHeadElement,
31
+ HTMLHRElement,
32
+ HTMLHtmlElement,
33
+ HTMLIFrameElement,
34
+ HTMLImgElement,
35
+ HTMLInputElement,
36
+ HTMLLabelElement,
37
+ HTMLLegendElement,
38
+ HTMLLIElement,
39
+ HTMLLinkElement,
40
+ HTMLMapElement,
41
+ HTMLMetaElement,
42
+ HTMLMeterElement,
43
+ HTMLModElement,
44
+ HTMLObjectElement,
45
+ HTMLOListElement,
46
+ HTMLOptGroupElement,
47
+ HTMLOptionElement,
48
+ HTMLOutputElement,
49
+ HTMLPElement,
50
+ HTMLParamElement,
51
+ HTMLPictureElement,
52
+ HTMLPreElement,
53
+ HTMLProgressElement,
54
+ HTMLQuoteElement,
55
+ HTMLScriptElement,
56
+ HTMLSelectElement,
57
+ HTMLSlotElement,
58
+ HTMLSourceElement,
59
+ HTMLSpanElement,
60
+ HTMLStyleElement,
61
+ HTMLTableElement,
62
+ HTMLTbodyElement,
63
+ HTMLTdElement,
64
+ HTMLTemplateElement,
65
+ HTMLTextAreaElement,
66
+ HTMLTfootElement,
67
+ HTMLTheadElement,
68
+ HTMLThElement,
69
+ HTMLTimeElement,
70
+ HTMLTitleElement,
71
+ HTMLTrackElement,
72
+ HTMLTrElement,
73
+ HTMLUListElement,
74
+ HTMLVideoElement
75
+ } from '../node/elements';
76
+ import { CustomElementRegistryImp } from './CustomElementRegistryImp';
38
77
 
39
78
  class LocationBase implements Location {
40
79
  private _href: string = 'about:blank';
@@ -53,6 +92,8 @@ class LocationBase implements Location {
53
92
  this.parseUrl(initialUrl);
54
93
  }
55
94
 
95
+ ancestorOrigins: DOMStringList;
96
+
56
97
  get href(): string {
57
98
  return this._href;
58
99
  }
@@ -61,7 +102,6 @@ class LocationBase implements Location {
61
102
  const oldHref = this._href;
62
103
  this.parseUrl(url);
63
104
 
64
- // Call URL change callback if URL actually changed
65
105
  if (this._href !== oldHref && this.urlChangeCallback) {
66
106
  this.urlChangeCallback(this._href);
67
107
  }
@@ -70,11 +110,8 @@ class LocationBase implements Location {
70
110
  get protocol(): string {
71
111
  return this._protocol;
72
112
  }
73
-
74
113
  set protocol(value: string) {
75
- if (!value.endsWith(':')) {
76
- value += ':';
77
- }
114
+ if (!value.endsWith(':')) value += ':';
78
115
  this._protocol = value;
79
116
  this.reconstructUrl();
80
117
  }
@@ -82,13 +119,10 @@ class LocationBase implements Location {
82
119
  get host(): string {
83
120
  return this._host;
84
121
  }
85
-
86
122
  set host(value: string) {
87
123
  this._host = value;
88
- // Parse hostname and port from host
89
124
  const colonIndex = value.lastIndexOf(':');
90
125
  if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {
91
- // IPv6 addresses are enclosed in brackets, so check if colon is after the closing bracket
92
126
  this._hostname = value.substring(0, colonIndex);
93
127
  this._port = value.substring(colonIndex + 1);
94
128
  } else {
@@ -101,7 +135,6 @@ class LocationBase implements Location {
101
135
  get hostname(): string {
102
136
  return this._hostname;
103
137
  }
104
-
105
138
  set hostname(value: string) {
106
139
  this._hostname = value;
107
140
  this._host = this._port ? `${value}:${this._port}` : value;
@@ -111,7 +144,6 @@ class LocationBase implements Location {
111
144
  get port(): string {
112
145
  return this._port;
113
146
  }
114
-
115
147
  set port(value: string) {
116
148
  this._port = value;
117
149
  this._host = value ? `${this._hostname}:${value}` : this._hostname;
@@ -121,11 +153,8 @@ class LocationBase implements Location {
121
153
  get pathname(): string {
122
154
  return this._pathname;
123
155
  }
124
-
125
156
  set pathname(value: string) {
126
- if (!value.startsWith('/')) {
127
- value = '/' + value;
128
- }
157
+ if (!value.startsWith('/')) value = '/' + value;
129
158
  this._pathname = value;
130
159
  this.reconstructUrl();
131
160
  }
@@ -133,11 +162,8 @@ class LocationBase implements Location {
133
162
  get search(): string {
134
163
  return this._search;
135
164
  }
136
-
137
165
  set search(value: string) {
138
- if (value && !value.startsWith('?')) {
139
- value = '?' + value;
140
- }
166
+ if (value && !value.startsWith('?')) value = '?' + value;
141
167
  this._search = value;
142
168
  this.reconstructUrl();
143
169
  }
@@ -145,11 +171,8 @@ class LocationBase implements Location {
145
171
  get hash(): string {
146
172
  return this._hash;
147
173
  }
148
-
149
174
  set hash(value: string) {
150
- if (value && !value.startsWith('#')) {
151
- value = '#' + value;
152
- }
175
+ if (value && !value.startsWith('#')) value = '#' + value;
153
176
  this._hash = value;
154
177
  this.reconstructUrl();
155
178
  }
@@ -161,27 +184,16 @@ class LocationBase implements Location {
161
184
  assign(url: string): void {
162
185
  const oldHref = this._href;
163
186
  this.parseUrl(url);
164
-
165
- // Call URL change callback if URL actually changed
166
187
  if (this._href !== oldHref && this.urlChangeCallback) {
167
188
  this.urlChangeCallback(this._href);
168
189
  }
169
190
  }
170
191
 
171
192
  replace(url: string): void {
172
- const oldHref = this._href;
173
- this.parseUrl(url);
174
-
175
- // Call URL change callback if URL actually changed
176
- if (this._href !== oldHref && this.urlChangeCallback) {
177
- this.urlChangeCallback(this._href);
178
- }
193
+ this.assign(url);
179
194
  }
180
195
 
181
- reload(forcedReload?: boolean): void {
182
- // No-op in server-side environment
183
- // In a real browser, this would reload the page
184
- }
196
+ reload(_forcedReload?: boolean): void {}
185
197
 
186
198
  toString(): string {
187
199
  return this._href;
@@ -189,24 +201,17 @@ class LocationBase implements Location {
189
201
 
190
202
  private parseUrl(url: string): void {
191
203
  try {
192
- // Handle relative URLs by creating a base URL
193
204
  let parsedUrl: URL;
194
-
195
205
  if (url.startsWith('//')) {
196
- // Protocol-relative URL
197
206
  parsedUrl = new URL(this._protocol + url);
198
207
  } else if (url.startsWith('/')) {
199
- // Absolute path
200
208
  parsedUrl = new URL(url, `${this._protocol}//${this._host}`);
201
209
  } else if (url.includes('://')) {
202
- // Absolute URL
203
210
  parsedUrl = new URL(url);
204
211
  } else {
205
- // Relative URL
206
212
  const base = `${this._protocol}//${this._host}${this._pathname}`;
207
213
  parsedUrl = new URL(url, base);
208
214
  }
209
-
210
215
  this._href = parsedUrl.href;
211
216
  this._protocol = parsedUrl.protocol;
212
217
  this._host = parsedUrl.host;
@@ -217,7 +222,6 @@ class LocationBase implements Location {
217
222
  this._hash = parsedUrl.hash;
218
223
  this._origin = parsedUrl.origin;
219
224
  } catch (e) {
220
- // Invalid URL, handle special cases
221
225
  if (url === 'about:blank') {
222
226
  this._href = 'about:blank';
223
227
  this._protocol = 'about:';
@@ -229,33 +233,23 @@ class LocationBase implements Location {
229
233
  this._hash = '';
230
234
  this._origin = 'null';
231
235
  }
232
- // For other invalid URLs, keep current values
233
236
  }
234
237
  }
235
238
 
236
239
  private reconstructUrl(): void {
237
240
  try {
238
- // Reconstruct the URL from components
239
241
  let url = this._protocol;
240
-
241
242
  if (this._protocol !== 'about:' && this._protocol !== 'data:') {
242
243
  url += '//';
243
- if (this._host) {
244
- url += this._host;
245
- }
244
+ if (this._host) url += this._host;
246
245
  }
247
-
248
246
  url += this._pathname;
249
247
  url += this._search;
250
248
  url += this._hash;
251
-
252
- // Validate the reconstructed URL
253
249
  const testUrl = new URL(url);
254
250
  this._href = testUrl.href;
255
251
  this._origin = testUrl.origin;
256
- } catch (e) {
257
- // If reconstruction fails, keep the current href
258
- }
252
+ } catch (e) {}
259
253
  }
260
254
  }
261
255
 
@@ -270,89 +264,126 @@ class HistoryBase implements History {
270
264
  this.window = window;
271
265
  }
272
266
 
267
+ scrollRestoration: ScrollRestoration;
268
+
273
269
  back(): void {
274
270
  this.go(-1);
275
271
  }
276
-
277
272
  forward(): void {
278
273
  this.go(1);
279
274
  }
280
-
281
275
  go(delta?: number): void {
282
276
  if (!delta || this.historyStack.length === 0) return;
283
-
284
277
  const newIndex = this.currentIndex + delta;
285
278
  if (newIndex >= 0 && newIndex < this.historyStack.length) {
286
279
  this.currentIndex = newIndex;
287
280
  const entry = this.historyStack[this.currentIndex];
288
281
  this.state = entry.state;
289
-
290
- // Update location if URL is provided
291
282
  if (entry.url && this.window.location) {
292
283
  (this.window.location as any)._href = entry.url;
293
284
  (this.window.location as any).parseUrl(entry.url);
294
285
  }
295
-
296
- // Dispatch popstate event
297
286
  (this.window as any).dispatchPopStateEvent(entry.state, entry.url);
298
287
  }
299
288
  }
300
289
 
301
290
  pushState(data: any, title: string, url?: string): void {
302
- // Remove any forward history when pushing new state
303
291
  this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);
304
-
305
- // Add new state
306
- this.historyStack.push({state: data, title, url});
292
+ this.historyStack.push({ state: data, title, url });
307
293
  this.currentIndex = this.historyStack.length - 1;
308
294
  this.state = data;
309
295
  this.length = this.historyStack.length;
310
-
311
- // Update location if URL is provided
312
296
  if (url && this.window.location) {
313
297
  const oldHref = (this.window.location as any)._href;
314
298
  (this.window.location as any)._href = url;
315
299
  (this.window.location as any).parseUrl(url);
316
-
317
- // Trigger URL change callback for dynamic HTML loading
318
300
  if (url !== oldHref && (this.window.location as any).urlChangeCallback) {
319
301
  (this.window.location as any).urlChangeCallback(url);
320
302
  }
321
303
  }
322
-
323
- // Note: pushState does NOT dispatch popstate event (per HTML spec)
324
304
  }
325
305
 
326
306
  replaceState(data: any, title: string, url?: string): void {
327
307
  if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {
328
- // Replace current state
329
- this.historyStack[this.currentIndex] = {state: data, title, url};
308
+ this.historyStack[this.currentIndex] = { state: data, title, url };
330
309
  } else {
331
- // No current state, create one
332
- this.historyStack = [{state: data, title, url}];
310
+ this.historyStack = [{ state: data, title, url }];
333
311
  this.currentIndex = 0;
334
312
  this.length = 1;
335
313
  }
336
-
337
314
  this.state = data;
338
-
339
- // Update location if URL is provided
340
315
  if (url && this.window.location) {
341
316
  const oldHref = (this.window.location as any)._href;
342
317
  (this.window.location as any)._href = url;
343
318
  (this.window.location as any).parseUrl(url);
344
-
345
- // Trigger URL change callback for dynamic HTML loading
346
319
  if (url !== oldHref && (this.window.location as any).urlChangeCallback) {
347
320
  (this.window.location as any).urlChangeCallback(url);
348
321
  }
349
322
  }
350
-
351
- // Note: replaceState does NOT dispatch popstate event (per HTML spec)
352
323
  }
353
324
  }
354
325
 
355
326
  class NavigatorBase implements Navigator {
327
+ clipboard: Clipboard;
328
+ credentials: CredentialsContainer;
329
+ doNotTrack: string;
330
+ geolocation: Geolocation;
331
+ login: NavigatorLogin;
332
+ maxTouchPoints: number;
333
+ mediaCapabilities: MediaCapabilities;
334
+ mediaDevices: MediaDevices;
335
+ mediaSession: MediaSession;
336
+ permissions: Permissions;
337
+ serviceWorker: ServiceWorkerContainer;
338
+ userActivation: UserActivation;
339
+ wakeLock: WakeLock;
340
+ canShare(data?: ShareData): boolean {
341
+ throw new Error('Method not implemented.');
342
+ }
343
+ getGamepads(): (Gamepad | null)[] {
344
+ throw new Error('Method not implemented.');
345
+ }
346
+ requestMIDIAccess(options?: MIDIOptions): Promise<MIDIAccess> {
347
+ throw new Error('Method not implemented.');
348
+ }
349
+ requestMediaKeySystemAccess(keySystem: unknown, supportedConfigurations: unknown): Promise<MediaKeySystemAccess> {
350
+ throw new Error('Method not implemented.');
351
+ }
352
+ sendBeacon(url: string | URL, data?: BodyInit | null): boolean {
353
+ throw new Error('Method not implemented.');
354
+ }
355
+ share(data?: ShareData): Promise<void> {
356
+ throw new Error('Method not implemented.');
357
+ }
358
+ vibrate(pattern: unknown): boolean {
359
+ throw new Error('Method not implemented.');
360
+ }
361
+ webdriver: boolean;
362
+ clearAppBadge(): Promise<void> {
363
+ throw new Error('Method not implemented.');
364
+ }
365
+ setAppBadge(contents?: number): Promise<void> {
366
+ throw new Error('Method not implemented.');
367
+ }
368
+ hardwareConcurrency: number;
369
+ registerProtocolHandler(scheme: string, url: string | URL): void {
370
+ throw new Error('Method not implemented.');
371
+ }
372
+ appCodeName: string;
373
+ appName: string;
374
+ appVersion: string;
375
+ product: string;
376
+ productSub: string;
377
+ vendor: string;
378
+ vendorSub: string;
379
+ locks: LockManager;
380
+ mimeTypes: MimeTypeArray;
381
+ pdfViewerEnabled: boolean;
382
+ plugins: PluginArray;
383
+ javaEnabled(): boolean {
384
+ throw new Error('Method not implemented.');
385
+ }
386
+ storage: StorageManager;
356
387
  userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';
357
388
  language: string = 'en-US';
358
389
  languages: readonly string[] = ['en-US', 'en'];
@@ -361,30 +392,18 @@ class NavigatorBase implements Navigator {
361
392
  onLine: boolean = true;
362
393
  }
363
394
 
364
- // Simple event system for WindowBase
365
- interface EventListener {
395
+ interface WindowEventListener {
366
396
  type: string;
367
397
  listener: (event: any) => void;
368
- options?: boolean | AddEventListenerOptions;
369
- }
370
-
371
- interface PopStateEvent {
372
- type: 'popstate';
373
- state: any;
374
- url?: string;
398
+ options?: any;
375
399
  }
376
400
 
377
- export class WindowBase {
378
- // Suppress type errors for complex event handler types
401
+ export class WindowBase implements Window {
379
402
  [key: string]: any;
380
-
381
- // Event system
382
- private _eventListeners: EventListener[] = [];
383
- // Timers and intervals tracking
403
+ private _eventListeners: WindowEventListener[] = [];
384
404
  private _timers: Set<number> = new Set();
385
405
  private _intervals: Set<number> = new Set();
386
406
  private _animationFrames: Set<number> = new Set();
387
- // Properties
388
407
  readonly clientInformation: Navigator;
389
408
  private _closed: boolean = false;
390
409
 
@@ -392,836 +411,452 @@ export class WindowBase {
392
411
  return this._closed;
393
412
  }
394
413
 
395
- readonly cookieStore: CookieStore = {} as CookieStore;
396
- readonly customElements: CustomElementRegistry = {} as CustomElementRegistry;
414
+ readonly cookieStore: any = {};
415
+ readonly customElements: CustomElementRegistry;
397
416
  readonly devicePixelRatio: number = 1;
398
417
  readonly document: Document;
399
- readonly event: Event | undefined = undefined;
400
- readonly external: External = {} as External;
401
- readonly frameElement: Element | null = null;
402
- readonly frames: WindowProxy = {} as WindowProxy;
403
418
  readonly history: History;
404
- readonly innerHeight: number = 768;
405
- readonly innerWidth: number = 1024;
406
- readonly length: number = 0;
407
- readonly locationbar: BarProp = {} as BarProp;
408
- readonly menubar: BarProp = {} as BarProp;
409
- name: string = '';
410
419
  readonly navigator: Navigator;
411
- ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null = null;
412
- ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;
413
- ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;
414
- onorientationchange: ((this: Window, ev: Event) => any) | null = null;
415
- opener: any = null;
416
- readonly orientation: number = 0;
417
- readonly originAgentCluster: boolean = false;
418
- readonly outerHeight: number = 768;
419
- readonly outerWidth: number = 1024;
420
- readonly pageXOffset: number = 0;
421
- readonly pageYOffset: number = 0;
422
- readonly parent: WindowProxy = {} as WindowProxy;
423
- readonly personalbar: BarProp = {} as BarProp;
424
- readonly screen: Screen = {} as Screen;
425
- readonly screenLeft: number = 0;
426
- readonly screenTop: number = 0;
427
- readonly screenX: number = 0;
428
- readonly screenY: number = 0;
429
- readonly scrollX: number = 0;
430
- readonly scrollY: number = 0;
431
- readonly scrollbars: BarProp = {} as BarProp;
432
- readonly self: Window & typeof globalThis = this as any;
433
- readonly speechSynthesis: SpeechSynthesis = {} as SpeechSynthesis;
434
- status: string = '';
435
- readonly statusbar: BarProp = {} as BarProp;
436
- readonly toolbar: BarProp = {} as BarProp;
437
- readonly top: WindowProxy | null = null;
438
- readonly visualViewport: VisualViewport | null = null;
439
- readonly window: Window & typeof globalThis = this as any;
420
+ readonly self: any = this;
421
+ readonly window: any = this;
440
422
 
441
- // Location property with getter/setter
442
423
  private _location: Location;
443
424
  get location(): Location {
444
425
  return this._location;
445
426
  }
446
-
447
427
  set location(href: string | Location) {
448
- if (typeof href === 'string') {
449
- this._location.href = href;
450
- } else {
451
- this._location.href = href.href;
452
- }
428
+ if (typeof href === 'string') this._location.href = href;
429
+ else this._location.href = href.href;
453
430
  }
454
431
 
455
432
  // Global constructors
456
- Node = NodeBase;
457
- Element = ElementBase;
458
- HTMLElement = ElementBase;
459
433
  Event = class Event {
434
+ constructor(public type: string) {}
460
435
  };
461
- PopStateEvent = class PopStateEvent extends this.Event {
462
- };
463
- IntersectionObserver = class IntersectionObserver {
464
- };
465
- NodeFilter = class NodeFilter {
466
- };
467
- DocumentFragment = class DocumentFragment {
468
- };
469
- HTMLMetaElement = HTMLMetaElement;
470
- HTMLCanvasElement = HTMLCanvasElement;
471
- CanvasRenderingContext2D = class CanvasRenderingContext2D {
472
- };
473
- CanvasPattern = class CanvasPattern {
474
- };
475
- CanvasGradient = class CanvasGradient {
476
- };
477
- Path2D = class Path2D {
478
- };
479
- ImageData = class ImageData {
436
+ CustomEvent = class CustomEvent extends this.Event {
437
+ constructor(
438
+ type: string,
439
+ public detail: any
440
+ ) {
441
+ super(type);
442
+ }
480
443
  };
481
444
 
482
- // HTML element constructors
445
+ // All HTML element constructors
446
+ Node = NodeBase;
447
+ Element = ElementBase;
448
+ HTMLElement = HTMLElement;
483
449
  HTMLAnchorElement = HTMLAnchorElement;
450
+ HTMLAreaElement = HTMLAreaElement;
451
+ HTMLAudioElement = HTMLAudioElement;
452
+ HTMLBaseElement = HTMLBaseElement;
484
453
  HTMLBodyElement = HTMLBodyElement;
485
454
  HTMLButtonElement = HTMLButtonElement;
455
+ HTMLCanvasElement = HTMLCanvasElement;
456
+ HTMLCaptionElement = HTMLCaptionElement;
457
+ HTMLDataElement = HTMLDataElement;
458
+ HTMLDataListElement = HTMLDataListElement;
459
+ HTMLDetailsElement = HTMLDetailsElement;
460
+ HTMLDialogElement = HTMLDialogElement;
486
461
  HTMLDivElement = HTMLDivElement;
462
+ HTMLDListElement = HTMLDListElement;
463
+ HTMLEmbedElement = HTMLEmbedElement;
464
+ HTMLFieldSetElement = HTMLFieldSetElement;
465
+ HTMLFormElement = HTMLFormElement;
487
466
  HTMLH1Element = HTMLH1Element;
488
467
  HTMLHeadElement = HTMLHeadElement;
468
+ HTMLHRElement = HTMLHRElement;
489
469
  HTMLHtmlElement = HTMLHtmlElement;
470
+ HTMLIFrameElement = HTMLIFrameElement;
490
471
  HTMLImgElement = HTMLImgElement;
491
472
  HTMLInputElement = HTMLInputElement;
492
- HTMLPElement = HTMLPElement;
493
- HTMLSpanElement = HTMLSpanElement;
494
- HTMLTitleElement = HTMLTitleElement;
473
+ HTMLLabelElement = HTMLLabelElement;
474
+ HTMLLegendElement = HTMLLegendElement;
475
+ HTMLLIElement = HTMLLIElement;
495
476
  HTMLLinkElement = HTMLLinkElement;
477
+ HTMLMapElement = HTMLMapElement;
478
+ HTMLMetaElement = HTMLMetaElement;
479
+ HTMLMeterElement = HTMLMeterElement;
480
+ HTMLModElement = HTMLModElement;
481
+ HTMLObjectElement = HTMLObjectElement;
482
+ HTMLOListElement = HTMLOListElement;
483
+ HTMLOptGroupElement = HTMLOptGroupElement;
484
+ HTMLOptionElement = HTMLOptionElement;
485
+ HTMLOutputElement = HTMLOutputElement;
486
+ HTMLPElement = HTMLPElement;
487
+ HTMLParamElement = HTMLParamElement;
488
+ HTMLPictureElement = HTMLPictureElement;
489
+ HTMLPreElement = HTMLPreElement;
490
+ HTMLProgressElement = HTMLProgressElement;
491
+ HTMLQuoteElement = HTMLQuoteElement;
496
492
  HTMLScriptElement = HTMLScriptElement;
493
+ HTMLSelectElement = HTMLSelectElement;
494
+ HTMLSlotElement = HTMLSlotElement;
495
+ HTMLSourceElement = HTMLSourceElement;
496
+ HTMLSpanElement = HTMLSpanElement;
497
497
  HTMLStyleElement = HTMLStyleElement;
498
- HTMLFormElement = HTMLFormElement;
499
498
  HTMLTableElement = HTMLTableElement;
500
- HTMLUListElement = HTMLUListElement;
501
- HTMLOListElement = HTMLOListElement;
502
- HTMLLIElement = HTMLLIElement;
499
+ HTMLTbodyElement = HTMLTbodyElement;
500
+ HTMLTdElement = HTMLTdElement;
503
501
  HTMLTemplateElement = HTMLTemplateElement;
504
- HTMLTheadElement = HTMLTheadElement;
502
+ HTMLTextAreaElement = HTMLTextAreaElement;
505
503
  HTMLTfootElement = HTMLTfootElement;
506
- HTMLTrElement = HTMLTrElement;
507
- HTMLTdElement = HTMLTdElement;
504
+ HTMLTheadElement = HTMLTheadElement;
508
505
  HTMLThElement = HTMLThElement;
509
- HTMLCaptionElement = HTMLCaptionElement;
510
- HTMLTbodyElement = HTMLTbodyElement;
506
+ HTMLTimeElement = HTMLTimeElement;
507
+ HTMLTitleElement = HTMLTitleElement;
508
+ HTMLTrackElement = HTMLTrackElement;
509
+ HTMLTrElement = HTMLTrElement;
510
+ HTMLUListElement = HTMLUListElement;
511
+ HTMLVideoElement = HTMLVideoElement;
512
+
513
+ // Type Aliases
514
+ HTMLImageElement = HTMLImgElement;
515
+ HTMLParagraphElement = HTMLPElement;
516
+ HTMLHeadingElement = HTMLH1Element;
517
+ HTMLTableSectionElement = HTMLTbodyElement;
518
+ HTMLTableCellElement = HTMLTdElement;
519
+ HTMLTableRowElement = HTMLTrElement;
511
520
 
512
521
  constructor(config?: { initialUrl?: string }) {
513
522
  const documentBase = new DocumentBase();
514
-
515
- // Set window reference in document for load event
516
- if (this.document && (this.document as any).setWindow) {
517
- (this.document as any).setWindow(this);
523
+ if (documentBase && (documentBase as any).setWindow) {
524
+ (documentBase as any).setWindow(this);
518
525
  }
519
-
520
526
  this._location = new LocationBase(config?.initialUrl);
521
527
  documentBase.setLocation(this._location);
522
- this.document = documentBase;
528
+ this.document = documentBase as unknown as Document;
529
+ const customElementRegistryImp = new CustomElementRegistryImp();
530
+ customElementRegistryImp.setWindow(this);
531
+ this.customElements = customElementRegistryImp as unknown as CustomElementRegistry;
523
532
  this.history = new HistoryBase(this);
524
533
  this.navigator = new NavigatorBase();
525
534
  this.clientInformation = this.navigator;
526
-
527
- // Return a Proxy to handle the [index: number]: Window signature
528
- return new Proxy(this, {
529
- get(target: WindowBase, prop: string | symbol): any {
530
- // Handle numeric indices - return the window itself
531
- if (typeof prop === 'string' && /^\d+$/.test(prop)) {
532
- return target;
533
- }
534
- // Return the actual property
535
- return (target as any)[prop];
536
- },
537
-
538
- set(target: WindowBase, prop: string | symbol, value: any): boolean {
539
- // Handle numeric indices - ignore setting
540
- if (typeof prop === 'string' && /^\d+$/.test(prop)) {
541
- return true;
542
- }
543
- // Set the actual property
544
- (target as any)[prop] = value;
545
- return true;
546
- },
547
-
548
- has(target: WindowBase, prop: string | symbol): boolean {
549
- // Handle numeric indices
550
- if (typeof prop === 'string' && /^\d+$/.test(prop)) {
551
- return true;
552
- }
553
- // Check if property exists
554
- return prop in target;
555
- },
556
-
557
- ownKeys(target: WindowBase): ArrayLike<string | symbol> {
558
- // Get all own keys plus numeric indices for length
559
- const keys = Object.getOwnPropertyNames(target);
560
- // Add numeric indices based on length property
561
- for (let i = 0; i < target.length; i++) {
562
- keys.push(i.toString());
563
- }
564
- return keys;
565
- },
566
-
567
- getOwnPropertyDescriptor(target: WindowBase, prop: string | symbol): PropertyDescriptor | undefined {
568
- // Handle numeric indices
569
- if (typeof prop === 'string' && /^\d+$/.test(prop)) {
570
- return {
571
- enumerable: true,
572
- configurable: true,
573
- value: target
574
- };
575
- }
576
- // Return actual property descriptor
577
- return Object.getOwnPropertyDescriptor(target, prop);
578
- }
579
- });
580
- }
581
-
582
- // Window methods - all with empty implementations for server-side
583
- alert(message?: any): void {
584
535
  }
585
536
 
537
+ [index: number]: Window;
538
+ event: Event;
539
+ external: External;
540
+ frameElement: Element;
541
+ frames: Window;
542
+ innerHeight: number;
543
+ innerWidth: number;
544
+ length: number;
545
+ locationbar: BarProp;
546
+ menubar: BarProp;
547
+ name: string;
548
+ ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any;
549
+ ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any;
550
+ ondeviceorientationabsolute: (this: Window, ev: DeviceOrientationEvent) => any;
551
+ onorientationchange: (this: Window, ev: Event) => any;
552
+ opener: any;
553
+ orientation: number;
554
+ originAgentCluster: boolean;
555
+ outerHeight: number;
556
+ outerWidth: number;
557
+ pageXOffset: number;
558
+ pageYOffset: number;
559
+ parent: Window;
560
+ personalbar: BarProp;
561
+ screen: Screen;
562
+ screenLeft: number;
563
+ screenTop: number;
564
+ screenX: number;
565
+ screenY: number;
566
+ scrollX: number;
567
+ scrollY: number;
568
+ scrollbars: BarProp;
569
+ speechSynthesis: SpeechSynthesis;
570
+ status: string;
571
+ statusbar: BarProp;
572
+ toolbar: BarProp;
573
+ top: Window;
574
+ visualViewport: VisualViewport;
586
575
  blur(): void {
576
+ throw new Error('Method not implemented.');
587
577
  }
588
-
589
578
  cancelIdleCallback(handle: number): void {
579
+ throw new Error('Method not implemented.');
590
580
  }
591
-
592
581
  captureEvents(): void {
582
+ throw new Error('Method not implemented.');
593
583
  }
594
-
595
- close(): void {
596
- if (this._closed) return;
597
-
598
- this._closed = true;
599
-
600
- // Clear all timers
601
- this._timers.forEach(id => clearTimeout(id));
602
- this._timers.clear();
603
-
604
- // Clear all intervals
605
- this._intervals.forEach(id => clearInterval(id));
606
- this._intervals.clear();
607
-
608
- // Clear all animation frames
609
- this._animationFrames.forEach(id => clearTimeout(id));
610
- this._animationFrames.clear();
611
-
612
- // Remove all event listeners (clear references to prevent memory leaks)
613
- this._eventListeners.forEach(listener => {
614
- // Explicitly null out the listener function reference
615
- (listener as any).listener = null;
616
- });
617
- this._eventListeners.length = 0;
618
-
619
- // Clear all on* event handler properties
620
- this.onload = null;
621
- this.onunload = null;
622
- this.onbeforeunload = null;
623
- this.onpopstate = null;
624
- this.onerror = null;
625
- this.onmessage = null;
626
- this.onhashchange = null;
627
-
628
- // Clear document references
629
- if (this.document) {
630
- const doc = this.document as any;
631
-
632
- // Clear document content recursively
633
- if (doc.body) {
634
- this.clearNodeRecursively(doc.body);
635
- }
636
-
637
- if (doc.head) {
638
- this.clearNodeRecursively(doc.head);
639
- }
640
-
641
- if (doc.documentElement) {
642
- this.clearNodeRecursively(doc.documentElement);
643
- }
644
-
645
- // Break circular references
646
- if (doc.setWindow) {
647
- doc.setWindow(null);
648
- }
649
-
650
- // Clear document event listeners
651
- if (doc._eventListeners) {
652
- doc._eventListeners.forEach((listener: any) => {
653
- listener.listener = null;
654
- });
655
- doc._eventListeners.length = 0;
656
- }
657
- }
658
-
659
- // Clear history
660
- if (this.history) {
661
- const hist = this.history as any;
662
- if (hist.historyStack) {
663
- hist.historyStack.forEach((entry: any) => {
664
- entry.state = null;
665
- });
666
- hist.historyStack.length = 0;
667
- }
668
- hist.state = null;
669
- hist.window = null;
670
- }
671
-
672
- // Clear location callback
673
- if (this._location) {
674
- (this._location as any).urlChangeCallback = null;
675
- }
676
- }
677
-
678
- /**
679
- * Recursively clear a node and its children to prevent memory leaks
680
- */
681
- private clearNodeRecursively(node: any): void {
682
- if (!node) return;
683
-
684
- // Clear children first
685
- while (node.firstChild) {
686
- const child = node.firstChild;
687
- node.removeChild(child);
688
- this.clearNodeRecursively(child);
689
- }
690
-
691
- // Clear event listeners on the node
692
- if (node._eventListeners) {
693
- node._eventListeners.forEach((listener: any) => {
694
- listener.listener = null;
695
- });
696
- node._eventListeners.length = 0;
697
- }
698
-
699
- // Clear node properties that might hold references (safely)
700
- try {
701
- if (node.parentNode) {
702
- node.parentNode = null;
703
- }
704
- } catch (e) {
705
- // parentNode might be read-only
706
- }
707
-
708
- try {
709
- if (node.ownerDocument) {
710
- node.ownerDocument = null;
711
- }
712
- } catch (e) {
713
- // ownerDocument might be read-only (getter-only)
714
- }
715
-
716
- // Clear other potential circular references
717
- if (node._childNodes) {
718
- if (Array.isArray(node._childNodes)) {
719
- node._childNodes = [];
720
- } else if (node._childNodes instanceof Map) {
721
- node._childNodes.clear();
722
- }
723
- }
724
- if (node._attributes) {
725
- if (Array.isArray(node._attributes)) {
726
- node._attributes = [];
727
- } else if (node._attributes instanceof Map) {
728
- node._attributes.clear();
729
- }
730
- }
731
- }
732
-
733
584
  confirm(message?: string): boolean {
734
- return false;
585
+ throw new Error('Method not implemented.');
735
586
  }
736
-
737
587
  focus(): void {
588
+ throw new Error('Method not implemented.');
738
589
  }
739
-
740
590
  getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {
741
- return {} as CSSStyleDeclaration;
591
+ throw new Error('Method not implemented.');
742
592
  }
743
-
744
593
  getSelection(): Selection | null {
745
- return null;
594
+ throw new Error('Method not implemented.');
746
595
  }
747
-
748
596
  matchMedia(query: string): MediaQueryList {
749
- return {} as MediaQueryList;
597
+ throw new Error('Method not implemented.');
750
598
  }
751
-
752
599
  moveBy(x: number, y: number): void {
600
+ throw new Error('Method not implemented.');
753
601
  }
754
-
755
602
  moveTo(x: number, y: number): void {
603
+ throw new Error('Method not implemented.');
756
604
  }
757
-
758
605
  open(url?: string | URL, target?: string, features?: string): WindowProxy | null {
759
- return null;
606
+ throw new Error('Method not implemented.');
760
607
  }
761
-
762
- postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;
763
- postMessage(message: any, options?: WindowPostMessageOptions): void;
764
- postMessage(message: any, targetOriginOrOptions?: string | WindowPostMessageOptions, transfer?: Transferable[]): void {
608
+ postMessage(message: unknown, targetOrigin?: unknown, transfer?: unknown): void {
609
+ throw new Error('Method not implemented.');
765
610
  }
766
-
767
611
  print(): void {
612
+ throw new Error('Method not implemented.');
768
613
  }
769
-
770
614
  prompt(message?: string, _default?: string): string | null {
771
- return null;
615
+ throw new Error('Method not implemented.');
772
616
  }
773
-
774
617
  releaseEvents(): void {
618
+ throw new Error('Method not implemented.');
775
619
  }
776
-
777
620
  requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {
778
- return 0;
621
+ throw new Error('Method not implemented.');
779
622
  }
780
-
781
623
  resizeBy(x: number, y: number): void {
624
+ throw new Error('Method not implemented.');
782
625
  }
783
-
784
626
  resizeTo(width: number, height: number): void {
627
+ throw new Error('Method not implemented.');
785
628
  }
786
-
787
- scroll(options?: ScrollToOptions): void;
788
- scroll(x: number, y: number): void;
789
- scroll(optionsOrX?: ScrollToOptions | number, y?: number): void {
629
+ scroll(x?: unknown, y?: unknown): void {
630
+ throw new Error('Method not implemented.');
790
631
  }
791
-
792
- scrollBy(options?: ScrollToOptions): void;
793
- scrollBy(x: number, y: number): void;
794
- scrollBy(optionsOrX?: ScrollToOptions | number, y?: number): void {
632
+ scrollBy(x?: unknown, y?: unknown): void {
633
+ throw new Error('Method not implemented.');
795
634
  }
796
-
797
- scrollTo(options?: ScrollToOptions): void;
798
- scrollTo(x: number, y: number): void;
799
- scrollTo(optionsOrX?: ScrollToOptions | number, y?: number): void {
635
+ scrollTo(x?: unknown, y?: unknown): void {
636
+ throw new Error('Method not implemented.');
800
637
  }
801
-
802
638
  stop(): void {
639
+ throw new Error('Method not implemented.');
640
+ }
641
+ cancelAnimationFrame(handle: number): void {
642
+ throw new Error('Method not implemented.');
643
+ }
644
+ requestAnimationFrame(callback: FrameRequestCallback): number {
645
+ throw new Error('Method not implemented.');
646
+ }
647
+ onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;
648
+ onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
649
+ onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
650
+ onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
651
+ onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
652
+ onauxclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;
653
+ onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;
654
+ onbeforematch: (this: GlobalEventHandlers, ev: Event) => any;
655
+ onbeforetoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;
656
+ onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;
657
+ oncancel: (this: GlobalEventHandlers, ev: Event) => any;
658
+ oncanplay: (this: GlobalEventHandlers, ev: Event) => any;
659
+ oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;
660
+ onchange: (this: GlobalEventHandlers, ev: Event) => any;
661
+ onclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;
662
+ onclose: (this: GlobalEventHandlers, ev: Event) => any;
663
+ oncontextlost: (this: GlobalEventHandlers, ev: Event) => any;
664
+ oncontextmenu: (this: GlobalEventHandlers, ev: PointerEvent) => any;
665
+ oncontextrestored: (this: GlobalEventHandlers, ev: Event) => any;
666
+ oncopy: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
667
+ oncuechange: (this: GlobalEventHandlers, ev: Event) => any;
668
+ oncut: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
669
+ ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;
670
+ ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;
671
+ ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;
672
+ ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;
673
+ ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;
674
+ ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;
675
+ ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;
676
+ ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;
677
+ ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;
678
+ onemptied: (this: GlobalEventHandlers, ev: Event) => any;
679
+ onended: (this: GlobalEventHandlers, ev: Event) => any;
680
+ onerror: OnErrorEventHandlerNonNull;
681
+ onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;
682
+ onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;
683
+ ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
684
+ oninput: (this: GlobalEventHandlers, ev: Event) => any;
685
+ oninvalid: (this: GlobalEventHandlers, ev: Event) => any;
686
+ onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
687
+ onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
688
+ onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
689
+ onload: (this: GlobalEventHandlers, ev: Event) => any;
690
+ onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;
691
+ onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;
692
+ onloadstart: (this: GlobalEventHandlers, ev: Event) => any;
693
+ onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
694
+ onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;
695
+ onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;
696
+ onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;
697
+ onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;
698
+ onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;
699
+ onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;
700
+ onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;
701
+ onpaste: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
702
+ onpause: (this: GlobalEventHandlers, ev: Event) => any;
703
+ onplay: (this: GlobalEventHandlers, ev: Event) => any;
704
+ onplaying: (this: GlobalEventHandlers, ev: Event) => any;
705
+ onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;
706
+ onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;
707
+ onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;
708
+ onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;
709
+ onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;
710
+ onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;
711
+ onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;
712
+ onpointerrawupdate: (this: GlobalEventHandlers, ev: Event) => any;
713
+ onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;
714
+ onprogress: (this: GlobalEventHandlers, ev: ProgressEvent) => any;
715
+ onratechange: (this: GlobalEventHandlers, ev: Event) => any;
716
+ onreset: (this: GlobalEventHandlers, ev: Event) => any;
717
+ onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;
718
+ onscroll: (this: GlobalEventHandlers, ev: Event) => any;
719
+ onscrollend: (this: GlobalEventHandlers, ev: Event) => any;
720
+ onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;
721
+ onseeked: (this: GlobalEventHandlers, ev: Event) => any;
722
+ onseeking: (this: GlobalEventHandlers, ev: Event) => any;
723
+ onselect: (this: GlobalEventHandlers, ev: Event) => any;
724
+ onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;
725
+ onselectstart: (this: GlobalEventHandlers, ev: Event) => any;
726
+ onslotchange: (this: GlobalEventHandlers, ev: Event) => any;
727
+ onstalled: (this: GlobalEventHandlers, ev: Event) => any;
728
+ onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;
729
+ onsuspend: (this: GlobalEventHandlers, ev: Event) => any;
730
+ ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;
731
+ ontoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;
732
+ ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
733
+ ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
734
+ ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
735
+ ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
736
+ ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
737
+ ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
738
+ ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
739
+ ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
740
+ onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;
741
+ onwaiting: (this: GlobalEventHandlers, ev: Event) => any;
742
+ onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;
743
+ onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;
744
+ onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;
745
+ onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;
746
+ onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;
747
+ onafterprint: (this: WindowEventHandlers, ev: Event) => any;
748
+ onbeforeprint: (this: WindowEventHandlers, ev: Event) => any;
749
+ onbeforeunload: (this: WindowEventHandlers, ev: BeforeUnloadEvent) => any;
750
+ ongamepadconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;
751
+ ongamepaddisconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;
752
+ onhashchange: (this: WindowEventHandlers, ev: HashChangeEvent) => any;
753
+ onlanguagechange: (this: WindowEventHandlers, ev: Event) => any;
754
+ onmessage: (this: WindowEventHandlers, ev: MessageEvent) => any;
755
+ onmessageerror: (this: WindowEventHandlers, ev: MessageEvent) => any;
756
+ onoffline: (this: WindowEventHandlers, ev: Event) => any;
757
+ ononline: (this: WindowEventHandlers, ev: Event) => any;
758
+ onpagehide: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;
759
+ onpagereveal: (this: WindowEventHandlers, ev: PageRevealEvent) => any;
760
+ onpageshow: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;
761
+ onpageswap: (this: WindowEventHandlers, ev: PageSwapEvent) => any;
762
+ onpopstate: (this: WindowEventHandlers, ev: PopStateEvent) => any;
763
+ onrejectionhandled: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;
764
+ onstorage: (this: WindowEventHandlers, ev: StorageEvent) => any;
765
+ onunhandledrejection: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;
766
+ onunload: (this: WindowEventHandlers, ev: Event) => any;
767
+ localStorage: Storage;
768
+ caches: CacheStorage;
769
+ crossOriginIsolated: boolean;
770
+ crypto: Crypto;
771
+ indexedDB: IDBFactory;
772
+ isSecureContext: boolean;
773
+ origin: string;
774
+ performance: Performance;
775
+ atob(data: string): string {
776
+ throw new Error('Method not implemented.');
777
+ }
778
+ btoa(data: string): string {
779
+ throw new Error('Method not implemented.');
780
+ }
781
+ createImageBitmap(image: unknown, sx?: unknown, sy?: unknown, sw?: unknown, sh?: unknown, options?: unknown): Promise<ImageBitmap> {
782
+ throw new Error('Method not implemented.');
783
+ }
784
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
785
+ throw new Error('Method not implemented.');
786
+ }
787
+ queueMicrotask(callback: VoidFunction): void {
788
+ throw new Error('Method not implemented.');
803
789
  }
790
+ reportError(e: any): void {
791
+ throw new Error('Method not implemented.');
792
+ }
793
+ structuredClone<T = any>(value: T, options?: StructuredSerializeOptions): T {
794
+ throw new Error('Method not implemented.');
795
+ }
796
+ sessionStorage: Storage;
804
797
 
805
- // Timer methods
806
- setTimeout(callback: Function, delay?: number, ...args: any[]): number {
807
- if (this._closed) return 0;
798
+ alert(_message?: any): void {}
799
+ close(): void {
800
+ if (this._closed) return;
801
+ this._closed = true;
802
+ this._timers.forEach(id => clearTimeout(id));
803
+ this._intervals.forEach(id => clearInterval(id));
804
+ this._eventListeners.length = 0;
805
+ }
808
806
 
807
+ setTimeout(callback: Function, delay?: number, ...args: any[]): number {
809
808
  const id = setTimeout(() => {
810
- this._timers.delete(id);
809
+ this._timers.delete(id as any);
811
810
  callback(...args);
812
811
  }, delay) as any;
813
-
814
812
  this._timers.add(id);
815
813
  return id;
816
814
  }
817
-
818
815
  clearTimeout(id: number): void {
819
816
  clearTimeout(id);
820
817
  this._timers.delete(id);
821
818
  }
822
-
823
819
  setInterval(callback: Function, delay?: number, ...args: any[]): number {
824
- if (this._closed) return 0;
825
-
826
820
  const id = setInterval(callback, delay, ...args) as any;
827
821
  this._intervals.add(id);
828
822
  return id;
829
823
  }
830
-
831
824
  clearInterval(id: number): void {
832
825
  clearInterval(id);
833
826
  this._intervals.delete(id);
834
827
  }
835
828
 
836
- // Animation methods
837
- requestAnimationFrame(callback: FrameRequestCallback): number {
838
- if (this._closed) return 0;
839
-
840
- const id = this.setTimeout(callback, 16) as number;
841
- this._animationFrames.add(id);
842
- return id;
843
- }
844
-
845
- cancelAnimationFrame(id: number): void {
846
- this.clearTimeout(id);
847
- this._animationFrames.delete(id);
848
- }
849
-
850
- // Event methods
851
- addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
852
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
853
- addEventListener(type: any, listener: any, options?: any): void {
854
- // Support popstate, load, unload, and beforeunload events
855
- if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {
856
- this._eventListeners.push({
857
- type,
858
- listener: typeof listener === 'function' ? listener : listener.handleEvent,
859
- options
860
- });
861
- }
829
+ addEventListener(type: string, listener: any, options?: any): void {
830
+ // Basic support for major window events
831
+ this._eventListeners.push({
832
+ type,
833
+ listener: typeof listener === 'function' ? listener : listener?.handleEvent,
834
+ options
835
+ });
862
836
  }
863
837
 
864
- removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
865
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
866
- removeEventListener(type: any, listener: any, options?: any): void {
867
- if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {
868
- const targetListener = typeof listener === 'function' ? listener : listener.handleEvent;
869
- this._eventListeners = this._eventListeners.filter(
870
- eventListener => !(eventListener.type === type && eventListener.listener === targetListener)
871
- );
872
- }
838
+ removeEventListener(type: string, listener: any): void {
839
+ const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;
840
+ this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));
873
841
  }
874
-
875
842
  dispatchEvent(event: any): boolean {
876
- const eventListeners = this._eventListeners.filter(listener => listener.type === event.type);
843
+ const type = typeof event === 'string' ? event : event.type;
844
+ const listeners = [...this._eventListeners.filter(l => l.type === type)];
877
845
 
878
- for (const eventListener of eventListeners) {
846
+ for (const l of listeners) {
879
847
  try {
880
- eventListener.listener.call(this, event);
881
-
882
- // Handle 'once' option
883
- if (eventListener.options && typeof eventListener.options === 'object' && eventListener.options.once) {
884
- this.removeEventListener(event.type, eventListener.listener);
848
+ l.listener.call(this, event);
849
+ if (l.options?.once) {
850
+ this.removeEventListener(type, l.listener);
885
851
  }
886
- } catch (error) {
887
- console.error('Error in event listener:', error);
852
+ } catch (e) {
853
+ console.error(`Error in Window event listener for ${type}:`, e);
888
854
  }
889
855
  }
890
-
891
856
  return true;
892
857
  }
893
858
 
894
- /**
895
- * Dispatch a popstate event to registered listeners
896
- */
897
859
  private dispatchPopStateEvent(state: any, url?: string): void {
898
- const popStateEvent: PopStateEvent = {
899
- type: 'popstate',
900
- state,
901
- url
902
- };
903
-
904
- this.dispatchEvent(popStateEvent);
860
+ this.dispatchEvent({ type: 'popstate', state, url });
905
861
  }
906
-
907
- // EventTarget methods (inherited)
908
- // These are already covered by addEventListener/removeEventListener/dispatchEvent
909
-
910
- // GlobalEventHandlers - empty implementations
911
- onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;
912
- onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
913
- onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
914
- onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
915
- onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
916
- onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
917
- onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null = null;
918
- onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;
919
- oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
920
- oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
921
- oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
922
- onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
923
- onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
924
- onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
925
- oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
926
- oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
927
- oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
928
- oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
929
- ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
930
- ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
931
- ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
932
- ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
933
- ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
934
- ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
935
- ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
936
- ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
937
- ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
938
- onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
939
- onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
940
- onerror: OnErrorEventHandler = null;
941
- onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;
942
- onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null = null;
943
- ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
944
- oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
945
- oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
946
- onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
947
- onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
948
- onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
949
- onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
950
- onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
951
- onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
952
- onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
953
- onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
954
- onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
955
- onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
956
- onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
957
- onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
958
- onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
959
- onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
960
- onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
961
- onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
962
- onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
963
- onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
964
- onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
965
- onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
966
- onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
967
- onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
968
- onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
969
- onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
970
- onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
971
- onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
972
- onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
973
- onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null = null;
974
- onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
975
- onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
976
- onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;
977
- onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
978
- onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
979
- onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null = null;
980
- onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
981
- onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
982
- onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
983
- onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
984
- onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
985
- onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
986
- onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
987
- onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null = null;
988
- onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
989
- ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
990
- ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
991
- ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
992
- ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
993
- ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
994
- ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
995
- ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
996
- ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
997
- ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
998
- ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
999
- onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1000
- onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1001
- onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1002
- onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1003
- onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1004
- onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
1005
- onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null;
1006
-
1007
- // WindowEventHandlers - empty implementations
1008
- onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1009
- onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1010
- onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null = null;
1011
- onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null = null;
1012
- onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1013
- onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;
1014
- onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;
1015
- onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1016
- ononline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1017
- onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;
1018
- onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;
1019
- onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null = null;
1020
- onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;
1021
- onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null = null;
1022
- onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;
1023
- onunload: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
1024
-
1025
- // WindowLocalStorage
1026
- readonly localStorage: Storage = {} as Storage;
1027
-
1028
- // WindowOrWorkerGlobalScope - empty implementations
1029
- readonly caches: CacheStorage = {} as CacheStorage;
1030
- readonly crossOriginIsolated: boolean = false;
1031
- readonly crypto: Crypto = {} as Crypto;
1032
- readonly indexedDB: IDBFactory = {} as IDBFactory;
1033
- readonly isSecureContext: boolean = false;
1034
- readonly origin: string = 'null';
1035
- readonly performance: Performance = {} as Performance;
1036
-
1037
- atob(data: string): string {
1038
- return '';
1039
- }
1040
-
1041
- btoa(data: string): string {
1042
- return '';
1043
- }
1044
-
1045
- createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1046
- createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1047
- createImageBitmap(...args: any[]): Promise<ImageBitmap> {
1048
- return Promise.resolve({} as ImageBitmap);
1049
- }
1050
-
1051
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
1052
- return Promise.resolve({} as Response);
1053
- }
1054
-
1055
- queueMicrotask(callback: VoidFunction): void {
1056
- }
1057
-
1058
- reportError(e: any): void {
1059
- }
1060
-
1061
- structuredClone(value: any, options?: StructuredSerializeOptions): any {
1062
- return value;
1063
- }
1064
-
1065
- // WindowSessionStorage
1066
- readonly sessionStorage: Storage = {} as Storage;
1067
-
1068
- // AnimationFrameProvider - already implemented above
1069
-
1070
- // Index signature - getter implementation
1071
- [index: number]: Window;
1072
-
1073
-
1074
- /**
1075
- * Recursive HTML parsing
1076
- */
1077
- private parseHTMLRecursive(html: string, parent: any): void {
1078
- let position = 0;
1079
-
1080
- while (position < html.length) {
1081
- const tagStart = html.indexOf('<', position);
1082
-
1083
- if (tagStart === -1) {
1084
- const remainingText = html.substring(position).trim();
1085
- if (remainingText) {
1086
- const textNode = this.document.createTextNode(remainingText);
1087
- parent.appendChild(textNode);
1088
- }
1089
- break;
1090
- }
1091
-
1092
- if (tagStart > position) {
1093
- const textContent = html.substring(position, tagStart).trim();
1094
- if (textContent) {
1095
- const textNode = this.document.createTextNode(textContent);
1096
- parent.appendChild(textNode);
1097
- }
1098
- }
1099
-
1100
- const tagEnd = html.indexOf('>', tagStart);
1101
- if (tagEnd === -1) break;
1102
-
1103
- const tagContent = html.substring(tagStart + 1, tagEnd);
1104
-
1105
- if (tagContent.startsWith('/')) {
1106
- position = tagEnd + 1;
1107
- break;
1108
- }
1109
-
1110
- const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\s+/)[0]);
1111
- const spaceIndex = tagContent.indexOf(' ');
1112
- const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);
1113
- const attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1).replace('/', '');
1114
-
1115
- const element = this.document.createElement(tagName.toLowerCase());
1116
-
1117
- if (attributes.trim()) {
1118
- this.parseAttributes(attributes, element);
1119
- }
1120
-
1121
- // Handle special HTML structure tags
1122
- if (tagName.toLowerCase() === 'html') {
1123
- // Replace documentElement
1124
- (this.document as any).documentElement = element;
1125
- this.document.appendChild(element);
1126
- } else if (tagName.toLowerCase() === 'head') {
1127
- (this.document as any).head = element;
1128
- if (this.document.documentElement) {
1129
- this.document.documentElement.appendChild(element);
1130
- } else {
1131
- parent.appendChild(element);
1132
- }
1133
- } else if (tagName.toLowerCase() === 'body') {
1134
- (this.document as any).body = element;
1135
- if (this.document.documentElement) {
1136
- this.document.documentElement.appendChild(element);
1137
- } else {
1138
- parent.appendChild(element);
1139
- }
1140
- } else {
1141
- parent.appendChild(element);
1142
- }
1143
-
1144
- if (isSelfClosing) {
1145
- position = tagEnd + 1;
1146
- } else {
1147
- const closingTag = `</${tagName}>`;
1148
- const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);
1149
-
1150
- if (closingTagIndex !== -1) {
1151
- const innerContent = html.substring(tagEnd + 1, closingTagIndex);
1152
- if (innerContent.trim()) {
1153
- this.parseHTMLRecursive(innerContent, element);
1154
- }
1155
- position = closingTagIndex + closingTag.length;
1156
- } else {
1157
- position = tagEnd + 1;
1158
- }
1159
- }
1160
- }
1161
- }
1162
-
1163
- private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {
1164
- const openTag = `<${tagName}`;
1165
- const closeTag = `</${tagName}>`;
1166
- let depth = 1;
1167
- let pos = startPos;
1168
-
1169
- while (pos < html.length && depth > 0) {
1170
- const nextOpen = html.indexOf(openTag, pos);
1171
- const nextClose = html.indexOf(closeTag, pos);
1172
-
1173
- if (nextClose === -1) return -1;
1174
-
1175
- if (nextOpen !== -1 && nextOpen < nextClose) {
1176
- depth++;
1177
- pos = nextOpen + openTag.length;
1178
- } else {
1179
- depth--;
1180
- if (depth === 0) return nextClose;
1181
- pos = nextClose + closeTag.length;
1182
- }
1183
- }
1184
-
1185
- return -1;
1186
- }
1187
-
1188
- private parseAttributes(attributeString: string, element: any): void {
1189
- // Updated regex to handle hyphenated attribute names like dr-for-of, data-bind, etc.
1190
- const attrRegex = /([\w:-]+)(?:\s*=\s*(['"])(.*?)\2)?/g;
1191
- let match;
1192
-
1193
- while ((match = attrRegex.exec(attributeString)) !== null) {
1194
- const name = match[1];
1195
- let value = match[3] || ''; // match[3] is the content between quotes
1196
- element.setAttribute(name, value);
1197
- }
1198
- }
1199
-
1200
- private isSelfClosingTag(tagName: string): boolean {
1201
- const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
1202
- return selfClosingTags.includes(tagName.toLowerCase());
1203
- }
1204
-
1205
- /**
1206
- * Clear current document content
1207
- */
1208
- private clearDocumentContent(): void {
1209
- const doc = this.document as any;
1210
-
1211
- // Clear head content
1212
- if (doc.head) {
1213
- while (doc.head.firstChild) {
1214
- doc.head.removeChild(doc.head.firstChild);
1215
- }
1216
- }
1217
-
1218
- // Clear body content
1219
- if (doc.body) {
1220
- while (doc.body.firstChild) {
1221
- doc.body.removeChild(doc.body.firstChild);
1222
- }
1223
- }
1224
- }
1225
-
1226
-
1227
- }
862
+ }