happy-dom 16.8.1 → 17.0.1

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 (374) hide show
  1. package/cjs/PropertySymbol.cjs +13 -1
  2. package/cjs/PropertySymbol.cjs.map +1 -1
  3. package/cjs/PropertySymbol.d.ts +12 -0
  4. package/cjs/PropertySymbol.d.ts.map +1 -1
  5. package/cjs/async-task-manager/AsyncTaskManager.cjs +67 -18
  6. package/cjs/async-task-manager/AsyncTaskManager.cjs.map +1 -1
  7. package/cjs/async-task-manager/AsyncTaskManager.d.ts +5 -0
  8. package/cjs/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
  9. package/cjs/browser/BrowserSettingsFactory.cjs +4 -0
  10. package/cjs/browser/BrowserSettingsFactory.cjs.map +1 -1
  11. package/cjs/browser/BrowserSettingsFactory.d.ts.map +1 -1
  12. package/cjs/browser/DefaultBrowserSettings.cjs +3 -0
  13. package/cjs/browser/DefaultBrowserSettings.cjs.map +1 -1
  14. package/cjs/browser/DefaultBrowserSettings.d.ts.map +1 -1
  15. package/cjs/browser/types/IBrowserSettings.d.ts +6 -0
  16. package/cjs/browser/types/IBrowserSettings.d.ts.map +1 -1
  17. package/cjs/browser/types/IOptionalBrowserSettings.d.ts +6 -0
  18. package/cjs/browser/types/IOptionalBrowserSettings.d.ts.map +1 -1
  19. package/cjs/browser/utilities/BrowserFrameNavigator.cjs.map +1 -1
  20. package/cjs/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  21. package/cjs/dom/DOMTokenList.cjs +7 -4
  22. package/cjs/dom/DOMTokenList.cjs.map +1 -1
  23. package/cjs/dom/DOMTokenList.d.ts +5 -3
  24. package/cjs/dom/DOMTokenList.d.ts.map +1 -1
  25. package/cjs/event/EventTarget.cjs +31 -5
  26. package/cjs/event/EventTarget.cjs.map +1 -1
  27. package/cjs/event/EventTarget.d.ts.map +1 -1
  28. package/cjs/fetch/Fetch.cjs +67 -13
  29. package/cjs/fetch/Fetch.cjs.map +1 -1
  30. package/cjs/fetch/Fetch.d.ts +3 -0
  31. package/cjs/fetch/Fetch.d.ts.map +1 -1
  32. package/cjs/fetch/Request.cjs +119 -27
  33. package/cjs/fetch/Request.cjs.map +1 -1
  34. package/cjs/fetch/Request.d.ts +65 -9
  35. package/cjs/fetch/Request.d.ts.map +1 -1
  36. package/cjs/fetch/ResourceFetch.cjs +91 -13
  37. package/cjs/fetch/ResourceFetch.cjs.map +1 -1
  38. package/cjs/fetch/ResourceFetch.d.ts +21 -11
  39. package/cjs/fetch/ResourceFetch.d.ts.map +1 -1
  40. package/cjs/fetch/SyncFetch.cjs +36 -7
  41. package/cjs/fetch/SyncFetch.cjs.map +1 -1
  42. package/cjs/fetch/SyncFetch.d.ts.map +1 -1
  43. package/cjs/fetch/preload/PreloadEntry.cjs +44 -0
  44. package/cjs/fetch/preload/PreloadEntry.cjs.map +1 -0
  45. package/cjs/fetch/preload/PreloadEntry.d.ts +26 -0
  46. package/cjs/fetch/preload/PreloadEntry.d.ts.map +1 -0
  47. package/cjs/fetch/preload/PreloadUtility.cjs +29 -0
  48. package/cjs/fetch/preload/PreloadUtility.cjs.map +1 -0
  49. package/cjs/fetch/preload/PreloadUtility.d.ts +26 -0
  50. package/cjs/fetch/preload/PreloadUtility.d.ts.map +1 -0
  51. package/cjs/fetch/types/IRequestInit.d.ts +2 -0
  52. package/cjs/fetch/types/IRequestInit.d.ts.map +1 -1
  53. package/cjs/fetch/types/IRequestMode.cjs +3 -0
  54. package/cjs/fetch/types/IRequestMode.cjs.map +1 -0
  55. package/cjs/fetch/types/IRequestMode.d.ts +3 -0
  56. package/cjs/fetch/types/IRequestMode.d.ts.map +1 -0
  57. package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs +1 -1
  58. package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs.map +1 -1
  59. package/cjs/module/CSSModule.cjs +47 -0
  60. package/cjs/module/CSSModule.cjs.map +1 -0
  61. package/cjs/module/CSSModule.d.ts +34 -0
  62. package/cjs/module/CSSModule.d.ts.map +1 -0
  63. package/cjs/module/ECMAScriptModule.cjs +157 -0
  64. package/cjs/module/ECMAScriptModule.cjs.map +1 -0
  65. package/cjs/module/ECMAScriptModule.d.ts +36 -0
  66. package/cjs/module/ECMAScriptModule.d.ts.map +1 -0
  67. package/cjs/module/ECMAScriptModuleCompiler.cjs +550 -0
  68. package/cjs/module/ECMAScriptModuleCompiler.cjs.map +1 -0
  69. package/cjs/module/ECMAScriptModuleCompiler.d.ts +31 -0
  70. package/cjs/module/ECMAScriptModuleCompiler.d.ts.map +1 -0
  71. package/cjs/module/IECMAScriptModuleCompiledResult.cjs +3 -0
  72. package/cjs/module/IECMAScriptModuleCompiledResult.cjs.map +1 -0
  73. package/cjs/module/IECMAScriptModuleCompiledResult.d.ts +21 -0
  74. package/cjs/module/IECMAScriptModuleCompiledResult.d.ts.map +1 -0
  75. package/cjs/module/IECMAScriptModuleImport.cjs +3 -0
  76. package/cjs/module/IECMAScriptModuleImport.cjs.map +1 -0
  77. package/cjs/module/IECMAScriptModuleImport.d.ts +5 -0
  78. package/cjs/module/IECMAScriptModuleImport.d.ts.map +1 -0
  79. package/cjs/module/IModule.cjs +3 -0
  80. package/cjs/module/IModule.cjs.map +1 -0
  81. package/cjs/module/IModule.d.ts +21 -0
  82. package/cjs/module/IModule.d.ts.map +1 -0
  83. package/cjs/module/IModuleImportMap.cjs +3 -0
  84. package/cjs/module/IModuleImportMap.cjs.map +1 -0
  85. package/cjs/module/IModuleImportMap.d.ts +10 -0
  86. package/cjs/module/IModuleImportMap.d.ts.map +1 -0
  87. package/cjs/module/IModuleImportMapRule.cjs +3 -0
  88. package/cjs/module/IModuleImportMapRule.cjs.map +1 -0
  89. package/cjs/module/IModuleImportMapRule.d.ts +5 -0
  90. package/cjs/module/IModuleImportMapRule.d.ts.map +1 -0
  91. package/cjs/module/IModuleImportMapScope.cjs +3 -0
  92. package/cjs/module/IModuleImportMapScope.cjs.map +1 -0
  93. package/cjs/module/IModuleImportMapScope.d.ts +6 -0
  94. package/cjs/module/IModuleImportMapScope.d.ts.map +1 -0
  95. package/cjs/module/JSONModule.cjs +52 -0
  96. package/cjs/module/JSONModule.cjs.map +1 -0
  97. package/cjs/module/JSONModule.d.ts +33 -0
  98. package/cjs/module/JSONModule.d.ts.map +1 -0
  99. package/cjs/module/ModuleFactory.cjs +136 -0
  100. package/cjs/module/ModuleFactory.cjs.map +1 -0
  101. package/cjs/module/ModuleFactory.d.ts +33 -0
  102. package/cjs/module/ModuleFactory.d.ts.map +1 -0
  103. package/cjs/module/ModuleURLUtility.cjs +67 -0
  104. package/cjs/module/ModuleURLUtility.cjs.map +1 -0
  105. package/cjs/module/ModuleURLUtility.d.ts +17 -0
  106. package/cjs/module/ModuleURLUtility.d.ts.map +1 -0
  107. package/cjs/module/UnresolvedModule.cjs +70 -0
  108. package/cjs/module/UnresolvedModule.cjs.map +1 -0
  109. package/cjs/module/UnresolvedModule.d.ts +43 -0
  110. package/cjs/module/UnresolvedModule.d.ts.map +1 -0
  111. package/cjs/nodes/document/Document.cjs +1 -0
  112. package/cjs/nodes/document/Document.cjs.map +1 -1
  113. package/cjs/nodes/document/Document.d.ts +2 -0
  114. package/cjs/nodes/document/Document.d.ts.map +1 -1
  115. package/cjs/nodes/element/Element.cjs +21 -5
  116. package/cjs/nodes/element/Element.cjs.map +1 -1
  117. package/cjs/nodes/element/Element.d.ts +6 -0
  118. package/cjs/nodes/element/Element.d.ts.map +1 -1
  119. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +8 -0
  120. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  121. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
  122. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  123. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs +8 -0
  124. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs.map +1 -1
  125. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
  126. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  127. package/cjs/nodes/html-element/HTMLElement.cjs +3 -0
  128. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  129. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  130. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +7 -3
  131. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  132. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  133. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +147 -19
  134. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
  135. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
  136. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  137. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +8 -0
  138. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
  139. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
  140. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  141. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +380 -46
  142. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  143. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
  144. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  145. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs +0 -1
  146. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs.map +1 -1
  147. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
  148. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
  149. package/cjs/query-selector/QuerySelector.cjs +16 -7
  150. package/cjs/query-selector/QuerySelector.cjs.map +1 -1
  151. package/cjs/query-selector/QuerySelector.d.ts +2 -1
  152. package/cjs/query-selector/QuerySelector.d.ts.map +1 -1
  153. package/cjs/utilities/AttributeUtility.cjs +36 -0
  154. package/cjs/utilities/AttributeUtility.cjs.map +1 -0
  155. package/cjs/utilities/AttributeUtility.d.ts +18 -0
  156. package/cjs/utilities/AttributeUtility.d.ts.map +1 -0
  157. package/cjs/window/BrowserWindow.cjs +73 -6
  158. package/cjs/window/BrowserWindow.cjs.map +1 -1
  159. package/cjs/window/BrowserWindow.d.ts +14 -0
  160. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  161. package/lib/PropertySymbol.d.ts +12 -0
  162. package/lib/PropertySymbol.d.ts.map +1 -1
  163. package/lib/PropertySymbol.js +12 -0
  164. package/lib/PropertySymbol.js.map +1 -1
  165. package/lib/async-task-manager/AsyncTaskManager.d.ts +5 -0
  166. package/lib/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
  167. package/lib/async-task-manager/AsyncTaskManager.js +67 -18
  168. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
  169. package/lib/browser/BrowserSettingsFactory.d.ts.map +1 -1
  170. package/lib/browser/BrowserSettingsFactory.js +4 -0
  171. package/lib/browser/BrowserSettingsFactory.js.map +1 -1
  172. package/lib/browser/DefaultBrowserSettings.d.ts.map +1 -1
  173. package/lib/browser/DefaultBrowserSettings.js +3 -0
  174. package/lib/browser/DefaultBrowserSettings.js.map +1 -1
  175. package/lib/browser/types/IBrowserSettings.d.ts +6 -0
  176. package/lib/browser/types/IBrowserSettings.d.ts.map +1 -1
  177. package/lib/browser/types/IOptionalBrowserSettings.d.ts +6 -0
  178. package/lib/browser/types/IOptionalBrowserSettings.d.ts.map +1 -1
  179. package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  180. package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
  181. package/lib/dom/DOMTokenList.d.ts +5 -3
  182. package/lib/dom/DOMTokenList.d.ts.map +1 -1
  183. package/lib/dom/DOMTokenList.js +7 -4
  184. package/lib/dom/DOMTokenList.js.map +1 -1
  185. package/lib/event/EventTarget.d.ts.map +1 -1
  186. package/lib/event/EventTarget.js +31 -5
  187. package/lib/event/EventTarget.js.map +1 -1
  188. package/lib/fetch/Fetch.d.ts +3 -0
  189. package/lib/fetch/Fetch.d.ts.map +1 -1
  190. package/lib/fetch/Fetch.js +64 -10
  191. package/lib/fetch/Fetch.js.map +1 -1
  192. package/lib/fetch/Request.d.ts +65 -9
  193. package/lib/fetch/Request.d.ts.map +1 -1
  194. package/lib/fetch/Request.js +116 -24
  195. package/lib/fetch/Request.js.map +1 -1
  196. package/lib/fetch/ResourceFetch.d.ts +21 -11
  197. package/lib/fetch/ResourceFetch.d.ts.map +1 -1
  198. package/lib/fetch/ResourceFetch.js +68 -13
  199. package/lib/fetch/ResourceFetch.js.map +1 -1
  200. package/lib/fetch/SyncFetch.d.ts.map +1 -1
  201. package/lib/fetch/SyncFetch.js +36 -7
  202. package/lib/fetch/SyncFetch.js.map +1 -1
  203. package/lib/fetch/preload/PreloadEntry.d.ts +26 -0
  204. package/lib/fetch/preload/PreloadEntry.d.ts.map +1 -0
  205. package/lib/fetch/preload/PreloadEntry.js +41 -0
  206. package/lib/fetch/preload/PreloadEntry.js.map +1 -0
  207. package/lib/fetch/preload/PreloadUtility.d.ts +26 -0
  208. package/lib/fetch/preload/PreloadUtility.d.ts.map +1 -0
  209. package/lib/fetch/preload/PreloadUtility.js +26 -0
  210. package/lib/fetch/preload/PreloadUtility.js.map +1 -0
  211. package/lib/fetch/types/IRequestInit.d.ts +2 -0
  212. package/lib/fetch/types/IRequestInit.d.ts.map +1 -1
  213. package/lib/fetch/types/IRequestMode.d.ts +3 -0
  214. package/lib/fetch/types/IRequestMode.d.ts.map +1 -0
  215. package/lib/fetch/types/IRequestMode.js +2 -0
  216. package/lib/fetch/types/IRequestMode.js.map +1 -0
  217. package/lib/fetch/utilities/FetchRequestReferrerUtility.js +1 -1
  218. package/lib/fetch/utilities/FetchRequestReferrerUtility.js.map +1 -1
  219. package/lib/module/CSSModule.d.ts +34 -0
  220. package/lib/module/CSSModule.d.ts.map +1 -0
  221. package/lib/module/CSSModule.js +44 -0
  222. package/lib/module/CSSModule.js.map +1 -0
  223. package/lib/module/ECMAScriptModule.d.ts +36 -0
  224. package/lib/module/ECMAScriptModule.d.ts.map +1 -0
  225. package/lib/module/ECMAScriptModule.js +128 -0
  226. package/lib/module/ECMAScriptModule.js.map +1 -0
  227. package/lib/module/ECMAScriptModuleCompiler.d.ts +31 -0
  228. package/lib/module/ECMAScriptModuleCompiler.d.ts.map +1 -0
  229. package/lib/module/ECMAScriptModuleCompiler.js +521 -0
  230. package/lib/module/ECMAScriptModuleCompiler.js.map +1 -0
  231. package/lib/module/IECMAScriptModuleCompiledResult.d.ts +21 -0
  232. package/lib/module/IECMAScriptModuleCompiledResult.d.ts.map +1 -0
  233. package/lib/module/IECMAScriptModuleCompiledResult.js +2 -0
  234. package/lib/module/IECMAScriptModuleCompiledResult.js.map +1 -0
  235. package/lib/module/IECMAScriptModuleImport.d.ts +5 -0
  236. package/lib/module/IECMAScriptModuleImport.d.ts.map +1 -0
  237. package/lib/module/IECMAScriptModuleImport.js +2 -0
  238. package/lib/module/IECMAScriptModuleImport.js.map +1 -0
  239. package/lib/module/IModule.d.ts +21 -0
  240. package/lib/module/IModule.d.ts.map +1 -0
  241. package/lib/module/IModule.js +2 -0
  242. package/lib/module/IModule.js.map +1 -0
  243. package/lib/module/IModuleImportMap.d.ts +10 -0
  244. package/lib/module/IModuleImportMap.d.ts.map +1 -0
  245. package/lib/module/IModuleImportMap.js +2 -0
  246. package/lib/module/IModuleImportMap.js.map +1 -0
  247. package/lib/module/IModuleImportMapRule.d.ts +5 -0
  248. package/lib/module/IModuleImportMapRule.d.ts.map +1 -0
  249. package/lib/module/IModuleImportMapRule.js +2 -0
  250. package/lib/module/IModuleImportMapRule.js.map +1 -0
  251. package/lib/module/IModuleImportMapScope.d.ts +6 -0
  252. package/lib/module/IModuleImportMapScope.d.ts.map +1 -0
  253. package/lib/module/IModuleImportMapScope.js +2 -0
  254. package/lib/module/IModuleImportMapScope.js.map +1 -0
  255. package/lib/module/JSONModule.d.ts +33 -0
  256. package/lib/module/JSONModule.d.ts.map +1 -0
  257. package/lib/module/JSONModule.js +49 -0
  258. package/lib/module/JSONModule.js.map +1 -0
  259. package/lib/module/ModuleFactory.d.ts +33 -0
  260. package/lib/module/ModuleFactory.d.ts.map +1 -0
  261. package/lib/module/ModuleFactory.js +107 -0
  262. package/lib/module/ModuleFactory.js.map +1 -0
  263. package/lib/module/ModuleURLUtility.d.ts +17 -0
  264. package/lib/module/ModuleURLUtility.d.ts.map +1 -0
  265. package/lib/module/ModuleURLUtility.js +41 -0
  266. package/lib/module/ModuleURLUtility.js.map +1 -0
  267. package/lib/module/UnresolvedModule.d.ts +43 -0
  268. package/lib/module/UnresolvedModule.d.ts.map +1 -0
  269. package/lib/module/UnresolvedModule.js +67 -0
  270. package/lib/module/UnresolvedModule.js.map +1 -0
  271. package/lib/nodes/document/Document.d.ts +2 -0
  272. package/lib/nodes/document/Document.d.ts.map +1 -1
  273. package/lib/nodes/document/Document.js +1 -0
  274. package/lib/nodes/document/Document.js.map +1 -1
  275. package/lib/nodes/element/Element.d.ts +6 -0
  276. package/lib/nodes/element/Element.d.ts.map +1 -1
  277. package/lib/nodes/element/Element.js +21 -5
  278. package/lib/nodes/element/Element.js.map +1 -1
  279. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
  280. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  281. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +8 -0
  282. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  283. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
  284. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  285. package/lib/nodes/html-area-element/HTMLAreaElement.js +8 -0
  286. package/lib/nodes/html-area-element/HTMLAreaElement.js.map +1 -1
  287. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  288. package/lib/nodes/html-element/HTMLElement.js +3 -0
  289. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  290. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  291. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +7 -3
  292. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  293. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
  294. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  295. package/lib/nodes/html-link-element/HTMLLinkElement.js +147 -19
  296. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  297. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
  298. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  299. package/lib/nodes/html-media-element/HTMLMediaElement.js +8 -0
  300. package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
  301. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
  302. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  303. package/lib/nodes/html-script-element/HTMLScriptElement.js +380 -46
  304. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  305. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
  306. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
  307. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js +0 -1
  308. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js.map +1 -1
  309. package/lib/query-selector/QuerySelector.d.ts +2 -1
  310. package/lib/query-selector/QuerySelector.d.ts.map +1 -1
  311. package/lib/query-selector/QuerySelector.js +16 -7
  312. package/lib/query-selector/QuerySelector.js.map +1 -1
  313. package/lib/utilities/AttributeUtility.d.ts +18 -0
  314. package/lib/utilities/AttributeUtility.d.ts.map +1 -0
  315. package/lib/utilities/AttributeUtility.js +29 -0
  316. package/lib/utilities/AttributeUtility.js.map +1 -0
  317. package/lib/window/BrowserWindow.d.ts +14 -0
  318. package/lib/window/BrowserWindow.d.ts.map +1 -1
  319. package/lib/window/BrowserWindow.js +73 -6
  320. package/lib/window/BrowserWindow.js.map +1 -1
  321. package/package.json +1 -1
  322. package/src/PropertySymbol.ts +12 -0
  323. package/src/async-task-manager/AsyncTaskManager.ts +81 -19
  324. package/src/browser/BrowserSettingsFactory.ts +4 -0
  325. package/src/browser/DefaultBrowserSettings.ts +3 -0
  326. package/src/browser/types/IBrowserSettings.ts +7 -0
  327. package/src/browser/types/IOptionalBrowserSettings.ts +7 -0
  328. package/src/browser/utilities/BrowserFrameNavigator.ts +2 -7
  329. package/src/dom/DOMTokenList.ts +12 -4
  330. package/src/event/EventTarget.ts +31 -11
  331. package/src/fetch/Fetch.ts +82 -16
  332. package/src/fetch/Request.ts +132 -24
  333. package/src/fetch/ResourceFetch.ts +99 -14
  334. package/src/fetch/SyncFetch.ts +41 -9
  335. package/src/fetch/preload/PreloadEntry.ts +46 -0
  336. package/src/fetch/preload/PreloadUtility.ts +33 -0
  337. package/src/fetch/types/IRequestInit.ts +2 -0
  338. package/src/fetch/types/IRequestMode.ts +2 -0
  339. package/src/fetch/utilities/FetchRequestReferrerUtility.ts +1 -1
  340. package/src/module/CSSModule.ts +54 -0
  341. package/src/module/ECMAScriptModule.ts +171 -0
  342. package/src/module/ECMAScriptModuleCompiler.ts +567 -0
  343. package/src/module/IECMAScriptModuleCompiledResult.ts +14 -0
  344. package/src/module/IECMAScriptModuleImport.ts +4 -0
  345. package/src/module/IModule.ts +20 -0
  346. package/src/module/IModuleImportMap.ts +10 -0
  347. package/src/module/IModuleImportMapRule.ts +4 -0
  348. package/src/module/IModuleImportMapScope.ts +6 -0
  349. package/src/module/JSONModule.ts +59 -0
  350. package/src/module/ModuleFactory.ts +134 -0
  351. package/src/module/ModuleURLUtility.ts +51 -0
  352. package/src/module/UnresolvedModule.ts +77 -0
  353. package/src/nodes/document/Document.ts +2 -0
  354. package/src/nodes/element/Element.ts +25 -7
  355. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +9 -0
  356. package/src/nodes/html-area-element/HTMLAreaElement.ts +9 -0
  357. package/src/nodes/html-element/HTMLElement.ts +3 -0
  358. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +9 -8
  359. package/src/nodes/html-link-element/HTMLLinkElement.ts +181 -28
  360. package/src/nodes/html-media-element/HTMLMediaElement.ts +9 -0
  361. package/src/nodes/html-script-element/HTMLScriptElement.ts +441 -69
  362. package/src/nodes/html-table-cell-element/HTMLTableCellElement.ts +0 -3
  363. package/src/query-selector/QuerySelector.ts +19 -8
  364. package/src/utilities/AttributeUtility.ts +43 -0
  365. package/src/window/BrowserWindow.ts +77 -10
  366. package/cjs/window/WindowErrorUtility.cjs +0 -85
  367. package/cjs/window/WindowErrorUtility.cjs.map +0 -1
  368. package/cjs/window/WindowErrorUtility.d.ts +0 -27
  369. package/cjs/window/WindowErrorUtility.d.ts.map +0 -1
  370. package/lib/window/WindowErrorUtility.d.ts +0 -27
  371. package/lib/window/WindowErrorUtility.d.ts.map +0 -1
  372. package/lib/window/WindowErrorUtility.js +0 -56
  373. package/lib/window/WindowErrorUtility.js.map +0 -1
  374. package/src/window/WindowErrorUtility.ts +0 -68
@@ -2,13 +2,16 @@ import HTMLElement from '../html-element/HTMLElement.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import Event from '../../event/Event.js';
4
4
  import ErrorEvent from '../../event/events/ErrorEvent.js';
5
- import WindowErrorUtility from '../../window/WindowErrorUtility.js';
6
5
  import WindowBrowserContext from '../../window/WindowBrowserContext.js';
7
6
  import BrowserErrorCaptureEnum from '../../browser/enums/BrowserErrorCaptureEnum.js';
8
7
  import Attr from '../attr/Attr.js';
9
8
  import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
10
9
  import ResourceFetch from '../../fetch/ResourceFetch.js';
11
- import DocumentReadyStateManager from '../document/DocumentReadyStateManager.js';
10
+ import ECMAScriptModule from '../../module/ECMAScriptModule.js';
11
+ import ModuleFactory from '../../module/ModuleFactory.js';
12
+ import DOMTokenList from '../../dom/DOMTokenList.js';
13
+ import IModuleImportMap from '../../module/IModuleImportMap.js';
14
+ import IRequestReferrerPolicy from '../../fetch/types/IRequestReferrerPolicy.js';
12
15
 
13
16
  /**
14
17
  * HTML Script Element.
@@ -26,9 +29,11 @@ export default class HTMLScriptElement extends HTMLElement {
26
29
 
27
30
  // Internal properties
28
31
  public [PropertySymbol.evaluateScript] = true;
32
+ public [PropertySymbol.blocking]: DOMTokenList | null = null;
29
33
 
30
34
  // Private properties
31
35
  #loadedScriptURL: string | null = null;
36
+
32
37
  /**
33
38
  * Returns type.
34
39
  *
@@ -47,6 +52,144 @@ export default class HTMLScriptElement extends HTMLElement {
47
52
  this.setAttribute('type', type);
48
53
  }
49
54
 
55
+ /**
56
+ * Returns blocking.
57
+ */
58
+ public get blocking(): DOMTokenList {
59
+ if (!this[PropertySymbol.blocking]) {
60
+ this[PropertySymbol.blocking] = new DOMTokenList(
61
+ PropertySymbol.illegalConstructor,
62
+ this,
63
+ 'blocking'
64
+ );
65
+ }
66
+ return this[PropertySymbol.blocking];
67
+ }
68
+
69
+ /**
70
+ * Sets blocking.
71
+ *
72
+ * @param value Value.
73
+ */
74
+ public set blocking(value: string) {
75
+ this.setAttribute('blocking', value);
76
+ }
77
+
78
+ /**
79
+ * Returns crossOrigin.
80
+ *
81
+ * @returns CrossOrigin.
82
+ */
83
+ public get crossOrigin(): string {
84
+ return this.getAttribute('crossorigin') || '';
85
+ }
86
+
87
+ /**
88
+ * Sets crossOrigin.
89
+ *
90
+ * @param crossOrigin CrossOrigin.
91
+ */
92
+ public set crossOrigin(crossOrigin: string) {
93
+ this.setAttribute('crossorigin', crossOrigin);
94
+ }
95
+
96
+ /**
97
+ * Returns fetch priority.
98
+ *
99
+ * @returns Fetch priority.
100
+ */
101
+ public get fetchPriority(): 'auto' | 'high' | 'low' | 'normal' {
102
+ const fetchPriority = this.getAttribute('fetchpriority');
103
+ switch (fetchPriority) {
104
+ case 'high':
105
+ case 'low':
106
+ case 'normal':
107
+ return fetchPriority;
108
+ default:
109
+ return 'auto';
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Sets fetch priority.
115
+ *
116
+ * @param fetchPriority Fetch priority.
117
+ */
118
+ public set fetchPriority(fetchPriority: 'auto' | 'high' | 'low' | 'normal') {
119
+ this.setAttribute('fetchpriority', fetchPriority);
120
+ }
121
+
122
+ /**
123
+ * Returns noModule.
124
+ *
125
+ * @returns NoModule.
126
+ */
127
+ public get noModule(): boolean {
128
+ return this.getAttribute('nomodule') !== null;
129
+ }
130
+
131
+ /**
132
+ * Sets noModule.
133
+ *
134
+ * @param noModule NoModule.
135
+ */
136
+ public set noModule(noModule: boolean) {
137
+ if (noModule) {
138
+ this.setAttribute('nomodule', '');
139
+ } else {
140
+ this.removeAttribute('nomodule');
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Returns integrity.
146
+ *
147
+ * @returns Integrity.
148
+ */
149
+ public get integrity(): string {
150
+ return this.getAttribute('integrity') || '';
151
+ }
152
+
153
+ /**
154
+ * Sets integrity.
155
+ *
156
+ * @param integrity Integrity.
157
+ */
158
+ public set integrity(integrity: string) {
159
+ this.setAttribute('integrity', integrity);
160
+ }
161
+
162
+ /**
163
+ * Returns referrerPolicy.
164
+ *
165
+ * @returns ReferrerPolicy.
166
+ */
167
+ public get referrerPolicy(): IRequestReferrerPolicy {
168
+ const referrerPolicy = this.getAttribute('referrerpolicy');
169
+ switch (referrerPolicy) {
170
+ case 'no-referrer':
171
+ case 'no-referrer-when-downgrade':
172
+ case 'same-origin':
173
+ case 'origin':
174
+ case 'strict-origin':
175
+ case 'origin-when-cross-origin':
176
+ case 'strict-origin-when-cross-origin':
177
+ case 'unsafe-url':
178
+ return referrerPolicy;
179
+ default:
180
+ return '';
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Sets referrerPolicy.
186
+ *
187
+ * @param referrerPolicy ReferrerPolicy.
188
+ */
189
+ public set referrerPolicy(referrerPolicy: string) {
190
+ this.setAttribute('referrerpolicy', referrerPolicy);
191
+ }
192
+
50
193
  /**
51
194
  * Returns source.
52
195
  *
@@ -191,33 +334,28 @@ export default class HTMLScriptElement extends HTMLElement {
191
334
  const src = this.getAttribute('src');
192
335
 
193
336
  if (src !== null) {
194
- this.#loadScript(src);
337
+ if (this.getAttribute('type') === 'module') {
338
+ this.#loadModule(src);
339
+ } else {
340
+ this.#loadScript(src);
341
+ }
195
342
  } else if (browserSettings && !browserSettings.disableJavaScriptEvaluation) {
196
- const textContent = this.textContent;
343
+ const source = this.textContent;
197
344
  const type = this.getAttribute('type');
198
- if (
199
- textContent &&
200
- (type === null ||
345
+
346
+ if (source) {
347
+ if (type === 'module') {
348
+ this.#evaluateModule(source);
349
+ } else if (type === 'importmap') {
350
+ this.#evaluateImportMap(source);
351
+ } else if (
352
+ type === null ||
201
353
  type === 'application/x-ecmascript' ||
202
354
  type === 'application/x-javascript' ||
203
- type.startsWith('text/javascript'))
204
- ) {
205
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
206
-
207
- const code = `//# sourceURL=${this[PropertySymbol.window].location.href}\n` + textContent;
208
-
209
- if (
210
- browserSettings.disableErrorCapturing ||
211
- browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
355
+ type.startsWith('text/javascript')
212
356
  ) {
213
- this[PropertySymbol.window].eval(code);
214
- } else {
215
- WindowErrorUtility.captureError(this[PropertySymbol.window], () =>
216
- this[PropertySymbol.window].eval(code)
217
- );
357
+ this.#evaluateScript(source);
218
358
  }
219
-
220
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
221
359
  }
222
360
  }
223
361
  }
@@ -237,8 +375,213 @@ export default class HTMLScriptElement extends HTMLElement {
237
375
  attribute[PropertySymbol.value] !== null &&
238
376
  this[PropertySymbol.isConnected]
239
377
  ) {
240
- this.#loadScript(attribute[PropertySymbol.value]);
378
+ if (this.getAttribute('type') === 'module') {
379
+ this.#loadModule(attribute[PropertySymbol.value]);
380
+ } else {
381
+ this.#loadScript(attribute[PropertySymbol.value]);
382
+ }
383
+ }
384
+ }
385
+
386
+ /**
387
+ * Evaluates a module.
388
+ *
389
+ * @param source Source.
390
+ */
391
+ async #evaluateModule(source: string): Promise<void> {
392
+ const url = this[PropertySymbol.ownerDocument].location;
393
+ const window = this[PropertySymbol.window];
394
+ const browserSettings = new WindowBrowserContext(window).getSettings();
395
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
396
+
397
+ if (!browserFrame) {
398
+ return;
399
+ }
400
+
401
+ const module = new ECMAScriptModule(window, url, source);
402
+ const readyStateManager = window[PropertySymbol.readyStateManager];
403
+
404
+ readyStateManager.startTask();
405
+
406
+ if (
407
+ browserSettings.disableErrorCapturing ||
408
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
409
+ ) {
410
+ await module.evaluate();
411
+ } else {
412
+ try {
413
+ await module.evaluate();
414
+ } catch (error) {
415
+ window[PropertySymbol.dispatchError](error);
416
+ return;
417
+ }
418
+ }
419
+
420
+ readyStateManager.endTask();
421
+
422
+ this.dispatchEvent(new Event('load'));
423
+ }
424
+
425
+ /**
426
+ * Evaluates an import map.
427
+ *
428
+ * @param source Source.
429
+ */
430
+ async #evaluateImportMap(source: string): Promise<void> {
431
+ const window = this[PropertySymbol.window];
432
+ const browserSettings = new WindowBrowserContext(window).getSettings();
433
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
434
+
435
+ if (!browserFrame || window[PropertySymbol.moduleImportMap]) {
436
+ return;
437
+ }
438
+
439
+ let json: any;
440
+ if (
441
+ browserSettings.disableErrorCapturing ||
442
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
443
+ ) {
444
+ json = JSON.parse(source);
445
+ } else {
446
+ try {
447
+ json = JSON.parse(source);
448
+ } catch (error) {
449
+ window[PropertySymbol.dispatchError](error);
450
+ return;
451
+ }
452
+ }
453
+
454
+ if (json.imports || json.scopes) {
455
+ const importMap: IModuleImportMap = {
456
+ imports: [],
457
+ scopes: []
458
+ };
459
+
460
+ if (json.imports) {
461
+ for (const key of Object.keys(json.imports)) {
462
+ importMap.imports.push({
463
+ from: key,
464
+ to: json.imports[key]
465
+ });
466
+ }
467
+ }
468
+
469
+ if (json.scopes) {
470
+ for (const scopeKey of Object.keys(json.scopes)) {
471
+ const scope = {
472
+ scope: scopeKey,
473
+ rules: []
474
+ };
475
+ for (const importKey of Object.keys(json.scopes[scopeKey])) {
476
+ const value = json.scopes[scopeKey][importKey];
477
+ scope.rules.push({
478
+ from: importKey,
479
+ to: value
480
+ });
481
+ }
482
+ importMap.scopes.push(scope);
483
+ }
484
+ }
485
+
486
+ window[PropertySymbol.moduleImportMap] = importMap;
487
+ }
488
+ }
489
+
490
+ /**
491
+ * Evaluates a script.
492
+ *
493
+ * @param source Source.
494
+ */
495
+ #evaluateScript(source: string): Promise<void> {
496
+ const window = this[PropertySymbol.window];
497
+ const browserSettings = new WindowBrowserContext(window).getSettings();
498
+
499
+ if (!browserSettings) {
500
+ return;
501
+ }
502
+
503
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
504
+
505
+ const code = `//# sourceURL=${this[PropertySymbol.ownerDocument].location.href}\n` + source;
506
+
507
+ if (
508
+ browserSettings.disableErrorCapturing ||
509
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
510
+ ) {
511
+ window.eval(code);
512
+ } else {
513
+ try {
514
+ window.eval(code);
515
+ } catch (error) {
516
+ window[PropertySymbol.dispatchError](error);
517
+ }
518
+ }
519
+
520
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
521
+ }
522
+
523
+ /**
524
+ * Loads a module.
525
+ *
526
+ * @param url URL.
527
+ */
528
+ async #loadModule(url: string): Promise<void> {
529
+ const window = this[PropertySymbol.window];
530
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
531
+ const browserSettings = new WindowBrowserContext(window).getSettings();
532
+
533
+ if (!browserSettings) {
534
+ return;
535
+ }
536
+
537
+ if (!url || !this[PropertySymbol.isConnected] || this.getAttribute('type') !== 'module') {
538
+ return;
539
+ }
540
+
541
+ if (
542
+ browserSettings &&
543
+ (browserSettings.disableJavaScriptFileLoading || browserSettings.disableJavaScriptEvaluation)
544
+ ) {
545
+ if (browserSettings.handleDisabledFileLoadingAsSuccess) {
546
+ this.dispatchEvent(new Event('load'));
547
+ } else {
548
+ const error = new window.DOMException(
549
+ `Failed to load module "${url}". JavaScript file loading is disabled.`,
550
+ DOMExceptionNameEnum.notSupportedError
551
+ );
552
+ browserFrame.page?.console.error(error);
553
+ this.dispatchEvent(new Event('error'));
554
+ }
555
+ return;
241
556
  }
557
+
558
+ const readyStateManager = window[PropertySymbol.readyStateManager];
559
+
560
+ readyStateManager.startTask();
561
+
562
+ // TODO: What to do with "referrerPolicy" and "crossOrigin" for modules?
563
+ // @see https://github.com/w3c/webappsec-referrer-policy/issues/111
564
+
565
+ if (
566
+ browserSettings.disableErrorCapturing ||
567
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
568
+ ) {
569
+ const module = await ModuleFactory.getModule(window, window.location, url);
570
+ await module.evaluate();
571
+ } else {
572
+ try {
573
+ const module = await ModuleFactory.getModule(window, window.location, url);
574
+ await module.evaluate();
575
+ } catch (error) {
576
+ browserFrame.page?.console.error(error);
577
+ this.dispatchEvent(new Event('error'));
578
+ readyStateManager.endTask();
579
+ return;
580
+ }
581
+ }
582
+
583
+ readyStateManager.endTask();
584
+ this.dispatchEvent(new Event('load'));
242
585
  }
243
586
 
244
587
  /**
@@ -249,29 +592,34 @@ export default class HTMLScriptElement extends HTMLElement {
249
592
  async #loadScript(url: string): Promise<void> {
250
593
  const window = this[PropertySymbol.window];
251
594
  const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
252
- const async =
253
- this.getAttribute('async') !== null ||
254
- this.getAttribute('defer') !== null ||
255
- this.getAttribute('type') === 'module';
256
595
 
257
596
  if (!browserFrame) {
258
597
  return;
259
598
  }
260
599
 
261
600
  const browserSettings = browserFrame.page?.context?.browser?.settings;
601
+ const type = this.getAttribute('type');
262
602
 
263
- if (!url || !this[PropertySymbol.isConnected]) {
603
+ if (
604
+ !url ||
605
+ !this[PropertySymbol.isConnected] ||
606
+ (type !== null &&
607
+ type !== 'application/x-ecmascript' &&
608
+ type !== 'application/x-javascript' &&
609
+ !type.startsWith('text/javascript'))
610
+ ) {
264
611
  return;
265
612
  }
266
613
 
267
- let absoluteURL: string;
614
+ let absoluteURL: URL;
268
615
  try {
269
- absoluteURL = new URL(url, this[PropertySymbol.window].location.href).href;
616
+ absoluteURL = new URL(url, window.location.href);
270
617
  } catch (error) {
271
618
  return;
272
619
  }
273
620
 
274
- if (this.#loadedScriptURL === absoluteURL) {
621
+ const absoluteURLString = absoluteURL.toString();
622
+ if (this.#loadedScriptURL === absoluteURLString) {
275
623
  return;
276
624
  }
277
625
 
@@ -282,66 +630,90 @@ export default class HTMLScriptElement extends HTMLElement {
282
630
  if (browserSettings.handleDisabledFileLoadingAsSuccess) {
283
631
  this.dispatchEvent(new Event('load'));
284
632
  } else {
285
- WindowErrorUtility.dispatchError(
286
- this,
287
- new window.DOMException(
288
- `Failed to load external script "${absoluteURL}". JavaScript file loading is disabled.`,
289
- DOMExceptionNameEnum.notSupportedError
290
- )
633
+ const error = new window.DOMException(
634
+ `Failed to load script "${absoluteURL}". JavaScript file loading is disabled.`,
635
+ DOMExceptionNameEnum.notSupportedError
291
636
  );
637
+ browserFrame.page?.console.error(error);
638
+ this.dispatchEvent(new Event('error'));
292
639
  }
293
640
  return;
294
641
  }
295
642
 
296
- const resourceFetch = new ResourceFetch({
297
- browserFrame,
298
- window: this[PropertySymbol.window]
299
- });
300
- let code: string | null = null;
301
- let error: Error | null = null;
643
+ this.#loadedScriptURL = absoluteURLString;
302
644
 
303
- this.#loadedScriptURL = absoluteURL;
645
+ const resourceFetch = new ResourceFetch(window);
646
+ const async = this.getAttribute('async') !== null || this.getAttribute('defer') !== null;
647
+ let code: string | null = null;
304
648
 
305
649
  if (async) {
306
- const readyStateManager = (<
307
- { [PropertySymbol.readyStateManager]: DocumentReadyStateManager }
308
- >(<unknown>this[PropertySymbol.window]))[PropertySymbol.readyStateManager];
650
+ const readyStateManager = window[PropertySymbol.readyStateManager];
309
651
 
310
652
  readyStateManager.startTask();
311
653
 
312
654
  try {
313
- code = await resourceFetch.fetch(absoluteURL);
314
- } catch (e) {
315
- error = e;
655
+ code = await resourceFetch.fetch(absoluteURLString, 'script', {
656
+ credentials: this.crossOrigin === 'use-credentials' ? 'include' : 'same-origin',
657
+ referrerPolicy: this.referrerPolicy
658
+ });
659
+ } catch (error) {
660
+ browserFrame.page?.console.error(error);
661
+ this.dispatchEvent(new Event('error'));
662
+ return;
316
663
  }
317
664
 
318
665
  readyStateManager.endTask();
319
666
  } else {
320
667
  try {
321
- code = resourceFetch.fetchSync(absoluteURL);
322
- } catch (e) {
323
- error = e;
668
+ code = resourceFetch.fetchSync(absoluteURLString, 'script', {
669
+ credentials: this.crossOrigin === 'use-credentials' ? 'include' : 'same-origin',
670
+ referrerPolicy: this.referrerPolicy
671
+ });
672
+ } catch (error) {
673
+ browserFrame.page?.console.error(error);
674
+ this.dispatchEvent(new Event('error'));
675
+ return;
324
676
  }
325
677
  }
326
678
 
327
- if (error) {
328
- WindowErrorUtility.dispatchError(this, error);
329
- } else {
330
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
331
- code = '//# sourceURL=' + absoluteURL + '\n' + code;
679
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
332
680
 
333
- if (
334
- browserSettings.disableErrorCapturing ||
335
- browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
336
- ) {
681
+ code = '//# sourceURL=' + absoluteURL + '\n' + code;
682
+
683
+ if (
684
+ browserSettings.disableErrorCapturing ||
685
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
686
+ ) {
687
+ this[PropertySymbol.window].eval(code);
688
+ } else {
689
+ try {
337
690
  this[PropertySymbol.window].eval(code);
338
- } else {
339
- WindowErrorUtility.captureError(this[PropertySymbol.window], () =>
340
- this[PropertySymbol.window].eval(code)
341
- );
691
+ } catch (error) {
692
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
693
+ window[PropertySymbol.dispatchError](error);
694
+ return;
342
695
  }
343
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
344
- this.dispatchEvent(new Event('load'));
696
+ }
697
+
698
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
699
+ this.dispatchEvent(new Event('load'));
700
+ }
701
+
702
+ /**
703
+ * Returns true if the given type is supported.
704
+ *
705
+ * @param type Type.
706
+ * @returns True if the given type is supported.
707
+ */
708
+ public static supports(type: string): boolean {
709
+ switch (type) {
710
+ case 'classic':
711
+ case 'module':
712
+ case 'importmap':
713
+ return true;
714
+ case 'speculationrules':
715
+ default:
716
+ return false;
345
717
  }
346
718
  }
347
719
  }
@@ -1,7 +1,6 @@
1
1
  import QuerySelector from '../../query-selector/QuerySelector.js';
2
2
  import HTMLElement from '../html-element/HTMLElement.js';
3
3
  import * as PropertySymbol from '../../PropertySymbol.js';
4
- import DOMTokenList from '../../dom/DOMTokenList.js';
5
4
 
6
5
  /**
7
6
  * HTMLTableCellElement
@@ -9,8 +8,6 @@ import DOMTokenList from '../../dom/DOMTokenList.js';
9
8
  * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement
10
9
  */
11
10
  export default class HTMLTableCellElement extends HTMLElement {
12
- public [PropertySymbol.headers]: DOMTokenList | null = null;
13
-
14
11
  /**
15
12
  * Returns abbr.
16
13
  *
@@ -249,18 +249,25 @@ export default class QuerySelector {
249
249
  (node[PropertySymbol.ownerDocument] || node)[PropertySymbol.affectsCache].push(cachedItem);
250
250
  }
251
251
 
252
+ const matchesMap: Map<string, Element> = new Map();
253
+ const matchedPositions: string[] = [];
252
254
  for (const items of SelectorParser.getSelectorGroups(selector)) {
253
255
  const match =
254
256
  node[PropertySymbol.nodeType] === NodeTypeEnum.elementNode
255
257
  ? this.findFirst(<Element>node, [<Element>node], items, cachedItem)
256
258
  : this.findFirst(null, (<Element>node)[PropertySymbol.elementArray], items, cachedItem);
257
259
 
258
- if (match) {
259
- cachedItem.result = new WeakRef(match);
260
- return match;
260
+ if (match && !matchesMap.has(match.documentPosition)) {
261
+ matchesMap.set(match.documentPosition, match.element);
262
+ matchedPositions.push(match.documentPosition);
261
263
  }
262
264
  }
263
265
 
266
+ if (matchedPositions.length > 0) {
267
+ const keys = matchedPositions.sort();
268
+ return matchesMap.get(keys[0]);
269
+ }
270
+
264
271
  return null;
265
272
  }
266
273
 
@@ -560,26 +567,30 @@ export default class QuerySelector {
560
567
  * @param children Child elements.
561
568
  * @param selectorItems Selector items.
562
569
  * @param cachedItem Cached item.
563
- * @returns HTML element.
570
+ * @param [documentPosition] Document position of the element.
571
+ * @returns Document position and element map.
564
572
  */
565
573
  private static findFirst(
566
574
  rootElement: Element,
567
575
  children: Element[],
568
576
  selectorItems: SelectorItem[],
569
- cachedItem: ICachedQuerySelectorItem
570
- ): Element {
577
+ cachedItem: ICachedQuerySelectorItem,
578
+ documentPosition?: string
579
+ ): DocumentPositionAndElement | null {
571
580
  const selectorItem = selectorItems[0];
572
581
  const nextSelectorItem = selectorItems[1];
573
582
 
574
- for (const child of children) {
583
+ for (let i = 0, max = children.length; i < max; i++) {
584
+ const child = children[i];
575
585
  const childrenOfChild = (<Element>child)[PropertySymbol.elementArray];
586
+ const position = (documentPosition ? documentPosition + '>' : '') + String.fromCharCode(i);
576
587
 
577
588
  child[PropertySymbol.affectsCache].push(cachedItem);
578
589
 
579
590
  if (selectorItem.match(child)) {
580
591
  if (!nextSelectorItem) {
581
592
  if (rootElement !== child) {
582
- return child;
593
+ return { documentPosition: position, element: child };
583
594
  }
584
595
  } else {
585
596
  switch (nextSelectorItem.combinator) {