From 76cb9c2a39d477a64824a985ade40507e3bbade1 Mon Sep 17 00:00:00 2001 From: Adam Mathes Date: Fri, 13 Feb 2026 21:34:48 -0800 Subject: feat(vanilla): add testing infrastructure and tests (NK-wjnczv) --- vanilla/node_modules/jsdom/lib/api.js | 373 ++ .../node_modules/jsdom/lib/jsdom/browser/Window.js | 1024 +++++ .../jsdom/lib/jsdom/browser/default-stylesheet.css | 415 ++ .../jsdom/lib/jsdom/browser/js-globals.json | 332 ++ .../jsdom/lib/jsdom/browser/not-implemented.js | 20 + .../jsdom/lib/jsdom/browser/parser/html.js | 208 + .../jsdom/lib/jsdom/browser/parser/index.js | 37 + .../jsdom/lib/jsdom/browser/parser/xml.js | 202 + .../browser/resources/async-resource-queue.js | 114 + .../browser/resources/decompress-interceptor.js | 184 + .../jsdom/browser/resources/jsdom-dispatcher.js | 746 ++++ .../resources/per-document-resource-loader.js | 116 + .../jsdom/browser/resources/request-interceptor.js | 171 + .../lib/jsdom/browser/resources/request-manager.js | 33 + .../lib/jsdom/browser/resources/resource-queue.js | 142 + .../lib/jsdom/browser/resources/stream-handler.js | 89 + .../node_modules/jsdom/lib/jsdom/level2/style.js | 65 + .../node_modules/jsdom/lib/jsdom/level3/xpath.js | 1875 ++++++++ .../jsdom/living/aborting/AbortController-impl.js | 17 + .../lib/jsdom/living/aborting/AbortSignal-impl.js | 131 + .../jsdom/lib/jsdom/living/attributes.js | 312 ++ .../jsdom/lib/jsdom/living/attributes/Attr-impl.js | 60 + .../jsdom/living/attributes/NamedNodeMap-impl.js | 78 + .../DefaultConstraintValidation-impl.js | 75 + .../constraint-validation/ValidityState-impl.js | 66 + .../jsdom/lib/jsdom/living/crypto/Crypto-impl.js | 68 + .../lib/jsdom/living/cssom/StyleSheetList-impl.js | 38 + .../custom-elements/CustomElementRegistry-impl.js | 279 ++ .../custom-elements/ElementInternals-impl.js | 56 + .../DeviceMotionEventAcceleration-impl.js | 7 + .../DeviceMotionEventRotationRate-impl.js | 7 + .../jsdom/lib/jsdom/living/documents.js | 15 + .../lib/jsdom/living/domparsing/DOMParser-impl.js | 59 + .../lib/jsdom/living/domparsing/InnerHTML-impl.js | 30 + .../jsdom/living/domparsing/XMLSerializer-impl.js | 18 + .../domparsing/parse5-adapter-serialization.js | 63 + .../lib/jsdom/living/domparsing/serialization.js | 36 + .../lib/jsdom/living/encoding/TextDecoder-impl.js | 25 + .../lib/jsdom/living/encoding/TextEncoder-impl.js | 5 + .../jsdom/living/events/BeforeUnloadEvent-impl.js | 12 + .../lib/jsdom/living/events/BlobEvent-impl.js | 14 + .../lib/jsdom/living/events/CloseEvent-impl.js | 10 + .../jsdom/living/events/CompositionEvent-impl.js | 20 + .../lib/jsdom/living/events/CustomEvent-impl.js | 21 + .../jsdom/living/events/DeviceMotionEvent-impl.js | 49 + .../living/events/DeviceOrientationEvent-impl.js | 10 + .../lib/jsdom/living/events/ErrorEvent-impl.js | 14 + .../jsdom/lib/jsdom/living/events/Event-impl.js | 195 + .../jsdom/living/events/EventModifierMixin-impl.js | 24 + .../lib/jsdom/living/events/EventTarget-impl.js | 438 ++ .../lib/jsdom/living/events/FocusEvent-impl.js | 9 + .../jsdom/living/events/HashChangeEvent-impl.js | 14 + .../lib/jsdom/living/events/InputEvent-impl.js | 11 + .../lib/jsdom/living/events/KeyboardEvent-impl.js | 29 + .../lib/jsdom/living/events/MessageEvent-impl.js | 25 + .../lib/jsdom/living/events/MouseEvent-impl.js | 72 + .../living/events/PageTransitionEvent-impl.js | 20 + .../lib/jsdom/living/events/PointerEvent-impl.js | 21 + .../lib/jsdom/living/events/PopStateEvent-impl.js | 9 + .../lib/jsdom/living/events/ProgressEvent-impl.js | 14 + .../living/events/PromiseRejectionEvent-impl.js | 14 + .../lib/jsdom/living/events/StorageEvent-impl.js | 26 + .../lib/jsdom/living/events/SubmitEvent-impl.js | 13 + .../lib/jsdom/living/events/TouchEvent-impl.js | 14 + .../jsdom/living/events/TransitionEvent-impl.js | 10 + .../jsdom/lib/jsdom/living/events/UIEvent-impl.js | 43 + .../lib/jsdom/living/events/WheelEvent-impl.js | 12 + .../jsdom/lib/jsdom/living/fetch/Headers-impl.js | 173 + .../jsdom/lib/jsdom/living/fetch/header-list.js | 158 + .../jsdom/lib/jsdom/living/fetch/header-types.js | 205 + .../jsdom/lib/jsdom/living/fetch/header-utils.js | 26 + .../jsdom/lib/jsdom/living/file-api/Blob-impl.js | 111 + .../jsdom/lib/jsdom/living/file-api/File-impl.js | 12 + .../lib/jsdom/living/file-api/FileList-impl.js | 15 + .../lib/jsdom/living/file-api/FileReader-impl.js | 132 + .../lib/jsdom/living/generated/AbortController.js | 143 + .../lib/jsdom/living/generated/AbortSignal.js | 249 ++ .../lib/jsdom/living/generated/AbstractRange.js | 171 + .../living/generated/AddEventListenerOptions.js | 53 + .../jsdom/living/generated/AssignedNodesOptions.js | 28 + .../jsdom/lib/jsdom/living/generated/Attr.js | 217 + .../jsdom/lib/jsdom/living/generated/BarProp.js | 117 + .../jsdom/living/generated/BeforeUnloadEvent.js | 139 + .../jsdom/lib/jsdom/living/generated/BinaryType.js | 12 + .../jsdom/lib/jsdom/living/generated/Blob.js | 211 + .../lib/jsdom/living/generated/BlobCallback.js | 30 + .../jsdom/lib/jsdom/living/generated/BlobEvent.js | 157 + .../lib/jsdom/living/generated/BlobEventInit.js | 43 + .../lib/jsdom/living/generated/BlobPropertyBag.js | 42 + .../lib/jsdom/living/generated/CDATASection.js | 109 + .../jsdom/living/generated/CanPlayTypeResult.js | 12 + .../lib/jsdom/living/generated/CharacterData.js | 453 ++ .../jsdom/lib/jsdom/living/generated/CloseEvent.js | 168 + .../lib/jsdom/living/generated/CloseEventInit.js | 65 + .../jsdom/lib/jsdom/living/generated/Comment.js | 120 + .../lib/jsdom/living/generated/CompositionEvent.js | 219 + .../jsdom/living/generated/CompositionEventInit.js | 32 + .../jsdom/lib/jsdom/living/generated/Crypto.js | 148 + .../living/generated/CustomElementConstructor.js | 34 + .../living/generated/CustomElementRegistry.js | 267 ++ .../lib/jsdom/living/generated/CustomEvent.js | 206 + .../lib/jsdom/living/generated/CustomEventInit.js | 32 + .../lib/jsdom/living/generated/DOMException.js | 222 + .../jsdom/living/generated/DOMImplementation.js | 237 + .../jsdom/lib/jsdom/living/generated/DOMParser.js | 140 + .../jsdom/lib/jsdom/living/generated/DOMRect.js | 276 ++ .../lib/jsdom/living/generated/DOMRectInit.js | 76 + .../lib/jsdom/living/generated/DOMRectReadOnly.js | 285 ++ .../lib/jsdom/living/generated/DOMStringMap.js | 297 ++ .../lib/jsdom/living/generated/DOMTokenList.js | 537 +++ .../jsdom/living/generated/DeviceMotionEvent.js | 183 + .../generated/DeviceMotionEventAcceleration.js | 145 + .../generated/DeviceMotionEventAccelerationInit.js | 61 + .../living/generated/DeviceMotionEventInit.js | 70 + .../generated/DeviceMotionEventRotationRate.js | 145 + .../generated/DeviceMotionEventRotationRateInit.js | 61 + .../living/generated/DeviceOrientationEvent.js | 183 + .../living/generated/DeviceOrientationEventInit.js | 80 + .../jsdom/lib/jsdom/living/generated/Document.js | 4509 ++++++++++++++++++++ .../lib/jsdom/living/generated/DocumentFragment.js | 334 ++ .../jsdom/living/generated/DocumentReadyState.js | 12 + .../lib/jsdom/living/generated/DocumentType.js | 252 ++ .../jsdom/lib/jsdom/living/generated/Element.js | 3718 ++++++++++++++++ .../living/generated/ElementCreationOptions.js | 26 + .../living/generated/ElementDefinitionOptions.js | 29 + .../lib/jsdom/living/generated/ElementInternals.js | 2150 ++++++++++ .../jsdom/lib/jsdom/living/generated/EndingType.js | 12 + .../jsdom/lib/jsdom/living/generated/ErrorEvent.js | 192 + .../lib/jsdom/living/generated/ErrorEventInit.js | 92 + .../jsdom/lib/jsdom/living/generated/Event.js | 430 ++ .../jsdom/living/generated/EventHandlerNonNull.js | 36 + .../jsdom/lib/jsdom/living/generated/EventInit.js | 58 + .../lib/jsdom/living/generated/EventListener.js | 35 + .../jsdom/living/generated/EventListenerOptions.js | 28 + .../jsdom/living/generated/EventModifierInit.js | 221 + .../lib/jsdom/living/generated/EventTarget.js | 259 ++ .../jsdom/lib/jsdom/living/generated/External.js | 130 + .../jsdom/lib/jsdom/living/generated/File.js | 185 + .../jsdom/lib/jsdom/living/generated/FileList.js | 298 ++ .../lib/jsdom/living/generated/FilePropertyBag.js | 33 + .../jsdom/lib/jsdom/living/generated/FileReader.js | 468 ++ .../jsdom/lib/jsdom/living/generated/FocusEvent.js | 144 + .../lib/jsdom/living/generated/FocusEventInit.js | 36 + .../jsdom/lib/jsdom/living/generated/FormData.js | 468 ++ .../jsdom/lib/jsdom/living/generated/Function.js | 42 + .../jsdom/living/generated/GetRootNodeOptions.js | 31 + .../jsdom/living/generated/HTMLAnchorElement.js | 1023 +++++ .../lib/jsdom/living/generated/HTMLAreaElement.js | 822 ++++ .../lib/jsdom/living/generated/HTMLAudioElement.js | 110 + .../lib/jsdom/living/generated/HTMLBRElement.js | 153 + .../lib/jsdom/living/generated/HTMLBaseElement.js | 193 + .../lib/jsdom/living/generated/HTMLBodyElement.js | 877 ++++ .../jsdom/living/generated/HTMLButtonElement.js | 522 +++ .../jsdom/living/generated/HTMLCanvasElement.js | 304 ++ .../lib/jsdom/living/generated/HTMLCollection.js | 352 ++ .../lib/jsdom/living/generated/HTMLDListElement.js | 156 + .../lib/jsdom/living/generated/HTMLDataElement.js | 153 + .../jsdom/living/generated/HTMLDataListElement.js | 125 + .../jsdom/living/generated/HTMLDetailsElement.js | 156 + .../jsdom/living/generated/HTMLDialogElement.js | 156 + .../jsdom/living/generated/HTMLDirectoryElement.js | 156 + .../lib/jsdom/living/generated/HTMLDivElement.js | 153 + .../lib/jsdom/living/generated/HTMLElement.js | 3489 +++++++++++++++ .../lib/jsdom/living/generated/HTMLEmbedElement.js | 378 ++ .../jsdom/living/generated/HTMLFieldSetElement.js | 329 ++ .../lib/jsdom/living/generated/HTMLFontElement.js | 236 + .../living/generated/HTMLFormControlsCollection.js | 318 ++ .../lib/jsdom/living/generated/HTMLFormElement.js | 658 +++ .../lib/jsdom/living/generated/HTMLFrameElement.js | 510 +++ .../jsdom/living/generated/HTMLFrameSetElement.js | 708 +++ .../lib/jsdom/living/generated/HTMLHRElement.js | 320 ++ .../lib/jsdom/living/generated/HTMLHeadElement.js | 110 + .../jsdom/living/generated/HTMLHeadingElement.js | 153 + .../lib/jsdom/living/generated/HTMLHtmlElement.js | 153 + .../jsdom/living/generated/HTMLIFrameElement.js | 686 +++ .../lib/jsdom/living/generated/HTMLImageElement.js | 902 ++++ .../lib/jsdom/living/generated/HTMLInputElement.js | 1927 +++++++++ .../lib/jsdom/living/generated/HTMLLIElement.js | 201 + .../lib/jsdom/living/generated/HTMLLabelElement.js | 179 + .../jsdom/living/generated/HTMLLegendElement.js | 166 + .../lib/jsdom/living/generated/HTMLLinkElement.js | 552 +++ .../lib/jsdom/living/generated/HTMLMapElement.js | 168 + .../jsdom/living/generated/HTMLMarqueeElement.js | 554 +++ .../lib/jsdom/living/generated/HTMLMediaElement.js | 898 ++++ .../lib/jsdom/living/generated/HTMLMenuElement.js | 156 + .../lib/jsdom/living/generated/HTMLMetaElement.js | 276 ++ .../lib/jsdom/living/generated/HTMLMeterElement.js | 365 ++ .../lib/jsdom/living/generated/HTMLModElement.js | 214 + .../lib/jsdom/living/generated/HTMLOListElement.js | 281 ++ .../jsdom/living/generated/HTMLObjectElement.js | 941 ++++ .../jsdom/living/generated/HTMLOptGroupElement.js | 197 + .../jsdom/living/generated/HTMLOptionElement.js | 376 ++ .../living/generated/HTMLOptionsCollection.js | 511 +++ .../jsdom/living/generated/HTMLOutputElement.js | 392 ++ .../jsdom/living/generated/HTMLParagraphElement.js | 153 + .../lib/jsdom/living/generated/HTMLParamElement.js | 276 ++ .../jsdom/living/generated/HTMLPictureElement.js | 110 + .../lib/jsdom/living/generated/HTMLPreElement.js | 160 + .../jsdom/living/generated/HTMLProgressElement.js | 228 + .../lib/jsdom/living/generated/HTMLQuoteElement.js | 173 + .../jsdom/living/generated/HTMLScriptElement.js | 469 ++ .../jsdom/living/generated/HTMLSelectElement.js | 989 +++++ .../lib/jsdom/living/generated/HTMLSlotElement.js | 192 + .../jsdom/living/generated/HTMLSourceElement.js | 337 ++ .../lib/jsdom/living/generated/HTMLSpanElement.js | 110 + .../lib/jsdom/living/generated/HTMLStyleElement.js | 207 + .../living/generated/HTMLTableCaptionElement.js | 153 + .../jsdom/living/generated/HTMLTableCellElement.js | 729 ++++ .../jsdom/living/generated/HTMLTableColElement.js | 372 ++ .../lib/jsdom/living/generated/HTMLTableElement.js | 799 ++++ .../jsdom/living/generated/HTMLTableRowElement.js | 414 ++ .../living/generated/HTMLTableSectionElement.js | 346 ++ .../jsdom/living/generated/HTMLTemplateElement.js | 123 + .../jsdom/living/generated/HTMLTextAreaElement.js | 1206 ++++++ .../lib/jsdom/living/generated/HTMLTimeElement.js | 153 + .../lib/jsdom/living/generated/HTMLTitleElement.js | 152 + .../lib/jsdom/living/generated/HTMLTrackElement.js | 363 ++ .../lib/jsdom/living/generated/HTMLUListElement.js | 197 + .../jsdom/living/generated/HTMLUnknownElement.js | 109 + .../lib/jsdom/living/generated/HTMLVideoElement.js | 340 ++ .../lib/jsdom/living/generated/HashChangeEvent.js | 157 + .../jsdom/living/generated/HashChangeEventInit.js | 50 + .../jsdom/lib/jsdom/living/generated/Headers.js | 418 ++ .../jsdom/lib/jsdom/living/generated/History.js | 266 ++ .../jsdom/lib/jsdom/living/generated/InputEvent.js | 168 + .../lib/jsdom/living/generated/InputEventInit.js | 68 + .../lib/jsdom/living/generated/KeyboardEvent.js | 445 ++ .../jsdom/living/generated/KeyboardEventInit.js | 116 + .../jsdom/lib/jsdom/living/generated/Location.js | 404 ++ .../lib/jsdom/living/generated/MessageEvent.js | 317 ++ .../lib/jsdom/living/generated/MessageEventInit.js | 100 + .../jsdom/lib/jsdom/living/generated/MimeType.js | 156 + .../lib/jsdom/living/generated/MimeTypeArray.js | 326 ++ .../jsdom/lib/jsdom/living/generated/MouseEvent.js | 595 +++ .../lib/jsdom/living/generated/MouseEventInit.js | 189 + .../lib/jsdom/living/generated/MutationCallback.js | 34 + .../lib/jsdom/living/generated/MutationObserver.js | 178 + .../jsdom/living/generated/MutationObserverInit.js | 121 + .../lib/jsdom/living/generated/MutationRecord.js | 229 + .../lib/jsdom/living/generated/NamedNodeMap.js | 527 +++ .../jsdom/lib/jsdom/living/generated/Navigator.js | 326 ++ .../jsdom/lib/jsdom/living/generated/Node.js | 763 ++++ .../jsdom/lib/jsdom/living/generated/NodeFilter.js | 75 + .../lib/jsdom/living/generated/NodeIterator.js | 207 + .../jsdom/lib/jsdom/living/generated/NodeList.js | 302 ++ .../generated/OnBeforeUnloadEventHandlerNonNull.js | 42 + .../living/generated/OnErrorEventHandlerNonNull.js | 56 + .../jsdom/living/generated/PageTransitionEvent.js | 144 + .../living/generated/PageTransitionEventInit.js | 35 + .../lib/jsdom/living/generated/Performance.js | 142 + .../jsdom/lib/jsdom/living/generated/Plugin.js | 359 ++ .../lib/jsdom/living/generated/PluginArray.js | 336 ++ .../lib/jsdom/living/generated/PointerEvent.js | 324 ++ .../lib/jsdom/living/generated/PointerEventInit.js | 241 ++ .../lib/jsdom/living/generated/PopStateEvent.js | 144 + .../jsdom/living/generated/PopStateEventInit.js | 32 + .../living/generated/ProcessingInstruction.js | 122 + .../lib/jsdom/living/generated/ProgressEvent.js | 170 + .../jsdom/living/generated/ProgressEventInit.js | 65 + .../living/generated/PromiseRejectionEvent.js | 157 + .../living/generated/PromiseRejectionEventInit.js | 42 + .../lib/jsdom/living/generated/RadioNodeList.js | 296 ++ .../jsdom/lib/jsdom/living/generated/Range.js | 641 +++ .../generated/SVGAnimatedPreserveAspectRatio.js | 136 + .../lib/jsdom/living/generated/SVGAnimatedRect.js | 136 + .../jsdom/living/generated/SVGAnimatedString.js | 149 + .../living/generated/SVGBoundingBoxOptions.js | 64 + .../lib/jsdom/living/generated/SVGDefsElement.js | 109 + .../lib/jsdom/living/generated/SVGDescElement.js | 109 + .../jsdom/lib/jsdom/living/generated/SVGElement.js | 3155 ++++++++++++++ .../lib/jsdom/living/generated/SVGGElement.js | 109 + .../jsdom/living/generated/SVGGraphicsElement.js | 139 + .../jsdom/living/generated/SVGMetadataElement.js | 109 + .../jsdom/lib/jsdom/living/generated/SVGNumber.js | 132 + .../living/generated/SVGPreserveAspectRatio.js | 196 + .../jsdom/lib/jsdom/living/generated/SVGRect.js | 210 + .../lib/jsdom/living/generated/SVGSVGElement.js | 786 ++++ .../lib/jsdom/living/generated/SVGStringList.js | 511 +++ .../lib/jsdom/living/generated/SVGSwitchElement.js | 109 + .../lib/jsdom/living/generated/SVGSymbolElement.js | 146 + .../lib/jsdom/living/generated/SVGTitleElement.js | 109 + .../jsdom/lib/jsdom/living/generated/Screen.js | 180 + .../lib/jsdom/living/generated/ScrollBehavior.js | 12 + .../living/generated/ScrollIntoViewOptions.js | 45 + .../living/generated/ScrollLogicalPosition.js | 14 + .../lib/jsdom/living/generated/ScrollOptions.js | 30 + .../jsdom/living/generated/ScrollRestoration.js | 12 + .../jsdom/lib/jsdom/living/generated/Selection.js | 569 +++ .../lib/jsdom/living/generated/SelectionMode.js | 12 + .../jsdom/lib/jsdom/living/generated/ShadowRoot.js | 187 + .../lib/jsdom/living/generated/ShadowRootInit.js | 30 + .../lib/jsdom/living/generated/ShadowRootMode.js | 12 + .../lib/jsdom/living/generated/StaticRange.js | 123 + .../lib/jsdom/living/generated/StaticRangeInit.js | 72 + .../jsdom/lib/jsdom/living/generated/Storage.js | 397 ++ .../lib/jsdom/living/generated/StorageEvent.js | 318 ++ .../lib/jsdom/living/generated/StorageEventInit.js | 99 + .../lib/jsdom/living/generated/StyleSheetList.js | 300 ++ .../lib/jsdom/living/generated/SubmitEvent.js | 144 + .../lib/jsdom/living/generated/SubmitEventInit.js | 36 + .../lib/jsdom/living/generated/SupportedType.js | 18 + .../jsdom/lib/jsdom/living/generated/Text.js | 170 + .../jsdom/living/generated/TextDecodeOptions.js | 28 + .../lib/jsdom/living/generated/TextDecoder.js | 211 + .../jsdom/living/generated/TextDecoderOptions.js | 43 + .../lib/jsdom/living/generated/TextEncoder.js | 176 + .../generated/TextEncoderEncodeIntoResult.js | 42 + .../lib/jsdom/living/generated/TextTrackKind.js | 12 + .../jsdom/lib/jsdom/living/generated/TouchEvent.js | 222 + .../lib/jsdom/living/generated/TouchEventInit.js | 89 + .../lib/jsdom/living/generated/TransitionEvent.js | 170 + .../jsdom/living/generated/TransitionEventInit.js | 65 + .../jsdom/lib/jsdom/living/generated/TreeWalker.js | 255 ++ .../jsdom/lib/jsdom/living/generated/UIEvent.js | 235 + .../lib/jsdom/living/generated/UIEventInit.js | 62 + .../lib/jsdom/living/generated/ValidityState.js | 249 ++ .../lib/jsdom/living/generated/VisibilityState.js | 12 + .../lib/jsdom/living/generated/VoidFunction.js | 26 + .../jsdom/lib/jsdom/living/generated/WebSocket.js | 480 +++ .../jsdom/lib/jsdom/living/generated/WheelEvent.js | 191 + .../lib/jsdom/living/generated/WheelEventInit.js | 71 + .../lib/jsdom/living/generated/XMLDocument.js | 109 + .../lib/jsdom/living/generated/XMLHttpRequest.js | 663 +++ .../living/generated/XMLHttpRequestEventTarget.js | 334 ++ .../living/generated/XMLHttpRequestResponseType.js | 14 + .../jsdom/living/generated/XMLHttpRequestUpload.js | 109 + .../lib/jsdom/living/generated/XMLSerializer.js | 132 + .../jsdom/lib/jsdom/living/generated/utils.js | 252 ++ .../lib/jsdom/living/geometry/DOMRect-impl.js | 39 + .../jsdom/living/geometry/DOMRectReadOnly-impl.js | 72 + .../jsdom/lib/jsdom/living/helpers/binary-data.js | 63 + .../jsdom/lib/jsdom/living/helpers/colors.js | 245 ++ .../lib/jsdom/living/helpers/create-element.js | 329 ++ .../jsdom/living/helpers/create-event-accessor.js | 188 + .../lib/jsdom/living/helpers/custom-elements.js | 272 ++ .../lib/jsdom/living/helpers/dates-and-times.js | 270 ++ .../jsdom/lib/jsdom/living/helpers/details.js | 15 + .../jsdom/lib/jsdom/living/helpers/encoding.js | 60 + .../jsdom/lib/jsdom/living/helpers/events.js | 24 + .../jsdom/lib/jsdom/living/helpers/focusing.js | 104 + .../lib/jsdom/living/helpers/form-controls.js | 309 ++ .../lib/jsdom/living/helpers/html-constructor.js | 78 + .../lib/jsdom/living/helpers/internal-constants.js | 12 + .../jsdom/lib/jsdom/living/helpers/is-window.js | 18 + .../lib/jsdom/living/helpers/iterable-weak-set.js | 48 + .../jsdom/lib/jsdom/living/helpers/json.js | 7 + .../lib/jsdom/living/helpers/mutation-observers.js | 198 + .../jsdom/lib/jsdom/living/helpers/namespaces.js | 16 + .../jsdom/lib/jsdom/living/helpers/node.js | 68 + .../jsdom/living/helpers/number-and-date-inputs.js | 195 + .../jsdom/lib/jsdom/living/helpers/ordered-set.js | 104 + .../jsdom/living/helpers/page-transition-event.js | 9 + .../jsdom/living/helpers/runtime-script-errors.js | 75 + .../jsdom/lib/jsdom/living/helpers/shadow-dom.js | 285 ++ .../jsdom/lib/jsdom/living/helpers/strings.js | 168 + .../jsdom/lib/jsdom/living/helpers/style-rules.js | 328 ++ .../jsdom/lib/jsdom/living/helpers/stylesheets.js | 148 + .../lib/jsdom/living/helpers/svg/basic-types.js | 41 + .../jsdom/lib/jsdom/living/helpers/svg/render.js | 46 + .../lib/jsdom/living/helpers/system-colors.js | 147 + .../jsdom/lib/jsdom/living/helpers/text.js | 19 + .../jsdom/lib/jsdom/living/helpers/traversal.js | 72 + .../lib/jsdom/living/helpers/validate-names.js | 65 + .../lib/jsdom/living/hr-time/Performance-impl.js | 22 + .../jsdom/lib/jsdom/living/interfaces.js | 252 ++ .../mutation-observer/MutationObserver-impl.js | 95 + .../mutation-observer/MutationRecord-impl.js | 37 + .../lib/jsdom/living/navigator/MimeType-impl.js | 3 + .../jsdom/living/navigator/MimeTypeArray-impl.js | 21 + .../lib/jsdom/living/navigator/Navigator-impl.js | 29 + .../navigator/NavigatorConcurrentHardware-impl.js | 8 + .../living/navigator/NavigatorCookies-impl.js | 7 + .../lib/jsdom/living/navigator/NavigatorID-impl.js | 37 + .../living/navigator/NavigatorLanguage-impl.js | 9 + .../jsdom/living/navigator/NavigatorOnLine-impl.js | 7 + .../living/navigator/NavigatorPlugins-impl.js | 8 + .../lib/jsdom/living/navigator/Plugin-impl.js | 3 + .../lib/jsdom/living/navigator/PluginArray-impl.js | 23 + .../lib/jsdom/living/node-document-position.js | 10 + .../jsdom/lib/jsdom/living/node-type.js | 16 + .../node_modules/jsdom/lib/jsdom/living/node.js | 331 ++ .../lib/jsdom/living/nodes/CDATASection-impl.js | 16 + .../lib/jsdom/living/nodes/CharacterData-impl.js | 118 + .../jsdom/lib/jsdom/living/nodes/ChildNode-impl.js | 80 + .../jsdom/lib/jsdom/living/nodes/Comment-impl.js | 20 + .../jsdom/living/nodes/DOMImplementation-impl.js | 120 + .../lib/jsdom/living/nodes/DOMStringMap-impl.js | 64 + .../lib/jsdom/living/nodes/DOMTokenList-impl.js | 171 + .../jsdom/lib/jsdom/living/nodes/Document-impl.js | 1013 +++++ .../jsdom/living/nodes/DocumentFragment-impl.js | 44 + .../living/nodes/DocumentOrShadowRoot-impl.js | 28 + .../lib/jsdom/living/nodes/DocumentType-impl.js | 24 + .../jsdom/lib/jsdom/living/nodes/Element-impl.js | 606 +++ .../living/nodes/ElementCSSInlineStyle-impl.js | 22 + .../living/nodes/ElementContentEditable-impl.js | 7 + .../jsdom/living/nodes/GlobalEventHandlers-impl.js | 157 + .../jsdom/living/nodes/HTMLAnchorElement-impl.js | 50 + .../lib/jsdom/living/nodes/HTMLAreaElement-impl.js | 43 + .../jsdom/living/nodes/HTMLAudioElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLBRElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLBaseElement-impl.js | 44 + .../lib/jsdom/living/nodes/HTMLBodyElement-impl.js | 17 + .../jsdom/living/nodes/HTMLButtonElement-impl.js | 79 + .../jsdom/living/nodes/HTMLCanvasElement-impl.js | 136 + .../lib/jsdom/living/nodes/HTMLCollection-impl.js | 96 + .../jsdom/living/nodes/HTMLDListElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLDataElement-impl.js | 9 + .../jsdom/living/nodes/HTMLDataListElement-impl.js | 20 + .../jsdom/living/nodes/HTMLDetailsElement-impl.js | 35 + .../jsdom/living/nodes/HTMLDialogElement-impl.js | 9 + .../living/nodes/HTMLDirectoryElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLDivElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLElement-impl.js | 211 + .../jsdom/living/nodes/HTMLEmbedElement-impl.js | 8 + .../jsdom/living/nodes/HTMLFieldSetElement-impl.js | 43 + .../lib/jsdom/living/nodes/HTMLFontElement-impl.js | 9 + .../nodes/HTMLFormControlsCollection-impl.js | 33 + .../lib/jsdom/living/nodes/HTMLFormElement-impl.js | 248 ++ .../jsdom/living/nodes/HTMLFrameElement-impl.js | 266 ++ .../jsdom/living/nodes/HTMLFrameSetElement-impl.js | 17 + .../lib/jsdom/living/nodes/HTMLHRElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLHeadElement-impl.js | 9 + .../jsdom/living/nodes/HTMLHeadingElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLHtmlElement-impl.js | 9 + .../living/nodes/HTMLHyperlinkElementUtils-impl.js | 368 ++ .../jsdom/living/nodes/HTMLIFrameElement-impl.js | 9 + .../jsdom/living/nodes/HTMLImageElement-impl.js | 127 + .../jsdom/living/nodes/HTMLInputElement-impl.js | 1097 +++++ .../lib/jsdom/living/nodes/HTMLLIElement-impl.js | 9 + .../jsdom/living/nodes/HTMLLabelElement-impl.js | 94 + .../jsdom/living/nodes/HTMLLegendElement-impl.js | 18 + .../lib/jsdom/living/nodes/HTMLLinkElement-impl.js | 107 + .../lib/jsdom/living/nodes/HTMLMapElement-impl.js | 13 + .../jsdom/living/nodes/HTMLMarqueeElement-impl.js | 9 + .../jsdom/living/nodes/HTMLMediaElement-impl.js | 138 + .../lib/jsdom/living/nodes/HTMLMenuElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLMetaElement-impl.js | 9 + .../jsdom/living/nodes/HTMLMeterElement-impl.js | 180 + .../lib/jsdom/living/nodes/HTMLModElement-impl.js | 9 + .../jsdom/living/nodes/HTMLOListElement-impl.js | 22 + .../jsdom/living/nodes/HTMLObjectElement-impl.js | 26 + .../jsdom/living/nodes/HTMLOptGroupElement-impl.js | 9 + .../jsdom/living/nodes/HTMLOptionElement-impl.js | 146 + .../living/nodes/HTMLOptionsCollection-impl.js | 110 + .../jsdom/living/nodes/HTMLOrSVGElement-impl.js | 88 + .../jsdom/living/nodes/HTMLOutputElement-impl.js | 88 + .../living/nodes/HTMLParagraphElement-impl.js | 9 + .../jsdom/living/nodes/HTMLParamElement-impl.js | 9 + .../jsdom/living/nodes/HTMLPictureElement-impl.js | 9 + .../lib/jsdom/living/nodes/HTMLPreElement-impl.js | 9 + .../jsdom/living/nodes/HTMLProgressElement-impl.js | 72 + .../jsdom/living/nodes/HTMLQuoteElement-impl.js | 9 + .../jsdom/living/nodes/HTMLScriptElement-impl.js | 255 ++ .../jsdom/living/nodes/HTMLSelectElement-impl.js | 283 ++ .../lib/jsdom/living/nodes/HTMLSlotElement-impl.js | 59 + .../jsdom/living/nodes/HTMLSourceElement-impl.js | 8 + .../lib/jsdom/living/nodes/HTMLSpanElement-impl.js | 9 + .../jsdom/living/nodes/HTMLStyleElement-impl.js | 76 + .../living/nodes/HTMLTableCaptionElement-impl.js | 9 + .../living/nodes/HTMLTableCellElement-impl.js | 73 + .../jsdom/living/nodes/HTMLTableColElement-impl.js | 9 + .../jsdom/living/nodes/HTMLTableElement-impl.js | 236 + .../jsdom/living/nodes/HTMLTableRowElement-impl.js | 88 + .../living/nodes/HTMLTableSectionElement-impl.js | 61 + .../jsdom/living/nodes/HTMLTemplateElement-impl.js | 67 + .../jsdom/living/nodes/HTMLTextAreaElement-impl.js | 244 ++ .../lib/jsdom/living/nodes/HTMLTimeElement-impl.js | 9 + .../jsdom/living/nodes/HTMLTitleElement-impl.js | 18 + .../jsdom/living/nodes/HTMLTrackElement-impl.js | 13 + .../jsdom/living/nodes/HTMLUListElement-impl.js | 9 + .../jsdom/living/nodes/HTMLUnknownElement-impl.js | 9 + .../jsdom/living/nodes/HTMLVideoElement-impl.js | 17 + .../jsdom/lib/jsdom/living/nodes/LinkStyle-impl.js | 2 + .../jsdom/lib/jsdom/living/nodes/Node-impl.js | 1174 +++++ .../jsdom/lib/jsdom/living/nodes/NodeList-impl.js | 43 + .../living/nodes/NonDocumentTypeChildNode-impl.js | 28 + .../living/nodes/NonElementParentNode-impl.js | 11 + .../lib/jsdom/living/nodes/ParentNode-impl.js | 90 + .../living/nodes/ProcessingInstruction-impl.js | 22 + .../lib/jsdom/living/nodes/RadioNodeList-impl.js | 49 + .../lib/jsdom/living/nodes/SVGDefsElement-impl.js | 9 + .../lib/jsdom/living/nodes/SVGDescElement-impl.js | 9 + .../lib/jsdom/living/nodes/SVGElement-impl.js | 64 + .../lib/jsdom/living/nodes/SVGGElement-impl.js | 9 + .../jsdom/living/nodes/SVGGraphicsElement-impl.js | 16 + .../jsdom/living/nodes/SVGMetadataElement-impl.js | 9 + .../lib/jsdom/living/nodes/SVGSVGElement-impl.js | 47 + .../jsdom/living/nodes/SVGSwitchElement-impl.js | 9 + .../jsdom/living/nodes/SVGSymbolElement-impl.js | 9 + .../jsdom/lib/jsdom/living/nodes/SVGTests-impl.js | 42 + .../lib/jsdom/living/nodes/SVGTitleElement-impl.js | 9 + .../lib/jsdom/living/nodes/ShadowRoot-impl.js | 41 + .../jsdom/lib/jsdom/living/nodes/Slotable-impl.js | 48 + .../jsdom/lib/jsdom/living/nodes/Text-impl.js | 96 + .../jsdom/living/nodes/WindowEventHandlers-impl.js | 52 + .../lib/jsdom/living/nodes/XMLDocument-impl.js | 4 + .../lib/jsdom/living/range/AbstractRange-impl.js | 43 + .../jsdom/lib/jsdom/living/range/Range-impl.js | 902 ++++ .../lib/jsdom/living/range/StaticRange-impl.js | 39 + .../jsdom/lib/jsdom/living/range/boundary-point.js | 47 + .../lib/jsdom/living/selection/Selection-impl.js | 358 ++ .../svg/SVGAnimatedPreserveAspectRatio-impl.js | 24 + .../lib/jsdom/living/svg/SVGAnimatedRect-impl.js | 122 + .../lib/jsdom/living/svg/SVGAnimatedString-impl.js | 42 + .../jsdom/lib/jsdom/living/svg/SVGListBase.js | 195 + .../jsdom/lib/jsdom/living/svg/SVGNumber-impl.js | 48 + .../living/svg/SVGPreserveAspectRatio-impl.js | 100 + .../jsdom/lib/jsdom/living/svg/SVGRect-impl.js | 143 + .../lib/jsdom/living/svg/SVGStringList-impl.js | 16 + .../jsdom/living/traversal/NodeIterator-impl.js | 107 + .../lib/jsdom/living/traversal/TreeWalker-impl.js | 217 + .../jsdom/lib/jsdom/living/traversal/helpers.js | 44 + .../lib/jsdom/living/webidl/DOMException-impl.js | 46 + .../lib/jsdom/living/websockets/WebSocket-impl.js | 211 + .../lib/jsdom/living/webstorage/Storage-impl.js | 102 + .../jsdom/lib/jsdom/living/window-properties.js | 241 ++ .../jsdom/lib/jsdom/living/window/BarProp-impl.js | 10 + .../jsdom/lib/jsdom/living/window/External-impl.js | 9 + .../jsdom/lib/jsdom/living/window/History-impl.js | 148 + .../jsdom/lib/jsdom/living/window/Location-impl.js | 227 + .../jsdom/lib/jsdom/living/window/Screen-impl.js | 13 + .../lib/jsdom/living/window/SessionHistory.js | 163 + .../jsdom/lib/jsdom/living/window/navigation.js | 87 + .../jsdom/lib/jsdom/living/xhr/FormData-impl.js | 191 + .../lib/jsdom/living/xhr/XMLHttpRequest-impl.js | 1049 +++++ .../living/xhr/XMLHttpRequestEventTarget-impl.js | 17 + .../jsdom/living/xhr/XMLHttpRequestUpload-impl.js | 4 + .../lib/jsdom/living/xhr/multipart-form-data.js | 99 + .../jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js | 36 + .../jsdom/lib/jsdom/living/xhr/xhr-utils.js | 206 + vanilla/node_modules/jsdom/lib/jsdom/utils.js | 105 + .../jsdom/lib/jsdom/virtual-console.js | 46 + 532 files changed, 105897 insertions(+) create mode 100644 vanilla/node_modules/jsdom/lib/api.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/Window.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.css create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/js-globals.json create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/not-implemented.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/parser/html.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/parser/index.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/parser/xml.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/async-resource-queue.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/decompress-interceptor.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/jsdom-dispatcher.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/per-document-resource-loader.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/request-interceptor.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/request-manager.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/browser/resources/stream-handler.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/level2/style.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/level3/xpath.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/aborting/AbortController-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/aborting/AbortSignal-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/attributes.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/attributes/Attr-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/attributes/NamedNodeMap-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/constraint-validation/DefaultConstraintValidation-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/constraint-validation/ValidityState-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/crypto/Crypto-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/cssom/StyleSheetList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/custom-elements/CustomElementRegistry-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/custom-elements/ElementInternals-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/deviceorientation/DeviceMotionEventAcceleration-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/deviceorientation/DeviceMotionEventRotationRate-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/documents.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/domparsing/DOMParser-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/domparsing/InnerHTML-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/domparsing/XMLSerializer-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/domparsing/parse5-adapter-serialization.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/encoding/TextDecoder-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/encoding/TextEncoder-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/BeforeUnloadEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/BlobEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/CloseEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/CompositionEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/CustomEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/DeviceMotionEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/DeviceOrientationEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/ErrorEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/Event-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/EventModifierMixin-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/FocusEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/HashChangeEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/InputEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/KeyboardEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/MessageEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/MouseEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/PageTransitionEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/PointerEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/PopStateEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/ProgressEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/PromiseRejectionEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/StorageEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/SubmitEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/TouchEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/TransitionEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/UIEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/events/WheelEvent-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/fetch/header-list.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/fetch/header-types.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/fetch/header-utils.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/file-api/Blob-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/file-api/File-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/file-api/FileList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/file-api/FileReader-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/AbortController.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/AbortSignal.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/AbstractRange.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/AddEventListenerOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/AssignedNodesOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Attr.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BarProp.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BeforeUnloadEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BinaryType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Blob.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BlobCallback.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BlobEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BlobEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/BlobPropertyBag.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CDATASection.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CanPlayTypeResult.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CloseEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CloseEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Comment.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CompositionEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CompositionEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Crypto.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CustomElementConstructor.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CustomElementRegistry.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CustomEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/CustomEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMException.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMImplementation.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMParser.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMRect.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMRectInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMRectReadOnly.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMStringMap.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DOMTokenList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventAcceleration.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventAccelerationInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventRotationRate.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventRotationRateInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceOrientationEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DeviceOrientationEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Document.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DocumentReadyState.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Element.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ElementCreationOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ElementDefinitionOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ElementInternals.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EndingType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ErrorEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ErrorEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Event.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventHandlerNonNull.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventListener.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventListenerOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventModifierInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/External.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/File.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FileList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FilePropertyBag.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FileReader.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FocusEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FocusEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/FormData.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Function.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/GetRootNodeOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLAnchorElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLAreaElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLAudioElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLBRElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLBaseElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLBodyElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLButtonElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLCollection.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDListElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataListElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDetailsElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDialogElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDirectoryElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLDivElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLEmbedElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFieldSetElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFontElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFormControlsCollection.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFormElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameSetElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLHRElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadingElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLHtmlElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLIFrameElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLImageElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLInputElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLLIElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLLabelElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLLegendElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLLinkElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMapElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMarqueeElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMediaElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMenuElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMetaElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLMeterElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLModElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLOListElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLObjectElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptGroupElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptionElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptionsCollection.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLOutputElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLParagraphElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLParamElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLPictureElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLPreElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLProgressElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLQuoteElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLScriptElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLSelectElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLSlotElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLSourceElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLSpanElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLStyleElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCaptionElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCellElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableColElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableRowElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableSectionElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTemplateElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTextAreaElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTimeElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTitleElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLTrackElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLUListElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLUnknownElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HTMLVideoElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Headers.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/History.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/InputEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/InputEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Location.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MessageEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MessageEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MimeType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MimeTypeArray.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MouseEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MouseEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MutationCallback.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MutationObserver.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MutationObserverInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/MutationRecord.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/NamedNodeMap.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Navigator.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Node.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/NodeFilter.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/NodeIterator.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/NodeList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/OnBeforeUnloadEventHandlerNonNull.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/OnErrorEventHandlerNonNull.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Performance.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Plugin.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PluginArray.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PointerEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PointerEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PopStateEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PopStateEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ProcessingInstruction.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ProgressEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ProgressEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PromiseRejectionEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/PromiseRejectionEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/RadioNodeList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Range.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedPreserveAspectRatio.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedRect.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedString.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGBoundingBoxOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGDefsElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGDescElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGGElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGGraphicsElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGMetadataElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGNumber.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGPreserveAspectRatio.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGRect.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGSVGElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGStringList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGSwitchElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGSymbolElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SVGTitleElement.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Screen.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ScrollBehavior.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ScrollIntoViewOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ScrollLogicalPosition.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ScrollOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ScrollRestoration.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Selection.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SelectionMode.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ShadowRootInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ShadowRootMode.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/StaticRange.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/StaticRangeInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Storage.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/StorageEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/StorageEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/StyleSheetList.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SubmitEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SubmitEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/SupportedType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/Text.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextDecodeOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextDecoder.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextDecoderOptions.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextEncoder.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextEncoderEncodeIntoResult.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TextTrackKind.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TouchEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TouchEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TransitionEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TransitionEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/TreeWalker.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/UIEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/UIEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/ValidityState.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/VisibilityState.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/VoidFunction.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/WebSocket.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/WheelEvent.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/WheelEventInit.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLDocument.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequest.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestEventTarget.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestResponseType.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestUpload.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/XMLSerializer.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/generated/utils.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/geometry/DOMRect-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/geometry/DOMRectReadOnly-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/binary-data.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/colors.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/create-element.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/create-event-accessor.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/custom-elements.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/dates-and-times.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/details.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/encoding.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/events.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/focusing.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/form-controls.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/html-constructor.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/internal-constants.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/is-window.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/iterable-weak-set.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/json.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/mutation-observers.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/namespaces.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/node.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/number-and-date-inputs.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/ordered-set.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/page-transition-event.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/shadow-dom.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/strings.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/style-rules.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/svg/basic-types.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/svg/render.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/system-colors.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/text.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/traversal.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/hr-time/Performance-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/interfaces.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/mutation-observer/MutationObserver-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/mutation-observer/MutationRecord-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/MimeType-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/MimeTypeArray-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/Navigator-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorConcurrentHardware-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorCookies-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorID-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorLanguage-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorOnLine-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorPlugins-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/Plugin-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/navigator/PluginArray-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/node-document-position.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/node-type.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/node.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/CDATASection-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ChildNode-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Comment-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DOMImplementation-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DOMStringMap-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DOMTokenList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DocumentFragment-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DocumentOrShadowRoot-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/DocumentType-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ElementCSSInlineStyle-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ElementContentEditable-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/GlobalEventHandlers-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAnchorElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAreaElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAudioElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBRElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBaseElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBodyElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLButtonElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCollection-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDListElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataListElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDetailsElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDialogElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDirectoryElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDivElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLEmbedElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFieldSetElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFontElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFormControlsCollection-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFormElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameSetElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHRElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadingElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHtmlElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHyperlinkElementUtils-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLIFrameElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLImageElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLInputElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLIElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLabelElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLegendElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLinkElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMapElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMarqueeElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMediaElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMenuElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMetaElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMeterElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLModElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOListElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLObjectElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptGroupElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptionElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptionsCollection-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOrSVGElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOutputElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParagraphElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParamElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLPictureElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLPreElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLProgressElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLQuoteElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLScriptElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSelectElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSlotElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSourceElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSpanElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCaptionElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCellElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableColElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableRowElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableSectionElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTemplateElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTextAreaElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTimeElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTitleElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTrackElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUListElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUnknownElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/HTMLVideoElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/LinkStyle-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/NodeList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/NonDocumentTypeChildNode-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/NonElementParentNode-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ParentNode-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ProcessingInstruction-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/RadioNodeList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGDefsElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGDescElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGGElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGGraphicsElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGMetadataElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGSVGElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGSwitchElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGSymbolElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGTests-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/SVGTitleElement-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/ShadowRoot-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Slotable-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/Text-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/WindowEventHandlers-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/nodes/XMLDocument-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/range/AbstractRange-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/range/Range-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/range/StaticRange-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/range/boundary-point.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/selection/Selection-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedPreserveAspectRatio-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedRect-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedString-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGListBase.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGNumber-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGPreserveAspectRatio-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGRect-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/svg/SVGStringList-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/traversal/NodeIterator-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/traversal/TreeWalker-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/traversal/helpers.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/webidl/DOMException-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/websockets/WebSocket-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/webstorage/Storage-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window-properties.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/BarProp-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/External-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/History-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/Location-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/Screen-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/SessionHistory.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/window/navigation.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/FormData-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequest-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequestEventTarget-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequestUpload-impl.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/multipart-form-data.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/living/xhr/xhr-utils.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/utils.js create mode 100644 vanilla/node_modules/jsdom/lib/jsdom/virtual-console.js (limited to 'vanilla/node_modules/jsdom/lib') diff --git a/vanilla/node_modules/jsdom/lib/api.js b/vanilla/node_modules/jsdom/lib/api.js new file mode 100644 index 0000000..6040d4f --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/api.js @@ -0,0 +1,373 @@ +"use strict"; +const path = require("path"); +const { pathToFileURL } = require("url"); +const fs = require("fs").promises; +const vm = require("vm"); +const toughCookie = require("tough-cookie"); +const sniffHTMLEncoding = require("html-encoding-sniffer"); +const whatwgURL = require("whatwg-url"); +const { legacyHookDecode } = require("@exodus/bytes/encoding.js"); +const { URL } = require("whatwg-url"); +const { MIMEType } = require("whatwg-mimetype"); +const { getGlobalDispatcher } = require("undici"); +const idlUtils = require("./jsdom/living/generated/utils.js"); +const VirtualConsole = require("./jsdom/virtual-console.js"); +const { createWindow } = require("./jsdom/browser/Window.js"); +const { parseIntoDocument } = require("./jsdom/browser/parser"); +const { fragmentSerialization } = require("./jsdom/living/domparsing/serialization.js"); +const createDecompressInterceptor = require("./jsdom/browser/resources/decompress-interceptor.js"); +const { + JSDOMDispatcher, DEFAULT_USER_AGENT, fetchCollected +} = require("./jsdom/browser/resources/jsdom-dispatcher.js"); +const requestInterceptor = require("./jsdom/browser/resources/request-interceptor.js"); + +class CookieJar extends toughCookie.CookieJar { + constructor(store, options) { + // jsdom cookie jars must be loose by default + super(store, { looseMode: true, ...options }); + } +} + +const window = Symbol("window"); +let sharedFragmentDocument = null; + +class JSDOM { + constructor(input = "", options = {}) { + const mimeType = new MIMEType(options.contentType === undefined ? "text/html" : options.contentType); + const { html, encoding } = normalizeHTML(input, mimeType); + + options = transformOptions(options, encoding, mimeType); + + this[window] = createWindow(options.windowOptions); + + const documentImpl = idlUtils.implForWrapper(this[window]._document); + + options.beforeParse(this[window]._globalProxy); + + parseIntoDocument(html, documentImpl); + + documentImpl.close(); + } + + get window() { + // It's important to grab the global proxy, instead of just the result of `createWindow(...)`, since otherwise + // things like `window.eval` don't exist. + return this[window]._globalProxy; + } + + get virtualConsole() { + return this[window]._virtualConsole; + } + + get cookieJar() { + // TODO NEWAPI move _cookieJar to window probably + return idlUtils.implForWrapper(this[window]._document)._cookieJar; + } + + serialize() { + return fragmentSerialization(idlUtils.implForWrapper(this[window]._document), { requireWellFormed: false }); + } + + nodeLocation(node) { + if (!idlUtils.implForWrapper(this[window]._document)._parseOptions.sourceCodeLocationInfo) { + throw new Error("Location information was not saved for this jsdom. Use includeNodeLocations during creation."); + } + + return idlUtils.implForWrapper(node).sourceCodeLocation; + } + + getInternalVMContext() { + if (!vm.isContext(this[window])) { + throw new TypeError("This jsdom was not configured to allow script running. " + + "Use the runScripts option during creation."); + } + + return this[window]; + } + + reconfigure(settings) { + if ("windowTop" in settings) { + this[window]._top = settings.windowTop; + } + + if ("url" in settings) { + const document = idlUtils.implForWrapper(this[window]._document); + + const url = whatwgURL.parseURL(settings.url); + if (url === null) { + throw new TypeError(`Could not parse "${settings.url}" as a URL`); + } + + document._URL = url; + document._origin = whatwgURL.serializeURLOrigin(document._URL); + this[window]._sessionHistory.currentEntry.url = url; + document._clearBaseURLCache(); + } + } + + static fragment(string = "") { + if (!sharedFragmentDocument) { + sharedFragmentDocument = (new JSDOM()).window.document; + } + + const template = sharedFragmentDocument.createElement("template"); + template.innerHTML = string; + return template.content; + } + + static async fromURL(url, options = {}) { + options = normalizeFromURLOptions(options); + + // Build the dispatcher for the initial request + // For the initial fetch, we default to "usable" instead of no resource loading, since fromURL() implicitly requests + // fetching the initial resource. This does not impact further resource fetching, which uses options.resources. + const resourcesForInitialFetch = options.resources !== undefined ? options.resources : "usable"; + const { effectiveDispatcher } = extractResourcesOptions(resourcesForInitialFetch, options.cookieJar); + + const headers = { Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" }; + if (options.referrer) { + headers.Referer = options.referrer; + } + + const response = await fetchCollected(effectiveDispatcher, { + url, + headers + }); + + if (!response.ok) { + throw new Error(`Resource was not loaded. Status: ${response.status}`); + } + + options = Object.assign(options, { + url: response.url, + contentType: response.headers["content-type"] || undefined, + referrer: options.referrer, + resources: options.resources + }); + + return new JSDOM(response.body, options); + } + + static async fromFile(filename, options = {}) { + options = normalizeFromFileOptions(filename, options); + const nodeBuffer = await fs.readFile(filename); + + return new JSDOM(nodeBuffer, options); + } +} + +function normalizeFromURLOptions(options) { + // Checks on options that are invalid for `fromURL` + if (options.url !== undefined) { + throw new TypeError("Cannot supply a url option when using fromURL"); + } + if (options.contentType !== undefined) { + throw new TypeError("Cannot supply a contentType option when using fromURL"); + } + + // Normalization of options which must be done before the rest of the fromURL code can use them, because they are + // given to request() + const normalized = { ...options }; + + if (options.referrer !== undefined) { + normalized.referrer = (new URL(options.referrer)).href; + } + + if (options.cookieJar === undefined) { + normalized.cookieJar = new CookieJar(); + } + + return normalized; + + // All other options don't need to be processed yet, and can be taken care of in the normal course of things when + // `fromURL` calls `new JSDOM(html, options)`. +} + +function extractResourcesOptions(resources, cookieJar) { + // loadSubresources controls whether PerDocumentResourceLoader fetches scripts, stylesheets, etc. + // XHR always works regardless of this flag. + let userAgent, baseDispatcher, userInterceptors, loadSubresources; + + if (resources === undefined) { + // resources: undefined means no automatic subresource fetching, but XHR still works + userAgent = DEFAULT_USER_AGENT; + baseDispatcher = getGlobalDispatcher(); + userInterceptors = []; + loadSubresources = false; + } else if (resources === "usable") { + // resources: "usable" means use all defaults + userAgent = DEFAULT_USER_AGENT; + baseDispatcher = getGlobalDispatcher(); + userInterceptors = []; + loadSubresources = true; + } else if (typeof resources === "object" && resources !== null) { + // resources: { userAgent?, dispatcher?, interceptors? } + userAgent = resources.userAgent !== undefined ? resources.userAgent : DEFAULT_USER_AGENT; + baseDispatcher = resources.dispatcher !== undefined ? resources.dispatcher : getGlobalDispatcher(); + userInterceptors = resources.interceptors !== undefined ? resources.interceptors : []; + loadSubresources = true; + } else { + throw new TypeError(`resources must be undefined, "usable", or an object`); + } + + // User interceptors come first (outermost), then decompress interceptor + const allUserInterceptors = [ + ...userInterceptors, + createDecompressInterceptor() + ]; + + return { + userAgent, + effectiveDispatcher: new JSDOMDispatcher({ + baseDispatcher, + cookieJar, + userAgent, + userInterceptors: allUserInterceptors + }), + loadSubresources + }; +} + +function normalizeFromFileOptions(filename, options) { + const normalized = { ...options }; + + if (normalized.contentType === undefined) { + const extname = path.extname(filename); + if (extname === ".xhtml" || extname === ".xht" || extname === ".xml") { + normalized.contentType = "application/xhtml+xml"; + } + } + + if (normalized.url === undefined) { + normalized.url = pathToFileURL(path.resolve(filename)).href; + } + + return normalized; +} + +function transformOptions(options, encoding, mimeType) { + const transformed = { + windowOptions: { + // Defaults + url: "about:blank", + referrer: "", + contentType: "text/html", + parsingMode: "html", + parseOptions: { + sourceCodeLocationInfo: false, + scriptingEnabled: false + }, + runScripts: undefined, + encoding, + pretendToBeVisual: false, + storageQuota: 5000000, + + // Defaults filled in later + dispatcher: undefined, + loadSubresources: undefined, + userAgent: undefined, + virtualConsole: undefined, + cookieJar: undefined + }, + + // Defaults + beforeParse() { } + }; + + // options.contentType was parsed into mimeType by the caller. + if (!mimeType.isHTML() && !mimeType.isXML()) { + throw new RangeError(`The given content type of "${options.contentType}" was not a HTML or XML content type`); + } + + transformed.windowOptions.contentType = mimeType.essence; + transformed.windowOptions.parsingMode = mimeType.isHTML() ? "html" : "xml"; + + if (options.url !== undefined) { + transformed.windowOptions.url = (new URL(options.url)).href; + } + + if (options.referrer !== undefined) { + transformed.windowOptions.referrer = (new URL(options.referrer)).href; + } + + if (options.includeNodeLocations) { + if (transformed.windowOptions.parsingMode === "xml") { + throw new TypeError("Cannot set includeNodeLocations to true with an XML content type"); + } + + transformed.windowOptions.parseOptions = { sourceCodeLocationInfo: true }; + } + + transformed.windowOptions.cookieJar = options.cookieJar === undefined ? + new CookieJar() : + options.cookieJar; + + transformed.windowOptions.virtualConsole = options.virtualConsole === undefined ? + (new VirtualConsole()).forwardTo(console) : + options.virtualConsole; + + if (!(transformed.windowOptions.virtualConsole instanceof VirtualConsole)) { + throw new TypeError("virtualConsole must be an instance of VirtualConsole"); + } + + const { userAgent, effectiveDispatcher, loadSubresources } = + extractResourcesOptions(options.resources, transformed.windowOptions.cookieJar); + transformed.windowOptions.userAgent = userAgent; + transformed.windowOptions.dispatcher = effectiveDispatcher; + transformed.windowOptions.loadSubresources = loadSubresources; + + if (options.runScripts !== undefined) { + transformed.windowOptions.runScripts = String(options.runScripts); + if (transformed.windowOptions.runScripts === "dangerously") { + transformed.windowOptions.parseOptions.scriptingEnabled = true; + } else if (transformed.windowOptions.runScripts !== "outside-only") { + throw new RangeError(`runScripts must be undefined, "dangerously", or "outside-only"`); + } + } + + if (options.beforeParse !== undefined) { + transformed.beforeParse = options.beforeParse; + } + + if (options.pretendToBeVisual !== undefined) { + transformed.windowOptions.pretendToBeVisual = Boolean(options.pretendToBeVisual); + } + + if (options.storageQuota !== undefined) { + transformed.windowOptions.storageQuota = Number(options.storageQuota); + } + + return transformed; +} + +function normalizeHTML(html, mimeType) { + let encoding = "UTF-8"; + + if (html instanceof Uint8Array) { + // leave as-is + } else if (ArrayBuffer.isView(html)) { + html = new Uint8Array(html.buffer, html.byteOffset, html.byteLength); + } else if (html instanceof ArrayBuffer) { + html = new Uint8Array(html); + } + + if (html instanceof Uint8Array) { + encoding = sniffHTMLEncoding(html, { + xml: mimeType.isXML(), + transportLayerEncodingLabel: mimeType.parameters.get("charset") + }); + html = legacyHookDecode(html, encoding); + } else { + html = String(html); + } + + return { html, encoding }; +} + +exports.JSDOM = JSDOM; + +exports.VirtualConsole = VirtualConsole; +exports.CookieJar = CookieJar; +exports.requestInterceptor = requestInterceptor; + +exports.toughCookie = toughCookie; diff --git a/vanilla/node_modules/jsdom/lib/jsdom/browser/Window.js b/vanilla/node_modules/jsdom/lib/jsdom/browser/Window.js new file mode 100644 index 0000000..666e0fd --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/jsdom/browser/Window.js @@ -0,0 +1,1024 @@ +"use strict"; +const vm = require("vm"); +const webIDLConversions = require("webidl-conversions"); +const { CSSStyleDeclaration } = require("cssstyle"); +const whatwgURL = require("whatwg-url"); +const { notImplementedMethod } = require("./not-implemented"); +const { installInterfaces } = require("../living/interfaces"); +const { define, mixin } = require("../utils"); +const Element = require("../living/generated/Element"); +const EventTarget = require("../living/generated/EventTarget"); +const EventHandlerNonNull = require("../living/generated/EventHandlerNonNull"); +const IDLFunction = require("../living/generated/Function"); +const OnBeforeUnloadEventHandlerNonNull = require("../living/generated/OnBeforeUnloadEventHandlerNonNull"); +const OnErrorEventHandlerNonNull = require("../living/generated/OnErrorEventHandlerNonNull"); +const { fireAPageTransitionEvent } = require("../living/helpers/page-transition-event"); +const windowProperties = require("../living/window-properties"); +const DOMException = require("../living/generated/DOMException"); +const idlUtils = require("../living/generated/utils"); +const WebSocketImpl = require("../living/websockets/WebSocket-impl").implementation; +const BarProp = require("../living/generated/BarProp"); +const documents = require("../living/documents.js"); +const External = require("../living/generated/External"); +const Navigator = require("../living/generated/Navigator"); +const Performance = require("../living/generated/Performance"); +const Screen = require("../living/generated/Screen"); +const Crypto = require("../living/generated/Crypto"); +const Storage = require("../living/generated/Storage"); +const Selection = require("../living/generated/Selection"); +const reportException = require("../living/helpers/runtime-script-errors"); +const { getCurrentEventHandlerValue } = require("../living/helpers/create-event-accessor.js"); +const { fireAnEvent } = require("../living/helpers/events"); +const SessionHistory = require("../living/window/SessionHistory"); +const { getDeclarationForElement, getResolvedValue, propertiesWithResolvedValueImplemented, + SHADOW_DOM_PSEUDO_REGEXP } = require("../living/helpers/style-rules.js"); +const CustomElementRegistry = require("../living/generated/CustomElementRegistry"); +const MessageEvent = require("../living/generated/MessageEvent"); +const jsGlobals = require("./js-globals.json"); + +const GlobalEventHandlersImpl = require("../living/nodes/GlobalEventHandlers-impl").implementation; +const globalEventHandlersEvents = require("../living/nodes/GlobalEventHandlers-impl").events; +const WindowEventHandlersImpl = require("../living/nodes/WindowEventHandlers-impl").implementation; + +const events = new Set([ + // GlobalEventHandlers (but we have to remove error below) + ...globalEventHandlersEvents, + + // WindowEventHandlers + "afterprint", + "beforeprint", + "hashchange", + "languagechange", + "message", + "messageerror", + "offline", + "online", + "pagehide", + "pageshow", + "popstate", + "rejectionhandled", + "storage", + "unhandledrejection", + "unload" + + // "error" and "beforeunload" are added separately +]); +events.delete("error"); + +const jsGlobalEntriesToInstall = Object.entries(jsGlobals).filter(([name]) => name in global); + +exports.createWindow = options => { + const makeVMContext = options.runScripts === "outside-only" || options.runScripts === "dangerously"; + + // Bootstrap with an empty object from the Node.js realm. We'll muck with its prototype chain shortly. + let window = {}; + + // Make window into a global object: either via vm, or just aliasing the Node.js globals. + // Also set _globalObject and _globalProxy. + // + // TODO: don't expose _globalObject and _globalProxy as public properties. While you're there, audit usage sites to + // see how necessary they really are. + if (makeVMContext) { + window = vm.createContext(vm.constants.DONT_CONTEXTIFY); + + window._globalObject = window; + window._globalProxy = vm.runInContext("this", window); + + // Without this, these globals will only appear to scripts running inside the context using vm.runScript; they will + // not appear to scripts running from the outside, including to JSDOM implementation code. + for (const [globalName, globalPropDesc] of jsGlobalEntriesToInstall) { + const propDesc = { ...globalPropDesc, value: vm.runInContext(globalName, window) }; + Object.defineProperty(window, globalName, propDesc); + } + } else { + window._globalObject = window._globalProxy = window; + + // Without contextifying the window, none of the globals will exist. So, let's at least alias them from the Node.js + // context. See https://github.com/jsdom/jsdom/issues/2727 for more background and discussion. + for (const [globalName, globalPropDesc] of jsGlobalEntriesToInstall) { + const propDesc = { ...globalPropDesc, value: global[globalName] }; + Object.defineProperty(window, globalName, propDesc); + } + } + + // Create instances of all the web platform interfaces and install them on the window. + installInterfaces(window, ["Window"]); + + // Now we have an EventTarget contructor so we can work on the prototype chain. + + // eslint-disable-next-line func-name-matching, func-style + const WindowConstructor = function Window() { + throw new TypeError("Illegal constructor"); + }; + Object.setPrototypeOf(WindowConstructor, window.EventTarget); + + Object.defineProperty(window, "Window", { + configurable: true, + writable: true, + value: WindowConstructor + }); + + const windowPropertiesObject = windowProperties.create(window.EventTarget.prototype, window); + + const windowPrototype = Object.create(windowPropertiesObject); + Object.defineProperties(windowPrototype, { + constructor: { + value: WindowConstructor, + writable: true, + configurable: true + }, + [Symbol.toStringTag]: { + value: "Window", + configurable: true + } + }); + + WindowConstructor.prototype = windowPrototype; + Object.setPrototypeOf(window, windowPrototype); + if (makeVMContext) { + Object.setPrototypeOf(window._globalProxy, windowPrototype); + Object.setPrototypeOf(window.EventTarget.prototype, window.Object.prototype); + } + + // Now that the prototype chain is fully set up, call the superclass setup. + EventTarget.setup(window, window); + + installEventHandlers(window); + + installOwnProperties(window, options); + + // Not sure why this is necessary... TODO figure it out. + Object.defineProperty(idlUtils.implForWrapper(window), idlUtils.wrapperSymbol, { get: () => window._globalProxy }); + + // Fire or prepare to fire load and pageshow events. + process.nextTick(() => { + if (!window.document) { + return; // window might've been closed already + } + + if (window.document.readyState === "complete") { + fireAnEvent("load", window, undefined, {}, true); + } else { + window.document.addEventListener("load", () => { + fireAnEvent("load", window, undefined, {}, true); + if (!window._document) { + return; // window might've been closed already + } + + const documentImpl = idlUtils.implForWrapper(window._document); + if (!documentImpl._pageShowingFlag) { + documentImpl._pageShowingFlag = true; + fireAPageTransitionEvent("pageshow", window, false); + } + }); + } + }); + + return window; +}; + +function installEventHandlers(window) { + mixin(window, WindowEventHandlersImpl.prototype); + mixin(window, GlobalEventHandlersImpl.prototype); + window._initGlobalEvents(); + + Object.defineProperty(window, "onbeforeunload", { + configurable: true, + enumerable: true, + get() { + return idlUtils.tryWrapperForImpl(getCurrentEventHandlerValue(window, "beforeunload")); + }, + set(V) { + if (!idlUtils.isObject(V)) { + V = null; + } else { + V = OnBeforeUnloadEventHandlerNonNull.convert(window, V, { + context: "Failed to set the 'onbeforeunload' property on 'Window': The provided value" + }); + } + window._setEventHandlerFor("beforeunload", V); + } + }); + + Object.defineProperty(window, "onerror", { + configurable: true, + enumerable: true, + get() { + return idlUtils.tryWrapperForImpl(getCurrentEventHandlerValue(window, "error")); + }, + set(V) { + if (!idlUtils.isObject(V)) { + V = null; + } else { + V = OnErrorEventHandlerNonNull.convert(window, V, { + context: "Failed to set the 'onerror' property on 'Window': The provided value" + }); + } + window._setEventHandlerFor("error", V); + } + }); + + for (const event of events) { + Object.defineProperty(window, `on${event}`, { + configurable: true, + enumerable: true, + get() { + return idlUtils.tryWrapperForImpl(getCurrentEventHandlerValue(window, event)); + }, + set(V) { + if (!idlUtils.isObject(V)) { + V = null; + } else { + V = EventHandlerNonNull.convert(window, V, { + context: `Failed to set the 'on${event}' property on 'Window': The provided value` + }); + } + window._setEventHandlerFor(event, V); + } + }); + } +} + +function installOwnProperties(window, options) { + const windowInitialized = performance.now(); + + // ### PRIVATE DATA PROPERTIES + + window._dispatcher = options.dispatcher; + window._loadSubresources = options.loadSubresources; + window._userAgent = options.userAgent; + + // List options explicitly to be clear which are passed through + window._document = documents.createWrapper(window, { + parsingMode: options.parsingMode, + contentType: options.contentType, + encoding: options.encoding, + cookieJar: options.cookieJar, + url: options.url, + lastModified: options.lastModified, + referrer: options.referrer, + parseOptions: options.parseOptions, + defaultView: window._globalProxy, + global: window, + parentOrigin: options.parentOrigin + }, { alwaysUseDocumentClass: true }); + + const documentOrigin = idlUtils.implForWrapper(window._document)._origin; + window._origin = documentOrigin; + + // https://html.spec.whatwg.org/#session-history + window._sessionHistory = new SessionHistory({ + document: idlUtils.implForWrapper(window._document), + url: idlUtils.implForWrapper(window._document)._URL, + stateObject: null + }, window); + + window._virtualConsole = options.virtualConsole; + + window._runScripts = options.runScripts; + + // Set up the window as if it's a top level window. + // If it's not, then references will be corrected by frame/iframe code. + window._parent = window._top = window._globalProxy; + window._frameElement = null; + + // This implements window.frames.length, since window.frames returns a + // self reference to the window object. This value is incremented in the + // HTMLFrameElement implementation. + window._length = 0; + + // https://dom.spec.whatwg.org/#window-current-event + window._currentEvent = undefined; + + window._pretendToBeVisual = options.pretendToBeVisual; + window._storageQuota = options.storageQuota; + + // Some properties (such as localStorage and sessionStorage) share data + // between windows in the same origin. This object is intended + // to contain such data. + if (options.commonForOrigin && options.commonForOrigin[documentOrigin]) { + window._commonForOrigin = options.commonForOrigin; + } else { + window._commonForOrigin = { + [documentOrigin]: { + localStorageArea: new Map(), + sessionStorageArea: new Map(), + windowsInSameOrigin: [window] + } + }; + } + + window._currentOriginData = window._commonForOrigin[documentOrigin]; + + // ### WEB STORAGE + + window._localStorage = Storage.create(window, [], { + associatedWindow: window, + storageArea: window._currentOriginData.localStorageArea, + type: "localStorage", + url: window._document.documentURI, + storageQuota: window._storageQuota + }); + window._sessionStorage = Storage.create(window, [], { + associatedWindow: window, + storageArea: window._currentOriginData.sessionStorageArea, + type: "sessionStorage", + url: window._document.documentURI, + storageQuota: window._storageQuota + }); + + // ### SELECTION + + // https://w3c.github.io/selection-api/#dfn-selection + window._selection = Selection.createImpl(window); + + // https://w3c.github.io/selection-api/#dom-window + window.getSelection = function () { + return window._selection; + }; + + // ### GETTERS + + const locationbar = BarProp.create(window); + const menubar = BarProp.create(window); + const personalbar = BarProp.create(window); + const scrollbars = BarProp.create(window); + const statusbar = BarProp.create(window); + const toolbar = BarProp.create(window); + const external = External.create(window); + const navigator = Navigator.create(window); + const performanceImpl = Performance.create(window, [], { + timeOrigin: performance.timeOrigin + windowInitialized, + nowAtTimeOrigin: windowInitialized + }); + const screen = Screen.create(window); + const crypto = Crypto.create(window); + window._customElementRegistry = CustomElementRegistry.create(window); + + let status = ""; + + define(window, { + name: "", + get status() { + return status; + }, + set status(value) { + status = webIDLConversions.DOMString(value); + }, + get devicePixelRatio() { + return 1; + }, + get innerWidth() { + return 1024; + }, + get innerHeight() { + return 768; + }, + get outerWidth() { + return 1024; + }, + get outerHeight() { + return 768; + }, + get pageXOffset() { + return 0; + }, + get pageYOffset() { + return 0; + }, + get screenX() { + return 0; + }, + get screenLeft() { + return 0; + }, + get screenY() { + return 0; + }, + get screenTop() { + return 0; + }, + get scrollX() { + return 0; + }, + get scrollY() { + return 0; + }, + get length() { + return window._length; + }, + get window() { + return window._globalProxy; + }, + get frameElement() { + return idlUtils.wrapperForImpl(window._frameElement); + }, + get frames() { + return window._globalProxy; + }, + get self() { + return window._globalProxy; + }, + get parent() { + return window._parent; + }, + get top() { + return window._top; + }, + get document() { + return window._document; + }, + get external() { + return external; + }, + get location() { + return idlUtils.wrapperForImpl(idlUtils.implForWrapper(window._document)._location); + }, + // [PutForwards=href]: + set location(value) { + Reflect.set(window.location, "href", value); + }, + get history() { + return idlUtils.wrapperForImpl(idlUtils.implForWrapper(window._document)._history); + }, + get navigator() { + return navigator; + }, + get locationbar() { + return locationbar; + }, + get menubar() { + return menubar; + }, + get personalbar() { + return personalbar; + }, + get scrollbars() { + return scrollbars; + }, + get statusbar() { + return statusbar; + }, + get toolbar() { + return toolbar; + }, + get performance() { + return performanceImpl; + }, + get screen() { + return screen; + }, + get crypto() { + return crypto; + }, + get origin() { + return window._origin; + }, + get localStorage() { + if (idlUtils.implForWrapper(window._document)._origin === "null") { + throw DOMException.create(window, [ + "localStorage is not available for opaque origins", + "SecurityError" + ]); + } + + return window._localStorage; + }, + get sessionStorage() { + if (idlUtils.implForWrapper(window._document)._origin === "null") { + throw DOMException.create(window, [ + "sessionStorage is not available for opaque origins", + "SecurityError" + ]); + } + + return window._sessionStorage; + }, + get customElements() { + return window._customElementRegistry; + }, + get event() { + return window._currentEvent ? idlUtils.wrapperForImpl(window._currentEvent) : undefined; + } + }); + + Object.defineProperties(window, { + // [Replaceable]: + self: makeReplaceablePropertyDescriptor("self", window), + locationbar: makeReplaceablePropertyDescriptor("locationbar", window), + menubar: makeReplaceablePropertyDescriptor("menubar", window), + personalbar: makeReplaceablePropertyDescriptor("personalbar", window), + scrollbars: makeReplaceablePropertyDescriptor("scrollbars", window), + statusbar: makeReplaceablePropertyDescriptor("statusbar", window), + toolbar: makeReplaceablePropertyDescriptor("toolbar", window), + frames: makeReplaceablePropertyDescriptor("frames", window), + parent: makeReplaceablePropertyDescriptor("parent", window), + external: makeReplaceablePropertyDescriptor("external", window), + length: makeReplaceablePropertyDescriptor("length", window), + screen: makeReplaceablePropertyDescriptor("screen", window), + origin: makeReplaceablePropertyDescriptor("origin", window), + event: makeReplaceablePropertyDescriptor("event", window), + innerWidth: makeReplaceablePropertyDescriptor("innerWidth", window), + innerHeight: makeReplaceablePropertyDescriptor("innerHeight", window), + scrollX: makeReplaceablePropertyDescriptor("scrollX", window), + pageXOffset: makeReplaceablePropertyDescriptor("pageXOffset", window), + scrollY: makeReplaceablePropertyDescriptor("scrollY", window), + pageYOffset: makeReplaceablePropertyDescriptor("pageYOffset", window), + screenX: makeReplaceablePropertyDescriptor("screenX", window), + screenLeft: makeReplaceablePropertyDescriptor("screenLeft", window), + screenY: makeReplaceablePropertyDescriptor("screenY", window), + screenTop: makeReplaceablePropertyDescriptor("screenTop", window), + outerWidth: makeReplaceablePropertyDescriptor("outerWidth", window), + outerHeight: makeReplaceablePropertyDescriptor("outerHeight", window), + devicePixelRatio: makeReplaceablePropertyDescriptor("devicePixelRatio", window), + + // [LegacyUnforgeable]: + window: { configurable: false }, + document: { configurable: false }, + location: { configurable: false }, + top: { configurable: false } + }); + + + // ### METHODS + + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers + + // In the spec the list of active timers is a set of IDs. We make it a map of IDs to Node.js timer objects, so that + // we can call Node.js-side clearTimeout() when clearing, and thus allow process shutdown faster. + const listOfActiveTimers = new Map(); + let latestTimerId = 0; + + window.setTimeout = function (handler, timeout = 0, ...args) { + if (typeof handler !== "function") { + handler = webIDLConversions.DOMString(handler); + } + timeout = webIDLConversions.long(timeout); + + return timerInitializationSteps(handler, timeout, args, { methodContext: window, repeat: false }); + }; + window.setInterval = function (handler, timeout = 0, ...args) { + if (typeof handler !== "function") { + handler = webIDLConversions.DOMString(handler); + } + timeout = webIDLConversions.long(timeout); + + return timerInitializationSteps(handler, timeout, args, { methodContext: window, repeat: true }); + }; + + window.clearTimeout = function (handle = 0) { + handle = webIDLConversions.long(handle); + + const nodejsTimer = listOfActiveTimers.get(handle); + if (nodejsTimer) { + clearTimeout(nodejsTimer); + listOfActiveTimers.delete(handle); + } + }; + window.clearInterval = function (handle = 0) { + handle = webIDLConversions.long(handle); + + const nodejsTimer = listOfActiveTimers.get(handle); + if (nodejsTimer) { + // We use setTimeout() in timerInitializationSteps even for window.setInterval(). + clearTimeout(nodejsTimer); + listOfActiveTimers.delete(handle); + } + }; + + function timerInitializationSteps(handler, timeout, args, { methodContext, repeat, previousHandle }) { + // This appears to be unspecced, but matches browser behavior for close()ed windows. + if (!methodContext._document) { + return 0; + } + + // TODO: implement timer nesting level behavior. + + const methodContextProxy = methodContext._globalProxy; + const handle = previousHandle !== undefined ? previousHandle : ++latestTimerId; + + function task() { + if (!listOfActiveTimers.has(handle)) { + return; + } + + try { + if (typeof handler === "function") { + handler.apply(methodContextProxy, args); + } else if (window._runScripts === "dangerously") { + vm.runInContext(handler, window, { filename: window.location.href, displayErrors: false }); + } + } catch (e) { + reportException(window, e, window.location.href); + } + + if (listOfActiveTimers.has(handle)) { + if (repeat) { + timerInitializationSteps(handler, timeout, args, { methodContext, repeat: true, previousHandle: handle }); + } else { + listOfActiveTimers.delete(handle); + } + } + } + + if (timeout < 0) { + timeout = 0; + } + + const nodejsTimer = setTimeout(task, timeout); + listOfActiveTimers.set(handle, nodejsTimer); + + return handle; + } + + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing + + window.queueMicrotask = function (callback) { + callback = IDLFunction.convert(window, callback); + + queueMicrotask(() => { + try { + callback(); + } catch (e) { + reportException(window, e, window.location.href); + } + }); + }; + + // https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames + + let animationFrameCallbackId = 0; + const mapOfAnimationFrameCallbacks = new Map(); + let animationFrameNodejsInterval = null; + + // Unlike the spec, where an animation frame happens every 60 Hz regardless, we optimize so that if there are no + // requestAnimationFrame() calls outstanding, we don't fire the timer. This helps us track that. + let numberOfOngoingAnimationFrameCallbacks = 0; + + if (window._pretendToBeVisual) { + window.requestAnimationFrame = function (callback) { + callback = IDLFunction.convert(window, callback); + + const handle = ++animationFrameCallbackId; + mapOfAnimationFrameCallbacks.set(handle, callback); + + ++numberOfOngoingAnimationFrameCallbacks; + if (numberOfOngoingAnimationFrameCallbacks === 1) { + animationFrameNodejsInterval = setInterval(() => { + runAnimationFrameCallbacks(performance.now() - windowInitialized); + }, 1000 / 60); + } + + return handle; + }; + + window.cancelAnimationFrame = function (handle) { + handle = webIDLConversions["unsigned long"](handle); + + removeAnimationFrameCallback(handle); + }; + + function runAnimationFrameCallbacks(now) { + // Converting to an array is important to get a sync snapshot and thus match spec semantics. + const callbackHandles = [...mapOfAnimationFrameCallbacks.keys()]; + for (const handle of callbackHandles) { + // This has() can be false if a callback calls cancelAnimationFrame(). + if (mapOfAnimationFrameCallbacks.has(handle)) { + const callback = mapOfAnimationFrameCallbacks.get(handle); + removeAnimationFrameCallback(handle); + try { + callback(now); + } catch (e) { + reportException(window, e, window.location.href); + } + } + } + } + + function removeAnimationFrameCallback(handle) { + if (mapOfAnimationFrameCallbacks.has(handle)) { + --numberOfOngoingAnimationFrameCallbacks; + if (numberOfOngoingAnimationFrameCallbacks === 0) { + clearInterval(animationFrameNodejsInterval); + } + } + + mapOfAnimationFrameCallbacks.delete(handle); + } + } + + function stopAllTimers() { + for (const nodejsTimer of listOfActiveTimers.values()) { + clearTimeout(nodejsTimer); + } + listOfActiveTimers.clear(); + + clearInterval(animationFrameNodejsInterval); + } + + function Option(text, value, defaultSelected, selected) { + if (text === undefined) { + text = ""; + } + text = webIDLConversions.DOMString(text); + + if (value !== undefined) { + value = webIDLConversions.DOMString(value); + } + + defaultSelected = webIDLConversions.boolean(defaultSelected); + selected = webIDLConversions.boolean(selected); + + const option = window._document.createElement("option"); + const impl = idlUtils.implForWrapper(option); + + if (text !== "") { + impl.text = text; + } + if (value !== undefined) { + impl.setAttributeNS(null, "value", value); + } + if (defaultSelected) { + impl.setAttributeNS(null, "selected", ""); + } + impl._selectedness = selected; + + return option; + } + Object.defineProperty(Option, "prototype", { + value: window.HTMLOptionElement.prototype, + configurable: false, + enumerable: false, + writable: false + }); + Object.defineProperty(window, "Option", { + value: Option, + configurable: true, + enumerable: false, + writable: true + }); + + function Image(...args) { + const img = window._document.createElement("img"); + const impl = idlUtils.implForWrapper(img); + + if (args.length > 0) { + impl.setAttributeNS(null, "width", String(args[0])); + } + if (args.length > 1) { + impl.setAttributeNS(null, "height", String(args[1])); + } + + return img; + } + Object.defineProperty(Image, "prototype", { + value: window.HTMLImageElement.prototype, + configurable: false, + enumerable: false, + writable: false + }); + Object.defineProperty(window, "Image", { + value: Image, + configurable: true, + enumerable: false, + writable: true + }); + + function Audio(src) { + const audio = window._document.createElement("audio"); + const impl = idlUtils.implForWrapper(audio); + impl.setAttributeNS(null, "preload", "auto"); + + if (src !== undefined) { + impl.setAttributeNS(null, "src", String(src)); + } + + return audio; + } + Object.defineProperty(Audio, "prototype", { + value: window.HTMLAudioElement.prototype, + configurable: false, + enumerable: false, + writable: false + }); + Object.defineProperty(window, "Audio", { + value: Audio, + configurable: true, + enumerable: false, + writable: true + }); + + window.postMessage = function (message, targetOrigin) { + if (arguments.length < 2) { + throw new TypeError("'postMessage' requires 2 arguments: 'message' and 'targetOrigin'"); + } + + targetOrigin = webIDLConversions.DOMString(targetOrigin); + + if (targetOrigin === "/") { + // TODO: targetOrigin === "/" requires getting incumbent settings object. + // Maybe could be done with Error stack traces?? + return; + } else if (targetOrigin !== "*") { + const parsedURL = whatwgURL.parseURL(targetOrigin); + if (parsedURL === null) { + throw DOMException.create(window, [ + "Failed to execute 'postMessage' on 'Window': " + + "Invalid target origin '" + targetOrigin + "' in a call to 'postMessage'.", + "SyntaxError" + ]); + } + targetOrigin = whatwgURL.serializeURLOrigin(parsedURL); + + if (targetOrigin !== idlUtils.implForWrapper(window._document)._origin) { + // Not implemented. + return; + } + } + + // TODO: event.source - requires reference to incumbent window + // TODO: event.origin - requires reference to incumbent window + // TODO: event.ports + // TODO: event.data - requires structured cloning + setTimeout(() => { + fireAnEvent("message", window, MessageEvent, { data: message }); + }, 0); + }; + + window.atob = function (str) { + try { + return atob(str); + } catch { + // Convert Node.js DOMException to one from our global. + throw DOMException.create(window, [ + "The string to be decoded contains invalid characters.", + "InvalidCharacterError" + ]); + } + }; + + window.btoa = function (str) { + try { + return btoa(str); + } catch { + // Convert Node.js DOMException to one from our global. + throw DOMException.create(window, [ + "The string to be encoded contains invalid characters.", + "InvalidCharacterError" + ]); + } + }; + + window.stop = function () { + const manager = idlUtils.implForWrapper(window._document)._requestManager; + if (manager) { + manager.close(); + } + }; + + window.close = function () { + // Recursively close child frame windows, then ourselves (depth-first). + for (let i = 0; i < window.length; ++i) { + window[i].close?.(); + } + + // Clear out all listeners. Any in-flight or upcoming events should not get delivered. + idlUtils.implForWrapper(window)._eventListeners = Object.create(null); + + if (window._document) { + if (window._document.body) { + window._document.body.innerHTML = ""; + } + + if (window._document.close) { + // It's especially important to clear out the listeners here because document.close() causes a "load" event to + // fire. + idlUtils.implForWrapper(window._document)._eventListeners = Object.create(null); + window._document.close(); + } + const doc = idlUtils.implForWrapper(window._document); + if (doc._requestManager) { + doc._requestManager.close(); + } + delete window._document; + } + + stopAllTimers(); + WebSocketImpl.cleanUpWindow(window); + }; + + window.getComputedStyle = function (elt, pseudoElt = undefined) { + elt = Element.convert(window, elt); + if (pseudoElt !== undefined && pseudoElt !== null) { + pseudoElt = webIDLConversions.DOMString(pseudoElt); + } + + if (pseudoElt !== undefined && pseudoElt !== null && pseudoElt !== "") { + // TODO: Parse pseudoElt + + if (SHADOW_DOM_PSEUDO_REGEXP.test(pseudoElt)) { + throw new TypeError("Tried to get the computed style of a Shadow DOM pseudo-element."); + } + + notImplementedMethod(window, "Window", "getComputedStyle", "with pseudo-elements"); + } + + const declaration = new CSSStyleDeclaration(); + const { forEach } = Array.prototype; + + const elementDeclaration = getDeclarationForElement(elt); + forEach.call(elementDeclaration, property => { + declaration.setProperty( + property, + elementDeclaration.getPropertyValue(property), + elementDeclaration.getPropertyPriority(property) + ); + }); + + // https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle + const declarations = Object.keys(propertiesWithResolvedValueImplemented); + forEach.call(declarations, property => { + declaration.setProperty(property, getResolvedValue(elt, property)); + }); + + return declaration; + }; + + window.getSelection = function () { + return window._document.getSelection(); + }; + + // The captureEvents() and releaseEvents() methods must do nothing + window.captureEvents = function () {}; + + window.releaseEvents = function () {}; + + // ### PUBLIC DATA PROPERTIES (TODO: should be getters) + + function wrapConsoleMethod(method) { + return (...args) => { + window._virtualConsole.emit(method, ...args); + }; + } + + window.console = { + assert: wrapConsoleMethod("assert"), + clear: wrapConsoleMethod("clear"), + count: wrapConsoleMethod("count"), + countReset: wrapConsoleMethod("countReset"), + debug: wrapConsoleMethod("debug"), + dir: wrapConsoleMethod("dir"), + dirxml: wrapConsoleMethod("dirxml"), + error: wrapConsoleMethod("error"), + group: wrapConsoleMethod("group"), + groupCollapsed: wrapConsoleMethod("groupCollapsed"), + groupEnd: wrapConsoleMethod("groupEnd"), + info: wrapConsoleMethod("info"), + log: wrapConsoleMethod("log"), + table: wrapConsoleMethod("table"), + time: wrapConsoleMethod("time"), + timeLog: wrapConsoleMethod("timeLog"), + timeEnd: wrapConsoleMethod("timeEnd"), + trace: wrapConsoleMethod("trace"), + warn: wrapConsoleMethod("warn") + }; + + function notImplementedMethodWrapper(name) { + return function () { + notImplementedMethod(window, "Window", name); + }; + } + + define(window, { + alert: notImplementedMethodWrapper("alert"), + blur: notImplementedMethodWrapper("blur"), + confirm: notImplementedMethodWrapper("confirm"), + focus: notImplementedMethodWrapper("focus"), + moveBy: notImplementedMethodWrapper("moveBy"), + moveTo: notImplementedMethodWrapper("moveTo"), + open: notImplementedMethodWrapper("open"), + print: notImplementedMethodWrapper("print"), + prompt: notImplementedMethodWrapper("prompt"), + resizeBy: notImplementedMethodWrapper("resizeBy"), + resizeTo: notImplementedMethodWrapper("resizeTo"), + scroll: notImplementedMethodWrapper("scroll"), + scrollBy: notImplementedMethodWrapper("scrollBy"), + scrollTo: notImplementedMethodWrapper("scrollTo") + }); +} + +function makeReplaceablePropertyDescriptor(property, window) { + const desc = { + set(value) { + Object.defineProperty(window, property, { + configurable: true, + enumerable: true, + writable: true, + value + }); + } + }; + + Object.defineProperty(desc.set, "name", { value: `set ${property}` }); + return desc; +} diff --git a/vanilla/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.css b/vanilla/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.css new file mode 100644 index 0000000..e412348 --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.css @@ -0,0 +1,415 @@ +/* Omitting the below because of https://github.com/jsdom/cssstyle/issues/193. + And we don't implement namespace constraints anyway. + +@namespace "http://www.w3.org/1999/xhtml"; +*/ + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-page */ + +html, body { display: block; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3 + - Omits presentational hints + - Omits quirks mode +*/ + +address, blockquote, center, dialog, div, figure, figcaption, footer, form, +header, hr, legend, listing, main, p, plaintext, pre, search, xmp { + display: block; +} + +blockquote, figure, listing, p, plaintext, pre, xmp { + margin-block: 1em; +} + +blockquote, figure { margin-inline: 40px; } + +address { font-style: italic; } +listing, plaintext, pre, xmp { + font-family: monospace; white-space: pre; +} + +dialog:not([open]) { display: none; } +dialog { + position: absolute; + inset-inline-start: 0; inset-inline-end: 0; + width: fit-content; + height: fit-content; + margin: auto; + border: solid; + padding: 1em; + background-color: Canvas; + color: CanvasText; +} +dialog:modal { + position: fixed; + overflow: auto; + inset-block: 0; + max-width: calc(100% - 6px - 2em); + max-height: calc(100% - 6px - 2em); +} +dialog::backdrop { + background: rgba(0,0,0,0.1); +} + +[popover]:not(:popover-open):not(dialog[open]) { + display:none; +} + +dialog:popover-open { + display:block; +} + +[popover] { + position: fixed; + inset: 0; + width: fit-content; + height: fit-content; + margin: auto; + border: solid; + padding: 0.25em; + overflow: auto; + color: CanvasText; + background-color: Canvas; +} + +:popover-open::backdrop { + position: fixed; + inset: 0; + pointer-events: none !important; + background-color: transparent; +} + +slot { + display: contents; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#phrasing-content-3 + - Omits presentational hints +*/ + + +cite, dfn, em, i, var { font-style: italic; } +b, strong { font-weight: bolder; } +code, kbd, samp, tt { font-family: monospace; } +big { font-size: larger; } +small { font-size: smaller; } + +sub { vertical-align: sub; } +sup { vertical-align: super; } +sub, sup { line-height: normal; font-size: smaller; } + +ruby { display: ruby; } +rt { display: ruby-text; } + +:link { color: #0000EE; } +:visited { color: #551A8B; } +:link:active, :visited:active { color: #FF0000; } +:link, :visited { text-decoration: underline; cursor: pointer; } + +:focus-visible { outline: auto; } + +mark { background: yellow; color: black; } /* this color is just a suggestion and can be changed based on implementation feedback */ + +abbr[title], acronym[title] { text-decoration: dotted underline; } +ins, u { text-decoration: underline; } +del, s, strike { text-decoration: line-through; } + +q::before { content: open-quote; } +q::after { content: close-quote; } + +br { display-outside: newline; } /* this also has bidi implications */ +nobr { white-space: nowrap; } +wbr { display-outside: break-opportunity; } /* this also has bidi implications */ +nobr wbr { white-space: normal; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering + - Omits ISO-8859-8 +*/ + +[dir]:dir(ltr), bdi:dir(ltr), input[type=tel i]:dir(ltr) { direction: ltr; } +[dir]:dir(rtl), bdi:dir(rtl) { direction: rtl; } + +address, blockquote, center, div, figure, figcaption, footer, form, header, hr, +legend, listing, main, p, plaintext, pre, summary, xmp, article, aside, h1, h2, +h3, h4, h5, h6, hgroup, nav, section, search, table, caption, colgroup, col, +thead, tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, bdi, output, +[dir=ltr i], [dir=rtl i], [dir=auto i] { + unicode-bidi: isolate; +} + +bdo, bdo[dir] { unicode-bidi: isolate-override; } + +input[dir=auto i]:is([type=search i], [type=tel i], [type=url i], +[type=email i]), textarea[dir=auto i], pre[dir=auto i] { + unicode-bidi: plaintext; +} +/* see prose for input elements whose type attribute is in the Text state */ + +/* the rules setting the 'content' property on br and wbr elements also has bidi implications */ + +/* https://html.spec.whatwg.org/multipage/rendering.html#sections-and-headings + - Special h1 styles removed per upcoming change: https://github.com/whatwg/html/pull/11102 +*/ + +article, aside, h1, h2, h3, h4, h5, h6, hgroup, nav, section { + display: block; +} + +h1 { margin-block: 0.67em; font-size: 2.00em; font-weight: bold; } +h2 { margin-block: 0.83em; font-size: 1.50em; font-weight: bold; } +h3 { margin-block: 1.00em; font-size: 1.17em; font-weight: bold; } +h4 { margin-block: 1.33em; font-size: 1.00em; font-weight: bold; } +h5 { margin-block: 1.67em; font-size: 0.83em; font-weight: bold; } +h6 { margin-block: 2.33em; font-size: 0.67em; font-weight: bold; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#lists + - Omit presentational hints + - Omit quirks mode +*/ + +dir, dd, dl, dt, menu, ol, ul { display: block; } +li { display: list-item; text-align: match-parent; } + +dir, dl, menu, ol, ul { margin-block: 1em; } + +:is(dir, dl, menu, ol, ul) :is(dir, dl, menu, ol, ul) { + margin-block: 0; +} + +dd { margin-inline-start: 40px; } +dir, menu, ol, ul { padding-inline-start: 40px; } + +ol, ul, menu { counter-reset: list-item; } +ol { list-style-type: decimal; } + +dir, menu, ul { + list-style-type: disc; +} +:is(dir, menu, ol, ul) :is(dir, menu, ul) { + list-style-type: circle; +} +:is(dir, menu, ol, ul) :is(dir, menu, ol, ul) :is(dir, menu, ul) { + list-style-type: square; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#tables-2 + - Omit presentational hints + - Omit quirks mode + - Omit HTML documents +*/ + +table { display: table; } +caption { display: table-caption; } +colgroup, colgroup[hidden] { display: table-column-group; } +col, col[hidden] { display: table-column; } +thead, thead[hidden] { display: table-header-group; } +tbody, tbody[hidden] { display: table-row-group; } +tfoot, tfoot[hidden] { display: table-footer-group; } +tr, tr[hidden] { display: table-row; } +td, th { display: table-cell; } + +colgroup[hidden], col[hidden], thead[hidden], tbody[hidden], +tfoot[hidden], tr[hidden] { + visibility: collapse; +} + +table { + box-sizing: border-box; + border-spacing: 2px; + border-collapse: separate; + text-indent: initial; +} +td, th { padding: 1px; } +th { font-weight: bold; } + +caption { text-align: center; } +thead, tbody, tfoot, table > tr { vertical-align: middle; } +tr, td, th { vertical-align: inherit; } + +thead, tbody, tfoot, tr { border-color: inherit; } +table[rules=none i], table[rules=groups i], table[rules=rows i], +table[rules=cols i], table[rules=all i], table[frame=void i], +table[frame=above i], table[frame=below i], table[frame=hsides i], +table[frame=lhs i], table[frame=rhs i], table[frame=vsides i], +table[frame=box i], table[frame=border i], +table[rules=none i] > tr > td, table[rules=none i] > tr > th, +table[rules=groups i] > tr > td, table[rules=groups i] > tr > th, +table[rules=rows i] > tr > td, table[rules=rows i] > tr > th, +table[rules=cols i] > tr > td, table[rules=cols i] > tr > th, +table[rules=all i] > tr > td, table[rules=all i] > tr > th, +table[rules=none i] > thead > tr > td, table[rules=none i] > thead > tr > th, +table[rules=groups i] > thead > tr > td, table[rules=groups i] > thead > tr > th, +table[rules=rows i] > thead > tr > td, table[rules=rows i] > thead > tr > th, +table[rules=cols i] > thead > tr > td, table[rules=cols i] > thead > tr > th, +table[rules=all i] > thead > tr > td, table[rules=all i] > thead > tr > th, +table[rules=none i] > tbody > tr > td, table[rules=none i] > tbody > tr > th, +table[rules=groups i] > tbody > tr > td, table[rules=groups i] > tbody > tr > th, +table[rules=rows i] > tbody > tr > td, table[rules=rows i] > tbody > tr > th, +table[rules=cols i] > tbody > tr > td, table[rules=cols i] > tbody > tr > th, +table[rules=all i] > tbody > tr > td, table[rules=all i] > tbody > tr > th, +table[rules=none i] > tfoot > tr > td, table[rules=none i] > tfoot > tr > th, +table[rules=groups i] > tfoot > tr > td, table[rules=groups i] > tfoot > tr > th, +table[rules=rows i] > tfoot > tr > td, table[rules=rows i] > tfoot > tr > th, +table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th, +table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th { + border-color: black; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#form-controls + - Omit quirks mode +*/ + +input, select, button, textarea { + letter-spacing: initial; + word-spacing: initial; + line-height: initial; + text-transform: initial; + text-indent: initial; + text-shadow: initial; + appearance: auto; +} + +input:not([type=image i], [type=range i], [type=checkbox i], [type=radio i]) { + overflow: clip !important; + overflow-clip-margin: 0 !important; +} + +input, select, textarea { + text-align: initial; +} + +:autofill { + field-sizing: fixed !important; +} + +input:is([type=reset i], [type=button i], [type=submit i]), button { + text-align: center; +} + +input, button { + display: inline-block; +} + +input[type=hidden i], input[type=file i], input[type=image i] { + appearance: none; +} + +input:is([type=radio i], [type=checkbox i], [type=reset i], [type=button i], +[type=submit i], [type=color i], [type=search i]), select, button { + box-sizing: border-box; +} + +textarea { white-space: pre-wrap; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-hr-element-2 + - Omit presentational hints +*/ + +hr { + color: gray; + border-style: inset; + border-width: 1px; + margin-block: 0.5em; + margin-inline: auto; + overflow: hidden; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-fieldset-and-legend-elements */ + +fieldset { + display: block; + margin-inline: 2px; + border: groove 2px ThreeDFace; + padding-block: 0.35em 0.625em; + padding-inline: 0.75em; + min-inline-size: min-content; +} + +legend { + padding-inline: 2px; +} + +legend[align=left i] { + justify-self: left; +} + +legend[align=center i] { + justify-self: center; +} + +legend[align=right i] { + justify-self: right; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#embedded-content-rendering-rules */ + +iframe { border: 2px inset; } +video { object-fit: contain; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#images-3 +- Omit quirks mode +*/ + +img:is([sizes="auto" i], [sizes^="auto," i]) { + contain: size !important; + contain-intrinsic-size: 300px 150px; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements +- Omit internal shadow tree styles +*/ + +details, summary { + display: block; +} +details > summary:first-of-type { + display: list-item; + counter-increment: list-item 0; + list-style: disclosure-closed inside; +} +details[open] > summary:first-of-type { + list-style-type: disclosure-open; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-marquee-element-2 */ + +marquee { + display: inline-block; + text-align: initial; + overflow: hidden !important; +} + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-meter-element-2 */ + +meter { appearance: auto; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#the-progress-element-2 */ + +progress { appearance: auto; } + +/* https://html.spec.whatwg.org/multipage/rendering.html#hidden-elements +- Moved to the bottom because our lack of specificity support causes tag name `display: block` and the below [hidden] + `display: none` to be last-one-wins. +*/ + +area, base, basefont, datalist, head, link, meta, noembed, +noframes, param, rp, script, style, template, title { + display: none; +} + +[hidden]:not([hidden=until-found i]):not(embed) { + display: none; +} + +[hidden=until-found i]:not(embed) { + content-visibility: hidden; +} + +embed[hidden] { display: inline; height: 0; width: 0; } + +input[type=hidden i] { display: none !important; } + +@media (scripting) { + noscript { display: none !important; } +} diff --git a/vanilla/node_modules/jsdom/lib/jsdom/browser/js-globals.json b/vanilla/node_modules/jsdom/lib/jsdom/browser/js-globals.json new file mode 100644 index 0000000..14ee04a --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/jsdom/browser/js-globals.json @@ -0,0 +1,332 @@ +{ + "Object": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Function": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Number": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "parseFloat": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "parseInt": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Infinity": { + "writable": false, + "enumerable": false, + "configurable": false + }, + "NaN": { + "writable": false, + "enumerable": false, + "configurable": false + }, + "undefined": { + "writable": false, + "enumerable": false, + "configurable": false + }, + "Boolean": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "String": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Symbol": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Date": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Promise": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "RegExp": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Error": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "AggregateError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "EvalError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "RangeError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "ReferenceError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "SyntaxError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "TypeError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "URIError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "globalThis": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "JSON": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Math": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Intl": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "ArrayBuffer": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Atomics": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Uint8Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Int8Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Uint16Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Int16Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Uint32Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Int32Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "BigUint64Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "BigInt64Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Uint8ClampedArray": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Float32Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Float64Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "DataView": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Map": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "BigInt": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Set": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Iterator": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "WeakMap": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "WeakSet": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Proxy": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Reflect": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "FinalizationRegistry": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "WeakRef": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "decodeURI": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "decodeURIComponent": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "encodeURI": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "encodeURIComponent": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "escape": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "unescape": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "eval": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "isFinite": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "isNaN": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "SuppressedError": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "DisposableStack": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "AsyncDisposableStack": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "Float16Array": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "SharedArrayBuffer": { + "writable": true, + "enumerable": false, + "configurable": true + }, + "WebAssembly": { + "writable": true, + "enumerable": false, + "configurable": true + } +} diff --git a/vanilla/node_modules/jsdom/lib/jsdom/browser/not-implemented.js b/vanilla/node_modules/jsdom/lib/jsdom/browser/not-implemented.js new file mode 100644 index 0000000..42204b8 --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/jsdom/browser/not-implemented.js @@ -0,0 +1,20 @@ +"use strict"; + +exports.notImplementedMethod = (window, className, methodName, specialCircumstances) => { + exports.notImplemented( + window, + `${className}'s ${methodName}() method${specialCircumstances ? `: ${specialCircumstances}` : ""}` + ); +}; + +exports.notImplemented = (window, message) => { + if (!window) { + // Do nothing for window-less documents. + return; + } + + const error = new Error(`Not implemented: ${message}`); + error.type = "not-implemented"; + + window._virtualConsole.emit("jsdomError", error); +}; diff --git a/vanilla/node_modules/jsdom/lib/jsdom/browser/parser/html.js b/vanilla/node_modules/jsdom/lib/jsdom/browser/parser/html.js new file mode 100644 index 0000000..f41bf02 --- /dev/null +++ b/vanilla/node_modules/jsdom/lib/jsdom/browser/parser/html.js @@ -0,0 +1,208 @@ +"use strict"; + +const parse5 = require("parse5"); + +const { createElement } = require("../../living/helpers/create-element"); +const { HTML_NS } = require("../../living/helpers/namespaces"); + +const DocumentType = require("../../living/generated/DocumentType"); +const DocumentFragment = require("../../living/generated/DocumentFragment"); +const Text = require("../../living/generated/Text"); +const Comment = require("../../living/generated/Comment"); + +const attributes = require("../../living/attributes"); +const nodeTypes = require("../../living/node-type"); + +const serializationAdapter = require("../../living/domparsing/parse5-adapter-serialization"); +const { + customElementReactionsStack, invokeCEReactions, lookupCEDefinition +} = require("../../living/helpers/custom-elements"); + + +class JSDOMParse5Adapter { + constructor(documentImpl, options = {}) { + this._documentImpl = documentImpl; + this._globalObject = documentImpl._globalObject; + this._fragment = options.fragment || false; + + // Since the createElement hook doesn't provide the parent element, we keep track of this using _currentElement: + // https://github.com/inikulin/parse5/issues/285. + this._currentElement = undefined; + } + + _ownerDocument() { + const { _currentElement } = this; + + // The _currentElement is undefined when parsing elements at the root of the document. + if (_currentElement) { + return _currentElement.localName === "template" && _currentElement.namespaceURI === HTML_NS ? + _currentElement.content._ownerDocument : + _currentElement._ownerDocument; + } + + return this._documentImpl; + } + + createDocument() { + // parse5's model assumes that parse(html) will call into here to create the new Document, then return it. However, + // jsdom's model assumes we can create a Window (and through that create an empty Document), do some other setup + // stuff, and then parse, stuffing nodes into that Document as we go. So to adapt between these two models, we just + // return the already-created Document when asked by parse5 to "create" a Document. + return this._documentImpl; + } + + createDocumentFragment() { + const ownerDocument = this._ownerDocument(); + return DocumentFragment.createImpl(this._globalObject, [], { ownerDocument }); + } + + // https://html.spec.whatwg.org/#create-an-element-for-the-token + createElement(localName, namespace, attrs) { + const ownerDocument = this._ownerDocument(); + + const isAttribute = attrs.find(attr => attr.name === "is"); + const isValue = isAttribute ? isAttribute.value : null; + + const definition = lookupCEDefinition(ownerDocument, namespace, localName); + + let willExecuteScript = false; + if (definition !== null && !this._fragment) { + willExecuteScript = true; + } + + if (willExecuteScript) { + ownerDocument._throwOnDynamicMarkupInsertionCounter++; + customElementReactionsStack.push([]); + } + + const element = createElement(ownerDocument, localName, namespace, null, isValue, willExecuteScript); + this.adoptAttributes(element, attrs); + + if (willExecuteScript) { + const queue = customElementReactionsStack.pop(); + invokeCEReactions(queue); + ownerDocument._throwOnDynamicMarkupInsertionCounter--; + } + + if ("_parserInserted" in element) { + element._parserInserted = true; + } + + return element; + } + + createCommentNode(data) { + const ownerDocument = this._ownerDocument(); + return Comment.createImpl(this._globalObject, [], { data, ownerDocument }); + } + + appendChild(parentNode, newNode) { + parentNode._append(newNode); + } + + insertBefore(parentNode, newNode, referenceNode) { + parentNode._insert(newNode, referenceNode); + } + + setTemplateContent(templateElement, contentFragment) { + // This code makes the glue between jsdom and parse5 HTMLTemplateElement parsing: + // + // * jsdom during the construction of the HTMLTemplateElement (for example when create via + // `document.createElement("template")`), creates a DocumentFragment and set it into _templateContents. + // * parse5 when parsing a