@dooboostore/dom-parser 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/DomParser.js +43 -13
- package/dist/cjs/DomParser.js.map +2 -2
- package/dist/cjs/factory/ElementFactory.js +27 -6
- package/dist/cjs/factory/ElementFactory.js.map +2 -2
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/node/CharacterData.js.map +1 -1
- package/dist/cjs/node/ChildNode.js +0 -15
- package/dist/cjs/node/ChildNode.js.map +3 -3
- package/dist/cjs/node/ChildNodeBase.js +20 -0
- package/dist/cjs/node/ChildNodeBase.js.map +2 -2
- package/dist/cjs/node/Comment.js.map +2 -2
- package/dist/cjs/node/Document.js +0 -27
- package/dist/cjs/node/Document.js.map +4 -4
- package/dist/cjs/node/DocumentBase.js +169 -202
- package/dist/cjs/node/DocumentBase.js.map +2 -2
- package/dist/cjs/node/DocumentFragment.js +0 -15
- package/dist/cjs/node/DocumentFragment.js.map +3 -3
- package/dist/cjs/node/DocumentFragmentBase.js.map +2 -2
- package/dist/cjs/node/Node.js.map +1 -1
- package/dist/cjs/node/NodeBase.js +44 -2
- package/dist/cjs/node/NodeBase.js.map +2 -2
- package/dist/cjs/node/NodeFilter.js +43 -0
- package/dist/cjs/node/NodeFilter.js.map +7 -0
- package/dist/cjs/node/NodeIterator.js +1 -28
- package/dist/cjs/node/NodeIterator.js.map +2 -2
- package/dist/cjs/node/ParentNode.js +0 -15
- package/dist/cjs/node/ParentNode.js.map +3 -3
- package/dist/cjs/node/ParentNodeBase.js +10 -10
- package/dist/cjs/node/ParentNodeBase.js.map +3 -3
- package/dist/cjs/node/ShadowRootBase.js +79 -0
- package/dist/cjs/node/ShadowRootBase.js.map +7 -0
- package/dist/cjs/node/Text.js +0 -15
- package/dist/cjs/node/Text.js.map +3 -3
- package/dist/cjs/node/TextBase.js +0 -3
- package/dist/cjs/node/TextBase.js.map +2 -2
- package/dist/cjs/node/TreeWalker.js +272 -0
- package/dist/cjs/node/TreeWalker.js.map +7 -0
- package/dist/cjs/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +7 -6
- package/dist/cjs/node/collection/HTMLCollectionImp.js.map +7 -0
- package/dist/cjs/node/collection/HTMLCollectionOfImp.js +26 -0
- package/dist/cjs/node/collection/HTMLCollectionOfImp.js.map +7 -0
- package/dist/cjs/node/collection/NodeList.js.map +1 -1
- package/dist/cjs/node/collection/{NodeListOf.js → NodeListOfImp.js} +6 -6
- package/dist/cjs/node/collection/NodeListOfImp.js.map +7 -0
- package/dist/cjs/node/collection/StylePropertyMapImpl.js +65 -0
- package/dist/cjs/node/collection/StylePropertyMapImpl.js.map +7 -0
- package/dist/cjs/node/collection/index.js +6 -6
- package/dist/cjs/node/collection/index.js.map +2 -2
- package/dist/cjs/node/elements/Element.js +0 -15
- package/dist/cjs/node/elements/Element.js.map +3 -3
- package/dist/cjs/node/elements/ElementBase.js +164 -322
- package/dist/cjs/node/elements/ElementBase.js.map +3 -3
- package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
- package/dist/cjs/node/{collection/HTMLCollectionOf.js → elements/HTMLAudioElement.js} +9 -16
- package/dist/cjs/node/elements/HTMLAudioElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLButtonElement.js +1 -1
- package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLDListElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDListElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDataElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDataElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDataListElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDataListElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDetailsElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDetailsElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDialogElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDialogElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLElement.js +10 -0
- package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLElementBase.js +153 -3
- package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLFieldSetElement.js +29 -0
- package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLHRElement.js +29 -0
- package/dist/cjs/node/elements/HTMLHRElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLIFrameElement.js +29 -0
- package/dist/cjs/node/elements/HTMLIFrameElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLLabelElement.js +29 -0
- package/dist/cjs/node/elements/HTMLLabelElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLLegendElement.js +29 -0
- package/dist/cjs/node/elements/HTMLLegendElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLMapElement.js +29 -0
- package/dist/cjs/node/elements/HTMLMapElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLMeterElement.js +29 -0
- package/dist/cjs/node/elements/HTMLMeterElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLModElement.js +29 -0
- package/dist/cjs/node/elements/HTMLModElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLObjectElement.js +29 -0
- package/dist/cjs/node/elements/HTMLObjectElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOptGroupElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOptionElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOptionElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOutputElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOutputElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLParamElement.js +29 -0
- package/dist/cjs/node/elements/HTMLParamElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLPictureElement.js +29 -0
- package/dist/cjs/node/elements/HTMLPictureElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLPreElement.js +29 -0
- package/dist/cjs/node/elements/HTMLPreElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLProgressElement.js +29 -0
- package/dist/cjs/node/elements/HTMLProgressElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLQuoteElement.js +29 -0
- package/dist/cjs/node/elements/HTMLQuoteElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSelectElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSelectElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSlotElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSlotElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSourceElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSourceElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTextAreaElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTimeElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTimeElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTrackElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTrackElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLVideoElement.js +29 -0
- package/dist/cjs/node/elements/HTMLVideoElement.js.map +7 -0
- package/dist/cjs/node/elements/index.js +181 -92
- package/dist/cjs/node/elements/index.js.map +2 -2
- package/dist/cjs/node/index.js +6 -16
- package/dist/cjs/node/index.js.map +2 -2
- package/dist/cjs/utils/CSSSelector.js.map +2 -2
- package/dist/cjs/window/CustomElementRegistryImp.js +105 -0
- package/dist/cjs/window/CustomElementRegistryImp.js.map +7 -0
- package/dist/cjs/window/Window.js +0 -15
- package/dist/cjs/window/Window.js.map +3 -3
- package/dist/cjs/window/WindowBase.js +233 -515
- package/dist/cjs/window/WindowBase.js.map +2 -2
- package/dist/cjs/window/index.js +0 -5
- package/dist/cjs/window/index.js.map +2 -2
- package/dist/esm/DomParser.js +43 -13
- package/dist/esm/DomParser.js.map +2 -2
- package/dist/esm/factory/ElementFactory.js +27 -6
- package/dist/esm/factory/ElementFactory.js.map +2 -2
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/node/ChildNodeBase.js +20 -0
- package/dist/esm/node/ChildNodeBase.js.map +2 -2
- package/dist/esm/node/Comment.js.map +2 -2
- package/dist/esm/node/Document.js +0 -8
- package/dist/esm/node/Document.js.map +4 -4
- package/dist/esm/node/DocumentBase.js +166 -199
- package/dist/esm/node/DocumentBase.js.map +2 -2
- package/dist/esm/node/DocumentFragmentBase.js.map +2 -2
- package/dist/esm/node/Node.js.map +1 -1
- package/dist/esm/node/NodeBase.js +45 -22
- package/dist/esm/node/NodeBase.js.map +2 -2
- package/dist/esm/node/NodeFilter.js +24 -0
- package/dist/esm/node/NodeFilter.js.map +7 -0
- package/dist/esm/node/NodeIterator.js +1 -28
- package/dist/esm/node/NodeIterator.js.map +2 -2
- package/dist/esm/node/ParentNodeBase.js +4 -4
- package/dist/esm/node/ParentNodeBase.js.map +2 -2
- package/dist/esm/node/ShadowRootBase.js +60 -0
- package/dist/esm/node/ShadowRootBase.js.map +7 -0
- package/dist/esm/node/TextBase.js +0 -3
- package/dist/esm/node/TextBase.js.map +2 -2
- package/dist/esm/node/TreeWalker.js +253 -0
- package/dist/esm/node/TreeWalker.js.map +7 -0
- package/dist/esm/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +4 -3
- package/dist/esm/node/collection/HTMLCollectionImp.js.map +7 -0
- package/dist/esm/node/collection/HTMLCollectionOfImp.js +7 -0
- package/dist/esm/node/collection/HTMLCollectionOfImp.js.map +7 -0
- package/dist/esm/node/collection/NodeList.js.map +1 -1
- package/dist/esm/node/collection/{NodeListOf.js → NodeListOfImp.js} +3 -3
- package/dist/esm/node/collection/NodeListOfImp.js.map +7 -0
- package/dist/esm/node/collection/StylePropertyMapImpl.js +46 -0
- package/dist/esm/node/collection/StylePropertyMapImpl.js.map +7 -0
- package/dist/esm/node/collection/index.js +6 -6
- package/dist/esm/node/collection/index.js.map +2 -2
- package/dist/esm/node/elements/ElementBase.js +164 -322
- package/dist/esm/node/elements/ElementBase.js.map +3 -3
- package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLAudioElement.js +10 -0
- package/dist/esm/node/elements/HTMLAudioElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLButtonElement.js +1 -1
- package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLDListElement.js +10 -0
- package/dist/esm/node/elements/HTMLDListElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDataElement.js +10 -0
- package/dist/esm/node/elements/HTMLDataElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDataListElement.js +10 -0
- package/dist/esm/node/elements/HTMLDataListElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDetailsElement.js +10 -0
- package/dist/esm/node/elements/HTMLDetailsElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDialogElement.js +10 -0
- package/dist/esm/node/elements/HTMLDialogElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLElement.js +6 -0
- package/dist/esm/node/elements/HTMLElement.js.map +3 -3
- package/dist/esm/node/elements/HTMLElementBase.js +153 -3
- package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLFieldSetElement.js +10 -0
- package/dist/esm/node/elements/HTMLFieldSetElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLHRElement.js +10 -0
- package/dist/esm/node/elements/HTMLHRElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLIFrameElement.js +10 -0
- package/dist/esm/node/elements/HTMLIFrameElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLLabelElement.js +10 -0
- package/dist/esm/node/elements/HTMLLabelElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLLegendElement.js +10 -0
- package/dist/esm/node/elements/HTMLLegendElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLMapElement.js +10 -0
- package/dist/esm/node/elements/HTMLMapElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLMeterElement.js +10 -0
- package/dist/esm/node/elements/HTMLMeterElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLModElement.js +10 -0
- package/dist/esm/node/elements/HTMLModElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLObjectElement.js +10 -0
- package/dist/esm/node/elements/HTMLObjectElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOptGroupElement.js +10 -0
- package/dist/esm/node/elements/HTMLOptGroupElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOptionElement.js +10 -0
- package/dist/esm/node/elements/HTMLOptionElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOutputElement.js +10 -0
- package/dist/esm/node/elements/HTMLOutputElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLParamElement.js +10 -0
- package/dist/esm/node/elements/HTMLParamElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLPictureElement.js +10 -0
- package/dist/esm/node/elements/HTMLPictureElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLPreElement.js +10 -0
- package/dist/esm/node/elements/HTMLPreElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLProgressElement.js +10 -0
- package/dist/esm/node/elements/HTMLProgressElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLQuoteElement.js +10 -0
- package/dist/esm/node/elements/HTMLQuoteElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSelectElement.js +10 -0
- package/dist/esm/node/elements/HTMLSelectElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSlotElement.js +10 -0
- package/dist/esm/node/elements/HTMLSlotElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSourceElement.js +10 -0
- package/dist/esm/node/elements/HTMLSourceElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTextAreaElement.js +10 -0
- package/dist/esm/node/elements/HTMLTextAreaElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTimeElement.js +10 -0
- package/dist/esm/node/elements/HTMLTimeElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTrackElement.js +10 -0
- package/dist/esm/node/elements/HTMLTrackElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLVideoElement.js +10 -0
- package/dist/esm/node/elements/HTMLVideoElement.js.map +7 -0
- package/dist/esm/node/elements/index.js +182 -93
- package/dist/esm/node/elements/index.js.map +2 -2
- package/dist/esm/node/index.js +7 -17
- package/dist/esm/node/index.js.map +2 -2
- package/dist/esm/utils/CSSSelector.js.map +2 -2
- package/dist/esm/window/CustomElementRegistryImp.js +86 -0
- package/dist/esm/window/CustomElementRegistryImp.js.map +7 -0
- package/dist/esm/window/WindowBase.js +282 -499
- package/dist/esm/window/WindowBase.js.map +2 -2
- package/dist/esm/window/index.js +0 -5
- package/dist/esm/window/index.js.map +2 -2
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js +3755 -3548
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +4 -4
- package/dist/types/DomParser.d.ts +4 -0
- package/dist/types/DomParser.d.ts.map +1 -1
- package/dist/types/factory/ElementFactory.d.ts +1 -1
- package/dist/types/factory/ElementFactory.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/node/CharacterData.d.ts +0 -2
- package/dist/types/node/CharacterData.d.ts.map +1 -1
- package/dist/types/node/ChildNode.d.ts +0 -38
- package/dist/types/node/ChildNode.d.ts.map +1 -1
- package/dist/types/node/ChildNodeBase.d.ts +6 -4
- package/dist/types/node/ChildNodeBase.d.ts.map +1 -1
- package/dist/types/node/Comment.d.ts +1 -1
- package/dist/types/node/Comment.d.ts.map +1 -1
- package/dist/types/node/Document.d.ts +0 -856
- package/dist/types/node/Document.d.ts.map +1 -1
- package/dist/types/node/DocumentBase.d.ts +68 -108
- package/dist/types/node/DocumentBase.d.ts.map +1 -1
- package/dist/types/node/DocumentFragment.d.ts +0 -38
- package/dist/types/node/DocumentFragment.d.ts.map +1 -1
- package/dist/types/node/DocumentFragmentBase.d.ts +1 -8
- package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -1
- package/dist/types/node/Node.d.ts +0 -213
- package/dist/types/node/Node.d.ts.map +1 -1
- package/dist/types/node/NodeBase.d.ts +11 -8
- package/dist/types/node/NodeBase.d.ts.map +1 -1
- package/dist/types/node/NodeFilter.d.ts +25 -0
- package/dist/types/node/NodeFilter.d.ts.map +1 -0
- package/dist/types/node/NodeIterator.d.ts +0 -34
- package/dist/types/node/NodeIterator.d.ts.map +1 -1
- package/dist/types/node/ParentNode.d.ts +0 -84
- package/dist/types/node/ParentNode.d.ts.map +1 -1
- package/dist/types/node/ParentNodeBase.d.ts +0 -5
- package/dist/types/node/ParentNodeBase.d.ts.map +1 -1
- package/dist/types/node/ShadowRootBase.d.ts +36 -0
- package/dist/types/node/ShadowRootBase.d.ts.map +1 -0
- package/dist/types/node/Text.d.ts +0 -24
- package/dist/types/node/Text.d.ts.map +1 -1
- package/dist/types/node/TextBase.d.ts +2 -3
- package/dist/types/node/TextBase.d.ts.map +1 -1
- package/dist/types/node/TreeWalker.d.ts +48 -0
- package/dist/types/node/TreeWalker.d.ts.map +1 -0
- package/dist/types/node/collection/{HTMLCollection.d.ts → HTMLCollectionImp.d.ts} +2 -3
- package/dist/types/node/collection/HTMLCollectionImp.d.ts.map +1 -0
- package/dist/types/node/collection/HTMLCollectionOfImp.d.ts +9 -0
- package/dist/types/node/collection/HTMLCollectionOfImp.d.ts.map +1 -0
- package/dist/types/node/collection/NodeList.d.ts +0 -1
- package/dist/types/node/collection/NodeList.d.ts.map +1 -1
- package/dist/types/node/collection/{NodeListOf.d.ts → NodeListOfImp.d.ts} +3 -4
- package/dist/types/node/collection/NodeListOfImp.d.ts.map +1 -0
- package/dist/types/node/collection/StylePropertyMapImpl.d.ts +20 -0
- package/dist/types/node/collection/StylePropertyMapImpl.d.ts.map +1 -0
- package/dist/types/node/collection/index.d.ts +3 -3
- package/dist/types/node/collection/index.d.ts.map +1 -1
- package/dist/types/node/elements/Element.d.ts +0 -686
- package/dist/types/node/elements/Element.d.ts.map +1 -1
- package/dist/types/node/elements/ElementBase.d.ts +97 -73
- package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLAreaElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLAudioElement.d.ts +8 -0
- package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLButtonElement.d.ts +1 -1
- package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLDListElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDataElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDataListElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDetailsElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDialogElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLElement.d.ts +2 -88
- package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLElementBase.d.ts +133 -3
- package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLEmbedElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLFieldSetElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLHRElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLIFrameElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLLabelElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLLegendElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLMapElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLMeterElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLModElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLObjectElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOptGroupElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOptionElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOutputElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLParamElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLPictureElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLPreElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLProgressElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLQuoteElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSelectElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSlotElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSourceElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTableElement.d.ts +3 -4
- package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTemplateElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTextAreaElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTimeElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTrElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTrackElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLVideoElement.d.ts +8 -0
- package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -0
- package/dist/types/node/elements/index.d.ts +106 -52
- package/dist/types/node/elements/index.d.ts.map +1 -1
- package/dist/types/node/index.d.ts +4 -7
- package/dist/types/node/index.d.ts.map +1 -1
- package/dist/types/utils/CSSSelector.d.ts +0 -1
- package/dist/types/utils/CSSSelector.d.ts.map +1 -1
- package/dist/types/window/CustomElementRegistryImp.d.ts +18 -0
- package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -0
- package/dist/types/window/Window.d.ts +0 -619
- package/dist/types/window/Window.d.ts.map +1 -1
- package/dist/types/window/WindowBase.d.ts +261 -284
- package/dist/types/window/WindowBase.d.ts.map +1 -1
- package/dist/types/window/index.d.ts +0 -1
- package/dist/types/window/index.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js +3765 -3558
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +4 -4
- package/package.json +1 -1
- package/src/DomParser.ts +458 -429
- package/src/factory/ElementFactory.ts +79 -53
- package/src/index.ts +11 -10
- package/src/node/CharacterData.ts +0 -2
- package/src/node/ChildNode.ts +42 -42
- package/src/node/ChildNodeBase.ts +60 -39
- package/src/node/Comment.ts +60 -60
- package/src/node/Document.ts +129 -882
- package/src/node/DocumentBase.ts +371 -462
- package/src/node/DocumentFragment.ts +38 -44
- package/src/node/DocumentFragmentBase.ts +4 -9
- package/src/node/Node.ts +231 -224
- package/src/node/NodeBase.ts +469 -443
- package/src/node/NodeFilter.ts +50 -0
- package/src/node/NodeIterator.ts +117 -172
- package/src/node/ParentNode.ts +93 -93
- package/src/node/ParentNodeBase.ts +7 -10
- package/src/node/ShadowRootBase.ts +87 -0
- package/src/node/Text.ts +30 -30
- package/src/node/TextBase.ts +92 -94
- package/src/node/TreeWalker.ts +280 -0
- package/src/node/collection/{HTMLCollection.ts → HTMLCollectionImp.ts} +3 -2
- package/src/node/collection/HTMLCollectionOfImp.ts +12 -0
- package/src/node/collection/NodeList.ts +1 -1
- package/src/node/collection/{NodeListOf.ts → NodeListOfImp.ts} +3 -3
- package/src/node/collection/StylePropertyMapImpl.ts +60 -0
- package/src/node/collection/index.ts +3 -3
- package/src/node/elements/Element.ts +212 -771
- package/src/node/elements/ElementBase.ts +840 -1195
- package/src/node/elements/HTMLAreaElement.ts +0 -1
- package/src/node/elements/HTMLAudioElement.ts +10 -0
- package/src/node/elements/HTMLButtonElement.ts +63 -63
- package/src/node/elements/HTMLDListElement.ts +2 -0
- package/src/node/elements/HTMLDataElement.ts +6 -0
- package/src/node/elements/HTMLDataListElement.ts +2 -0
- package/src/node/elements/HTMLDetailsElement.ts +2 -0
- package/src/node/elements/HTMLDialogElement.ts +2 -0
- package/src/node/elements/HTMLElement.ts +2 -102
- package/src/node/elements/HTMLElementBase.ts +453 -156
- package/src/node/elements/HTMLEmbedElement.ts +0 -1
- package/src/node/elements/HTMLFieldSetElement.ts +2 -0
- package/src/node/elements/HTMLHRElement.ts +2 -0
- package/src/node/elements/HTMLIFrameElement.ts +2 -0
- package/src/node/elements/HTMLLabelElement.ts +2 -0
- package/src/node/elements/HTMLLegendElement.ts +2 -0
- package/src/node/elements/HTMLMapElement.ts +2 -0
- package/src/node/elements/HTMLMeterElement.ts +2 -0
- package/src/node/elements/HTMLModElement.ts +2 -0
- package/src/node/elements/HTMLObjectElement.ts +2 -0
- package/src/node/elements/HTMLOptGroupElement.ts +2 -0
- package/src/node/elements/HTMLOptionElement.ts +2 -0
- package/src/node/elements/HTMLOutputElement.ts +2 -0
- package/src/node/elements/HTMLParamElement.ts +2 -0
- package/src/node/elements/HTMLPictureElement.ts +2 -0
- package/src/node/elements/HTMLPreElement.ts +2 -0
- package/src/node/elements/HTMLProgressElement.ts +2 -0
- package/src/node/elements/HTMLQuoteElement.ts +2 -0
- package/src/node/elements/HTMLSelectElement.ts +2 -0
- package/src/node/elements/HTMLSlotElement.ts +2 -0
- package/src/node/elements/HTMLSourceElement.ts +2 -0
- package/src/node/elements/HTMLTableElement.ts +3 -7
- package/src/node/elements/HTMLTbodyElement.ts +2 -3
- package/src/node/elements/HTMLTdElement.ts +1 -1
- package/src/node/elements/HTMLTemplateElement.ts +3 -6
- package/src/node/elements/HTMLTextAreaElement.ts +2 -0
- package/src/node/elements/HTMLTfootElement.ts +2 -3
- package/src/node/elements/HTMLTheadElement.ts +2 -3
- package/src/node/elements/HTMLTimeElement.ts +2 -0
- package/src/node/elements/HTMLTrElement.ts +3 -4
- package/src/node/elements/HTMLTrackElement.ts +2 -0
- package/src/node/elements/HTMLVideoElement.ts +10 -0
- package/src/node/elements/index.ts +226 -149
- package/src/node/index.ts +8 -8
- package/src/utils/CSSSelector.ts +0 -1
- package/src/window/CustomElementRegistryImp.ts +120 -0
- package/src/window/Window.ts +716 -715
- package/src/window/WindowBase.ts +842 -998
- package/src/window/index.ts +0 -1
- package/tsconfig.json +1 -0
- package/dist/cjs/node/collection/HTMLCollection.js.map +0 -7
- package/dist/cjs/node/collection/HTMLCollectionOf.js.map +0 -7
- package/dist/cjs/node/collection/NodeListOf.js.map +0 -7
- package/dist/esm/node/collection/HTMLCollection.js.map +0 -7
- package/dist/esm/node/collection/HTMLCollectionOf.js +0 -17
- package/dist/esm/node/collection/HTMLCollectionOf.js.map +0 -7
- package/dist/esm/node/collection/NodeListOf.js.map +0 -7
- package/dist/types/node/collection/HTMLCollection.d.ts.map +0 -1
- package/dist/types/node/collection/HTMLCollectionOf.d.ts +0 -14
- package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +0 -1
- package/dist/types/node/collection/NodeListOf.d.ts.map +0 -1
- package/src/node/collection/HTMLCollectionOf.ts +0 -26
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/window/WindowBase.ts"],
|
|
4
|
-
"sourcesContent": ["import { Window, Location, History, Navigator } from './Window';\nimport { Document } from '../node/Document';\nimport { DocumentBase } from '../node/DocumentBase';\nimport { NodeBase } from '../node/NodeBase';\nimport { ElementBase } from '../node/elements/ElementBase';\n\n// Import all element classes\nimport { HTMLAnchorElement } from '../node/elements/HTMLAnchorElement';\nimport { HTMLBodyElement } from '../node/elements/HTMLBodyElement';\nimport { HTMLButtonElement } from '../node/elements/HTMLButtonElement';\nimport { HTMLCanvasElement } from '../node/elements/HTMLCanvasElement';\nimport { HTMLDivElement } from '../node/elements/HTMLDivElement';\nimport { HTMLH1Element } from '../node/elements/HTMLH1Element';\nimport { HTMLHeadElement } from '../node/elements/HTMLHeadElement';\nimport { HTMLHtmlElement } from '../node/elements/HTMLHtmlElement';\nimport { HTMLImgElement } from '../node/elements/HTMLImgElement';\nimport { HTMLInputElement } from '../node/elements/HTMLInputElement';\nimport { HTMLPElement } from '../node/elements/HTMLPElement';\nimport { HTMLSpanElement } from '../node/elements/HTMLSpanElement';\nimport { HTMLTitleElement } from '../node/elements/HTMLTitleElement';\nimport { HTMLLinkElement } from '../node/elements/HTMLLinkElement';\nimport { HTMLScriptElement } from '../node/elements/HTMLScriptElement';\nimport { HTMLStyleElement } from '../node/elements/HTMLStyleElement';\nimport { HTMLFormElement } from '../node/elements/HTMLFormElement';\nimport { HTMLTableElement } from '../node/elements/HTMLTableElement';\nimport { HTMLUListElement } from '../node/elements/HTMLUListElement';\nimport { HTMLOListElement } from '../node/elements/HTMLOListElement';\nimport { HTMLLIElement } from '../node/elements/HTMLLIElement';\nimport { HTMLMetaElement } from '../node/elements/HTMLMetaElement';\nimport { HTMLTemplateElement } from '../node/elements/HTMLTemplateElement';\nimport { HTMLTheadElement } from '../node/elements/HTMLTheadElement';\nimport { HTMLTfootElement } from '../node/elements/HTMLTfootElement';\nimport { HTMLTrElement } from '../node/elements/HTMLTrElement';\nimport { HTMLTdElement } from '../node/elements/HTMLTdElement';\nimport { HTMLThElement } from '../node/elements/HTMLThElement';\nimport { HTMLCaptionElement } from '../node/elements/HTMLCaptionElement';\nimport { HTMLTbodyElement } from '../node/elements/HTMLTbodyElement';\n\nclass LocationBase implements Location {\n private _href: string = 'about:blank';\n private _protocol: string = 'about:';\n private _host: string = '';\n private _hostname: string = '';\n private _port: string = '';\n private _pathname: string = 'blank';\n private _search: string = '';\n private _hash: string = '';\n private _origin: string = 'null';\n private urlChangeCallback?: (url: string) => void;\n\n constructor(initialUrl: string = 'about:blank', urlChangeCallback?: (url: string) => void) {\n this.urlChangeCallback = urlChangeCallback;\n this.parseUrl(initialUrl);\n }\n\n get href(): string {\n return this._href;\n }\n\n set href(url: string) {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n get protocol(): string {\n return this._protocol;\n }\n\n set protocol(value: string) {\n if (!value.endsWith(':')) {\n value += ':';\n }\n this._protocol = value;\n this.reconstructUrl();\n }\n\n get host(): string {\n return this._host;\n }\n\n set host(value: string) {\n this._host = value;\n // Parse hostname and port from host\n const colonIndex = value.lastIndexOf(':');\n if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {\n // IPv6 addresses are enclosed in brackets, so check if colon is after the closing bracket\n this._hostname = value.substring(0, colonIndex);\n this._port = value.substring(colonIndex + 1);\n } else {\n this._hostname = value;\n this._port = '';\n }\n this.reconstructUrl();\n }\n\n get hostname(): string {\n return this._hostname;\n }\n\n set hostname(value: string) {\n this._hostname = value;\n this._host = this._port ? `${value}:${this._port}` : value;\n this.reconstructUrl();\n }\n\n get port(): string {\n return this._port;\n }\n\n set port(value: string) {\n this._port = value;\n this._host = value ? `${this._hostname}:${value}` : this._hostname;\n this.reconstructUrl();\n }\n\n get pathname(): string {\n return this._pathname;\n }\n\n set pathname(value: string) {\n if (!value.startsWith('/')) {\n value = '/' + value;\n }\n this._pathname = value;\n this.reconstructUrl();\n }\n\n get search(): string {\n return this._search;\n }\n\n set search(value: string) {\n if (value && !value.startsWith('?')) {\n value = '?' + value;\n }\n this._search = value;\n this.reconstructUrl();\n }\n\n get hash(): string {\n return this._hash;\n }\n\n set hash(value: string) {\n if (value && !value.startsWith('#')) {\n value = '#' + value;\n }\n this._hash = value;\n this.reconstructUrl();\n }\n\n get origin(): string {\n return this._origin;\n }\n\n assign(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n replace(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n reload(forcedReload?: boolean): void {\n // No-op in server-side environment\n // In a real browser, this would reload the page\n }\n\n toString(): string {\n return this._href;\n }\n\n private parseUrl(url: string): void {\n try {\n // Handle relative URLs by creating a base URL\n let parsedUrl: URL;\n\n if (url.startsWith('//')) {\n // Protocol-relative URL\n parsedUrl = new URL(this._protocol + url);\n } else if (url.startsWith('/')) {\n // Absolute path\n parsedUrl = new URL(url, `${this._protocol}//${this._host}`);\n } else if (url.includes('://')) {\n // Absolute URL\n parsedUrl = new URL(url);\n } else {\n // Relative URL\n const base = `${this._protocol}//${this._host}${this._pathname}`;\n parsedUrl = new URL(url, base);\n }\n\n this._href = parsedUrl.href;\n this._protocol = parsedUrl.protocol;\n this._host = parsedUrl.host;\n this._hostname = parsedUrl.hostname;\n this._port = parsedUrl.port;\n this._pathname = parsedUrl.pathname;\n this._search = parsedUrl.search;\n this._hash = parsedUrl.hash;\n this._origin = parsedUrl.origin;\n } catch (e) {\n // Invalid URL, handle special cases\n if (url === 'about:blank') {\n this._href = 'about:blank';\n this._protocol = 'about:';\n this._host = '';\n this._hostname = '';\n this._port = '';\n this._pathname = 'blank';\n this._search = '';\n this._hash = '';\n this._origin = 'null';\n }\n // For other invalid URLs, keep current values\n }\n }\n\n private reconstructUrl(): void {\n try {\n // Reconstruct the URL from components\n let url = this._protocol;\n\n if (this._protocol !== 'about:' && this._protocol !== 'data:') {\n url += '//';\n if (this._host) {\n url += this._host;\n }\n }\n\n url += this._pathname;\n url += this._search;\n url += this._hash;\n\n // Validate the reconstructed URL\n const testUrl = new URL(url);\n this._href = testUrl.href;\n this._origin = testUrl.origin;\n } catch (e) {\n // If reconstruction fails, keep the current href\n }\n }\n}\n\nclass HistoryBase implements History {\n length: number = 1;\n state: any = null;\n private window: WindowBase;\n private historyStack: Array<{ state: any; title: string; url?: string }> = [];\n private currentIndex: number = -1;\n\n constructor(window: WindowBase) {\n this.window = window;\n }\n\n back(): void {\n this.go(-1);\n }\n\n forward(): void {\n this.go(1);\n }\n\n go(delta?: number): void {\n if (!delta || this.historyStack.length === 0) return;\n\n const newIndex = this.currentIndex + delta;\n if (newIndex >= 0 && newIndex < this.historyStack.length) {\n this.currentIndex = newIndex;\n const entry = this.historyStack[this.currentIndex];\n this.state = entry.state;\n\n // Update location if URL is provided\n if (entry.url && this.window.location) {\n (this.window.location as any)._href = entry.url;\n (this.window.location as any).parseUrl(entry.url);\n }\n\n // Dispatch popstate event\n (this.window as any).dispatchPopStateEvent(entry.state, entry.url);\n }\n }\n\n pushState(data: any, title: string, url?: string): void {\n // Remove any forward history when pushing new state\n this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);\n\n // Add new state\n this.historyStack.push({ state: data, title, url });\n this.currentIndex = this.historyStack.length - 1;\n this.state = data;\n this.length = this.historyStack.length;\n\n // Update location if URL is provided\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n\n // Trigger URL change callback for dynamic HTML loading\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n\n // Note: pushState does NOT dispatch popstate event (per HTML spec)\n }\n\n replaceState(data: any, title: string, url?: string): void {\n if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {\n // Replace current state\n this.historyStack[this.currentIndex] = { state: data, title, url };\n } else {\n // No current state, create one\n this.historyStack = [{ state: data, title, url }];\n this.currentIndex = 0;\n this.length = 1;\n }\n\n this.state = data;\n\n // Update location if URL is provided\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n\n // Trigger URL change callback for dynamic HTML loading\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n\n // Note: replaceState does NOT dispatch popstate event (per HTML spec)\n }\n}\n\nclass NavigatorBase implements Navigator {\n userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';\n language: string = 'en-US';\n languages: readonly string[] = ['en-US', 'en'];\n platform: string = 'Server';\n cookieEnabled: boolean = false;\n onLine: boolean = true;\n}\n\n// Simple event system for WindowBase\ninterface EventListener {\n type: string;\n listener: (event: any) => void;\n options?: boolean | AddEventListenerOptions;\n}\n\ninterface PopStateEvent {\n type: 'popstate';\n state: any;\n url?: string;\n}\n\nexport class WindowBase {\n // Suppress type errors for complex event handler types\n [key: string]: any;\n\n // Event system\n private _eventListeners: EventListener[] = [];\n // Properties\n readonly clientInformation: Navigator;\n readonly closed: boolean = false;\n readonly cookieStore: CookieStore = {} as CookieStore;\n readonly customElements: CustomElementRegistry = {} as CustomElementRegistry;\n readonly devicePixelRatio: number = 1;\n readonly document: Document;\n readonly event: Event | undefined = undefined;\n readonly external: External = {} as External;\n readonly frameElement: Element | null = null;\n readonly frames: WindowProxy = {} as WindowProxy;\n readonly history: History;\n readonly innerHeight: number = 768;\n readonly innerWidth: number = 1024;\n readonly length: number = 0;\n readonly locationbar: BarProp = {} as BarProp;\n readonly menubar: BarProp = {} as BarProp;\n name: string = '';\n readonly navigator: Navigator;\n ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null = null;\n ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;\n ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;\n onorientationchange: ((this: Window, ev: Event) => any) | null = null;\n opener: any = null;\n readonly orientation: number = 0;\n readonly originAgentCluster: boolean = false;\n readonly outerHeight: number = 768;\n readonly outerWidth: number = 1024;\n readonly pageXOffset: number = 0;\n readonly pageYOffset: number = 0;\n readonly parent: WindowProxy = {} as WindowProxy;\n readonly personalbar: BarProp = {} as BarProp;\n readonly screen: Screen = {} as Screen;\n readonly screenLeft: number = 0;\n readonly screenTop: number = 0;\n readonly screenX: number = 0;\n readonly screenY: number = 0;\n readonly scrollX: number = 0;\n readonly scrollY: number = 0;\n readonly scrollbars: BarProp = {} as BarProp;\n readonly self: Window & typeof globalThis = this as any;\n readonly speechSynthesis: SpeechSynthesis = {} as SpeechSynthesis;\n status: string = '';\n readonly statusbar: BarProp = {} as BarProp;\n readonly toolbar: BarProp = {} as BarProp;\n readonly top: WindowProxy | null = null;\n readonly visualViewport: VisualViewport | null = null;\n readonly window: Window & typeof globalThis = this as any;\n\n // Location property with getter/setter\n private _location: Location;\n get location(): Location {\n return this._location;\n }\n set location(href: string | Location) {\n if (typeof href === 'string') {\n this._location.href = href;\n } else {\n this._location.href = href.href;\n }\n }\n\n // Global constructors\n Node = NodeBase;\n Element = ElementBase;\n HTMLElement = ElementBase;\n Event = class Event { };\n PopStateEvent = class PopStateEvent extends this.Event { };\n IntersectionObserver = class IntersectionObserver { };\n NodeFilter = class NodeFilter { };\n DocumentFragment = class DocumentFragment { };\n HTMLMetaElement = HTMLMetaElement;\n HTMLCanvasElement = HTMLCanvasElement;\n CanvasRenderingContext2D = class CanvasRenderingContext2D { };\n CanvasPattern = class CanvasPattern { };\n CanvasGradient = class CanvasGradient { };\n Path2D = class Path2D { };\n ImageData = class ImageData { };\n\n // HTML element constructors\n HTMLAnchorElement = HTMLAnchorElement;\n HTMLBodyElement = HTMLBodyElement;\n HTMLButtonElement = HTMLButtonElement;\n HTMLDivElement = HTMLDivElement;\n HTMLH1Element = HTMLH1Element;\n HTMLHeadElement = HTMLHeadElement;\n HTMLHtmlElement = HTMLHtmlElement;\n HTMLImgElement = HTMLImgElement;\n HTMLInputElement = HTMLInputElement;\n HTMLPElement = HTMLPElement;\n HTMLSpanElement = HTMLSpanElement;\n HTMLTitleElement = HTMLTitleElement;\n HTMLLinkElement = HTMLLinkElement;\n HTMLScriptElement = HTMLScriptElement;\n HTMLStyleElement = HTMLStyleElement;\n HTMLFormElement = HTMLFormElement;\n HTMLTableElement = HTMLTableElement;\n HTMLUListElement = HTMLUListElement;\n HTMLOListElement = HTMLOListElement;\n HTMLLIElement = HTMLLIElement;\n HTMLTemplateElement = HTMLTemplateElement;\n HTMLTheadElement = HTMLTheadElement;\n HTMLTfootElement = HTMLTfootElement;\n HTMLTrElement = HTMLTrElement;\n HTMLTdElement = HTMLTdElement;\n HTMLThElement = HTMLThElement;\n HTMLCaptionElement = HTMLCaptionElement;\n HTMLTbodyElement = HTMLTbodyElement;\n\n constructor(document?: Document, initialUrl?: string) {\n this.document = document || new DocumentBase();\n \n // Set window reference in document for load event\n if (this.document && (this.document as any).setWindow) {\n (this.document as any).setWindow(this);\n }\n \n this._location = new LocationBase(initialUrl);\n this.history = new HistoryBase(this);\n this.navigator = new NavigatorBase();\n this.clientInformation = this.navigator;\n\n // Return a Proxy to handle the [index: number]: Window signature\n return new Proxy(this, {\n get(target: WindowBase, prop: string | symbol): any {\n // Handle numeric indices - return the window itself\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return target;\n }\n // Return the actual property\n return (target as any)[prop];\n },\n\n set(target: WindowBase, prop: string | symbol, value: any): boolean {\n // Handle numeric indices - ignore setting\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return true;\n }\n // Set the actual property\n (target as any)[prop] = value;\n return true;\n },\n\n has(target: WindowBase, prop: string | symbol): boolean {\n // Handle numeric indices\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return true;\n }\n // Check if property exists\n return prop in target;\n },\n\n ownKeys(target: WindowBase): ArrayLike<string | symbol> {\n // Get all own keys plus numeric indices for length\n const keys = Object.getOwnPropertyNames(target);\n // Add numeric indices based on length property\n for (let i = 0; i < target.length; i++) {\n keys.push(i.toString());\n }\n return keys;\n },\n\n getOwnPropertyDescriptor(target: WindowBase, prop: string | symbol): PropertyDescriptor | undefined {\n // Handle numeric indices\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return {\n enumerable: true,\n configurable: true,\n value: target\n };\n }\n // Return actual property descriptor\n return Object.getOwnPropertyDescriptor(target, prop);\n }\n });\n }\n\n // Window methods - all with empty implementations for server-side\n alert(message?: any): void { }\n\n blur(): void { }\n\n cancelIdleCallback(handle: number): void { }\n\n captureEvents(): void { }\n\n close(): void { }\n\n confirm(message?: string): boolean {\n return false;\n }\n\n focus(): void { }\n\n getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {\n return {} as CSSStyleDeclaration;\n }\n\n getSelection(): Selection | null {\n return null;\n }\n\n matchMedia(query: string): MediaQueryList {\n return {} as MediaQueryList;\n }\n\n moveBy(x: number, y: number): void { }\n\n moveTo(x: number, y: number): void { }\n\n open(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n return null;\n }\n\n postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;\n postMessage(message: any, options?: WindowPostMessageOptions): void;\n postMessage(message: any, targetOriginOrOptions?: string | WindowPostMessageOptions, transfer?: Transferable[]): void { }\n\n print(): void { }\n\n prompt(message?: string, _default?: string): string | null {\n return null;\n }\n\n releaseEvents(): void { }\n\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {\n return 0;\n }\n\n resizeBy(x: number, y: number): void { }\n\n resizeTo(width: number, height: number): void { }\n\n scroll(options?: ScrollToOptions): void;\n scroll(x: number, y: number): void;\n scroll(optionsOrX?: ScrollToOptions | number, y?: number): void { }\n\n scrollBy(options?: ScrollToOptions): void;\n scrollBy(x: number, y: number): void;\n scrollBy(optionsOrX?: ScrollToOptions | number, y?: number): void { }\n\n scrollTo(options?: ScrollToOptions): void;\n scrollTo(x: number, y: number): void;\n scrollTo(optionsOrX?: ScrollToOptions | number, y?: number): void { }\n\n stop(): void { }\n\n // Timer methods\n setTimeout(callback: Function, delay?: number, ...args: any[]): number {\n return setTimeout(callback, delay, ...args) as any;\n }\n\n clearTimeout(id: number): void {\n clearTimeout(id);\n }\n\n setInterval(callback: Function, delay?: number, ...args: any[]): number {\n return setInterval(callback, delay, ...args) as any;\n }\n\n clearInterval(id: number): void {\n clearInterval(id);\n }\n\n // Animation methods\n requestAnimationFrame(callback: FrameRequestCallback): number {\n return this.setTimeout(callback, 16) as number;\n }\n\n cancelAnimationFrame(id: number): void {\n this.clearTimeout(id);\n }\n\n // Event methods\n addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: any, listener: any, options?: any): void {\n // Support popstate, load, unload, and beforeunload events\n if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener.handleEvent,\n options\n });\n }\n }\n\n removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: any, listener: any, options?: any): void {\n if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {\n const targetListener = typeof listener === 'function' ? listener : listener.handleEvent;\n this._eventListeners = this._eventListeners.filter(\n eventListener => !(eventListener.type === type && eventListener.listener === targetListener)\n );\n }\n }\n\n dispatchEvent(event: any): boolean {\n const eventListeners = this._eventListeners.filter(listener => listener.type === event.type);\n\n for (const eventListener of eventListeners) {\n try {\n eventListener.listener.call(this, event);\n\n // Handle 'once' option\n if (eventListener.options && typeof eventListener.options === 'object' && eventListener.options.once) {\n this.removeEventListener(event.type, eventListener.listener);\n }\n } catch (error) {\n console.error('Error in event listener:', error);\n }\n }\n\n return true;\n }\n\n /**\n * Dispatch a popstate event to registered listeners\n */\n private dispatchPopStateEvent(state: any, url?: string): void {\n const popStateEvent: PopStateEvent = {\n type: 'popstate',\n state,\n url\n };\n\n this.dispatchEvent(popStateEvent);\n }\n\n // EventTarget methods (inherited)\n // These are already covered by addEventListener/removeEventListener/dispatchEvent\n\n // GlobalEventHandlers - empty implementations\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;\n onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null = null;\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onerror: OnErrorEventHandler = null;\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null = null;\n ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null = null;\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null = null;\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null = null;\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null;\n\n // WindowEventHandlers - empty implementations\n onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null = null;\n onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null = null;\n onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;\n onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;\n onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n ononline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;\n onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;\n onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null = null;\n onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;\n onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null = null;\n onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;\n onunload: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n\n // WindowLocalStorage\n readonly localStorage: Storage = {} as Storage;\n\n // WindowOrWorkerGlobalScope - empty implementations\n readonly caches: CacheStorage = {} as CacheStorage;\n readonly crossOriginIsolated: boolean = false;\n readonly crypto: Crypto = {} as Crypto;\n readonly indexedDB: IDBFactory = {} as IDBFactory;\n readonly isSecureContext: boolean = false;\n readonly origin: string = 'null';\n readonly performance: Performance = {} as Performance;\n\n atob(data: string): string { return ''; }\n btoa(data: string): string { return ''; }\n createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n createImageBitmap(...args: any[]): Promise<ImageBitmap> { return Promise.resolve({} as ImageBitmap); }\n\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> { return Promise.resolve({} as Response); }\n queueMicrotask(callback: VoidFunction): void { }\n reportError(e: any): void { }\n structuredClone(value: any, options?: StructuredSerializeOptions): any { return value; }\n\n // WindowSessionStorage\n readonly sessionStorage: Storage = {} as Storage;\n\n // AnimationFrameProvider - already implemented above\n\n // Index signature - getter implementation\n [index: number]: Window;\n\n\n\n /**\n * Recursive HTML parsing\n */\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = this.document.createTextNode(remainingText);\n parent.appendChild(textNode);\n }\n break;\n }\n\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = this.document.createTextNode(textContent);\n parent.appendChild(textNode);\n }\n }\n\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n if (tagContent.startsWith('/')) {\n position = tagEnd + 1;\n break;\n }\n\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n const attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1).replace('/', '');\n\n const element = this.document.createElement(tagName.toLowerCase());\n\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Handle special HTML structure tags\n if (tagName.toLowerCase() === 'html') {\n // Replace documentElement\n (this.document as any).documentElement = element;\n this.document.appendChild(element);\n } else if (tagName.toLowerCase() === 'head') {\n (this.document as any).head = element;\n if (this.document.documentElement) {\n this.document.documentElement.appendChild(element);\n } else {\n parent.appendChild(element);\n }\n } else if (tagName.toLowerCase() === 'body') {\n (this.document as any).body = element;\n if (this.document.documentElement) {\n this.document.documentElement.appendChild(element);\n } else {\n parent.appendChild(element);\n }\n } else {\n parent.appendChild(element);\n }\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) return -1;\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n depth--;\n if (depth === 0) return nextClose;\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Updated regex to handle hyphenated attribute names like dr-for-of, data-bind, etc.\n const attrRegex = /([\\w:-]+)(?:\\s*=\\s*(['\"])(.*?)\\2)?/g;\n let match;\n\n while ((match = attrRegex.exec(attributeString)) !== null) {\n const name = match[1];\n let value = match[3] || ''; // match[3] is the content between quotes\n element.setAttribute(name, value);\n }\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Clear current document content\n */\n private clearDocumentContent(): void {\n const doc = this.document as any;\n\n // Clear head content\n if (doc.head) {\n while (doc.head.firstChild) {\n doc.head.removeChild(doc.head.firstChild);\n }\n }\n\n // Clear body content\n if (doc.body) {\n while (doc.body.firstChild) {\n doc.body.removeChild(doc.body.firstChild);\n }\n }\n }\n\n\n}"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["// import { Window, Location, History, Navigator } from './Window';\n// import { CustomElementRegistry } from './CustomElementRegistry';\n// import { Document } from '../node/Document';\nimport { DocumentBase } from '../node/DocumentBase';\nimport { NodeBase } from '../node/NodeBase';\nimport { ElementBase } from '../node/elements/ElementBase';\n\n// Import all element classes\nimport {\n HTMLElement,\n HTMLElementBase,\n HTMLAnchorElement,\n HTMLAreaElement,\n HTMLAudioElement,\n HTMLBaseElement,\n HTMLBodyElement,\n HTMLButtonElement,\n HTMLCanvasElement,\n HTMLCaptionElement,\n HTMLDataElement,\n HTMLDataListElement,\n HTMLDetailsElement,\n HTMLDialogElement,\n HTMLDivElement,\n HTMLDListElement,\n HTMLEmbedElement,\n HTMLFieldSetElement,\n HTMLFormElement,\n HTMLH1Element,\n HTMLHeadElement,\n HTMLHRElement,\n HTMLHtmlElement,\n HTMLIFrameElement,\n HTMLImgElement,\n HTMLInputElement,\n HTMLLabelElement,\n HTMLLegendElement,\n HTMLLIElement,\n HTMLLinkElement,\n HTMLMapElement,\n HTMLMetaElement,\n HTMLMeterElement,\n HTMLModElement,\n HTMLObjectElement,\n HTMLOListElement,\n HTMLOptGroupElement,\n HTMLOptionElement,\n HTMLOutputElement,\n HTMLPElement,\n HTMLParamElement,\n HTMLPictureElement,\n HTMLPreElement,\n HTMLProgressElement,\n HTMLQuoteElement,\n HTMLScriptElement,\n HTMLSelectElement,\n HTMLSlotElement,\n HTMLSourceElement,\n HTMLSpanElement,\n HTMLStyleElement,\n HTMLTableElement,\n HTMLTbodyElement,\n HTMLTdElement,\n HTMLTemplateElement,\n HTMLTextAreaElement,\n HTMLTfootElement,\n HTMLTheadElement,\n HTMLThElement,\n HTMLTimeElement,\n HTMLTitleElement,\n HTMLTrackElement,\n HTMLTrElement,\n HTMLUListElement,\n HTMLVideoElement\n} from '../node/elements';\nimport { CustomElementRegistryImp } from './CustomElementRegistryImp';\n\nclass LocationBase implements Location {\n private _href: string = 'about:blank';\n private _protocol: string = 'about:';\n private _host: string = '';\n private _hostname: string = '';\n private _port: string = '';\n private _pathname: string = 'blank';\n private _search: string = '';\n private _hash: string = '';\n private _origin: string = 'null';\n private urlChangeCallback?: (url: string) => void;\n\n constructor(initialUrl: string = 'about:blank', urlChangeCallback?: (url: string) => void) {\n this.urlChangeCallback = urlChangeCallback;\n this.parseUrl(initialUrl);\n }\n\n ancestorOrigins: DOMStringList;\n\n get href(): string {\n return this._href;\n }\n\n set href(url: string) {\n const oldHref = this._href;\n this.parseUrl(url);\n\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n get protocol(): string {\n return this._protocol;\n }\n set protocol(value: string) {\n if (!value.endsWith(':')) value += ':';\n this._protocol = value;\n this.reconstructUrl();\n }\n\n get host(): string {\n return this._host;\n }\n set host(value: string) {\n this._host = value;\n const colonIndex = value.lastIndexOf(':');\n if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {\n this._hostname = value.substring(0, colonIndex);\n this._port = value.substring(colonIndex + 1);\n } else {\n this._hostname = value;\n this._port = '';\n }\n this.reconstructUrl();\n }\n\n get hostname(): string {\n return this._hostname;\n }\n set hostname(value: string) {\n this._hostname = value;\n this._host = this._port ? `${value}:${this._port}` : value;\n this.reconstructUrl();\n }\n\n get port(): string {\n return this._port;\n }\n set port(value: string) {\n this._port = value;\n this._host = value ? `${this._hostname}:${value}` : this._hostname;\n this.reconstructUrl();\n }\n\n get pathname(): string {\n return this._pathname;\n }\n set pathname(value: string) {\n if (!value.startsWith('/')) value = '/' + value;\n this._pathname = value;\n this.reconstructUrl();\n }\n\n get search(): string {\n return this._search;\n }\n set search(value: string) {\n if (value && !value.startsWith('?')) value = '?' + value;\n this._search = value;\n this.reconstructUrl();\n }\n\n get hash(): string {\n return this._hash;\n }\n set hash(value: string) {\n if (value && !value.startsWith('#')) value = '#' + value;\n this._hash = value;\n this.reconstructUrl();\n }\n\n get origin(): string {\n return this._origin;\n }\n\n assign(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n replace(url: string): void {\n this.assign(url);\n }\n\n reload(_forcedReload?: boolean): void {}\n\n toString(): string {\n return this._href;\n }\n\n private parseUrl(url: string): void {\n try {\n let parsedUrl: URL;\n if (url.startsWith('//')) {\n parsedUrl = new URL(this._protocol + url);\n } else if (url.startsWith('/')) {\n parsedUrl = new URL(url, `${this._protocol}//${this._host}`);\n } else if (url.includes('://')) {\n parsedUrl = new URL(url);\n } else {\n const base = `${this._protocol}//${this._host}${this._pathname}`;\n parsedUrl = new URL(url, base);\n }\n this._href = parsedUrl.href;\n this._protocol = parsedUrl.protocol;\n this._host = parsedUrl.host;\n this._hostname = parsedUrl.hostname;\n this._port = parsedUrl.port;\n this._pathname = parsedUrl.pathname;\n this._search = parsedUrl.search;\n this._hash = parsedUrl.hash;\n this._origin = parsedUrl.origin;\n } catch (e) {\n if (url === 'about:blank') {\n this._href = 'about:blank';\n this._protocol = 'about:';\n this._host = '';\n this._hostname = '';\n this._port = '';\n this._pathname = 'blank';\n this._search = '';\n this._hash = '';\n this._origin = 'null';\n }\n }\n }\n\n private reconstructUrl(): void {\n try {\n let url = this._protocol;\n if (this._protocol !== 'about:' && this._protocol !== 'data:') {\n url += '//';\n if (this._host) url += this._host;\n }\n url += this._pathname;\n url += this._search;\n url += this._hash;\n const testUrl = new URL(url);\n this._href = testUrl.href;\n this._origin = testUrl.origin;\n } catch (e) {}\n }\n}\n\nclass HistoryBase implements History {\n length: number = 1;\n state: any = null;\n private window: WindowBase;\n private historyStack: Array<{ state: any; title: string; url?: string }> = [];\n private currentIndex: number = -1;\n\n constructor(window: WindowBase) {\n this.window = window;\n }\n\n scrollRestoration: ScrollRestoration;\n\n back(): void {\n this.go(-1);\n }\n forward(): void {\n this.go(1);\n }\n go(delta?: number): void {\n if (!delta || this.historyStack.length === 0) return;\n const newIndex = this.currentIndex + delta;\n if (newIndex >= 0 && newIndex < this.historyStack.length) {\n this.currentIndex = newIndex;\n const entry = this.historyStack[this.currentIndex];\n this.state = entry.state;\n if (entry.url && this.window.location) {\n (this.window.location as any)._href = entry.url;\n (this.window.location as any).parseUrl(entry.url);\n }\n (this.window as any).dispatchPopStateEvent(entry.state, entry.url);\n }\n }\n\n pushState(data: any, title: string, url?: string): void {\n this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);\n this.historyStack.push({ state: data, title, url });\n this.currentIndex = this.historyStack.length - 1;\n this.state = data;\n this.length = this.historyStack.length;\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n }\n\n replaceState(data: any, title: string, url?: string): void {\n if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {\n this.historyStack[this.currentIndex] = { state: data, title, url };\n } else {\n this.historyStack = [{ state: data, title, url }];\n this.currentIndex = 0;\n this.length = 1;\n }\n this.state = data;\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n }\n}\n\nclass NavigatorBase implements Navigator {\n clipboard: Clipboard;\n credentials: CredentialsContainer;\n doNotTrack: string;\n geolocation: Geolocation;\n login: NavigatorLogin;\n maxTouchPoints: number;\n mediaCapabilities: MediaCapabilities;\n mediaDevices: MediaDevices;\n mediaSession: MediaSession;\n permissions: Permissions;\n serviceWorker: ServiceWorkerContainer;\n userActivation: UserActivation;\n wakeLock: WakeLock;\n canShare(data?: ShareData): boolean {\n throw new Error('Method not implemented.');\n }\n getGamepads(): (Gamepad | null)[] {\n throw new Error('Method not implemented.');\n }\n requestMIDIAccess(options?: MIDIOptions): Promise<MIDIAccess> {\n throw new Error('Method not implemented.');\n }\n requestMediaKeySystemAccess(keySystem: unknown, supportedConfigurations: unknown): Promise<MediaKeySystemAccess> {\n throw new Error('Method not implemented.');\n }\n sendBeacon(url: string | URL, data?: BodyInit | null): boolean {\n throw new Error('Method not implemented.');\n }\n share(data?: ShareData): Promise<void> {\n throw new Error('Method not implemented.');\n }\n vibrate(pattern: unknown): boolean {\n throw new Error('Method not implemented.');\n }\n webdriver: boolean;\n clearAppBadge(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n setAppBadge(contents?: number): Promise<void> {\n throw new Error('Method not implemented.');\n }\n hardwareConcurrency: number;\n registerProtocolHandler(scheme: string, url: string | URL): void {\n throw new Error('Method not implemented.');\n }\n appCodeName: string;\n appName: string;\n appVersion: string;\n product: string;\n productSub: string;\n vendor: string;\n vendorSub: string;\n locks: LockManager;\n mimeTypes: MimeTypeArray;\n pdfViewerEnabled: boolean;\n plugins: PluginArray;\n javaEnabled(): boolean {\n throw new Error('Method not implemented.');\n }\n storage: StorageManager;\n userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';\n language: string = 'en-US';\n languages: readonly string[] = ['en-US', 'en'];\n platform: string = 'Server';\n cookieEnabled: boolean = false;\n onLine: boolean = true;\n}\n\ninterface WindowEventListener {\n type: string;\n listener: (event: any) => void;\n options?: any;\n}\n\nexport class WindowBase implements Window {\n [key: string]: any;\n private _eventListeners: WindowEventListener[] = [];\n private _timers: Set<number> = new Set();\n private _intervals: Set<number> = new Set();\n private _animationFrames: Set<number> = new Set();\n readonly clientInformation: Navigator;\n private _closed: boolean = false;\n\n get closed(): boolean {\n return this._closed;\n }\n\n readonly cookieStore: any = {};\n readonly customElements: CustomElementRegistry;\n readonly devicePixelRatio: number = 1;\n readonly document: Document;\n readonly history: History;\n readonly navigator: Navigator;\n readonly self: any = this;\n readonly window: any = this;\n\n private _location: Location;\n get location(): Location {\n return this._location;\n }\n set location(href: string | Location) {\n if (typeof href === 'string') this._location.href = href;\n else this._location.href = href.href;\n }\n\n // Global constructors\n Event = class Event {\n constructor(public type: string) {}\n };\n CustomEvent = class CustomEvent extends this.Event {\n constructor(\n type: string,\n public detail: any\n ) {\n super(type);\n }\n };\n\n // All HTML element constructors\n Node = NodeBase;\n Element = ElementBase;\n HTMLElement = HTMLElement;\n HTMLAnchorElement = HTMLAnchorElement;\n HTMLAreaElement = HTMLAreaElement;\n HTMLAudioElement = HTMLAudioElement;\n HTMLBaseElement = HTMLBaseElement;\n HTMLBodyElement = HTMLBodyElement;\n HTMLButtonElement = HTMLButtonElement;\n HTMLCanvasElement = HTMLCanvasElement;\n HTMLCaptionElement = HTMLCaptionElement;\n HTMLDataElement = HTMLDataElement;\n HTMLDataListElement = HTMLDataListElement;\n HTMLDetailsElement = HTMLDetailsElement;\n HTMLDialogElement = HTMLDialogElement;\n HTMLDivElement = HTMLDivElement;\n HTMLDListElement = HTMLDListElement;\n HTMLEmbedElement = HTMLEmbedElement;\n HTMLFieldSetElement = HTMLFieldSetElement;\n HTMLFormElement = HTMLFormElement;\n HTMLH1Element = HTMLH1Element;\n HTMLHeadElement = HTMLHeadElement;\n HTMLHRElement = HTMLHRElement;\n HTMLHtmlElement = HTMLHtmlElement;\n HTMLIFrameElement = HTMLIFrameElement;\n HTMLImgElement = HTMLImgElement;\n HTMLInputElement = HTMLInputElement;\n HTMLLabelElement = HTMLLabelElement;\n HTMLLegendElement = HTMLLegendElement;\n HTMLLIElement = HTMLLIElement;\n HTMLLinkElement = HTMLLinkElement;\n HTMLMapElement = HTMLMapElement;\n HTMLMetaElement = HTMLMetaElement;\n HTMLMeterElement = HTMLMeterElement;\n HTMLModElement = HTMLModElement;\n HTMLObjectElement = HTMLObjectElement;\n HTMLOListElement = HTMLOListElement;\n HTMLOptGroupElement = HTMLOptGroupElement;\n HTMLOptionElement = HTMLOptionElement;\n HTMLOutputElement = HTMLOutputElement;\n HTMLPElement = HTMLPElement;\n HTMLParamElement = HTMLParamElement;\n HTMLPictureElement = HTMLPictureElement;\n HTMLPreElement = HTMLPreElement;\n HTMLProgressElement = HTMLProgressElement;\n HTMLQuoteElement = HTMLQuoteElement;\n HTMLScriptElement = HTMLScriptElement;\n HTMLSelectElement = HTMLSelectElement;\n HTMLSlotElement = HTMLSlotElement;\n HTMLSourceElement = HTMLSourceElement;\n HTMLSpanElement = HTMLSpanElement;\n HTMLStyleElement = HTMLStyleElement;\n HTMLTableElement = HTMLTableElement;\n HTMLTbodyElement = HTMLTbodyElement;\n HTMLTdElement = HTMLTdElement;\n HTMLTemplateElement = HTMLTemplateElement;\n HTMLTextAreaElement = HTMLTextAreaElement;\n HTMLTfootElement = HTMLTfootElement;\n HTMLTheadElement = HTMLTheadElement;\n HTMLThElement = HTMLThElement;\n HTMLTimeElement = HTMLTimeElement;\n HTMLTitleElement = HTMLTitleElement;\n HTMLTrackElement = HTMLTrackElement;\n HTMLTrElement = HTMLTrElement;\n HTMLUListElement = HTMLUListElement;\n HTMLVideoElement = HTMLVideoElement;\n\n // Type Aliases\n HTMLImageElement = HTMLImgElement;\n HTMLParagraphElement = HTMLPElement;\n HTMLHeadingElement = HTMLH1Element;\n HTMLTableSectionElement = HTMLTbodyElement;\n HTMLTableCellElement = HTMLTdElement;\n HTMLTableRowElement = HTMLTrElement;\n\n constructor(config?: { initialUrl?: string }) {\n const documentBase = new DocumentBase();\n if (documentBase && (documentBase as any).setWindow) {\n (documentBase as any).setWindow(this);\n }\n this._location = new LocationBase(config?.initialUrl);\n documentBase.setLocation(this._location);\n this.document = documentBase as unknown as Document;\n const customElementRegistryImp = new CustomElementRegistryImp();\n customElementRegistryImp.setWindow(this);\n this.customElements = customElementRegistryImp as unknown as CustomElementRegistry;\n this.history = new HistoryBase(this);\n this.navigator = new NavigatorBase();\n this.clientInformation = this.navigator;\n }\n\n [index: number]: Window;\n event: Event;\n external: External;\n frameElement: Element;\n frames: Window;\n innerHeight: number;\n innerWidth: number;\n length: number;\n locationbar: BarProp;\n menubar: BarProp;\n name: string;\n ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any;\n ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any;\n ondeviceorientationabsolute: (this: Window, ev: DeviceOrientationEvent) => any;\n onorientationchange: (this: Window, ev: Event) => any;\n opener: any;\n orientation: number;\n originAgentCluster: boolean;\n outerHeight: number;\n outerWidth: number;\n pageXOffset: number;\n pageYOffset: number;\n parent: Window;\n personalbar: BarProp;\n screen: Screen;\n screenLeft: number;\n screenTop: number;\n screenX: number;\n screenY: number;\n scrollX: number;\n scrollY: number;\n scrollbars: BarProp;\n speechSynthesis: SpeechSynthesis;\n status: string;\n statusbar: BarProp;\n toolbar: BarProp;\n top: Window;\n visualViewport: VisualViewport;\n blur(): void {\n throw new Error('Method not implemented.');\n }\n cancelIdleCallback(handle: number): void {\n throw new Error('Method not implemented.');\n }\n captureEvents(): void {\n throw new Error('Method not implemented.');\n }\n confirm(message?: string): boolean {\n throw new Error('Method not implemented.');\n }\n focus(): void {\n throw new Error('Method not implemented.');\n }\n getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {\n throw new Error('Method not implemented.');\n }\n getSelection(): Selection | null {\n throw new Error('Method not implemented.');\n }\n matchMedia(query: string): MediaQueryList {\n throw new Error('Method not implemented.');\n }\n moveBy(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n moveTo(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n open(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n throw new Error('Method not implemented.');\n }\n postMessage(message: unknown, targetOrigin?: unknown, transfer?: unknown): void {\n throw new Error('Method not implemented.');\n }\n print(): void {\n throw new Error('Method not implemented.');\n }\n prompt(message?: string, _default?: string): string | null {\n throw new Error('Method not implemented.');\n }\n releaseEvents(): void {\n throw new Error('Method not implemented.');\n }\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {\n throw new Error('Method not implemented.');\n }\n resizeBy(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n resizeTo(width: number, height: number): void {\n throw new Error('Method not implemented.');\n }\n scroll(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n scrollBy(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n scrollTo(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n stop(): void {\n throw new Error('Method not implemented.');\n }\n cancelAnimationFrame(handle: number): void {\n throw new Error('Method not implemented.');\n }\n requestAnimationFrame(callback: FrameRequestCallback): number {\n throw new Error('Method not implemented.');\n }\n onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onauxclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;\n onbeforematch: (this: GlobalEventHandlers, ev: Event) => any;\n onbeforetoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n oncancel: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplay: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;\n onchange: (this: GlobalEventHandlers, ev: Event) => any;\n onclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onclose: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextlost: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextmenu: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oncontextrestored: (this: GlobalEventHandlers, ev: Event) => any;\n oncopy: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n oncuechange: (this: GlobalEventHandlers, ev: Event) => any;\n oncut: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;\n onemptied: (this: GlobalEventHandlers, ev: Event) => any;\n onended: (this: GlobalEventHandlers, ev: Event) => any;\n onerror: OnErrorEventHandlerNonNull;\n onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;\n ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oninput: (this: GlobalEventHandlers, ev: Event) => any;\n oninvalid: (this: GlobalEventHandlers, ev: Event) => any;\n onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onload: (this: GlobalEventHandlers, ev: Event) => any;\n onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadstart: (this: GlobalEventHandlers, ev: Event) => any;\n onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onpaste: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n onpause: (this: GlobalEventHandlers, ev: Event) => any;\n onplay: (this: GlobalEventHandlers, ev: Event) => any;\n onplaying: (this: GlobalEventHandlers, ev: Event) => any;\n onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerrawupdate: (this: GlobalEventHandlers, ev: Event) => any;\n onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onprogress: (this: GlobalEventHandlers, ev: ProgressEvent) => any;\n onratechange: (this: GlobalEventHandlers, ev: Event) => any;\n onreset: (this: GlobalEventHandlers, ev: Event) => any;\n onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onscroll: (this: GlobalEventHandlers, ev: Event) => any;\n onscrollend: (this: GlobalEventHandlers, ev: Event) => any;\n onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;\n onseeked: (this: GlobalEventHandlers, ev: Event) => any;\n onseeking: (this: GlobalEventHandlers, ev: Event) => any;\n onselect: (this: GlobalEventHandlers, ev: Event) => any;\n onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;\n onselectstart: (this: GlobalEventHandlers, ev: Event) => any;\n onslotchange: (this: GlobalEventHandlers, ev: Event) => any;\n onstalled: (this: GlobalEventHandlers, ev: Event) => any;\n onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;\n onsuspend: (this: GlobalEventHandlers, ev: Event) => any;\n ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;\n ontoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;\n onwaiting: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;\n onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;\n onafterprint: (this: WindowEventHandlers, ev: Event) => any;\n onbeforeprint: (this: WindowEventHandlers, ev: Event) => any;\n onbeforeunload: (this: WindowEventHandlers, ev: BeforeUnloadEvent) => any;\n ongamepadconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;\n ongamepaddisconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;\n onhashchange: (this: WindowEventHandlers, ev: HashChangeEvent) => any;\n onlanguagechange: (this: WindowEventHandlers, ev: Event) => any;\n onmessage: (this: WindowEventHandlers, ev: MessageEvent) => any;\n onmessageerror: (this: WindowEventHandlers, ev: MessageEvent) => any;\n onoffline: (this: WindowEventHandlers, ev: Event) => any;\n ononline: (this: WindowEventHandlers, ev: Event) => any;\n onpagehide: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;\n onpagereveal: (this: WindowEventHandlers, ev: PageRevealEvent) => any;\n onpageshow: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;\n onpageswap: (this: WindowEventHandlers, ev: PageSwapEvent) => any;\n onpopstate: (this: WindowEventHandlers, ev: PopStateEvent) => any;\n onrejectionhandled: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;\n onstorage: (this: WindowEventHandlers, ev: StorageEvent) => any;\n onunhandledrejection: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;\n onunload: (this: WindowEventHandlers, ev: Event) => any;\n localStorage: Storage;\n caches: CacheStorage;\n crossOriginIsolated: boolean;\n crypto: Crypto;\n indexedDB: IDBFactory;\n isSecureContext: boolean;\n origin: string;\n performance: Performance;\n atob(data: string): string {\n throw new Error('Method not implemented.');\n }\n btoa(data: string): string {\n throw new Error('Method not implemented.');\n }\n createImageBitmap(image: unknown, sx?: unknown, sy?: unknown, sw?: unknown, sh?: unknown, options?: unknown): Promise<ImageBitmap> {\n throw new Error('Method not implemented.');\n }\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n throw new Error('Method not implemented.');\n }\n queueMicrotask(callback: VoidFunction): void {\n throw new Error('Method not implemented.');\n }\n reportError(e: any): void {\n throw new Error('Method not implemented.');\n }\n structuredClone<T = any>(value: T, options?: StructuredSerializeOptions): T {\n throw new Error('Method not implemented.');\n }\n sessionStorage: Storage;\n\n alert(_message?: any): void {}\n close(): void {\n if (this._closed) return;\n this._closed = true;\n this._timers.forEach(id => clearTimeout(id));\n this._intervals.forEach(id => clearInterval(id));\n this._eventListeners.length = 0;\n }\n\n setTimeout(callback: Function, delay?: number, ...args: any[]): number {\n const id = setTimeout(() => {\n this._timers.delete(id as any);\n callback(...args);\n }, delay) as any;\n this._timers.add(id);\n return id;\n }\n clearTimeout(id: number): void {\n clearTimeout(id);\n this._timers.delete(id);\n }\n setInterval(callback: Function, delay?: number, ...args: any[]): number {\n const id = setInterval(callback, delay, ...args) as any;\n this._intervals.add(id);\n return id;\n }\n clearInterval(id: number): void {\n clearInterval(id);\n this._intervals.delete(id);\n }\n\n addEventListener(type: string, listener: any, options?: any): void {\n // Basic support for major window events\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener?.handleEvent,\n options\n });\n }\n\n removeEventListener(type: string, listener: any): void {\n const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;\n this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));\n }\n dispatchEvent(event: any): boolean {\n const type = typeof event === 'string' ? event : event.type;\n const listeners = [...this._eventListeners.filter(l => l.type === type)];\n\n for (const l of listeners) {\n try {\n l.listener.call(this, event);\n if (l.options?.once) {\n this.removeEventListener(type, l.listener);\n }\n } catch (e) {\n console.error(`Error in Window event listener for ${type}:`, e);\n }\n }\n return true;\n }\n\n private dispatchPopStateEvent(state: any, url?: string): void {\n this.dispatchEvent({ type: 'popstate', state, url });\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAA6B;AAC7B,sBAAyB;AACzB,yBAA4B;AAG5B,sBAkEO;AACP,sCAAyC;AAEzC,MAAM,aAAiC;AAAA,EAYrC,YAAY,aAAqB,eAAe,mBAA2C;AAX3F,SAAQ,QAAgB;AACxB,SAAQ,YAAoB;AAC5B,SAAQ,QAAgB;AACxB,SAAQ,YAAoB;AAC5B,SAAQ,QAAgB;AACxB,SAAQ,YAAoB;AAC5B,SAAQ,UAAkB;AAC1B,SAAQ,QAAgB;AACxB,SAAQ,UAAkB;AAIxB,SAAK,oBAAoB;AACzB,SAAK,SAAS,UAAU;AAAA,EAC1B;AAAA,EAIA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,KAAa;AACpB,UAAM,UAAU,KAAK;AACrB,SAAK,SAAS,GAAG;AAEjB,QAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,WAAK,kBAAkB,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,OAAe;AAC1B,QAAI,CAAC,MAAM,SAAS,GAAG,EAAG,UAAS;AACnC,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AACb,UAAM,aAAa,MAAM,YAAY,GAAG;AACxC,QAAI,eAAe,MAAM,aAAa,MAAM,YAAY,GAAG,GAAG;AAC5D,WAAK,YAAY,MAAM,UAAU,GAAG,UAAU;AAC9C,WAAK,QAAQ,MAAM,UAAU,aAAa,CAAC;AAAA,IAC7C,OAAO;AACL,WAAK,YAAY;AACjB,WAAK,QAAQ;AAAA,IACf;AACA,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,OAAe;AAC1B,SAAK,YAAY;AACjB,SAAK,QAAQ,KAAK,QAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK;AACrD,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AACb,SAAK,QAAQ,QAAQ,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;AACzD,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,OAAe;AAC1B,QAAI,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AAC1C,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,OAAO,OAAe;AACxB,QAAI,SAAS,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AACnD,SAAK,UAAU;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,OAAe;AACtB,QAAI,SAAS,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AACnD,SAAK,QAAQ;AACb,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,KAAmB;AACxB,UAAM,UAAU,KAAK;AACrB,SAAK,SAAS,GAAG;AACjB,QAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,WAAK,kBAAkB,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,QAAQ,KAAmB;AACzB,SAAK,OAAO,GAAG;AAAA,EACjB;AAAA,EAEA,OAAO,eAA+B;AAAA,EAAC;AAAA,EAEvC,WAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,SAAS,KAAmB;AAClC,QAAI;AACF,UAAI;AACJ,UAAI,IAAI,WAAW,IAAI,GAAG;AACxB,oBAAY,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,MAC1C,WAAW,IAAI,WAAW,GAAG,GAAG;AAC9B,oBAAY,IAAI,IAAI,KAAK,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,EAAE;AAAA,MAC7D,WAAW,IAAI,SAAS,KAAK,GAAG;AAC9B,oBAAY,IAAI,IAAI,GAAG;AAAA,MACzB,OAAO;AACL,cAAM,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,GAAG,KAAK,SAAS;AAC9D,oBAAY,IAAI,IAAI,KAAK,IAAI;AAAA,MAC/B;AACA,WAAK,QAAQ,UAAU;AACvB,WAAK,YAAY,UAAU;AAC3B,WAAK,QAAQ,UAAU;AACvB,WAAK,YAAY,UAAU;AAC3B,WAAK,QAAQ,UAAU;AACvB,WAAK,YAAY,UAAU;AAC3B,WAAK,UAAU,UAAU;AACzB,WAAK,QAAQ,UAAU;AACvB,WAAK,UAAU,UAAU;AAAA,IAC3B,SAAS,GAAG;AACV,UAAI,QAAQ,eAAe;AACzB,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAC7B,QAAI;AACF,UAAI,MAAM,KAAK;AACf,UAAI,KAAK,cAAc,YAAY,KAAK,cAAc,SAAS;AAC7D,eAAO;AACP,YAAI,KAAK,MAAO,QAAO,KAAK;AAAA,MAC9B;AACA,aAAO,KAAK;AACZ,aAAO,KAAK;AACZ,aAAO,KAAK;AACZ,YAAM,UAAU,IAAI,IAAI,GAAG;AAC3B,WAAK,QAAQ,QAAQ;AACrB,WAAK,UAAU,QAAQ;AAAA,IACzB,SAAS,GAAG;AAAA,IAAC;AAAA,EACf;AACF;AAEA,MAAM,YAA+B;AAAA,EAOnC,YAAY,QAAoB;AANhC,kBAAiB;AACjB,iBAAa;AAEb,SAAQ,eAAmE,CAAC;AAC5E,SAAQ,eAAuB;AAG7B,SAAK,SAAS;AAAA,EAChB;AAAA,EAIA,OAAa;AACX,SAAK,GAAG,EAAE;AAAA,EACZ;AAAA,EACA,UAAgB;AACd,SAAK,GAAG,CAAC;AAAA,EACX;AAAA,EACA,GAAG,OAAsB;AACvB,QAAI,CAAC,SAAS,KAAK,aAAa,WAAW,EAAG;AAC9C,UAAM,WAAW,KAAK,eAAe;AACrC,QAAI,YAAY,KAAK,WAAW,KAAK,aAAa,QAAQ;AACxD,WAAK,eAAe;AACpB,YAAM,QAAQ,KAAK,aAAa,KAAK,YAAY;AACjD,WAAK,QAAQ,MAAM;AACnB,UAAI,MAAM,OAAO,KAAK,OAAO,UAAU;AACrC,QAAC,KAAK,OAAO,SAAiB,QAAQ,MAAM;AAC5C,QAAC,KAAK,OAAO,SAAiB,SAAS,MAAM,GAAG;AAAA,MAClD;AACA,MAAC,KAAK,OAAe,sBAAsB,MAAM,OAAO,MAAM,GAAG;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,UAAU,MAAW,OAAe,KAAoB;AACtD,SAAK,eAAe,KAAK,aAAa,MAAM,GAAG,KAAK,eAAe,CAAC;AACpE,SAAK,aAAa,KAAK,EAAE,OAAO,MAAM,OAAO,IAAI,CAAC;AAClD,SAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,SAAK,QAAQ;AACb,SAAK,SAAS,KAAK,aAAa;AAChC,QAAI,OAAO,KAAK,OAAO,UAAU;AAC/B,YAAM,UAAW,KAAK,OAAO,SAAiB;AAC9C,MAAC,KAAK,OAAO,SAAiB,QAAQ;AACtC,MAAC,KAAK,OAAO,SAAiB,SAAS,GAAG;AAC1C,UAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,QAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,MAAW,OAAe,KAAoB;AACzD,QAAI,KAAK,gBAAgB,KAAK,KAAK,eAAe,KAAK,aAAa,QAAQ;AAC1E,WAAK,aAAa,KAAK,YAAY,IAAI,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,IACnE,OAAO;AACL,WAAK,eAAe,CAAC,EAAE,OAAO,MAAM,OAAO,IAAI,CAAC;AAChD,WAAK,eAAe;AACpB,WAAK,SAAS;AAAA,IAChB;AACA,SAAK,QAAQ;AACb,QAAI,OAAO,KAAK,OAAO,UAAU;AAC/B,YAAM,UAAW,KAAK,OAAO,SAAiB;AAC9C,MAAC,KAAK,OAAO,SAAiB,QAAQ;AACtC,MAAC,KAAK,OAAO,SAAiB,SAAS,GAAG;AAC1C,UAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,QAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,cAAmC;AAAA,EAAzC;AA6DE,qBAAoB;AACpB,oBAAmB;AACnB,qBAA+B,CAAC,SAAS,IAAI;AAC7C,oBAAmB;AACnB,yBAAyB;AACzB,kBAAkB;AAAA;AAAA,EApDlB,SAAS,MAA2B;AAClC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,cAAkC;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,kBAAkB,SAA4C;AAC5D,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,4BAA4B,WAAoB,yBAAiE;AAC/G,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,WAAW,KAAmB,MAAiC;AAC7D,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,MAAM,MAAiC;AACrC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,QAAQ,SAA2B;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEA,gBAA+B;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,YAAY,UAAkC;AAC5C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEA,wBAAwB,QAAgB,KAAyB;AAC/D,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAYA,cAAuB;AACrB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAQF;AAQO,MAAM,WAA6B;AAAA,EAwHxC,YAAY,QAAkC;AAtH9C,SAAQ,kBAAyC,CAAC;AAClD,SAAQ,UAAuB,oBAAI,IAAI;AACvC,SAAQ,aAA0B,oBAAI,IAAI;AAC1C,SAAQ,mBAAgC,oBAAI,IAAI;AAEhD,SAAQ,UAAmB;AAM3B,SAAS,cAAmB,CAAC;AAE7B,SAAS,mBAA2B;AAIpC,SAAS,OAAY;AACrB,SAAS,SAAc;AAYvB;AAAA,iBAAQ,MAAM,MAAM;AAAA,MAClB,YAAmB,MAAc;AAAd;AAAA,MAAe;AAAA,IACpC;AACA,uBAAc,MAAM,oBAAoB,KAAK,MAAM;AAAA,MACjD,YACE,MACO,QACP;AACA,cAAM,IAAI;AAFH;AAAA,MAGT;AAAA,IACF;AAGA;AAAA,gBAAO;AACP,mBAAU;AACV,uBAAc;AACd,6BAAoB;AACpB,2BAAkB;AAClB,4BAAmB;AACnB,2BAAkB;AAClB,2BAAkB;AAClB,6BAAoB;AACpB,6BAAoB;AACpB,8BAAqB;AACrB,2BAAkB;AAClB,+BAAsB;AACtB,8BAAqB;AACrB,6BAAoB;AACpB,0BAAiB;AACjB,4BAAmB;AACnB,4BAAmB;AACnB,+BAAsB;AACtB,2BAAkB;AAClB,yBAAgB;AAChB,2BAAkB;AAClB,yBAAgB;AAChB,2BAAkB;AAClB,6BAAoB;AACpB,0BAAiB;AACjB,4BAAmB;AACnB,4BAAmB;AACnB,6BAAoB;AACpB,yBAAgB;AAChB,2BAAkB;AAClB,0BAAiB;AACjB,2BAAkB;AAClB,4BAAmB;AACnB,0BAAiB;AACjB,6BAAoB;AACpB,4BAAmB;AACnB,+BAAsB;AACtB,6BAAoB;AACpB,6BAAoB;AACpB,wBAAe;AACf,4BAAmB;AACnB,8BAAqB;AACrB,0BAAiB;AACjB,+BAAsB;AACtB,4BAAmB;AACnB,6BAAoB;AACpB,6BAAoB;AACpB,2BAAkB;AAClB,6BAAoB;AACpB,2BAAkB;AAClB,4BAAmB;AACnB,4BAAmB;AACnB,4BAAmB;AACnB,yBAAgB;AAChB,+BAAsB;AACtB,+BAAsB;AACtB,4BAAmB;AACnB,4BAAmB;AACnB,yBAAgB;AAChB,2BAAkB;AAClB,4BAAmB;AACnB,4BAAmB;AACnB,yBAAgB;AAChB,4BAAmB;AACnB,4BAAmB;AAGnB;AAAA,4BAAmB;AACnB,gCAAuB;AACvB,8BAAqB;AACrB,mCAA0B;AAC1B,gCAAuB;AACvB,+BAAsB;AAGpB,UAAM,eAAe,IAAI,iCAAa;AACtC,QAAI,gBAAiB,aAAqB,WAAW;AACnD,MAAC,aAAqB,UAAU,IAAI;AAAA,IACtC;AACA,SAAK,YAAY,IAAI,aAAa,QAAQ,UAAU;AACpD,iBAAa,YAAY,KAAK,SAAS;AACvC,SAAK,WAAW;AAChB,UAAM,2BAA2B,IAAI,yDAAyB;AAC9D,6BAAyB,UAAU,IAAI;AACvC,SAAK,iBAAiB;AACtB,SAAK,UAAU,IAAI,YAAY,IAAI;AACnC,SAAK,YAAY,IAAI,cAAc;AACnC,SAAK,oBAAoB,KAAK;AAAA,EAChC;AAAA,EA7HA,IAAI,SAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAYA,IAAI,WAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,MAAyB;AACpC,QAAI,OAAO,SAAS,SAAU,MAAK,UAAU,OAAO;AAAA,QAC/C,MAAK,UAAU,OAAO,KAAK;AAAA,EAClC;AAAA,EAiJA,OAAa;AACX,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,mBAAmB,QAAsB;AACvC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,gBAAsB;AACpB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,QAAQ,SAA2B;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,QAAc;AACZ,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,iBAAiB,KAAc,WAAgD;AAC7E,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,eAAiC;AAC/B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,WAAW,OAA+B;AACxC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,OAAO,GAAW,GAAiB;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,OAAO,GAAW,GAAiB;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,KAAK,KAAoB,QAAiB,UAAuC;AAC/E,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,YAAY,SAAkB,cAAwB,UAA0B;AAC9E,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,QAAc;AACZ,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,OAAO,SAAkB,UAAkC;AACzD,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,gBAAsB;AACpB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,oBAAoB,UAA+B,SAAsC;AACvF,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,SAAS,GAAW,GAAiB;AACnC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,SAAS,OAAe,QAAsB;AAC5C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,OAAO,GAAa,GAAmB;AACrC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,SAAS,GAAa,GAAmB;AACvC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,SAAS,GAAa,GAAmB;AACvC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,OAAa;AACX,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,qBAAqB,QAAsB;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,sBAAsB,UAAwC;AAC5D,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAiIA,KAAK,MAAsB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,KAAK,MAAsB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,kBAAkB,OAAgB,IAAc,IAAc,IAAc,IAAc,SAAyC;AACjI,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,MAAM,OAA0B,MAAuC;AACrE,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,eAAe,UAA8B;AAC3C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,YAAY,GAAc;AACxB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,gBAAyB,OAAU,SAAyC;AAC1E,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAGA,MAAM,UAAsB;AAAA,EAAC;AAAA,EAC7B,QAAc;AACZ,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AACf,SAAK,QAAQ,QAAQ,QAAM,aAAa,EAAE,CAAC;AAC3C,SAAK,WAAW,QAAQ,QAAM,cAAc,EAAE,CAAC;AAC/C,SAAK,gBAAgB,SAAS;AAAA,EAChC;AAAA,EAEA,WAAW,UAAoB,UAAmB,MAAqB;AACrE,UAAM,KAAK,WAAW,MAAM;AAC1B,WAAK,QAAQ,OAAO,EAAS;AAC7B,eAAS,GAAG,IAAI;AAAA,IAClB,GAAG,KAAK;AACR,SAAK,QAAQ,IAAI,EAAE;AACnB,WAAO;AAAA,EACT;AAAA,EACA,aAAa,IAAkB;AAC7B,iBAAa,EAAE;AACf,SAAK,QAAQ,OAAO,EAAE;AAAA,EACxB;AAAA,EACA,YAAY,UAAoB,UAAmB,MAAqB;AACtE,UAAM,KAAK,YAAY,UAAU,OAAO,GAAG,IAAI;AAC/C,SAAK,WAAW,IAAI,EAAE;AACtB,WAAO;AAAA,EACT;AAAA,EACA,cAAc,IAAkB;AAC9B,kBAAc,EAAE;AAChB,SAAK,WAAW,OAAO,EAAE;AAAA,EAC3B;AAAA,EAEA,iBAAiB,MAAc,UAAe,SAAqB;AAEjE,SAAK,gBAAgB,KAAK;AAAA,MACxB;AAAA,MACA,UAAU,OAAO,aAAa,aAAa,WAAW,UAAU;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB,MAAc,UAAqB;AACrD,UAAM,iBAAiB,OAAO,aAAa,aAAa,WAAW,UAAU;AAC7E,SAAK,kBAAkB,KAAK,gBAAgB,OAAO,OAAK,EAAE,EAAE,SAAS,QAAQ,EAAE,aAAa,eAAe;AAAA,EAC7G;AAAA,EACA,cAAc,OAAqB;AACjC,UAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACvD,UAAM,YAAY,CAAC,GAAG,KAAK,gBAAgB,OAAO,OAAK,EAAE,SAAS,IAAI,CAAC;AAEvE,eAAW,KAAK,WAAW;AACzB,UAAI;AACF,UAAE,SAAS,KAAK,MAAM,KAAK;AAC3B,YAAI,EAAE,SAAS,MAAM;AACnB,eAAK,oBAAoB,MAAM,EAAE,QAAQ;AAAA,QAC3C;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,MAAM,sCAAsC,IAAI,KAAK,CAAC;AAAA,MAChE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,sBAAsB,OAAY,KAAoB;AAC5D,SAAK,cAAc,EAAE,MAAM,YAAY,OAAO,IAAI,CAAC;AAAA,EACrD;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/window/index.js
CHANGED
|
@@ -17,13 +17,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
var window_exports = {};
|
|
19
19
|
__export(window_exports, {
|
|
20
|
-
History: () => import_Window.History,
|
|
21
|
-
Location: () => import_Window.Location,
|
|
22
|
-
Navigator: () => import_Window.Navigator,
|
|
23
|
-
Window: () => import_Window.Window,
|
|
24
20
|
WindowBase: () => import_WindowBase.WindowBase
|
|
25
21
|
});
|
|
26
22
|
module.exports = __toCommonJS(window_exports);
|
|
27
|
-
var import_Window = require("./Window");
|
|
28
23
|
var import_WindowBase = require("./WindowBase");
|
|
29
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/window/index.ts"],
|
|
4
|
-
"sourcesContent": ["export {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
4
|
+
"sourcesContent": ["export { WindowBase } from './WindowBase';"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA2B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/esm/DomParser.js
CHANGED
|
@@ -1,48 +1,78 @@
|
|
|
1
|
-
import { DocumentBase } from "./node/DocumentBase.js";
|
|
2
1
|
import { TextBase } from "./node/TextBase.js";
|
|
3
2
|
import { Comment } from "./node/Comment.js";
|
|
4
3
|
import { WindowBase } from "./window/WindowBase.js";
|
|
4
|
+
import { ElementBase } from "./node/elements/ElementBase.js";
|
|
5
|
+
import { ElementFactory } from "./factory/ElementFactory.js";
|
|
6
|
+
ElementBase.dependencies = {
|
|
7
|
+
ElementFactory,
|
|
8
|
+
TextBase,
|
|
9
|
+
Comment
|
|
10
|
+
};
|
|
5
11
|
class DomParser {
|
|
6
12
|
constructor(html, option) {
|
|
7
|
-
const
|
|
8
|
-
const windowBase = new WindowBase(document, option?.href);
|
|
13
|
+
const windowBase = new WindowBase({ initialUrl: option?.href });
|
|
9
14
|
this._window = windowBase;
|
|
10
|
-
this._document = document;
|
|
15
|
+
this._document = windowBase.document;
|
|
11
16
|
this.parseHTML(html);
|
|
12
17
|
this.setupDocumentReferences();
|
|
13
|
-
if (
|
|
14
|
-
|
|
18
|
+
if (this._document && this._document.simulateLoading) {
|
|
19
|
+
this._document.simulateLoading();
|
|
15
20
|
}
|
|
16
21
|
}
|
|
17
22
|
get window() {
|
|
23
|
+
if (!this._window) {
|
|
24
|
+
throw new Error("DomParser has been destroyed");
|
|
25
|
+
}
|
|
18
26
|
return this._window;
|
|
19
27
|
}
|
|
20
28
|
get document() {
|
|
29
|
+
if (!this._document) {
|
|
30
|
+
throw new Error("DomParser has been destroyed");
|
|
31
|
+
}
|
|
21
32
|
return this._document;
|
|
22
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Destroy the DomParser instance and free memory
|
|
36
|
+
*/
|
|
37
|
+
destroy() {
|
|
38
|
+
if (this._window) {
|
|
39
|
+
this._window.close();
|
|
40
|
+
this._window = null;
|
|
41
|
+
}
|
|
42
|
+
this._document = null;
|
|
43
|
+
}
|
|
23
44
|
/**
|
|
24
45
|
* Load new HTML content and replace the current document
|
|
25
46
|
*/
|
|
26
47
|
loadHTML(html) {
|
|
48
|
+
if (!this._document) {
|
|
49
|
+
throw new Error("DomParser has been destroyed");
|
|
50
|
+
}
|
|
27
51
|
this.clearDocument();
|
|
28
52
|
this.parseHTML(html);
|
|
29
53
|
this.setupDocumentReferences();
|
|
30
54
|
}
|
|
31
55
|
clearDocument() {
|
|
32
|
-
if (this.
|
|
33
|
-
|
|
34
|
-
|
|
56
|
+
if (!this._document) return;
|
|
57
|
+
if (this._document.head) {
|
|
58
|
+
while (this._document.head.firstChild) {
|
|
59
|
+
this._document.head.removeChild(this._document.head.firstChild);
|
|
35
60
|
}
|
|
36
61
|
}
|
|
37
|
-
if (this.
|
|
38
|
-
while (this.
|
|
39
|
-
this.
|
|
62
|
+
if (this._document.body) {
|
|
63
|
+
while (this._document.body.firstChild) {
|
|
64
|
+
this._document.body.removeChild(this._document.body.firstChild);
|
|
40
65
|
}
|
|
41
66
|
}
|
|
42
67
|
}
|
|
43
68
|
parseHTML(html) {
|
|
69
|
+
if (!this._document) {
|
|
70
|
+
throw new Error("DomParser has been destroyed");
|
|
71
|
+
}
|
|
44
72
|
if (!html.trim()) {
|
|
45
|
-
|
|
73
|
+
html = "<html><head></head><body></body></html>";
|
|
74
|
+
} else if (!/<html/i.test(html)) {
|
|
75
|
+
html = `<html><head></head><body>${html}</body></html>`;
|
|
46
76
|
}
|
|
47
77
|
this.parseHTMLString(html, this.document);
|
|
48
78
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/DomParser.ts"],
|
|
4
|
-
"sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window;\n private _document: Document;\n\n constructor(html: string, option?: DomParserOptions) {\n // Create a new document instance\n const document = new DocumentBase();\n\n // Create WindowBase instance with the document\n const windowBase = new WindowBase(document, option?.href);\n \n this._window = windowBase as unknown as Window;\n this._document = document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n \n // Set up document references after parsing\n this.setupDocumentReferences();\n \n // Simulate document loading process\n if (document && (document as any).simulateLoading) {\n (document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n return this._window;\n }\n\n get document(): Document {\n return this._document;\n }\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n // Clear current document content\n this.clearDocument();\n \n // Parse new HTML\n this.parseHTML(html);\n \n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n // Clear document body and head content while preserving structure\n if (this.document.head) {\n while (this.document.head.firstChild) {\n this.document.head.removeChild(this.document.head.firstChild);\n }\n }\n \n if (this.document.body) {\n while (this.document.body.firstChild) {\n this.document.body.removeChild(this.document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n // Simple HTML parsing implementation\n if (!html.trim()) {\n return;\n }\n\n // Basic HTML parsing - this is a simplified version\n // In a real implementation, you'd use a proper HTML parser\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n \n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n \n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n \n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n \n value = attributeString.substring(valueStart, position);\n \n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n \n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '"': '\"',\n ''': \"'\",\n '©': '\u00A9',\n '®': '\u00AE',\n '™': '\u2122',\n ' ': ' ',\n '…': '\u2026',\n '—': '\u2014',\n '–': '\u2013',\n '‘': '\\u2018',\n '’': '\\u2019',\n '“': '\"',\n '”': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, (entity) => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n \n // Handle numeric entities like ' "\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n \n // Handle hex entities like '\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n \n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n \n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n \n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n \n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n \n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n \n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n \n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n \n\n \n // For now, just use the elements as they are parsed\n // TODO: Implement proper DOM structure reorganization later\n \n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\nimport { ElementBase } from './node/elements/ElementBase';\nimport { ElementFactory } from './factory/ElementFactory';\n\n// Inject dependencies into ElementBase to break circular references\n// without using 'require' or 'global' injection magic.\nElementBase.dependencies = {\n ElementFactory,\n TextBase,\n Comment\n};\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window | null;\n private _document: Document | null;\n\n constructor(html: string, option?: DomParserOptions) {\n // Create WindowBase instance with the document\n const windowBase = new WindowBase({ initialUrl: option?.href });\n this._window = windowBase as unknown as Window;\n this._document = windowBase.document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n\n // Simulate document loading process\n if (this._document && (this._document as any).simulateLoading) {\n (this._document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n if (!this._window) {\n throw new Error('DomParser has been destroyed');\n }\n return this._window;\n }\n\n get document(): Document {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n return this._document;\n }\n\n /**\n * Destroy the DomParser instance and free memory\n */\n destroy(): void {\n if (this._window) {\n this._window.close();\n this._window = null;\n }\n\n this._document = null;\n }\n\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Clear current document content\n this.clearDocument();\n\n // Parse new HTML\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n if (!this._document) return;\n\n // Clear document body and head content while preserving structure\n if (this._document.head) {\n while (this._document.head.firstChild) {\n this._document.head.removeChild(this._document.head.firstChild);\n }\n }\n\n if (this._document.body) {\n while (this._document.body.firstChild) {\n this._document.body.removeChild(this._document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Ensure basic HTML structure if input is empty or lacks it\n if (!html.trim()) {\n html = '<html><head></head><body></body></html>';\n } else if (!/<html/i.test(html)) {\n // If it's just a fragment, we still need html/head/body for a full document\n // but only if it's not explicitly intended to be a fragment?\n // Actually, standard DOMParser.parseFromString always creates them.\n html = `<html><head></head><body>${html}</body></html>`;\n }\n\n // Basic HTML parsing - this is a simplified version\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n\n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n\n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n\n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n\n value = attributeString.substring(valueStart, position);\n\n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n\n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '"': '\"',\n ''': \"'\",\n '©': '\u00A9',\n '®': '\u00AE',\n '™': '\u2122',\n ' ': ' ',\n '…': '\u2026',\n '—': '\u2014',\n '–': '\u2013',\n '‘': '\\u2018',\n '’': '\\u2019',\n '“': '\"',\n '”': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n\n // Handle numeric entities like ' "\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Handle hex entities like '\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n\n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n\n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n\n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n\n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n\n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n\n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,8 +3,33 @@ class ElementFactory {
|
|
|
3
3
|
/**
|
|
4
4
|
* Creates an HTML element based on the tag name
|
|
5
5
|
*/
|
|
6
|
-
static createElement(tagName, ownerDocument) {
|
|
6
|
+
static createElement(tagName, ownerDocument, options) {
|
|
7
7
|
const normalizedTagName = tagName.toLowerCase();
|
|
8
|
+
const customElements = ownerDocument?.defaultView?.customElements;
|
|
9
|
+
const isAttribute = typeof options === "string" ? options : options?.is;
|
|
10
|
+
if (isAttribute && customElements && typeof customElements.get === "function") {
|
|
11
|
+
const CustomElementClass = customElements.get(isAttribute);
|
|
12
|
+
if (CustomElementClass) {
|
|
13
|
+
const element = new CustomElementClass();
|
|
14
|
+
element._tagName = tagName.toUpperCase();
|
|
15
|
+
element.nodeName = tagName.toUpperCase();
|
|
16
|
+
element._ownerDocument = ownerDocument;
|
|
17
|
+
if (element.setAttribute) {
|
|
18
|
+
element.setAttribute("is", isAttribute);
|
|
19
|
+
}
|
|
20
|
+
return element;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (normalizedTagName.includes("-") && customElements && typeof customElements.get === "function") {
|
|
24
|
+
const CustomElementClass = customElements.get(normalizedTagName);
|
|
25
|
+
if (CustomElementClass) {
|
|
26
|
+
const element = new CustomElementClass();
|
|
27
|
+
element._tagName = tagName.toUpperCase();
|
|
28
|
+
element.nodeName = tagName.toUpperCase();
|
|
29
|
+
element._ownerDocument = ownerDocument;
|
|
30
|
+
return element;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
8
33
|
for (const [tag, ElementClass] of Object.entries(htmlElements)) {
|
|
9
34
|
if (tag === normalizedTagName) {
|
|
10
35
|
return new ElementClass(tagName.toUpperCase(), ownerDocument);
|
|
@@ -44,11 +69,7 @@ class ElementFactory {
|
|
|
44
69
|
* Get all supported tag names
|
|
45
70
|
*/
|
|
46
71
|
static getSupportedTagNames() {
|
|
47
|
-
return [
|
|
48
|
-
...ElementFactory.getSupportedHTMLTagNames(),
|
|
49
|
-
...ElementFactory.getSupportedSVGTagNames(),
|
|
50
|
-
...ElementFactory.getSupportedMathMLTagNames()
|
|
51
|
-
];
|
|
72
|
+
return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];
|
|
52
73
|
}
|
|
53
74
|
}
|
|
54
75
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/factory/ElementFactory.ts"],
|
|
4
|
-
"sourcesContent": ["import { HTMLElementBase, HTMLGenericElement, htmlElements, svgElements, mathmlElements } from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n
|
|
5
|
-
"mappings": "AAAA,SAA0B,oBAAoB,cAAc,aAAa,sBAAsB;AAKxF,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { HTMLElementBase, HTMLGenericElement, htmlElements, svgElements, mathmlElements } from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n /**\n * Creates an HTML element based on the tag name\n */\n static createElement(tagName: string, ownerDocument?: any, options?: any): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n const customElements = (ownerDocument as any)?.defaultView?.customElements;\n\n // 1. Check for Customized Built-in Elements (is=\"\")\n const isAttribute = typeof options === 'string' ? options : options?.is;\n if (isAttribute && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(isAttribute);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n if (element.setAttribute) {\n element.setAttribute('is', isAttribute);\n }\n return element;\n }\n }\n\n // 2. Check for Autonomous Custom Elements\n if (normalizedTagName.includes('-') && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(normalizedTagName);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n return element;\n }\n }\n\n // 3. Check HTML elements\n\n for (const [tag, ElementClass] of Object.entries(htmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check SVG elements\n for (const [tag, ElementClass] of Object.entries(svgElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check MathML elements\n for (const [tag, ElementClass] of Object.entries(mathmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // For unknown elements, create a generic HTMLElement\n return new HTMLGenericElement(tagName.toUpperCase(), ownerDocument);\n }\n\n /**\n * Get all supported HTML tag names\n */\n static getSupportedHTMLTagNames(): string[] {\n return Object.keys(htmlElements);\n }\n\n /**\n * Get all supported SVG tag names\n */\n static getSupportedSVGTagNames(): string[] {\n return Object.keys(svgElements);\n }\n\n /**\n * Get all supported MathML tag names\n */\n static getSupportedMathMLTagNames(): string[] {\n return Object.keys(mathmlElements);\n }\n\n /**\n * Get all supported tag names\n */\n static getSupportedTagNames(): string[] {\n return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAA0B,oBAAoB,cAAc,aAAa,sBAAsB;AAKxF,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,iBAAkB,eAAuB,aAAa;AAG5D,UAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,QAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,YAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,YAAI,QAAQ,cAAc;AACxB,kBAAQ,aAAa,MAAM,WAAW;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,QAAI,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AACjG,YAAM,qBAAqB,eAAe,IAAI,iBAAiB;AAC/D,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAIA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,cAAc,GAAG;AAChE,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,WAAO,IAAI,mBAAmB,QAAQ,YAAY,GAAG,aAAa;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AAC1C,WAAO,OAAO,KAAK,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACzC,WAAO,OAAO,KAAK,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC5C,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACtC,WAAO,CAAC,GAAG,eAAe,yBAAyB,GAAG,GAAG,eAAe,wBAAwB,GAAG,GAAG,eAAe,2BAA2B,CAAC;AAAA,EACnJ;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { DomParser } from "./DomParser.js";
|
|
2
|
+
import { NodeIterator } from "./node/NodeIterator.js";
|
|
3
|
+
import { NodeFilter } from "./node/NodeFilter.js";
|
|
2
4
|
const parseHTML = (html, option) => {
|
|
3
5
|
const parser = new DomParser(html, option);
|
|
4
6
|
return parser.window;
|
|
@@ -9,6 +11,8 @@ var src_default = {
|
|
|
9
11
|
};
|
|
10
12
|
export {
|
|
11
13
|
DomParser,
|
|
14
|
+
NodeFilter,
|
|
15
|
+
NodeIterator,
|
|
12
16
|
src_default as default,
|
|
13
17
|
parseHTML
|
|
14
18
|
};
|