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
JavaScript
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