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.
- package/cjs/PropertySymbol.cjs +13 -1
- package/cjs/PropertySymbol.cjs.map +1 -1
- package/cjs/PropertySymbol.d.ts +12 -0
- package/cjs/PropertySymbol.d.ts.map +1 -1
- package/cjs/async-task-manager/AsyncTaskManager.cjs +67 -18
- package/cjs/async-task-manager/AsyncTaskManager.cjs.map +1 -1
- package/cjs/async-task-manager/AsyncTaskManager.d.ts +5 -0
- package/cjs/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
- package/cjs/browser/BrowserSettingsFactory.cjs +4 -0
- package/cjs/browser/BrowserSettingsFactory.cjs.map +1 -1
- package/cjs/browser/BrowserSettingsFactory.d.ts.map +1 -1
- package/cjs/browser/DefaultBrowserSettings.cjs +3 -0
- package/cjs/browser/DefaultBrowserSettings.cjs.map +1 -1
- package/cjs/browser/DefaultBrowserSettings.d.ts.map +1 -1
- package/cjs/browser/types/IBrowserSettings.d.ts +6 -0
- package/cjs/browser/types/IBrowserSettings.d.ts.map +1 -1
- package/cjs/browser/types/IOptionalBrowserSettings.d.ts +6 -0
- package/cjs/browser/types/IOptionalBrowserSettings.d.ts.map +1 -1
- package/cjs/browser/utilities/BrowserFrameNavigator.cjs.map +1 -1
- package/cjs/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
- package/cjs/dom/DOMTokenList.cjs +7 -4
- package/cjs/dom/DOMTokenList.cjs.map +1 -1
- package/cjs/dom/DOMTokenList.d.ts +5 -3
- package/cjs/dom/DOMTokenList.d.ts.map +1 -1
- package/cjs/event/EventTarget.cjs +31 -5
- package/cjs/event/EventTarget.cjs.map +1 -1
- package/cjs/event/EventTarget.d.ts.map +1 -1
- package/cjs/fetch/Fetch.cjs +67 -13
- package/cjs/fetch/Fetch.cjs.map +1 -1
- package/cjs/fetch/Fetch.d.ts +3 -0
- package/cjs/fetch/Fetch.d.ts.map +1 -1
- package/cjs/fetch/Request.cjs +119 -27
- package/cjs/fetch/Request.cjs.map +1 -1
- package/cjs/fetch/Request.d.ts +65 -9
- package/cjs/fetch/Request.d.ts.map +1 -1
- package/cjs/fetch/ResourceFetch.cjs +91 -13
- package/cjs/fetch/ResourceFetch.cjs.map +1 -1
- package/cjs/fetch/ResourceFetch.d.ts +21 -11
- package/cjs/fetch/ResourceFetch.d.ts.map +1 -1
- package/cjs/fetch/SyncFetch.cjs +36 -7
- package/cjs/fetch/SyncFetch.cjs.map +1 -1
- package/cjs/fetch/SyncFetch.d.ts.map +1 -1
- package/cjs/fetch/preload/PreloadEntry.cjs +44 -0
- package/cjs/fetch/preload/PreloadEntry.cjs.map +1 -0
- package/cjs/fetch/preload/PreloadEntry.d.ts +26 -0
- package/cjs/fetch/preload/PreloadEntry.d.ts.map +1 -0
- package/cjs/fetch/preload/PreloadUtility.cjs +29 -0
- package/cjs/fetch/preload/PreloadUtility.cjs.map +1 -0
- package/cjs/fetch/preload/PreloadUtility.d.ts +26 -0
- package/cjs/fetch/preload/PreloadUtility.d.ts.map +1 -0
- package/cjs/fetch/types/IRequestInit.d.ts +2 -0
- package/cjs/fetch/types/IRequestInit.d.ts.map +1 -1
- package/cjs/fetch/types/IRequestMode.cjs +3 -0
- package/cjs/fetch/types/IRequestMode.cjs.map +1 -0
- package/cjs/fetch/types/IRequestMode.d.ts +3 -0
- package/cjs/fetch/types/IRequestMode.d.ts.map +1 -0
- package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs +1 -1
- package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs.map +1 -1
- package/cjs/module/CSSModule.cjs +47 -0
- package/cjs/module/CSSModule.cjs.map +1 -0
- package/cjs/module/CSSModule.d.ts +34 -0
- package/cjs/module/CSSModule.d.ts.map +1 -0
- package/cjs/module/ECMAScriptModule.cjs +157 -0
- package/cjs/module/ECMAScriptModule.cjs.map +1 -0
- package/cjs/module/ECMAScriptModule.d.ts +36 -0
- package/cjs/module/ECMAScriptModule.d.ts.map +1 -0
- package/cjs/module/ECMAScriptModuleCompiler.cjs +550 -0
- package/cjs/module/ECMAScriptModuleCompiler.cjs.map +1 -0
- package/cjs/module/ECMAScriptModuleCompiler.d.ts +31 -0
- package/cjs/module/ECMAScriptModuleCompiler.d.ts.map +1 -0
- package/cjs/module/IECMAScriptModuleCompiledResult.cjs +3 -0
- package/cjs/module/IECMAScriptModuleCompiledResult.cjs.map +1 -0
- package/cjs/module/IECMAScriptModuleCompiledResult.d.ts +21 -0
- package/cjs/module/IECMAScriptModuleCompiledResult.d.ts.map +1 -0
- package/cjs/module/IECMAScriptModuleImport.cjs +3 -0
- package/cjs/module/IECMAScriptModuleImport.cjs.map +1 -0
- package/cjs/module/IECMAScriptModuleImport.d.ts +5 -0
- package/cjs/module/IECMAScriptModuleImport.d.ts.map +1 -0
- package/cjs/module/IModule.cjs +3 -0
- package/cjs/module/IModule.cjs.map +1 -0
- package/cjs/module/IModule.d.ts +21 -0
- package/cjs/module/IModule.d.ts.map +1 -0
- package/cjs/module/IModuleImportMap.cjs +3 -0
- package/cjs/module/IModuleImportMap.cjs.map +1 -0
- package/cjs/module/IModuleImportMap.d.ts +10 -0
- package/cjs/module/IModuleImportMap.d.ts.map +1 -0
- package/cjs/module/IModuleImportMapRule.cjs +3 -0
- package/cjs/module/IModuleImportMapRule.cjs.map +1 -0
- package/cjs/module/IModuleImportMapRule.d.ts +5 -0
- package/cjs/module/IModuleImportMapRule.d.ts.map +1 -0
- package/cjs/module/IModuleImportMapScope.cjs +3 -0
- package/cjs/module/IModuleImportMapScope.cjs.map +1 -0
- package/cjs/module/IModuleImportMapScope.d.ts +6 -0
- package/cjs/module/IModuleImportMapScope.d.ts.map +1 -0
- package/cjs/module/JSONModule.cjs +52 -0
- package/cjs/module/JSONModule.cjs.map +1 -0
- package/cjs/module/JSONModule.d.ts +33 -0
- package/cjs/module/JSONModule.d.ts.map +1 -0
- package/cjs/module/ModuleFactory.cjs +136 -0
- package/cjs/module/ModuleFactory.cjs.map +1 -0
- package/cjs/module/ModuleFactory.d.ts +33 -0
- package/cjs/module/ModuleFactory.d.ts.map +1 -0
- package/cjs/module/ModuleURLUtility.cjs +67 -0
- package/cjs/module/ModuleURLUtility.cjs.map +1 -0
- package/cjs/module/ModuleURLUtility.d.ts +17 -0
- package/cjs/module/ModuleURLUtility.d.ts.map +1 -0
- package/cjs/module/UnresolvedModule.cjs +70 -0
- package/cjs/module/UnresolvedModule.cjs.map +1 -0
- package/cjs/module/UnresolvedModule.d.ts +43 -0
- package/cjs/module/UnresolvedModule.d.ts.map +1 -0
- package/cjs/nodes/document/Document.cjs +1 -0
- package/cjs/nodes/document/Document.cjs.map +1 -1
- package/cjs/nodes/document/Document.d.ts +2 -0
- package/cjs/nodes/document/Document.d.ts.map +1 -1
- package/cjs/nodes/element/Element.cjs +21 -5
- package/cjs/nodes/element/Element.cjs.map +1 -1
- package/cjs/nodes/element/Element.d.ts +6 -0
- package/cjs/nodes/element/Element.d.ts.map +1 -1
- package/cjs/nodes/element/NamedNodeMap.cjs +1 -0
- package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
- package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +8 -0
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
- package/cjs/nodes/html-area-element/HTMLAreaElement.cjs +8 -0
- package/cjs/nodes/html-area-element/HTMLAreaElement.cjs.map +1 -1
- package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
- package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
- package/cjs/nodes/html-element/HTMLElement.cjs +3 -0
- package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
- package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +7 -3
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
- package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +147 -19
- package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
- package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
- package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
- package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +8 -0
- package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
- package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
- package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +380 -46
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
- package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs +0 -1
- package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.cjs.map +1 -1
- package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
- package/cjs/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
- package/cjs/utilities/AttributeUtility.cjs +36 -0
- package/cjs/utilities/AttributeUtility.cjs.map +1 -0
- package/cjs/utilities/AttributeUtility.d.ts +18 -0
- package/cjs/utilities/AttributeUtility.d.ts.map +1 -0
- package/cjs/window/BrowserWindow.cjs +73 -6
- package/cjs/window/BrowserWindow.cjs.map +1 -1
- package/cjs/window/BrowserWindow.d.ts +14 -0
- package/cjs/window/BrowserWindow.d.ts.map +1 -1
- package/lib/PropertySymbol.d.ts +12 -0
- package/lib/PropertySymbol.d.ts.map +1 -1
- package/lib/PropertySymbol.js +12 -0
- package/lib/PropertySymbol.js.map +1 -1
- package/lib/async-task-manager/AsyncTaskManager.d.ts +5 -0
- package/lib/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
- package/lib/async-task-manager/AsyncTaskManager.js +67 -18
- package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
- package/lib/browser/BrowserSettingsFactory.d.ts.map +1 -1
- package/lib/browser/BrowserSettingsFactory.js +4 -0
- package/lib/browser/BrowserSettingsFactory.js.map +1 -1
- package/lib/browser/DefaultBrowserSettings.d.ts.map +1 -1
- package/lib/browser/DefaultBrowserSettings.js +3 -0
- package/lib/browser/DefaultBrowserSettings.js.map +1 -1
- package/lib/browser/types/IBrowserSettings.d.ts +6 -0
- package/lib/browser/types/IBrowserSettings.d.ts.map +1 -1
- package/lib/browser/types/IOptionalBrowserSettings.d.ts +6 -0
- package/lib/browser/types/IOptionalBrowserSettings.d.ts.map +1 -1
- package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
- package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
- package/lib/dom/DOMTokenList.d.ts +5 -3
- package/lib/dom/DOMTokenList.d.ts.map +1 -1
- package/lib/dom/DOMTokenList.js +7 -4
- package/lib/dom/DOMTokenList.js.map +1 -1
- package/lib/event/EventTarget.d.ts.map +1 -1
- package/lib/event/EventTarget.js +31 -5
- package/lib/event/EventTarget.js.map +1 -1
- package/lib/fetch/Fetch.d.ts +3 -0
- package/lib/fetch/Fetch.d.ts.map +1 -1
- package/lib/fetch/Fetch.js +64 -10
- package/lib/fetch/Fetch.js.map +1 -1
- package/lib/fetch/Request.d.ts +65 -9
- package/lib/fetch/Request.d.ts.map +1 -1
- package/lib/fetch/Request.js +116 -24
- package/lib/fetch/Request.js.map +1 -1
- package/lib/fetch/ResourceFetch.d.ts +21 -11
- package/lib/fetch/ResourceFetch.d.ts.map +1 -1
- package/lib/fetch/ResourceFetch.js +68 -13
- package/lib/fetch/ResourceFetch.js.map +1 -1
- package/lib/fetch/SyncFetch.d.ts.map +1 -1
- package/lib/fetch/SyncFetch.js +36 -7
- package/lib/fetch/SyncFetch.js.map +1 -1
- package/lib/fetch/preload/PreloadEntry.d.ts +26 -0
- package/lib/fetch/preload/PreloadEntry.d.ts.map +1 -0
- package/lib/fetch/preload/PreloadEntry.js +41 -0
- package/lib/fetch/preload/PreloadEntry.js.map +1 -0
- package/lib/fetch/preload/PreloadUtility.d.ts +26 -0
- package/lib/fetch/preload/PreloadUtility.d.ts.map +1 -0
- package/lib/fetch/preload/PreloadUtility.js +26 -0
- package/lib/fetch/preload/PreloadUtility.js.map +1 -0
- package/lib/fetch/types/IRequestInit.d.ts +2 -0
- package/lib/fetch/types/IRequestInit.d.ts.map +1 -1
- package/lib/fetch/types/IRequestMode.d.ts +3 -0
- package/lib/fetch/types/IRequestMode.d.ts.map +1 -0
- package/lib/fetch/types/IRequestMode.js +2 -0
- package/lib/fetch/types/IRequestMode.js.map +1 -0
- package/lib/fetch/utilities/FetchRequestReferrerUtility.js +1 -1
- package/lib/fetch/utilities/FetchRequestReferrerUtility.js.map +1 -1
- package/lib/module/CSSModule.d.ts +34 -0
- package/lib/module/CSSModule.d.ts.map +1 -0
- package/lib/module/CSSModule.js +44 -0
- package/lib/module/CSSModule.js.map +1 -0
- package/lib/module/ECMAScriptModule.d.ts +36 -0
- package/lib/module/ECMAScriptModule.d.ts.map +1 -0
- package/lib/module/ECMAScriptModule.js +128 -0
- package/lib/module/ECMAScriptModule.js.map +1 -0
- package/lib/module/ECMAScriptModuleCompiler.d.ts +31 -0
- package/lib/module/ECMAScriptModuleCompiler.d.ts.map +1 -0
- package/lib/module/ECMAScriptModuleCompiler.js +521 -0
- package/lib/module/ECMAScriptModuleCompiler.js.map +1 -0
- package/lib/module/IECMAScriptModuleCompiledResult.d.ts +21 -0
- package/lib/module/IECMAScriptModuleCompiledResult.d.ts.map +1 -0
- package/lib/module/IECMAScriptModuleCompiledResult.js +2 -0
- package/lib/module/IECMAScriptModuleCompiledResult.js.map +1 -0
- package/lib/module/IECMAScriptModuleImport.d.ts +5 -0
- package/lib/module/IECMAScriptModuleImport.d.ts.map +1 -0
- package/lib/module/IECMAScriptModuleImport.js +2 -0
- package/lib/module/IECMAScriptModuleImport.js.map +1 -0
- package/lib/module/IModule.d.ts +21 -0
- package/lib/module/IModule.d.ts.map +1 -0
- package/lib/module/IModule.js +2 -0
- package/lib/module/IModule.js.map +1 -0
- package/lib/module/IModuleImportMap.d.ts +10 -0
- package/lib/module/IModuleImportMap.d.ts.map +1 -0
- package/lib/module/IModuleImportMap.js +2 -0
- package/lib/module/IModuleImportMap.js.map +1 -0
- package/lib/module/IModuleImportMapRule.d.ts +5 -0
- package/lib/module/IModuleImportMapRule.d.ts.map +1 -0
- package/lib/module/IModuleImportMapRule.js +2 -0
- package/lib/module/IModuleImportMapRule.js.map +1 -0
- package/lib/module/IModuleImportMapScope.d.ts +6 -0
- package/lib/module/IModuleImportMapScope.d.ts.map +1 -0
- package/lib/module/IModuleImportMapScope.js +2 -0
- package/lib/module/IModuleImportMapScope.js.map +1 -0
- package/lib/module/JSONModule.d.ts +33 -0
- package/lib/module/JSONModule.d.ts.map +1 -0
- package/lib/module/JSONModule.js +49 -0
- package/lib/module/JSONModule.js.map +1 -0
- package/lib/module/ModuleFactory.d.ts +33 -0
- package/lib/module/ModuleFactory.d.ts.map +1 -0
- package/lib/module/ModuleFactory.js +107 -0
- package/lib/module/ModuleFactory.js.map +1 -0
- package/lib/module/ModuleURLUtility.d.ts +17 -0
- package/lib/module/ModuleURLUtility.d.ts.map +1 -0
- package/lib/module/ModuleURLUtility.js +41 -0
- package/lib/module/ModuleURLUtility.js.map +1 -0
- package/lib/module/UnresolvedModule.d.ts +43 -0
- package/lib/module/UnresolvedModule.d.ts.map +1 -0
- package/lib/module/UnresolvedModule.js +67 -0
- package/lib/module/UnresolvedModule.js.map +1 -0
- package/lib/nodes/document/Document.d.ts +2 -0
- package/lib/nodes/document/Document.d.ts.map +1 -1
- package/lib/nodes/document/Document.js +1 -0
- package/lib/nodes/document/Document.js.map +1 -1
- package/lib/nodes/element/Element.d.ts +6 -0
- package/lib/nodes/element/Element.d.ts.map +1 -1
- package/lib/nodes/element/Element.js +21 -5
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
- package/lib/nodes/element/NamedNodeMap.js +1 -0
- package/lib/nodes/element/NamedNodeMap.js.map +1 -1
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +6 -0
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +8 -0
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
- package/lib/nodes/html-area-element/HTMLAreaElement.d.ts +6 -0
- package/lib/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
- package/lib/nodes/html-area-element/HTMLAreaElement.js +8 -0
- package/lib/nodes/html-area-element/HTMLAreaElement.js.map +1 -1
- package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/lib/nodes/html-element/HTMLElement.js +3 -0
- package/lib/nodes/html-element/HTMLElement.js.map +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +7 -3
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +8 -2
- package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElement.js +147 -19
- package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
- package/lib/nodes/html-media-element/HTMLMediaElement.d.ts +6 -0
- package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
- package/lib/nodes/html-media-element/HTMLMediaElement.js +8 -0
- package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +80 -0
- package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.js +380 -46
- package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
- package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts +0 -3
- package/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts.map +1 -1
- package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js +0 -1
- package/lib/nodes/html-table-cell-element/HTMLTableCellElement.js.map +1 -1
- package/lib/utilities/AttributeUtility.d.ts +18 -0
- package/lib/utilities/AttributeUtility.d.ts.map +1 -0
- package/lib/utilities/AttributeUtility.js +29 -0
- package/lib/utilities/AttributeUtility.js.map +1 -0
- package/lib/window/BrowserWindow.d.ts +14 -0
- package/lib/window/BrowserWindow.d.ts.map +1 -1
- package/lib/window/BrowserWindow.js +73 -6
- package/lib/window/BrowserWindow.js.map +1 -1
- package/package.json +1 -1
- package/src/PropertySymbol.ts +12 -0
- package/src/async-task-manager/AsyncTaskManager.ts +81 -19
- package/src/browser/BrowserSettingsFactory.ts +4 -0
- package/src/browser/DefaultBrowserSettings.ts +3 -0
- package/src/browser/types/IBrowserSettings.ts +7 -0
- package/src/browser/types/IOptionalBrowserSettings.ts +7 -0
- package/src/browser/utilities/BrowserFrameNavigator.ts +2 -7
- package/src/dom/DOMTokenList.ts +12 -4
- package/src/event/EventTarget.ts +31 -11
- package/src/fetch/Fetch.ts +82 -16
- package/src/fetch/Request.ts +132 -24
- package/src/fetch/ResourceFetch.ts +99 -14
- package/src/fetch/SyncFetch.ts +41 -9
- package/src/fetch/preload/PreloadEntry.ts +46 -0
- package/src/fetch/preload/PreloadUtility.ts +33 -0
- package/src/fetch/types/IRequestInit.ts +2 -0
- package/src/fetch/types/IRequestMode.ts +2 -0
- package/src/fetch/utilities/FetchRequestReferrerUtility.ts +1 -1
- package/src/module/CSSModule.ts +54 -0
- package/src/module/ECMAScriptModule.ts +171 -0
- package/src/module/ECMAScriptModuleCompiler.ts +567 -0
- package/src/module/IECMAScriptModuleCompiledResult.ts +14 -0
- package/src/module/IECMAScriptModuleImport.ts +4 -0
- package/src/module/IModule.ts +20 -0
- package/src/module/IModuleImportMap.ts +10 -0
- package/src/module/IModuleImportMapRule.ts +4 -0
- package/src/module/IModuleImportMapScope.ts +6 -0
- package/src/module/JSONModule.ts +59 -0
- package/src/module/ModuleFactory.ts +134 -0
- package/src/module/ModuleURLUtility.ts +51 -0
- package/src/module/UnresolvedModule.ts +77 -0
- package/src/nodes/document/Document.ts +2 -0
- package/src/nodes/element/Element.ts +25 -7
- package/src/nodes/element/NamedNodeMap.ts +1 -0
- package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +9 -0
- package/src/nodes/html-area-element/HTMLAreaElement.ts +9 -0
- package/src/nodes/html-element/HTMLElement.ts +3 -0
- package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +9 -8
- package/src/nodes/html-link-element/HTMLLinkElement.ts +181 -28
- package/src/nodes/html-media-element/HTMLMediaElement.ts +9 -0
- package/src/nodes/html-script-element/HTMLScriptElement.ts +441 -69
- package/src/nodes/html-table-cell-element/HTMLTableCellElement.ts +0 -3
- package/src/utilities/AttributeUtility.ts +43 -0
- package/src/window/BrowserWindow.ts +77 -10
- package/cjs/window/WindowErrorUtility.cjs +0 -85
- package/cjs/window/WindowErrorUtility.cjs.map +0 -1
- package/cjs/window/WindowErrorUtility.d.ts +0 -27
- package/cjs/window/WindowErrorUtility.d.ts.map +0 -1
- package/lib/window/WindowErrorUtility.d.ts +0 -27
- package/lib/window/WindowErrorUtility.d.ts.map +0 -1
- package/lib/window/WindowErrorUtility.js +0 -56
- package/lib/window/WindowErrorUtility.js.map +0 -1
- 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;
|
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
|
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
|
303
|
+
const source = this.textContent;
|
173
304
|
const type = this.getAttribute('type');
|
174
|
-
if (
|
175
|
-
(type ===
|
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
|
-
|
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
|
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
|
-
|
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,
|
529
|
+
absoluteURL = new URL(url, window.location.href);
|
225
530
|
}
|
226
531
|
catch (error) {
|
227
532
|
return;
|
228
533
|
}
|
229
|
-
|
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
|
-
|
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
|
-
|
243
|
-
|
244
|
-
|
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 =
|
555
|
+
const readyStateManager = window[PropertySymbol.readyStateManager];
|
251
556
|
readyStateManager.startTask();
|
252
557
|
try {
|
253
|
-
code = await resourceFetch.fetch(
|
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 (
|
256
|
-
error
|
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(
|
572
|
+
code = resourceFetch.fetchSync(absoluteURLString, 'script', {
|
573
|
+
credentials: this.crossOrigin === 'use-credentials' ? 'include' : 'same-origin',
|
574
|
+
referrerPolicy: this.referrerPolicy
|
575
|
+
});
|
263
576
|
}
|
264
|
-
catch (
|
265
|
-
error
|
577
|
+
catch (error) {
|
578
|
+
browserFrame.page?.console.error(error);
|
579
|
+
this.dispatchEvent(new Event('error'));
|
580
|
+
return;
|
266
581
|
}
|
267
582
|
}
|
268
|
-
|
269
|
-
|
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
|
-
|
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
|
-
|
279
|
-
|
593
|
+
catch (error) {
|
594
|
+
this[PropertySymbol.ownerDocument][PropertySymbol.currentScript] = null;
|
595
|
+
window[PropertySymbol.dispatchError](error);
|
596
|
+
return;
|
280
597
|
}
|
281
|
-
|
282
|
-
|
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
|
}
|