UNPKG

happy-dom

Version:

Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.

1,073 lines 100 kB
import { Buffer } from 'buffer'; import { webcrypto } from 'crypto'; import { TextEncoder, TextDecoder } from 'util'; import Stream from 'stream'; import { ReadableStream } from 'stream/web'; import { URLSearchParams } from 'url'; import VM from 'vm'; import * as PropertySymbol from '../PropertySymbol.js'; import Base64 from '../base64/Base64.js'; import BrowserErrorCaptureEnum from '../browser/enums/BrowserErrorCaptureEnum.js'; import Clipboard from '../clipboard/Clipboard.js'; import ClipboardItem from '../clipboard/ClipboardItem.js'; import CSS from '../css/CSS.js'; import CSSRule from '../css/CSSRule.js'; import CSSUnitValue from '../css/CSSUnitValue.js'; import CSSStyleDeclaration from '../css/declaration/CSSStyleDeclaration.js'; import CSSContainerRule from '../css/rules/CSSContainerRule.js'; import CSSFontFaceRule from '../css/rules/CSSFontFaceRule.js'; import CSSKeyframeRule from '../css/rules/CSSKeyframeRule.js'; import CSSKeyframesRule from '../css/rules/CSSKeyframesRule.js'; import CSSMediaRule from '../css/rules/CSSMediaRule.js'; import CSSStyleRule from '../css/rules/CSSStyleRule.js'; import CSSSupportsRule from '../css/rules/CSSSupportsRule.js'; import CustomElementRegistry from '../custom-element/CustomElementRegistry.js'; import DataTransfer from '../event/DataTransfer.js'; import DataTransferItem from '../event/DataTransferItem.js'; import DataTransferItemList from '../event/DataTransferItemList.js'; import Event from '../event/Event.js'; import EventTarget from '../event/EventTarget.js'; import Touch from '../event/Touch.js'; import UIEvent from '../event/UIEvent.js'; import AnimationEvent from '../event/events/AnimationEvent.js'; import ClipboardEvent from '../event/events/ClipboardEvent.js'; import CustomEvent from '../event/events/CustomEvent.js'; import ErrorEvent from '../event/events/ErrorEvent.js'; import FocusEvent from '../event/events/FocusEvent.js'; import HashChangeEvent from '../event/events/HashChangeEvent.js'; import InputEvent from '../event/events/InputEvent.js'; import KeyboardEvent from '../event/events/KeyboardEvent.js'; import MediaQueryListEvent from '../event/events/MediaQueryListEvent.js'; import MessageEvent from '../event/events/MessageEvent.js'; import MouseEvent from '../event/events/MouseEvent.js'; import PointerEvent from '../event/events/PointerEvent.js'; import ProgressEvent from '../event/events/ProgressEvent.js'; import StorageEvent from '../event/events/StorageEvent.js'; import SubmitEvent from '../event/events/SubmitEvent.js'; import TouchEvent from '../event/events/TouchEvent.js'; import WheelEvent from '../event/events/WheelEvent.js'; import DOMExceptionNameEnum from '../exception/DOMExceptionNameEnum.js'; import Fetch from '../fetch/Fetch.js'; import Blob from '../file/Blob.js'; import File from '../file/File.js'; import History from '../history/History.js'; import IntersectionObserver from '../intersection-observer/IntersectionObserver.js'; import IntersectionObserverEntry from '../intersection-observer/IntersectionObserverEntry.js'; import Location from '../location/Location.js'; import MediaQueryList from '../match-media/MediaQueryList.js'; import MutationRecord from '../mutation-observer/MutationRecord.js'; import MimeType from '../navigator/MimeType.js'; import MimeTypeArray from '../navigator/MimeTypeArray.js'; import Navigator from '../navigator/Navigator.js'; import Plugin from '../navigator/Plugin.js'; import PluginArray from '../navigator/PluginArray.js'; import Attr from '../nodes/attr/Attr.js'; import CharacterData from '../nodes/character-data/CharacterData.js'; import DocumentType from '../nodes/document-type/DocumentType.js'; import DocumentReadyStateEnum from '../nodes/document/DocumentReadyStateEnum.js'; import DocumentReadyStateManager from '../nodes/document/DocumentReadyStateManager.js'; import DOMRect from '../dom/DOMRect.js'; import DOMRectReadOnly from '../dom/DOMRectReadOnly.js'; import Element from '../nodes/element/Element.js'; import HTMLCollection from '../nodes/element/HTMLCollection.js'; import NamedNodeMap from '../nodes/element/NamedNodeMap.js'; import HTMLAnchorElement from '../nodes/html-anchor-element/HTMLAnchorElement.js'; import HTMLAreaElement from '../nodes/html-area-element/HTMLAreaElement.js'; import HTMLAudioElement from '../nodes/html-audio-element/HTMLAudioElement.js'; import HTMLBaseElement from '../nodes/html-base-element/HTMLBaseElement.js'; import HTMLBodyElement from '../nodes/html-body-element/HTMLBodyElement.js'; import HTMLBRElement from '../nodes/html-br-element/HTMLBRElement.js'; import HTMLButtonElement from '../nodes/html-button-element/HTMLButtonElement.js'; import HTMLCanvasElement from '../nodes/html-canvas-element/HTMLCanvasElement.js'; import HTMLDListElement from '../nodes/html-d-list-element/HTMLDListElement.js'; import HTMLDataElement from '../nodes/html-data-element/HTMLDataElement.js'; import HTMLDataListElement from '../nodes/html-data-list-element/HTMLDataListElement.js'; import HTMLDetailsElement from '../nodes/html-details-element/HTMLDetailsElement.js'; import HTMLDialogElement from '../nodes/html-dialog-element/HTMLDialogElement.js'; import HTMLDivElement from '../nodes/html-div-element/HTMLDivElement.js'; import HTMLElement from '../nodes/html-element/HTMLElement.js'; import HTMLEmbedElement from '../nodes/html-embed-element/HTMLEmbedElement.js'; import HTMLFieldSetElement from '../nodes/html-field-set-element/HTMLFieldSetElement.js'; import HTMLFormControlsCollection from '../nodes/html-form-element/HTMLFormControlsCollection.js'; import HTMLFormElement from '../nodes/html-form-element/HTMLFormElement.js'; import RadioNodeList from '../nodes/html-form-element/RadioNodeList.js'; import HTMLHeadElement from '../nodes/html-head-element/HTMLHeadElement.js'; import HTMLHeadingElement from '../nodes/html-heading-element/HTMLHeadingElement.js'; import HTMLHRElement from '../nodes/html-hr-element/HTMLHRElement.js'; import HTMLHtmlElement from '../nodes/html-html-element/HTMLHtmlElement.js'; import HTMLIFrameElement from '../nodes/html-iframe-element/HTMLIFrameElement.js'; import HTMLImageElement from '../nodes/html-image-element/HTMLImageElement.js'; import FileList from '../nodes/html-input-element/FileList.js'; import HTMLInputElement from '../nodes/html-input-element/HTMLInputElement.js'; import HTMLLabelElement from '../nodes/html-label-element/HTMLLabelElement.js'; import HTMLLegendElement from '../nodes/html-legend-element/HTMLLegendElement.js'; import HTMLLIElement from '../nodes/html-li-element/HTMLLIElement.js'; import HTMLLinkElement from '../nodes/html-link-element/HTMLLinkElement.js'; import HTMLMapElement from '../nodes/html-map-element/HTMLMapElement.js'; import HTMLMediaElement from '../nodes/html-media-element/HTMLMediaElement.js'; import TextTrackCueList from '../nodes/html-media-element/TextTrackCueList.js'; import TimeRanges from '../nodes/html-media-element/TimeRanges.js'; import HTMLMenuElement from '../nodes/html-menu-element/HTMLMenuElement.js'; import HTMLMetaElement from '../nodes/html-meta-element/HTMLMetaElement.js'; import HTMLMeterElement from '../nodes/html-meter-element/HTMLMeterElement.js'; import HTMLModElement from '../nodes/html-mod-element/HTMLModElement.js'; import HTMLOListElement from '../nodes/html-o-list-element/HTMLOListElement.js'; import HTMLObjectElement from '../nodes/html-object-element/HTMLObjectElement.js'; import HTMLOptGroupElement from '../nodes/html-opt-group-element/HTMLOptGroupElement.js'; import HTMLOptionElement from '../nodes/html-option-element/HTMLOptionElement.js'; import HTMLOutputElement from '../nodes/html-output-element/HTMLOutputElement.js'; import HTMLParagraphElement from '../nodes/html-paragraph-element/HTMLParagraphElement.js'; import HTMLParamElement from '../nodes/html-param-element/HTMLParamElement.js'; import HTMLPictureElement from '../nodes/html-picture-element/HTMLPictureElement.js'; import HTMLPreElement from '../nodes/html-pre-element/HTMLPreElement.js'; import HTMLProgressElement from '../nodes/html-progress-element/HTMLProgressElement.js'; import HTMLQuoteElement from '../nodes/html-quote-element/HTMLQuoteElement.js'; import HTMLScriptElement from '../nodes/html-script-element/HTMLScriptElement.js'; import HTMLSelectElement from '../nodes/html-select-element/HTMLSelectElement.js'; import HTMLSlotElement from '../nodes/html-slot-element/HTMLSlotElement.js'; import HTMLSourceElement from '../nodes/html-source-element/HTMLSourceElement.js'; import HTMLSpanElement from '../nodes/html-span-element/HTMLSpanElement.js'; import HTMLStyleElement from '../nodes/html-style-element/HTMLStyleElement.js'; import HTMLTableCaptionElement from '../nodes/html-table-caption-element/HTMLTableCaptionElement.js'; import HTMLTableCellElement from '../nodes/html-table-cell-element/HTMLTableCellElement.js'; import HTMLTableColElement from '../nodes/html-table-col-element/HTMLTableColElement.js'; import HTMLTableElement from '../nodes/html-table-element/HTMLTableElement.js'; import HTMLTableRowElement from '../nodes/html-table-row-element/HTMLTableRowElement.js'; import HTMLTableSectionElement from '../nodes/html-table-section-element/HTMLTableSectionElement.js'; import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement.js'; import HTMLTextAreaElement from '../nodes/html-text-area-element/HTMLTextAreaElement.js'; import HTMLTimeElement from '../nodes/html-time-element/HTMLTimeElement.js'; import HTMLTitleElement from '../nodes/html-title-element/HTMLTitleElement.js'; import HTMLTrackElement from '../nodes/html-track-element/HTMLTrackElement.js'; import HTMLUListElement from '../nodes/html-u-list-element/HTMLUListElement.js'; import HTMLUnknownElement from '../nodes/html-unknown-element/HTMLUnknownElement.js'; import HTMLVideoElement from '../nodes/html-video-element/HTMLVideoElement.js'; import Node from '../nodes/node/Node.js'; import NodeList from '../nodes/node/NodeList.js'; import ProcessingInstruction from '../nodes/processing-instruction/ProcessingInstruction.js'; import ShadowRoot from '../nodes/shadow-root/ShadowRoot.js'; import SVGElement from '../nodes/svg-element/SVGElement.js'; import Permissions from '../permissions/Permissions.js'; import ResizeObserver from '../resize-observer/ResizeObserver.js'; import Screen from '../screen/Screen.js'; import ScreenDetails from '../screen/ScreenDetails.js'; import ScreenDetailed from '../screen/ScreenDetailed.js'; import Selection from '../selection/Selection.js'; import Storage from '../storage/Storage.js'; import NodeFilter from '../tree-walker/NodeFilter.js'; import NodeIterator from '../tree-walker/NodeIterator.js'; import TreeWalker from '../tree-walker/TreeWalker.js'; import ValidityState from '../validity-state/ValidityState.js'; import XMLSerializer from '../xml-serializer/XMLSerializer.js'; import VMGlobalPropertyScript from './VMGlobalPropertyScript.js'; import WindowPageOpenUtility from './WindowPageOpenUtility.js'; import { PerformanceObserver, PerformanceEntry } from 'node:perf_hooks'; import EventPhaseEnum from '../event/EventPhaseEnum.js'; import HTMLOptionsCollection from '../nodes/html-select-element/HTMLOptionsCollection.js'; import WindowContextClassExtender from './WindowContextClassExtender.js'; import WindowBrowserContext from './WindowBrowserContext.js'; import SVGSVGElement from '../nodes/svg-svg-element/SVGSVGElement.js'; import SVGGraphicsElement from '../nodes/svg-graphics-element/SVGGraphicsElement.js'; import SVGAnimateElement from '../nodes/svg-animate-element/SVGAnimateElement.js'; import SVGAnimateMotionElement from '../nodes/svg-animate-motion-element/SVGAnimateMotionElement.js'; import SVGAnimateTransformElement from '../nodes/svg-animate-transform-element/SVGAnimateTransformElement.js'; import SVGCircleElement from '../nodes/svg-circle-element/SVGCircleElement.js'; import SVGClipPathElement from '../nodes/svg-clip-path-element/SVGClipPathElement.js'; import SVGDefsElement from '../nodes/svg-defs-element/SVGDefsElement.js'; import SVGDescElement from '../nodes/svg-desc-element/SVGDescElement.js'; import SVGEllipseElement from '../nodes/svg-ellipse-element/SVGEllipseElement.js'; import SVGFEBlendElement from '../nodes/svg-fe-blend-element/SVGFEBlendElement.js'; import SVGFEColorMatrixElement from '../nodes/svg-fe-color-matrix-element/SVGFEColorMatrixElement.js'; import SVGFEComponentTransferElement from '../nodes/svg-fe-component-transfer-element/SVGFEComponentTransferElement.js'; import SVGFECompositeElement from '../nodes/svg-fe-composite-element/SVGFECompositeElement.js'; import SVGFEConvolveMatrixElement from '../nodes/svg-fe-convolve-matrix-element/SVGFEConvolveMatrixElement.js'; import SVGFEDiffuseLightingElement from '../nodes/svg-fe-diffuse-lighting-element/SVGFEDiffuseLightingElement.js'; import SVGFEDisplacementMapElement from '../nodes/svg-fe-displacement-map-element/SVGFEDisplacementMapElement.js'; import SVGFEDistantLightElement from '../nodes/svg-fe-distant-light-element/SVGFEDistantLightElement.js'; import SVGFEDropShadowElement from '../nodes/svg-fe-drop-shadow-element/SVGFEDropShadowElement.js'; import SVGFEFloodElement from '../nodes/svg-fe-flood-element/SVGFEFloodElement.js'; import SVGFEFuncAElement from '../nodes/svg-fe-func-a-element/SVGFEFuncAElement.js'; import SVGFEFuncBElement from '../nodes/svg-fe-func-b-element/SVGFEFuncBElement.js'; import SVGFEFuncGElement from '../nodes/svg-fe-func-g-element/SVGFEFuncGElement.js'; import SVGFEFuncRElement from '../nodes/svg-fe-func-r-element/SVGFEFuncRElement.js'; import SVGFEGaussianBlurElement from '../nodes/svg-fe-gaussian-blur-element/SVGFEGaussianBlurElement.js'; import SVGFEImageElement from '../nodes/svg-fe-image-element/SVGFEImageElement.js'; import SVGFEMergeElement from '../nodes/svg-fe-merge-element/SVGFEMergeElement.js'; import SVGFEMergeNodeElement from '../nodes/svg-fe-merge-node-element/SVGFEMergeNodeElement.js'; import SVGFEMorphologyElement from '../nodes/svg-fe-morphology-element/SVGFEMorphologyElement.js'; import SVGFEOffsetElement from '../nodes/svg-fe-offset-element/SVGFEOffsetElement.js'; import SVGFEPointLightElement from '../nodes/svg-fe-point-light-element/SVGFEPointLightElement.js'; import SVGFESpecularLightingElement from '../nodes/svg-fe-specular-lighting-element/SVGFESpecularLightingElement.js'; import SVGFESpotLightElement from '../nodes/svg-fe-spot-light-element/SVGFESpotLightElement.js'; import SVGFETileElement from '../nodes/svg-fe-tile-element/SVGFETileElement.js'; import SVGFETurbulenceElement from '../nodes/svg-fe-turbulence-element/SVGFETurbulenceElement.js'; import SVGFilterElement from '../nodes/svg-filter-element/SVGFilterElement.js'; import SVGForeignObjectElement from '../nodes/svg-foreign-object-element/SVGForeignObjectElement.js'; import SVGGElement from '../nodes/svg-g-element/SVGGElement.js'; import SVGImageElement from '../nodes/svg-image-element/SVGImageElement.js'; import SVGLineElement from '../nodes/svg-line-element/SVGLineElement.js'; import SVGLinearGradientElement from '../nodes/svg-linear-gradient-element/SVGLinearGradientElement.js'; import SVGMarkerElement from '../nodes/svg-marker-element/SVGMarkerElement.js'; import SVGMaskElement from '../nodes/svg-mask-element/SVGMaskElement.js'; import SVGMetadataElement from '../nodes/svg-metadata-element/SVGMetadataElement.js'; import SVGMPathElement from '../nodes/svg-m-path-element/SVGMPathElement.js'; import SVGPathElement from '../nodes/svg-path-element/SVGPathElement.js'; import SVGPatternElement from '../nodes/svg-pattern-element/SVGPatternElement.js'; import SVGPolygonElement from '../nodes/svg-polygon-element/SVGPolygonElement.js'; import SVGPolylineElement from '../nodes/svg-polyline-element/SVGPolylineElement.js'; import SVGRadialGradientElement from '../nodes/svg-radial-gradient-element/SVGRadialGradientElement.js'; import SVGRectElement from '../nodes/svg-rect-element/SVGRectElement.js'; import SVGScriptElement from '../nodes/svg-script-element/SVGScriptElement.js'; import SVGSetElement from '../nodes/svg-set-element/SVGSetElement.js'; import SVGStopElement from '../nodes/svg-stop-element/SVGStopElement.js'; import SVGStyleElement from '../nodes/svg-style-element/SVGStyleElement.js'; import SVGSwitchElement from '../nodes/svg-switch-element/SVGSwitchElement.js'; import SVGSymbolElement from '../nodes/svg-symbol-element/SVGSymbolElement.js'; import SVGTextElement from '../nodes/svg-text-element/SVGTextElement.js'; import SVGTextPathElement from '../nodes/svg-text-path-element/SVGTextPathElement.js'; import SVGTitleElement from '../nodes/svg-title-element/SVGTitleElement.js'; import SVGTSpanElement from '../nodes/svg-t-span-element/SVGTSpanElement.js'; import SVGUseElement from '../nodes/svg-use-element/SVGUseElement.js'; import SVGViewElement from '../nodes/svg-view-element/SVGViewElement.js'; import SVGAnimationElement from '../nodes/svg-animation-element/SVGAnimationElement.js'; import SVGComponentTransferFunctionElement from '../nodes/svg-component-transfer-function-element/SVGComponentTransferFunctionElement.js'; import SVGGeometryElement from '../nodes/svg-geometry-element/SVGGeometryElement.js'; import SVGGradientElement from '../nodes/svg-gradient-element/SVGGradientElement.js'; import SVGTextPositioningElement from '../nodes/svg-text-positioning-element/SVGTextPositioningElement.js'; import DOMMatrixReadOnly from '../dom/dom-matrix/DOMMatrixReadOnly.js'; import DOMMatrix from '../dom/dom-matrix/DOMMatrix.js'; import SVGAngle from '../svg/SVGAngle.js'; import SVGAnimatedAngle from '../svg/SVGAnimatedAngle.js'; import SVGAnimatedBoolean from '../svg/SVGAnimatedBoolean.js'; import SVGAnimatedEnumeration from '../svg/SVGAnimatedEnumeration.js'; import SVGAnimatedInteger from '../svg/SVGAnimatedInteger.js'; import SVGAnimatedLength from '../svg/SVGAnimatedLength.js'; import SVGLength from '../svg/SVGLength.js'; import SVGAnimatedNumber from '../svg/SVGAnimatedNumber.js'; import SVGAnimatedNumberList from '../svg/SVGAnimatedNumberList.js'; import SVGAnimatedPreserveAspectRatio from '../svg/SVGAnimatedPreserveAspectRatio.js'; import SVGAnimatedRect from '../svg/SVGAnimatedRect.js'; import SVGAnimatedString from '../svg/SVGAnimatedString.js'; import SVGAnimatedTransformList from '../svg/SVGAnimatedTransformList.js'; import SVGLengthList from '../svg/SVGLengthList.js'; import SVGMatrix from '../svg/SVGMatrix.js'; import SVGNumber from '../svg/SVGNumber.js'; import SVGNumberList from '../svg/SVGNumberList.js'; import SVGPoint from '../svg/SVGPoint.js'; import SVGPointList from '../svg/SVGPointList.js'; import SVGPreserveAspectRatio from '../svg/SVGPreserveAspectRatio.js'; import SVGRect from '../svg/SVGRect.js'; import SVGStringList from '../svg/SVGStringList.js'; import SVGTransform from '../svg/SVGTransform.js'; import SVGTransformList from '../svg/SVGTransformList.js'; import SVGUnitTypes from '../svg/SVGUnitTypes.js'; import DOMPoint from '../dom/DOMPoint.js'; import SVGAnimatedLengthList from '../svg/SVGAnimatedLengthList.js'; import CustomElementReactionStack from '../custom-element/CustomElementReactionStack.js'; import StylePropertyMapReadOnly from '../css/style-property-map/StylePropertyMapReadOnly.js'; import StylePropertyMap from '../css/style-property-map/StylePropertyMap.js'; import MediaList from '../css/MediaList.js'; import CSSKeywordValue from '../css/style-property-map/CSSKeywordValue.js'; import CSSStyleValue from '../css/style-property-map/CSSStyleValue.js'; import CSSConditionRule from '../css/rules/CSSConditionRule.js'; import CSSGroupingRule from '../css/rules/CSSGroupingRule.js'; import CSSScopeRule from '../css/rules/CSSScopeRule.js'; import PopStateEvent from '../event/events/PopStateEvent.js'; import CloseEvent from '../event/events/CloseEvent.js'; const TIMER = { setTimeout: globalThis.setTimeout.bind(globalThis), clearTimeout: globalThis.clearTimeout.bind(globalThis), setInterval: globalThis.setInterval.bind(globalThis), clearInterval: globalThis.clearInterval.bind(globalThis), queueMicrotask: globalThis.queueMicrotask.bind(globalThis), setImmediate: globalThis.setImmediate.bind(globalThis), clearImmediate: globalThis.clearImmediate.bind(globalThis) }; const IS_NODE_JS_TIMEOUT_ENVIRONMENT = setTimeout.toString().includes('new Timeout'); const IS_CODE_GENERATION_FROM_STRINGS_ENVIRONMENT = (() => { try { // eslint-disable-next-line no-new-func new Function('return true;')(); return true; } catch { return false; } })(); const IS_UNFROZEN_INTRINSICS_ENVIRONMENT = (() => { try { globalThis.Function['$UNFROZEN$'] = true; delete globalThis.Function['$UNFROZEN$']; return true; } catch { return false; } })(); /** * Class for PerformanceObserverEntryList as it is only available as an interface from Node.js. */ class PerformanceObserverEntryList { /** * Constructor. */ constructor() { throw new TypeError('Illegal constructor'); } } /** * Zero Timeout. */ class Timeout { callback; /** * Constructor. * @param callback Callback. */ constructor(callback) { this.callback = callback; } } /** * Browser window. * * Reference: * https://developer.mozilla.org/en-US/docs/Web/API/Window. */ export default class BrowserWindow extends EventTarget { // Nodes Node = Node; Attr = Attr; ShadowRoot = ShadowRoot; ProcessingInstruction = ProcessingInstruction; Element = Element; CharacterData = CharacterData; DocumentType = DocumentType; // HTML Element classes HTMLAnchorElement = HTMLAnchorElement; HTMLButtonElement = HTMLButtonElement; HTMLOptGroupElement = HTMLOptGroupElement; HTMLOptionElement = HTMLOptionElement; HTMLElement = HTMLElement; HTMLUnknownElement = HTMLUnknownElement; HTMLTemplateElement = HTMLTemplateElement; HTMLInputElement = HTMLInputElement; HTMLSelectElement = HTMLSelectElement; HTMLTextAreaElement = HTMLTextAreaElement; HTMLImageElement = HTMLImageElement; HTMLStyleElement = HTMLStyleElement; HTMLLabelElement = HTMLLabelElement; HTMLSlotElement = HTMLSlotElement; HTMLMetaElement = HTMLMetaElement; HTMLMediaElement = HTMLMediaElement; HTMLAudioElement = HTMLAudioElement; HTMLVideoElement = HTMLVideoElement; HTMLBaseElement = HTMLBaseElement; HTMLDialogElement = HTMLDialogElement; HTMLScriptElement = HTMLScriptElement; HTMLLinkElement = HTMLLinkElement; HTMLIFrameElement = HTMLIFrameElement; HTMLFormElement = HTMLFormElement; HTMLUListElement = HTMLUListElement; HTMLTrackElement = HTMLTrackElement; HTMLTableRowElement = HTMLTableRowElement; HTMLTitleElement = HTMLTitleElement; HTMLTimeElement = HTMLTimeElement; HTMLTableSectionElement = HTMLTableSectionElement; HTMLTableCellElement = HTMLTableCellElement; HTMLTableElement = HTMLTableElement; HTMLSpanElement = HTMLSpanElement; HTMLSourceElement = HTMLSourceElement; HTMLQuoteElement = HTMLQuoteElement; HTMLProgressElement = HTMLProgressElement; HTMLPreElement = HTMLPreElement; HTMLPictureElement = HTMLPictureElement; HTMLParamElement = HTMLParamElement; HTMLParagraphElement = HTMLParagraphElement; HTMLOutputElement = HTMLOutputElement; HTMLOListElement = HTMLOListElement; HTMLObjectElement = HTMLObjectElement; HTMLMeterElement = HTMLMeterElement; HTMLMenuElement = HTMLMenuElement; HTMLMapElement = HTMLMapElement; HTMLLIElement = HTMLLIElement; HTMLLegendElement = HTMLLegendElement; HTMLModElement = HTMLModElement; HTMLHtmlElement = HTMLHtmlElement; HTMLHRElement = HTMLHRElement; HTMLHeadElement = HTMLHeadElement; HTMLHeadingElement = HTMLHeadingElement; HTMLFieldSetElement = HTMLFieldSetElement; HTMLEmbedElement = HTMLEmbedElement; HTMLDListElement = HTMLDListElement; HTMLDivElement = HTMLDivElement; HTMLDetailsElement = HTMLDetailsElement; HTMLDataListElement = HTMLDataListElement; HTMLDataElement = HTMLDataElement; HTMLTableColElement = HTMLTableColElement; HTMLTableCaptionElement = HTMLTableCaptionElement; HTMLCanvasElement = HTMLCanvasElement; HTMLBRElement = HTMLBRElement; HTMLBodyElement = HTMLBodyElement; HTMLAreaElement = HTMLAreaElement; // SVG Element classes SVGSVGElement = SVGSVGElement; SVGAnimateElement = SVGAnimateElement; SVGAnimateMotionElement = SVGAnimateMotionElement; SVGAnimateTransformElement = SVGAnimateTransformElement; SVGCircleElement = SVGCircleElement; SVGClipPathElement = SVGClipPathElement; SVGDefsElement = SVGDefsElement; SVGDescElement = SVGDescElement; SVGEllipseElement = SVGEllipseElement; SVGFEBlendElement = SVGFEBlendElement; SVGFEColorMatrixElement = SVGFEColorMatrixElement; SVGFEComponentTransferElement = SVGFEComponentTransferElement; SVGFECompositeElement = SVGFECompositeElement; SVGFEConvolveMatrixElement = SVGFEConvolveMatrixElement; SVGFEDiffuseLightingElement = SVGFEDiffuseLightingElement; SVGFEDisplacementMapElement = SVGFEDisplacementMapElement; SVGFEDistantLightElement = SVGFEDistantLightElement; SVGFEDropShadowElement = SVGFEDropShadowElement; SVGFEFloodElement = SVGFEFloodElement; SVGFEFuncAElement = SVGFEFuncAElement; SVGFEFuncBElement = SVGFEFuncBElement; SVGFEFuncGElement = SVGFEFuncGElement; SVGFEFuncRElement = SVGFEFuncRElement; SVGFEGaussianBlurElement = SVGFEGaussianBlurElement; SVGFEImageElement = SVGFEImageElement; SVGFEMergeElement = SVGFEMergeElement; SVGFEMergeNodeElement = SVGFEMergeNodeElement; SVGFEMorphologyElement = SVGFEMorphologyElement; SVGFEOffsetElement = SVGFEOffsetElement; SVGFEPointLightElement = SVGFEPointLightElement; SVGFESpecularLightingElement = SVGFESpecularLightingElement; SVGFESpotLightElement = SVGFESpotLightElement; SVGFETileElement = SVGFETileElement; SVGFETurbulenceElement = SVGFETurbulenceElement; SVGFilterElement = SVGFilterElement; SVGForeignObjectElement = SVGForeignObjectElement; SVGGElement = SVGGElement; SVGImageElement = SVGImageElement; SVGLineElement = SVGLineElement; SVGLinearGradientElement = SVGLinearGradientElement; SVGMarkerElement = SVGMarkerElement; SVGMaskElement = SVGMaskElement; SVGMetadataElement = SVGMetadataElement; SVGMPathElement = SVGMPathElement; SVGPathElement = SVGPathElement; SVGPatternElement = SVGPatternElement; SVGPolygonElement = SVGPolygonElement; SVGPolylineElement = SVGPolylineElement; SVGRadialGradientElement = SVGRadialGradientElement; SVGRectElement = SVGRectElement; SVGScriptElement = SVGScriptElement; SVGSetElement = SVGSetElement; SVGStopElement = SVGStopElement; SVGStyleElement = SVGStyleElement; SVGSwitchElement = SVGSwitchElement; SVGSymbolElement = SVGSymbolElement; SVGTextElement = SVGTextElement; SVGTextPathElement = SVGTextPathElement; SVGTitleElement = SVGTitleElement; SVGTSpanElement = SVGTSpanElement; SVGUseElement = SVGUseElement; SVGViewElement = SVGViewElement; // Abstract SVG Element classes SVGElement = SVGElement; SVGAnimationElement = SVGAnimationElement; SVGComponentTransferFunctionElement = SVGComponentTransferFunctionElement; SVGGeometryElement = SVGGeometryElement; SVGGradientElement = SVGGradientElement; SVGTextPositioningElement = SVGTextPositioningElement; SVGGraphicsElement = SVGGraphicsElement; // Event classes Event = Event; UIEvent = UIEvent; CustomEvent = CustomEvent; CloseEvent = CloseEvent; AnimationEvent = AnimationEvent; KeyboardEvent = KeyboardEvent; MessageEvent = MessageEvent; MouseEvent = MouseEvent; PointerEvent = PointerEvent; FocusEvent = FocusEvent; WheelEvent = WheelEvent; InputEvent = InputEvent; ErrorEvent = ErrorEvent; StorageEvent = StorageEvent; SubmitEvent = SubmitEvent; ProgressEvent = ProgressEvent; MediaQueryListEvent = MediaQueryListEvent; HashChangeEvent = HashChangeEvent; ClipboardEvent = ClipboardEvent; TouchEvent = TouchEvent; PopStateEvent = PopStateEvent; Touch = Touch; // Non-implemented event classes AudioProcessingEvent = Event; BeforeInputEvent = Event; BeforeUnloadEvent = Event; BlobEvent = Event; CompositionEvent = Event; CSSFontFaceLoadEvent = Event; DeviceLightEvent = Event; DeviceMotionEvent = Event; DeviceOrientationEvent = Event; DeviceProximityEvent = Event; DOMTransactionEvent = Event; DragEvent = Event; EditingBeforeInputEvent = Event; FetchEvent = Event; GamepadEvent = Event; IDBVersionChangeEvent = Event; MediaStreamEvent = Event; MutationEvent = Event; OfflineAudioCompletionEvent = Event; OverconstrainedError = Event; PageTransitionEvent = Event; PaymentRequestUpdateEvent = Event; RelatedEvent = Event; RTCDataChannelEvent = Event; RTCIdentityErrorEvent = Event; RTCIdentityEvent = Event; RTCPeerConnectionIceEvent = Event; SensorEvent = Event; SVGEvent = Event; SVGZoomEvent = Event; TimeEvent = Event; TrackEvent = Event; TransitionEvent = Event; UserProximityEvent = Event; WebGLContextEvent = Event; TextEvent = Event; // Other classes that don't have to be bound to the Window context Permissions = Permissions; History = History; Navigator = Navigator; Clipboard = Clipboard; TimeRanges = TimeRanges; TextTrackCueList = TextTrackCueList; ValidityState = ValidityState; MutationRecord = MutationRecord; IntersectionObserver = IntersectionObserver; IntersectionObserverEntry = IntersectionObserverEntry; CSSStyleDeclaration = CSSStyleDeclaration; CSSRule = CSSRule; CSSContainerRule = CSSContainerRule; CSSFontFaceRule = CSSFontFaceRule; CSSKeyframeRule = CSSKeyframeRule; CSSKeyframesRule = CSSKeyframesRule; CSSMediaRule = CSSMediaRule; CSSStyleRule = CSSStyleRule; CSSSupportsRule = CSSSupportsRule; CSSConditionRule = CSSConditionRule; CSSGroupingRule = CSSGroupingRule; CSSScopeRule = CSSScopeRule; DOMRect = DOMRect; DOMRectReadOnly = DOMRectReadOnly; Plugin = Plugin; PluginArray = PluginArray; Location = Location; CustomElementRegistry = CustomElementRegistry; ResizeObserver = ResizeObserver; Blob = Blob; File = File; Storage = Storage; MimeType = MimeType; MimeTypeArray = MimeTypeArray; NodeFilter = NodeFilter; HTMLCollection = HTMLCollection; HTMLFormControlCollection = HTMLFormControlsCollection; HTMLOptionsCollection = HTMLOptionsCollection; NodeList = NodeList; RadioNodeList = RadioNodeList; FileList = FileList; Screen = Screen; ScreenDetails = ScreenDetails; ScreenDetailed = ScreenDetailed; DOMMatrixReadOnly = DOMMatrixReadOnly; DOMMatrix = DOMMatrix; NamedNodeMap = NamedNodeMap; TreeWalker = TreeWalker; NodeIterator = NodeIterator; DataTransfer = DataTransfer; DataTransferItem = DataTransferItem; DataTransferItemList = DataTransferItemList; XMLSerializer = XMLSerializer; ClipboardItem = ClipboardItem; Selection = Selection; CSSUnitValue = CSSUnitValue; SVGAngle = SVGAngle; SVGAnimatedAngle = SVGAnimatedAngle; SVGAnimatedBoolean = SVGAnimatedBoolean; SVGAnimatedEnumeration = SVGAnimatedEnumeration; SVGAnimatedInteger = SVGAnimatedInteger; SVGAnimatedLength = SVGAnimatedLength; SVGAnimatedNumber = SVGAnimatedNumber; SVGAnimatedNumberList = SVGAnimatedNumberList; SVGAnimatedPreserveAspectRatio = SVGAnimatedPreserveAspectRatio; SVGAnimatedRect = SVGAnimatedRect; SVGAnimatedString = SVGAnimatedString; SVGAnimatedTransformList = SVGAnimatedTransformList; SVGLength = SVGLength; SVGLengthList = SVGLengthList; SVGMatrix = SVGMatrix; SVGNumber = SVGNumber; SVGNumberList = SVGNumberList; SVGPoint = SVGPoint; SVGPointList = SVGPointList; SVGPreserveAspectRatio = SVGPreserveAspectRatio; SVGRect = SVGRect; SVGStringList = SVGStringList; SVGTransform = SVGTransform; SVGTransformList = SVGTransformList; SVGAnimatedLengthList = SVGAnimatedLengthList; SVGUnitTypes = SVGUnitTypes; DOMPoint = DOMPoint; StylePropertyMap = StylePropertyMap; StylePropertyMapReadOnly = StylePropertyMapReadOnly; MediaList = MediaList; CSSKeywordValue = CSSKeywordValue; CSSStyleValue = CSSStyleValue; Window = this.constructor; // Node.js Classes URLSearchParams = URLSearchParams; WritableStream = Stream.Writable; ReadableStream = ReadableStream; TransformStream = Stream.Transform; PerformanceObserver = PerformanceObserver; PerformanceEntry = PerformanceEntry; PerformanceObserverEntryList = (PerformanceObserverEntryList); // Public properties. document; customElements = new CustomElementRegistry(this); window = this; globalThis = this; performance = performance; screenLeft = 0; screenTop = 0; screenX = 0; screenY = 0; crypto = webcrypto; TextEncoder = TextEncoder; TextDecoder = TextDecoder; closed = false; console; name = ''; Buffer = Buffer; // Public internal properties // Used for tracking capture event listeners to improve performance when they are not used. // See EventTarget class. [PropertySymbol.mutationObservers] = []; [PropertySymbol.readyStateManager]; [PropertySymbol.location]; [PropertySymbol.history]; [PropertySymbol.navigator]; [PropertySymbol.screen]; [PropertySymbol.sessionStorage]; [PropertySymbol.localStorage]; [PropertySymbol.self] = this; [PropertySymbol.top] = this; [PropertySymbol.parent] = this; [PropertySymbol.window] = this; [PropertySymbol.frames] = this; [PropertySymbol.internalId] = -1; [PropertySymbol.customElementReactionStack] = new CustomElementReactionStack(this); [PropertySymbol.modules] = { json: new Map(), css: new Map(), esm: new Map() }; [PropertySymbol.moduleImportMap] = null; [PropertySymbol.openWebSockets] = []; [PropertySymbol.propertyEventListeners] = new Map(); /* eslint-enable jsdoc/require-jsdoc */ // Private properties #browserFrame; #innerWidth = null; #innerHeight = null; #outerWidth = null; #outerHeight = null; #devicePixelRatio = null; #zeroDelayTimeout = { timeouts: null }; #timerLoopStacks = []; #timerLoopLimits = []; /** * Constructor. * * @param browserFrame Browser frame. * @param [options] Options. * @param [options.url] URL. */ constructor(browserFrame, options) { super(); this.#browserFrame = browserFrame; this[PropertySymbol.validateJavaScriptExecutionEnvironment](); this.console = browserFrame.page.console; this[PropertySymbol.readyStateManager] = new DocumentReadyStateManager(browserFrame); this[PropertySymbol.navigator] = new Navigator(this); this[PropertySymbol.screen] = new Screen(); this[PropertySymbol.sessionStorage] = new Storage(); this[PropertySymbol.localStorage] = new Storage(); this[PropertySymbol.location] = new Location(this.#browserFrame, options?.url ?? 'about:blank'); this[PropertySymbol.history] = new History(this.#browserFrame, this); browserFrame[PropertySymbol.history].currentItem.href = options?.url ?? 'about:blank'; WindowBrowserContext.setWindowBrowserFrameRelation(this, this.#browserFrame); this[PropertySymbol.setupVMContext](); WindowContextClassExtender.extendClasses(this); // Document this.document = new this.HTMLDocument(); this.document[PropertySymbol.defaultView] = this; // Ready state manager const taskID = browserFrame[PropertySymbol.asyncTaskManager].startTask(() => this[PropertySymbol.readyStateManager].destroy()); this[PropertySymbol.readyStateManager].waitUntilComplete().then(() => { browserFrame[PropertySymbol.asyncTaskManager].endTask(taskID); this.document[PropertySymbol.readyState] = DocumentReadyStateEnum.complete; this.document.dispatchEvent(new Event('readystatechange')); const loadEvent = new Event('load'); // Not sure why target is set to document here, but this is how it seem to work in the browser loadEvent[PropertySymbol.currentTarget] = this; loadEvent[PropertySymbol.target] = this.document; loadEvent[PropertySymbol.eventPhase] = EventPhaseEnum.atTarget; this.dispatchEvent(loadEvent); loadEvent[PropertySymbol.currentTarget] = null; loadEvent[PropertySymbol.eventPhase] = EventPhaseEnum.none; loadEvent[PropertySymbol.dispatching] = false; }); this[PropertySymbol.bindMethods](); } // Events /* eslint-disable jsdoc/require-jsdoc */ get onsearch() { return this[PropertySymbol.propertyEventListeners].get('onsearch') ?? null; } set onsearch(value) { this[PropertySymbol.propertyEventListeners].set('onsearch', value); } get onappinstalled() { return this[PropertySymbol.propertyEventListeners].get('onappinstalled') ?? null; } set onappinstalled(value) { this[PropertySymbol.propertyEventListeners].set('onappinstalled', value); } get onbeforeinstallprompt() { return this[PropertySymbol.propertyEventListeners].get('onbeforeinstallprompt') ?? null; } set onbeforeinstallprompt(value) { this[PropertySymbol.propertyEventListeners].set('onbeforeinstallprompt', value); } get onabort() { return this[PropertySymbol.propertyEventListeners].get('onabort') ?? null; } set onabort(value) { this[PropertySymbol.propertyEventListeners].set('onabort', value); } get onbeforeinput() { return this[PropertySymbol.propertyEventListeners].get('onbeforeinput') ?? null; } set onbeforeinput(value) { this[PropertySymbol.propertyEventListeners].set('onbeforeinput', value); } get onbeforematch() { return this[PropertySymbol.propertyEventListeners].get('onbeforematch') ?? null; } set onbeforematch(value) { this[PropertySymbol.propertyEventListeners].set('onbeforematch', value); } get onbeforetoggle() { return this[PropertySymbol.propertyEventListeners].get('onbeforetoggle') ?? null; } set onbeforetoggle(value) { this[PropertySymbol.propertyEventListeners].set('onbeforetoggle', value); } get onblur() { return this[PropertySymbol.propertyEventListeners].get('onblur') ?? null; } set onblur(value) { this[PropertySymbol.propertyEventListeners].set('onblur', value); } get oncancel() { return this[PropertySymbol.propertyEventListeners].get('oncancel') ?? null; } set oncancel(value) { this[PropertySymbol.propertyEventListeners].set('oncancel', value); } get oncanplay() { return this[PropertySymbol.propertyEventListeners].get('oncanplay') ?? null; } set oncanplay(value) { this[PropertySymbol.propertyEventListeners].set('oncanplay', value); } get oncanplaythrough() { return this[PropertySymbol.propertyEventListeners].get('oncanplaythrough') ?? null; } set oncanplaythrough(value) { this[PropertySymbol.propertyEventListeners].set('oncanplaythrough', value); } get onchange() { return this[PropertySymbol.propertyEventListeners].get('onchange') ?? null; } set onchange(value) { this[PropertySymbol.propertyEventListeners].set('onchange', value); } get onclick() { return this[PropertySymbol.propertyEventListeners].get('onclick') ?? null; } set onclick(value) { this[PropertySymbol.propertyEventListeners].set('onclick', value); } get onclose() { return this[PropertySymbol.propertyEventListeners].get('onclose') ?? null; } set onclose(value) { this[PropertySymbol.propertyEventListeners].set('onclose', value); } get oncommand() { return this[PropertySymbol.propertyEventListeners].get('oncommand') ?? null; } set oncommand(value) { this[PropertySymbol.propertyEventListeners].set('oncommand', value); } get oncontentvisibilityautostatechange() { return (this[PropertySymbol.propertyEventListeners].get('oncontentvisibilityautostatechange') ?? null); } set oncontentvisibilityautostatechange(value) { this[PropertySymbol.propertyEventListeners].set('oncontentvisibilityautostatechange', value); } get oncontextlost() { return this[PropertySymbol.propertyEventListeners].get('oncontextlost') ?? null; } set oncontextlost(value) { this[PropertySymbol.propertyEventListeners].set('oncontextlost', value); } get oncontextmenu() { return this[PropertySymbol.propertyEventListeners].get('oncontextmenu') ?? null; } set oncontextmenu(value) { this[PropertySymbol.propertyEventListeners].set('oncontextmenu', value); } get oncontextrestored() { return this[PropertySymbol.propertyEventListeners].get('oncontextrestored') ?? null; } set oncontextrestored(value) { this[PropertySymbol.propertyEventListeners].set('oncontextrestored', value); } get oncuechange() { return this[PropertySymbol.propertyEventListeners].get('oncuechange') ?? null; } set oncuechange(value) { this[PropertySymbol.propertyEventListeners].set('oncuechange', value); } get ondblclick() { return this[PropertySymbol.propertyEventListeners].get('ondblclick') ?? null; } set ondblclick(value) { this[PropertySymbol.propertyEventListeners].set('ondblclick', value); } get ondrag() { return this[PropertySymbol.propertyEventListeners].get('ondrag') ?? null; } set ondrag(value) { this[PropertySymbol.propertyEventListeners].set('ondrag', value); } get ondragend() { return this[PropertySymbol.propertyEventListeners].get('ondragend') ?? null; } set ondragend(value) { this[PropertySymbol.propertyEventListeners].set('ondragend', value); } get ondragenter() { return this[PropertySymbol.propertyEventListeners].get('ondragenter') ?? null; } set ondragenter(value) { this[PropertySymbol.propertyEventListeners].set('ondragenter', value); } get ondragleave() { return this[PropertySymbol.propertyEventListeners].get('ondragleave') ?? null; } set ondragleave(value) { this[PropertySymbol.propertyEventListeners].set('ondragleave', value); } get ondragover() { return this[PropertySymbol.propertyEventListeners].get('ondragover') ?? null; } set ondragover(value) { this[PropertySymbol.propertyEventListeners].set('ondragover', value); } get ondragstart() { return this[PropertySymbol.propertyEventListeners].get('ondragstart') ?? null; } set ondragstart(value) { this[PropertySymbol.propertyEventListeners].set('ondragstart', value); } get ondrop() { return this[PropertySymbol.propertyEventListeners].get('ondrop') ?? null; } set ondrop(value) { this[PropertySymbol.propertyEventListeners].set('ondrop', value); } get ondurationchange() { return this[PropertySymbol.propertyEventListeners].get('ondurationchange') ?? null; } set ondurationchange(value) { this[PropertySymbol.propertyEventListeners].set('ondurationchange', value); } get onemptied() { return this[PropertySymbol.propertyEventListeners].get('onemptied') ?? null; } set onemptied(value) { this[PropertySymbol.propertyEventListeners].set('onemptied', value); } get onended() { return this[PropertySymbol.propertyEventListeners].get('onended') ?? null; } set onended(value) { this[PropertySymbol.propertyEventListeners].set('onended', value); } get onerror() { return this[PropertySymbol.propertyEventListeners].get('onerror') ?? null; } set onerror(value) { this[PropertySymbol.propertyEventListeners].set('onerror', value); } get onfocus() { return this[PropertySymbol.propertyEventListeners].get('onfocus') ?? null; } set onfocus(value) { this[PropertySymbol.propertyEventListeners].set('onfocus', value); } get onformdata() { return this[PropertySymbol.propertyEventListeners].get('onformdata') ?? null; } set onformdata(value) { this[PropertySymbol.propertyEventListeners].set('onformdata', value); } get oninput() { return this[PropertySymbol.propertyEventListeners].get('oninput') ?? null; } set oninput(value) { this[PropertySymbol.propertyEventListeners].set('oninput', value); } get oninvalid() { return this[PropertySymbol.propertyEventListeners].get('oninvalid') ?? null; } set oninvalid(value) { this[PropertySymbol.propertyEventListeners].set('oninvalid', value); } get onkeydown() { return this[PropertySymbol.propertyEventListeners].get('onkeydown') ?? null; } set onkeydown(value) { this[PropertySymbol.propertyEventListeners].set('onkeydown', value); } get onkeypress() { return this[PropertySymbol.propertyEventListeners].get('onkeypress') ?? null; } set onkeypress(value) { this[PropertySymbol.propertyEventListeners].set('onkeypress', value); } get onkeyup() { return this[PropertySymbol.propertyEventListeners].get('onkeyup') ?? null; } set onkeyup(value) { this[PropertySymbol.propertyEventListeners].set('onkeyup', value); } get onload() { return this[PropertySymbol.propertyEventListeners].get('onload') ?? null; } set onload(value) { this[PropertySymbol.propertyEventListeners].set('onload', value); } get onloadeddata() { return this[PropertySymbol.propertyEventListeners].get('onloadeddata') ?? null; } set onloadeddata(value) { this[PropertySymbol.propertyEventListeners].set('onloadeddata', value); } get onloadedmetadata() { return this[PropertySymbol.propertyEventListeners].get('onloadedmetadata') ?? null; } set onloadedmetadata(value) { this[PropertySymbol.propertyEventListeners].set('onloadedmetadata', value); } get onloadstart() { return this[PropertySymbol.propertyEventListeners].get('onloadstart') ?? null; } set onloadstart(value) { this[PropertySymbol.propertyEventListeners].set('onloadstart', value); } get onmousedown() { return this[PropertySymbol.propertyEventListeners].get('onmousedown') ?? null; } set onmousedown(value) { this[PropertySymbol.propertyEventListeners].set('onmousedown', value); } get onmouseenter() { return this[PropertySymbol.propertyEventListeners].get('onmouseenter') ?? null; } set onmouseenter(value) { this[PropertySymbol.propertyEventListeners].set('onmouseenter', value); } get onmouseleave() { return this[PropertySymbol.propertyEventListeners].get('onmouseleave') ?? null; } set onmouseleave(value) { this[PropertySymbol.propertyEventListeners].set('onmouseleave', value); } get onmousemove() { return this[PropertySymbol.propertyEventListeners].get('onmousemove') ?? null; } set onmousemove(value) { this[PropertySymbol.propertyEventListeners].set('onmousemove', value); } get onmouseout() { return this[PropertySymbol.propertyEventListeners].get('onmouseout') ?? null; } set onmouseout(value) { this[PropertySymbol.propertyEventListeners].set('onmouseout', value); } get onmouseover() { return this[PropertySymbol.propertyEventListeners].get('onmouseover') ?? null; } set onmouseover(value) { this[PropertySymbol.propertyEventListeners].set('onmouseover', value); } get onmouseup() { return this[PropertySymbol.propertyEventListeners].get('onmouseup') ?? null; } set onmouseup(value) { this[PropertySymbol.propertyEventListeners].set('onmouseup', value); } get onmousewheel() { return this[PropertySymbol.propertyEventListeners].get('onmousewheel') ?? null; } set onmousewheel(value) { this[PropertySymbol.propertyEventListeners].set('onmousewheel', value); } get onpause() { return this[PropertySymbol.propertyEventListeners].get('onpause') ?? null; } set onpause(value) { this[PropertySymbol.propertyEventListeners].set('onpause', value); } get onplay() { return this[PropertySymbol.propertyEventListeners].get('onplay') ?? null; } set onplay(value) { this[PropertySymbol.propertyEventListeners].set('onplay', value); } get onplaying() { return this[PropertySymbol.propertyEventListeners].get('onplaying') ?? null; } set onplaying(value) { this[PropertySymbol.propertyEventListeners].set('onplaying', value); } get onprogress() { return this[PropertySymbol.propertyEventListeners].get('onprogress') ?? null; } set onprogress(value) { this[PropertySymbol.propertyEventListeners].set('onprogress', value); } get onratechange() { return this[PropertyS