happy-dom 16.8.0 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) 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/element/NamedNodeMap.cjs +1 -0
  120. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  121. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  122. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +8 -0
  123. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  124. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
  125. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  126. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs +8 -0
  127. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs.map +1 -1
  128. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
  129. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  130. package/cjs/nodes/html-element/HTMLElement.cjs +3 -0
  131. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  132. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  133. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +7 -3
  134. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  135. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  136. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +147 -19
  137. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
  138. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
  139. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  140. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +8 -0
  141. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
  142. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
  143. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  144. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +380 -46
  145. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  146. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
  147. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  148. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs +0 -1
  149. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs.map +1 -1
  150. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
  151. package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
  152. package/cjs/utilities/AttributeUtility.cjs +36 -0
  153. package/cjs/utilities/AttributeUtility.cjs.map +1 -0
  154. package/cjs/utilities/AttributeUtility.d.ts +18 -0
  155. package/cjs/utilities/AttributeUtility.d.ts.map +1 -0
  156. package/cjs/window/BrowserWindow.cjs +73 -6
  157. package/cjs/window/BrowserWindow.cjs.map +1 -1
  158. package/cjs/window/BrowserWindow.d.ts +14 -0
  159. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  160. package/lib/PropertySymbol.d.ts +12 -0
  161. package/lib/PropertySymbol.d.ts.map +1 -1
  162. package/lib/PropertySymbol.js +12 -0
  163. package/lib/PropertySymbol.js.map +1 -1
  164. package/lib/async-task-manager/AsyncTaskManager.d.ts +5 -0
  165. package/lib/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
  166. package/lib/async-task-manager/AsyncTaskManager.js +67 -18
  167. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
  168. package/lib/browser/BrowserSettingsFactory.d.ts.map +1 -1
  169. package/lib/browser/BrowserSettingsFactory.js +4 -0
  170. package/lib/browser/BrowserSettingsFactory.js.map +1 -1
  171. package/lib/browser/DefaultBrowserSettings.d.ts.map +1 -1
  172. package/lib/browser/DefaultBrowserSettings.js +3 -0
  173. package/lib/browser/DefaultBrowserSettings.js.map +1 -1
  174. package/lib/browser/types/IBrowserSettings.d.ts +6 -0
  175. package/lib/browser/types/IBrowserSettings.d.ts.map +1 -1
  176. package/lib/browser/types/IOptionalBrowserSettings.d.ts +6 -0
  177. package/lib/browser/types/IOptionalBrowserSettings.d.ts.map +1 -1
  178. package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  179. package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
  180. package/lib/dom/DOMTokenList.d.ts +5 -3
  181. package/lib/dom/DOMTokenList.d.ts.map +1 -1
  182. package/lib/dom/DOMTokenList.js +7 -4
  183. package/lib/dom/DOMTokenList.js.map +1 -1
  184. package/lib/event/EventTarget.d.ts.map +1 -1
  185. package/lib/event/EventTarget.js +31 -5
  186. package/lib/event/EventTarget.js.map +1 -1
  187. package/lib/fetch/Fetch.d.ts +3 -0
  188. package/lib/fetch/Fetch.d.ts.map +1 -1
  189. package/lib/fetch/Fetch.js +64 -10
  190. package/lib/fetch/Fetch.js.map +1 -1
  191. package/lib/fetch/Request.d.ts +65 -9
  192. package/lib/fetch/Request.d.ts.map +1 -1
  193. package/lib/fetch/Request.js +116 -24
  194. package/lib/fetch/Request.js.map +1 -1
  195. package/lib/fetch/ResourceFetch.d.ts +21 -11
  196. package/lib/fetch/ResourceFetch.d.ts.map +1 -1
  197. package/lib/fetch/ResourceFetch.js +68 -13
  198. package/lib/fetch/ResourceFetch.js.map +1 -1
  199. package/lib/fetch/SyncFetch.d.ts.map +1 -1
  200. package/lib/fetch/SyncFetch.js +36 -7
  201. package/lib/fetch/SyncFetch.js.map +1 -1
  202. package/lib/fetch/preload/PreloadEntry.d.ts +26 -0
  203. package/lib/fetch/preload/PreloadEntry.d.ts.map +1 -0
  204. package/lib/fetch/preload/PreloadEntry.js +41 -0
  205. package/lib/fetch/preload/PreloadEntry.js.map +1 -0
  206. package/lib/fetch/preload/PreloadUtility.d.ts +26 -0
  207. package/lib/fetch/preload/PreloadUtility.d.ts.map +1 -0
  208. package/lib/fetch/preload/PreloadUtility.js +26 -0
  209. package/lib/fetch/preload/PreloadUtility.js.map +1 -0
  210. package/lib/fetch/types/IRequestInit.d.ts +2 -0
  211. package/lib/fetch/types/IRequestInit.d.ts.map +1 -1
  212. package/lib/fetch/types/IRequestMode.d.ts +3 -0
  213. package/lib/fetch/types/IRequestMode.d.ts.map +1 -0
  214. package/lib/fetch/types/IRequestMode.js +2 -0
  215. package/lib/fetch/types/IRequestMode.js.map +1 -0
  216. package/lib/fetch/utilities/FetchRequestReferrerUtility.js +1 -1
  217. package/lib/fetch/utilities/FetchRequestReferrerUtility.js.map +1 -1
  218. package/lib/module/CSSModule.d.ts +34 -0
  219. package/lib/module/CSSModule.d.ts.map +1 -0
  220. package/lib/module/CSSModule.js +44 -0
  221. package/lib/module/CSSModule.js.map +1 -0
  222. package/lib/module/ECMAScriptModule.d.ts +36 -0
  223. package/lib/module/ECMAScriptModule.d.ts.map +1 -0
  224. package/lib/module/ECMAScriptModule.js +128 -0
  225. package/lib/module/ECMAScriptModule.js.map +1 -0
  226. package/lib/module/ECMAScriptModuleCompiler.d.ts +31 -0
  227. package/lib/module/ECMAScriptModuleCompiler.d.ts.map +1 -0
  228. package/lib/module/ECMAScriptModuleCompiler.js +521 -0
  229. package/lib/module/ECMAScriptModuleCompiler.js.map +1 -0
  230. package/lib/module/IECMAScriptModuleCompiledResult.d.ts +21 -0
  231. package/lib/module/IECMAScriptModuleCompiledResult.d.ts.map +1 -0
  232. package/lib/module/IECMAScriptModuleCompiledResult.js +2 -0
  233. package/lib/module/IECMAScriptModuleCompiledResult.js.map +1 -0
  234. package/lib/module/IECMAScriptModuleImport.d.ts +5 -0
  235. package/lib/module/IECMAScriptModuleImport.d.ts.map +1 -0
  236. package/lib/module/IECMAScriptModuleImport.js +2 -0
  237. package/lib/module/IECMAScriptModuleImport.js.map +1 -0
  238. package/lib/module/IModule.d.ts +21 -0
  239. package/lib/module/IModule.d.ts.map +1 -0
  240. package/lib/module/IModule.js +2 -0
  241. package/lib/module/IModule.js.map +1 -0
  242. package/lib/module/IModuleImportMap.d.ts +10 -0
  243. package/lib/module/IModuleImportMap.d.ts.map +1 -0
  244. package/lib/module/IModuleImportMap.js +2 -0
  245. package/lib/module/IModuleImportMap.js.map +1 -0
  246. package/lib/module/IModuleImportMapRule.d.ts +5 -0
  247. package/lib/module/IModuleImportMapRule.d.ts.map +1 -0
  248. package/lib/module/IModuleImportMapRule.js +2 -0
  249. package/lib/module/IModuleImportMapRule.js.map +1 -0
  250. package/lib/module/IModuleImportMapScope.d.ts +6 -0
  251. package/lib/module/IModuleImportMapScope.d.ts.map +1 -0
  252. package/lib/module/IModuleImportMapScope.js +2 -0
  253. package/lib/module/IModuleImportMapScope.js.map +1 -0
  254. package/lib/module/JSONModule.d.ts +33 -0
  255. package/lib/module/JSONModule.d.ts.map +1 -0
  256. package/lib/module/JSONModule.js +49 -0
  257. package/lib/module/JSONModule.js.map +1 -0
  258. package/lib/module/ModuleFactory.d.ts +33 -0
  259. package/lib/module/ModuleFactory.d.ts.map +1 -0
  260. package/lib/module/ModuleFactory.js +107 -0
  261. package/lib/module/ModuleFactory.js.map +1 -0
  262. package/lib/module/ModuleURLUtility.d.ts +17 -0
  263. package/lib/module/ModuleURLUtility.d.ts.map +1 -0
  264. package/lib/module/ModuleURLUtility.js +41 -0
  265. package/lib/module/ModuleURLUtility.js.map +1 -0
  266. package/lib/module/UnresolvedModule.d.ts +43 -0
  267. package/lib/module/UnresolvedModule.d.ts.map +1 -0
  268. package/lib/module/UnresolvedModule.js +67 -0
  269. package/lib/module/UnresolvedModule.js.map +1 -0
  270. package/lib/nodes/document/Document.d.ts +2 -0
  271. package/lib/nodes/document/Document.d.ts.map +1 -1
  272. package/lib/nodes/document/Document.js +1 -0
  273. package/lib/nodes/document/Document.js.map +1 -1
  274. package/lib/nodes/element/Element.d.ts +6 -0
  275. package/lib/nodes/element/Element.d.ts.map +1 -1
  276. package/lib/nodes/element/Element.js +21 -5
  277. package/lib/nodes/element/Element.js.map +1 -1
  278. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  279. package/lib/nodes/element/NamedNodeMap.js +1 -0
  280. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  281. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
  282. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  283. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +8 -0
  284. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  285. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
  286. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  287. package/lib/nodes/html-area-element/HTMLAreaElement.js +8 -0
  288. package/lib/nodes/html-area-element/HTMLAreaElement.js.map +1 -1
  289. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  290. package/lib/nodes/html-element/HTMLElement.js +3 -0
  291. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  292. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  293. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +7 -3
  294. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  295. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
  296. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  297. package/lib/nodes/html-link-element/HTMLLinkElement.js +147 -19
  298. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  299. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
  300. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  301. package/lib/nodes/html-media-element/HTMLMediaElement.js +8 -0
  302. package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
  303. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
  304. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  305. package/lib/nodes/html-script-element/HTMLScriptElement.js +380 -46
  306. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  307. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
  308. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
  309. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js +0 -1
  310. package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js.map +1 -1
  311. package/lib/utilities/AttributeUtility.d.ts +18 -0
  312. package/lib/utilities/AttributeUtility.d.ts.map +1 -0
  313. package/lib/utilities/AttributeUtility.js +29 -0
  314. package/lib/utilities/AttributeUtility.js.map +1 -0
  315. package/lib/window/BrowserWindow.d.ts +14 -0
  316. package/lib/window/BrowserWindow.d.ts.map +1 -1
  317. package/lib/window/BrowserWindow.js +73 -6
  318. package/lib/window/BrowserWindow.js.map +1 -1
  319. package/package.json +1 -1
  320. package/src/PropertySymbol.ts +12 -0
  321. package/src/async-task-manager/AsyncTaskManager.ts +81 -19
  322. package/src/browser/BrowserSettingsFactory.ts +4 -0
  323. package/src/browser/DefaultBrowserSettings.ts +3 -0
  324. package/src/browser/types/IBrowserSettings.ts +7 -0
  325. package/src/browser/types/IOptionalBrowserSettings.ts +7 -0
  326. package/src/browser/utilities/BrowserFrameNavigator.ts +2 -7
  327. package/src/dom/DOMTokenList.ts +12 -4
  328. package/src/event/EventTarget.ts +31 -11
  329. package/src/fetch/Fetch.ts +82 -16
  330. package/src/fetch/Request.ts +132 -24
  331. package/src/fetch/ResourceFetch.ts +99 -14
  332. package/src/fetch/SyncFetch.ts +41 -9
  333. package/src/fetch/preload/PreloadEntry.ts +46 -0
  334. package/src/fetch/preload/PreloadUtility.ts +33 -0
  335. package/src/fetch/types/IRequestInit.ts +2 -0
  336. package/src/fetch/types/IRequestMode.ts +2 -0
  337. package/src/fetch/utilities/FetchRequestReferrerUtility.ts +1 -1
  338. package/src/module/CSSModule.ts +54 -0
  339. package/src/module/ECMAScriptModule.ts +171 -0
  340. package/src/module/ECMAScriptModuleCompiler.ts +567 -0
  341. package/src/module/IECMAScriptModuleCompiledResult.ts +14 -0
  342. package/src/module/IECMAScriptModuleImport.ts +4 -0
  343. package/src/module/IModule.ts +20 -0
  344. package/src/module/IModuleImportMap.ts +10 -0
  345. package/src/module/IModuleImportMapRule.ts +4 -0
  346. package/src/module/IModuleImportMapScope.ts +6 -0
  347. package/src/module/JSONModule.ts +59 -0
  348. package/src/module/ModuleFactory.ts +134 -0
  349. package/src/module/ModuleURLUtility.ts +51 -0
  350. package/src/module/UnresolvedModule.ts +77 -0
  351. package/src/nodes/document/Document.ts +2 -0
  352. package/src/nodes/element/Element.ts +25 -7
  353. package/src/nodes/element/NamedNodeMap.ts +1 -0
  354. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +9 -0
  355. package/src/nodes/html-area-element/HTMLAreaElement.ts +9 -0
  356. package/src/nodes/html-element/HTMLElement.ts +3 -0
  357. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +9 -8
  358. package/src/nodes/html-link-element/HTMLLinkElement.ts +181 -28
  359. package/src/nodes/html-media-element/HTMLMediaElement.ts +9 -0
  360. package/src/nodes/html-script-element/HTMLScriptElement.ts +441 -69
  361. package/src/nodes/html-table-cell-element/HTMLTableCellElement.ts +0 -3
  362. package/src/utilities/AttributeUtility.ts +43 -0
  363. package/src/window/BrowserWindow.ts +77 -10
  364. package/cjs/window/WindowErrorUtility.cjs +0 -85
  365. package/cjs/window/WindowErrorUtility.cjs.map +0 -1
  366. package/cjs/window/WindowErrorUtility.d.ts +0 -27
  367. package/cjs/window/WindowErrorUtility.d.ts.map +0 -1
  368. package/lib/window/WindowErrorUtility.d.ts +0 -27
  369. package/lib/window/WindowErrorUtility.d.ts.map +0 -1
  370. package/lib/window/WindowErrorUtility.js +0 -56
  371. package/lib/window/WindowErrorUtility.js.map +0 -1
  372. package/src/window/WindowErrorUtility.ts +0 -68
@@ -3,6 +3,8 @@ import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import Event from '../../event/Event.js';
4
4
  import ErrorEvent from '../../event/events/ErrorEvent.js';
5
5
  import Attr from '../attr/Attr.js';
6
+ import DOMTokenList from '../../dom/DOMTokenList.js';
7
+ import IRequestReferrerPolicy from '../../fetch/types/IRequestReferrerPolicy.js';
6
8
  /**
7
9
  * HTML Script Element.
8
10
  *
@@ -15,6 +17,7 @@ export default class HTMLScriptElement extends HTMLElement {
15
17
  onerror: (event: ErrorEvent) => void;
16
18
  onload: (event: Event) => void;
17
19
  [PropertySymbol.evaluateScript]: boolean;
20
+ [PropertySymbol.blocking]: DOMTokenList | null;
18
21
  /**
19
22
  * Returns type.
20
23
  *
@@ -27,6 +30,76 @@ export default class HTMLScriptElement extends HTMLElement {
27
30
  * @param type Type.
28
31
  */
29
32
  set type(type: string);
33
+ /**
34
+ * Returns blocking.
35
+ */
36
+ get blocking(): DOMTokenList;
37
+ /**
38
+ * Sets blocking.
39
+ *
40
+ * @param value Value.
41
+ */
42
+ set blocking(value: string);
43
+ /**
44
+ * Returns crossOrigin.
45
+ *
46
+ * @returns CrossOrigin.
47
+ */
48
+ get crossOrigin(): string;
49
+ /**
50
+ * Sets crossOrigin.
51
+ *
52
+ * @param crossOrigin CrossOrigin.
53
+ */
54
+ set crossOrigin(crossOrigin: string);
55
+ /**
56
+ * Returns fetch priority.
57
+ *
58
+ * @returns Fetch priority.
59
+ */
60
+ get fetchPriority(): 'auto' | 'high' | 'low' | 'normal';
61
+ /**
62
+ * Sets fetch priority.
63
+ *
64
+ * @param fetchPriority Fetch priority.
65
+ */
66
+ set fetchPriority(fetchPriority: 'auto' | 'high' | 'low' | 'normal');
67
+ /**
68
+ * Returns noModule.
69
+ *
70
+ * @returns NoModule.
71
+ */
72
+ get noModule(): boolean;
73
+ /**
74
+ * Sets noModule.
75
+ *
76
+ * @param noModule NoModule.
77
+ */
78
+ set noModule(noModule: boolean);
79
+ /**
80
+ * Returns integrity.
81
+ *
82
+ * @returns Integrity.
83
+ */
84
+ get integrity(): string;
85
+ /**
86
+ * Sets integrity.
87
+ *
88
+ * @param integrity Integrity.
89
+ */
90
+ set integrity(integrity: string);
91
+ /**
92
+ * Returns referrerPolicy.
93
+ *
94
+ * @returns ReferrerPolicy.
95
+ */
96
+ get referrerPolicy(): IRequestReferrerPolicy;
97
+ /**
98
+ * Sets referrerPolicy.
99
+ *
100
+ * @param referrerPolicy ReferrerPolicy.
101
+ */
102
+ set referrerPolicy(referrerPolicy: string);
30
103
  /**
31
104
  * Returns source.
32
105
  *
@@ -111,5 +184,12 @@ export default class HTMLScriptElement extends HTMLElement {
111
184
  * @override
112
185
  */
113
186
  [PropertySymbol.onSetAttribute](attribute: Attr, replacedAttribute: Attr | null): void;
187
+ /**
188
+ * Returns true if the given type is supported.
189
+ *
190
+ * @param type Type.
191
+ * @returns True if the given type is supported.
192
+ */
193
+ static supports(type: string): boolean;
114
194
  }
115
195
  //# sourceMappingURL=HTMLScriptElement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLScriptElement.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-script-element/HTMLScriptElement.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,UAAU,MAAM,kCAAkC,CAAC;AAI1D,OAAO,IAAI,MAAM,iBAAiB,CAAC;AAKnC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;;IAE1C,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,iBAAiB,CAAC;IAGzD,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAQ;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAQ;IAGtC,CAAC,cAAc,CAAC,cAAc,CAAC,UAAQ;IAI9C;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAE3B;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,CAWvB;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAEzB;IAED;;;;OAIG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO,EAAE,MAAM,EAEjC;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAE3B;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED;;;;OAIG;IACH,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,EAM9B;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED;;;;OAIG;IACH,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,EAM9B;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAE3B;IAED;;OAEG;IACa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,UAAQ,GAAG,iBAAiB;IAI3E;;OAEG;IACa,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,IAAI;IAyC5D;;OAEG;IACa,CAAC,cAAc,CAAC,cAAc,CAAC,CAC9C,SAAS,EAAE,IAAI,EACf,iBAAiB,EAAE,IAAI,GAAG,IAAI,GAC5B,IAAI;CAmHP"}
1
+ {"version":3,"file":"HTMLScriptElement.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-script-element/HTMLScriptElement.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  import HTMLElement from '../html-element/HTMLElement.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import Event from '../../event/Event.js';
4
- import WindowErrorUtility from '../../window/WindowErrorUtility.js';
5
4
  import WindowBrowserContext from '../../window/WindowBrowserContext.js';
6
5
  import BrowserErrorCaptureEnum from '../../browser/enums/BrowserErrorCaptureEnum.js';
7
6
  import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
8
7
  import ResourceFetch from '../../fetch/ResourceFetch.js';
8
+ import ECMAScriptModule from '../../module/ECMAScriptModule.js';
9
+ import ModuleFactory from '../../module/ModuleFactory.js';
10
+ import DOMTokenList from '../../dom/DOMTokenList.js';
9
11
  /**
10
12
  * HTML Script Element.
11
13
  *
@@ -18,6 +20,7 @@ export default class HTMLScriptElement extends HTMLElement {
18
20
  onload = null;
19
21
  // Internal properties
20
22
  [PropertySymbol.evaluateScript] = true;
23
+ [PropertySymbol.blocking] = null;
21
24
  // Private properties
22
25
  #loadedScriptURL = null;
23
26
  /**
@@ -36,6 +39,129 @@ export default class HTMLScriptElement extends HTMLElement {
36
39
  set type(type) {
37
40
  this.setAttribute('type', type);
38
41
  }
42
+ /**
43
+ * Returns blocking.
44
+ */
45
+ get blocking() {
46
+ if (!this[PropertySymbol.blocking]) {
47
+ this[PropertySymbol.blocking] = new DOMTokenList(PropertySymbol.illegalConstructor, this, 'blocking');
48
+ }
49
+ return this[PropertySymbol.blocking];
50
+ }
51
+ /**
52
+ * Sets blocking.
53
+ *
54
+ * @param value Value.
55
+ */
56
+ set blocking(value) {
57
+ this.setAttribute('blocking', value);
58
+ }
59
+ /**
60
+ * Returns crossOrigin.
61
+ *
62
+ * @returns CrossOrigin.
63
+ */
64
+ get crossOrigin() {
65
+ return this.getAttribute('crossorigin') || '';
66
+ }
67
+ /**
68
+ * Sets crossOrigin.
69
+ *
70
+ * @param crossOrigin CrossOrigin.
71
+ */
72
+ set crossOrigin(crossOrigin) {
73
+ this.setAttribute('crossorigin', crossOrigin);
74
+ }
75
+ /**
76
+ * Returns fetch priority.
77
+ *
78
+ * @returns Fetch priority.
79
+ */
80
+ get fetchPriority() {
81
+ const fetchPriority = this.getAttribute('fetchpriority');
82
+ switch (fetchPriority) {
83
+ case 'high':
84
+ case 'low':
85
+ case 'normal':
86
+ return fetchPriority;
87
+ default:
88
+ return 'auto';
89
+ }
90
+ }
91
+ /**
92
+ * Sets fetch priority.
93
+ *
94
+ * @param fetchPriority Fetch priority.
95
+ */
96
+ set fetchPriority(fetchPriority) {
97
+ this.setAttribute('fetchpriority', fetchPriority);
98
+ }
99
+ /**
100
+ * Returns noModule.
101
+ *
102
+ * @returns NoModule.
103
+ */
104
+ get noModule() {
105
+ return this.getAttribute('nomodule') !== null;
106
+ }
107
+ /**
108
+ * Sets noModule.
109
+ *
110
+ * @param noModule NoModule.
111
+ */
112
+ set noModule(noModule) {
113
+ if (noModule) {
114
+ this.setAttribute('nomodule', '');
115
+ }
116
+ else {
117
+ this.removeAttribute('nomodule');
118
+ }
119
+ }
120
+ /**
121
+ * Returns integrity.
122
+ *
123
+ * @returns Integrity.
124
+ */
125
+ get integrity() {
126
+ return this.getAttribute('integrity') || '';
127
+ }
128
+ /**
129
+ * Sets integrity.
130
+ *
131
+ * @param integrity Integrity.
132
+ */
133
+ set integrity(integrity) {
134
+ this.setAttribute('integrity', integrity);
135
+ }
136
+ /**
137
+ * Returns referrerPolicy.
138
+ *
139
+ * @returns ReferrerPolicy.
140
+ */
141
+ get referrerPolicy() {
142
+ const referrerPolicy = this.getAttribute('referrerpolicy');
143
+ switch (referrerPolicy) {
144
+ case 'no-referrer':
145
+ case 'no-referrer-when-downgrade':
146
+ case 'same-origin':
147
+ case 'origin':
148
+ case 'strict-origin':
149
+ case 'origin-when-cross-origin':
150
+ case 'strict-origin-when-cross-origin':
151
+ case 'unsafe-url':
152
+ return referrerPolicy;
153
+ default:
154
+ return '';
155
+ }
156
+ }
157
+ /**
158
+ * Sets referrerPolicy.
159
+ *
160
+ * @param referrerPolicy ReferrerPolicy.
161
+ */
162
+ set referrerPolicy(referrerPolicy) {
163
+ this.setAttribute('referrerpolicy', referrerPolicy);
164
+ }
39
165
  /**
40
166
  * Returns source.
41
167
  *
@@ -166,26 +292,29 @@ export default class HTMLScriptElement extends HTMLElement {
166
292
  if (this[PropertySymbol.evaluateScript]) {
167
293
  const src = this.getAttribute('src');
168
294
  if (src !== null) {
169
- this.#loadScript(src);
295
+ if (this.getAttribute('type') === 'module') {
296
+ this.#loadModule(src);
297
+ }
298
+ else {
299
+ this.#loadScript(src);
300
+ }
170
301
  }
171
302
  else if (browserSettings && !browserSettings.disableJavaScriptEvaluation) {
172
- const textContent = this.textContent;
303
+ const source = this.textContent;
173
304
  const type = this.getAttribute('type');
174
- if (textContent &&
175
- (type === null ||
305
+ if (source) {
306
+ if (type === 'module') {
307
+ this.#evaluateModule(source);
308
+ }
309
+ else if (type === 'importmap') {
310
+ this.#evaluateImportMap(source);
311
+ }
312
+ else if (type === null ||
176
313
  type === 'application/x-ecmascript' ||
177
314
  type === 'application/x-javascript' ||
178
- type.startsWith('text/javascript'))) {
179
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
180
- const code = `//# sourceURL=${this[PropertySymbol.window].location.href}\n` + textContent;
181
- if (browserSettings.disableErrorCapturing ||
182
- browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
183
- this[PropertySymbol.window].eval(code);
315
+ type.startsWith('text/javascript')) {
316
+ this.#evaluateScript(source);
184
317
  }
185
- else {
186
- WindowErrorUtility.captureError(this[PropertySymbol.window], () => this[PropertySymbol.window].eval(code));
187
- }
188
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
189
318
  }
190
319
  }
191
320
  }
@@ -198,9 +327,182 @@ export default class HTMLScriptElement extends HTMLElement {
198
327
  if (attribute[PropertySymbol.name] === 'src' &&
199
328
  attribute[PropertySymbol.value] !== null &&
200
329
  this[PropertySymbol.isConnected]) {
201
- this.#loadScript(attribute[PropertySymbol.value]);
330
+ if (this.getAttribute('type') === 'module') {
331
+ this.#loadModule(attribute[PropertySymbol.value]);
332
+ }
333
+ else {
334
+ this.#loadScript(attribute[PropertySymbol.value]);
335
+ }
202
336
  }
203
337
  }
338
+ /**
339
+ * Evaluates a module.
340
+ *
341
+ * @param source Source.
342
+ */
343
+ async #evaluateModule(source) {
344
+ const url = this[PropertySymbol.ownerDocument].location;
345
+ const window = this[PropertySymbol.window];
346
+ const browserSettings = new WindowBrowserContext(window).getSettings();
347
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
348
+ if (!browserFrame) {
349
+ return;
350
+ }
351
+ const module = new ECMAScriptModule(window, url, source);
352
+ const readyStateManager = window[PropertySymbol.readyStateManager];
353
+ readyStateManager.startTask();
354
+ if (browserSettings.disableErrorCapturing ||
355
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
356
+ await module.evaluate();
357
+ }
358
+ else {
359
+ try {
360
+ await module.evaluate();
361
+ }
362
+ catch (error) {
363
+ window[PropertySymbol.dispatchError](error);
364
+ return;
365
+ }
366
+ }
367
+ readyStateManager.endTask();
368
+ this.dispatchEvent(new Event('load'));
369
+ }
370
+ /**
371
+ * Evaluates an import map.
372
+ *
373
+ * @param source Source.
374
+ */
375
+ async #evaluateImportMap(source) {
376
+ const window = this[PropertySymbol.window];
377
+ const browserSettings = new WindowBrowserContext(window).getSettings();
378
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
379
+ if (!browserFrame || window[PropertySymbol.moduleImportMap]) {
380
+ return;
381
+ }
382
+ let json;
383
+ if (browserSettings.disableErrorCapturing ||
384
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
385
+ json = JSON.parse(source);
386
+ }
387
+ else {
388
+ try {
389
+ json = JSON.parse(source);
390
+ }
391
+ catch (error) {
392
+ window[PropertySymbol.dispatchError](error);
393
+ return;
394
+ }
395
+ }
396
+ if (json.imports || json.scopes) {
397
+ const importMap = {
398
+ imports: [],
399
+ scopes: []
400
+ };
401
+ if (json.imports) {
402
+ for (const key of Object.keys(json.imports)) {
403
+ importMap.imports.push({
404
+ from: key,
405
+ to: json.imports[key]
406
+ });
407
+ }
408
+ }
409
+ if (json.scopes) {
410
+ for (const scopeKey of Object.keys(json.scopes)) {
411
+ const scope = {
412
+ scope: scopeKey,
413
+ rules: []
414
+ };
415
+ for (const importKey of Object.keys(json.scopes[scopeKey])) {
416
+ const value = json.scopes[scopeKey][importKey];
417
+ scope.rules.push({
418
+ from: importKey,
419
+ to: value
420
+ });
421
+ }
422
+ importMap.scopes.push(scope);
423
+ }
424
+ }
425
+ window[PropertySymbol.moduleImportMap] = importMap;
426
+ }
427
+ }
428
+ /**
429
+ * Evaluates a script.
430
+ *
431
+ * @param source Source.
432
+ */
433
+ #evaluateScript(source) {
434
+ const window = this[PropertySymbol.window];
435
+ const browserSettings = new WindowBrowserContext(window).getSettings();
436
+ if (!browserSettings) {
437
+ return;
438
+ }
439
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
440
+ const code = `//# sourceURL=${this[PropertySymbol.ownerDocument].location.href}\n` + source;
441
+ if (browserSettings.disableErrorCapturing ||
442
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
443
+ window.eval(code);
444
+ }
445
+ else {
446
+ try {
447
+ window.eval(code);
448
+ }
449
+ catch (error) {
450
+ window[PropertySymbol.dispatchError](error);
451
+ }
452
+ }
453
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
454
+ }
455
+ /**
456
+ * Loads a module.
457
+ *
458
+ * @param url URL.
459
+ */
460
+ async #loadModule(url) {
461
+ const window = this[PropertySymbol.window];
462
+ const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
463
+ const browserSettings = new WindowBrowserContext(window).getSettings();
464
+ if (!browserSettings) {
465
+ return;
466
+ }
467
+ if (!url || !this[PropertySymbol.isConnected] || this.getAttribute('type') !== 'module') {
468
+ return;
469
+ }
470
+ if (browserSettings &&
471
+ (browserSettings.disableJavaScriptFileLoading || browserSettings.disableJavaScriptEvaluation)) {
472
+ if (browserSettings.handleDisabledFileLoadingAsSuccess) {
473
+ this.dispatchEvent(new Event('load'));
474
+ }
475
+ else {
476
+ const error = new window.DOMException(`Failed to load module "${url}". JavaScript file loading is disabled.`, DOMExceptionNameEnum.notSupportedError);
477
+ browserFrame.page?.console.error(error);
478
+ this.dispatchEvent(new Event('error'));
479
+ }
480
+ return;
481
+ }
482
+ const readyStateManager = window[PropertySymbol.readyStateManager];
483
+ readyStateManager.startTask();
484
+ // TODO: What to do with "referrerPolicy" and "crossOrigin" for modules?
485
+ // @see https://github.com/w3c/webappsec-referrer-policy/issues/111
486
+ if (browserSettings.disableErrorCapturing ||
487
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
488
+ const module = await ModuleFactory.getModule(window, window.location, url);
489
+ await module.evaluate();
490
+ }
491
+ else {
492
+ try {
493
+ const module = await ModuleFactory.getModule(window, window.location, url);
494
+ await module.evaluate();
495
+ }
496
+ catch (error) {
497
+ browserFrame.page?.console.error(error);
498
+ this.dispatchEvent(new Event('error'));
499
+ readyStateManager.endTask();
500
+ return;
501
+ }
502
+ }
503
+ readyStateManager.endTask();
504
+ this.dispatchEvent(new Event('load'));
505
+ }
204
506
  /**
205
507
  * Returns a URL relative to the given Location object.
206
508
  *
@@ -209,24 +511,28 @@ export default class HTMLScriptElement extends HTMLElement {
209
511
  async #loadScript(url) {
210
512
  const window = this[PropertySymbol.window];
211
513
  const browserFrame = new WindowBrowserContext(window).getBrowserFrame();
212
- const async = this.getAttribute('async') !== null ||
213
- this.getAttribute('defer') !== null ||
214
- this.getAttribute('type') === 'module';
215
514
  if (!browserFrame) {
216
515
  return;
217
516
  }
218
517
  const browserSettings = browserFrame.page?.context?.browser?.settings;
219
- if (!url || !this[PropertySymbol.isConnected]) {
518
+ const type = this.getAttribute('type');
519
+ if (!url ||
520
+ !this[PropertySymbol.isConnected] ||
521
+ (type !== null &&
522
+ type !== 'application/x-ecmascript' &&
523
+ type !== 'application/x-javascript' &&
524
+ !type.startsWith('text/javascript'))) {
220
525
  return;
221
526
  }
222
527
  let absoluteURL;
223
528
  try {
224
- absoluteURL = new URL(url, this[PropertySymbol.window].location.href).href;
529
+ absoluteURL = new URL(url, window.location.href);
225
530
  }
226
531
  catch (error) {
227
532
  return;
228
533
  }
229
- if (this.#loadedScriptURL === absoluteURL) {
534
+ const absoluteURLString = absoluteURL.toString();
535
+ if (this.#loadedScriptURL === absoluteURLString) {
230
536
  return;
231
537
  }
232
538
  if (browserSettings &&
@@ -235,51 +541,79 @@ export default class HTMLScriptElement extends HTMLElement {
235
541
  this.dispatchEvent(new Event('load'));
236
542
  }
237
543
  else {
238
- WindowErrorUtility.dispatchError(this, new window.DOMException(`Failed to load external script "${absoluteURL}". JavaScript file loading is disabled.`, DOMExceptionNameEnum.notSupportedError));
544
+ const error = new window.DOMException(`Failed to load script "${absoluteURL}". JavaScript file loading is disabled.`, DOMExceptionNameEnum.notSupportedError);
545
+ browserFrame.page?.console.error(error);
546
+ this.dispatchEvent(new Event('error'));
239
547
  }
240
548
  return;
241
549
  }
242
- const resourceFetch = new ResourceFetch({
243
- browserFrame,
244
- window: this[PropertySymbol.window]
245
- });
550
+ this.#loadedScriptURL = absoluteURLString;
551
+ const resourceFetch = new ResourceFetch(window);
552
+ const async = this.getAttribute('async') !== null || this.getAttribute('defer') !== null;
246
553
  let code = null;
247
- let error = null;
248
- this.#loadedScriptURL = absoluteURL;
249
554
  if (async) {
250
- const readyStateManager = this[PropertySymbol.window][PropertySymbol.readyStateManager];
555
+ const readyStateManager = window[PropertySymbol.readyStateManager];
251
556
  readyStateManager.startTask();
252
557
  try {
253
- code = await resourceFetch.fetch(absoluteURL);
558
+ code = await resourceFetch.fetch(absoluteURLString, 'script', {
559
+ credentials: this.crossOrigin === 'use-credentials' ? 'include' : 'same-origin',
560
+ referrerPolicy: this.referrerPolicy
561
+ });
254
562
  }
255
- catch (e) {
256
- error = e;
563
+ catch (error) {
564
+ browserFrame.page?.console.error(error);
565
+ this.dispatchEvent(new Event('error'));
566
+ return;
257
567
  }
258
568
  readyStateManager.endTask();
259
569
  }
260
570
  else {
261
571
  try {
262
- code = resourceFetch.fetchSync(absoluteURL);
572
+ code = resourceFetch.fetchSync(absoluteURLString, 'script', {
573
+ credentials: this.crossOrigin === 'use-credentials' ? 'include' : 'same-origin',
574
+ referrerPolicy: this.referrerPolicy
575
+ });
263
576
  }
264
- catch (e) {
265
- error = e;
577
+ catch (error) {
578
+ browserFrame.page?.console.error(error);
579
+ this.dispatchEvent(new Event('error'));
580
+ return;
266
581
  }
267
582
  }
268
- if (error) {
269
- WindowErrorUtility.dispatchError(this, error);
583
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
584
+ code = '//# sourceURL=' + absoluteURL + '\n' + code;
585
+ if (browserSettings.disableErrorCapturing ||
586
+ browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
587
+ this[PropertySymbol.window].eval(code);
270
588
  }
271
589
  else {
272
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = this;
273
- code = '//# sourceURL=' + absoluteURL + '\n' + code;
274
- if (browserSettings.disableErrorCapturing ||
275
- browserSettings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch) {
590
+ try {
276
591
  this[PropertySymbol.window].eval(code);
277
592
  }
278
- else {
279
- WindowErrorUtility.captureError(this[PropertySymbol.window], () => this[PropertySymbol.window].eval(code));
593
+ catch (error) {
594
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
595
+ window[PropertySymbol.dispatchError](error);
596
+ return;
280
597
  }
281
- this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
282
- this.dispatchEvent(new Event('load'));
598
+ }
599
+ this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
600
+ this.dispatchEvent(new Event('load'));
601
+ }
602
+ /**
603
+ * Returns true if the given type is supported.
604
+ *
605
+ * @param type Type.
606
+ * @returns True if the given type is supported.
607
+ */
608
+ static supports(type) {
609
+ switch (type) {
610
+ case 'classic':
611
+ case 'module':
612
+ case 'importmap':
613
+ return true;
614
+ case 'speculationrules':
615
+ default:
616
+ return false;
283
617
  }
284
618
  }
285
619
  }