@dooboostore/dom-parser 1.0.1 → 1.0.2
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 +33 -12
- package/dist/cjs/DomParser.js.map +2 -2
- package/dist/cjs/node/DocumentBase.js +4 -0
- package/dist/cjs/node/DocumentBase.js.map +2 -2
- package/dist/cjs/node/elements/Element.js.map +1 -1
- package/dist/cjs/node/elements/ElementBase.js +12 -2
- package/dist/cjs/node/elements/ElementBase.js.map +2 -2
- package/dist/cjs/node/elements/HTMLElement.js.map +1 -1
- package/dist/cjs/node/elements/HTMLElementBase.js +154 -2
- package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/cjs/window/WindowBase.js +128 -7
- package/dist/cjs/window/WindowBase.js.map +2 -2
- package/dist/esm/DomParser.js +33 -12
- package/dist/esm/DomParser.js.map +2 -2
- package/dist/esm/node/DocumentBase.js +4 -0
- package/dist/esm/node/DocumentBase.js.map +2 -2
- package/dist/esm/node/elements/ElementBase.js +12 -2
- package/dist/esm/node/elements/ElementBase.js.map +2 -2
- package/dist/esm/node/elements/HTMLElementBase.js +154 -2
- package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/esm/window/WindowBase.js +128 -7
- package/dist/esm/window/WindowBase.js.map +2 -2
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js +504 -195
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +3 -3
- package/dist/types/DomParser.d.ts +4 -0
- package/dist/types/DomParser.d.ts.map +1 -1
- package/dist/types/node/DocumentBase.d.ts +2 -0
- package/dist/types/node/DocumentBase.d.ts.map +1 -1
- package/dist/types/node/elements/Element.d.ts +1 -0
- package/dist/types/node/elements/Element.d.ts.map +1 -1
- package/dist/types/node/elements/ElementBase.d.ts +2 -2
- package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLElement.d.ts +32 -1
- package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLElementBase.d.ts +11 -2
- package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
- package/dist/types/window/WindowBase.d.ts +12 -2
- package/dist/types/window/WindowBase.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js +504 -195
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +3 -3
- package/package.json +1 -1
- package/src/DomParser.ts +457 -436
- package/src/node/DocumentBase.ts +7 -2
- package/src/node/elements/Element.ts +24 -23
- package/src/node/elements/ElementBase.ts +50 -41
- package/src/node/elements/HTMLElement.ts +36 -1
- package/src/node/elements/HTMLElementBase.ts +191 -5
- package/src/window/WindowBase.ts +1128 -919
|
@@ -276,10 +276,14 @@ class NavigatorBase {
|
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
278
|
class WindowBase {
|
|
279
|
-
constructor(
|
|
279
|
+
constructor(config) {
|
|
280
280
|
// Event system
|
|
281
281
|
this._eventListeners = [];
|
|
282
|
-
|
|
282
|
+
// Timers and intervals tracking
|
|
283
|
+
this._timers = /* @__PURE__ */ new Set();
|
|
284
|
+
this._intervals = /* @__PURE__ */ new Set();
|
|
285
|
+
this._animationFrames = /* @__PURE__ */ new Set();
|
|
286
|
+
this._closed = false;
|
|
283
287
|
this.cookieStore = {};
|
|
284
288
|
this.customElements = {};
|
|
285
289
|
this.devicePixelRatio = 1;
|
|
@@ -504,11 +508,13 @@ class WindowBase {
|
|
|
504
508
|
this.performance = {};
|
|
505
509
|
// WindowSessionStorage
|
|
506
510
|
this.sessionStorage = {};
|
|
507
|
-
|
|
511
|
+
const documentBase = new DocumentBase();
|
|
508
512
|
if (this.document && this.document.setWindow) {
|
|
509
513
|
this.document.setWindow(this);
|
|
510
514
|
}
|
|
511
|
-
this._location = new LocationBase(initialUrl);
|
|
515
|
+
this._location = new LocationBase(config?.initialUrl);
|
|
516
|
+
documentBase.setLocation(this._location);
|
|
517
|
+
this.document = documentBase;
|
|
512
518
|
this.history = new HistoryBase(this);
|
|
513
519
|
this.navigator = new NavigatorBase();
|
|
514
520
|
this.clientInformation = this.navigator;
|
|
@@ -551,6 +557,9 @@ class WindowBase {
|
|
|
551
557
|
}
|
|
552
558
|
});
|
|
553
559
|
}
|
|
560
|
+
get closed() {
|
|
561
|
+
return this._closed;
|
|
562
|
+
}
|
|
554
563
|
get location() {
|
|
555
564
|
return this._location;
|
|
556
565
|
}
|
|
@@ -571,6 +580,103 @@ class WindowBase {
|
|
|
571
580
|
captureEvents() {
|
|
572
581
|
}
|
|
573
582
|
close() {
|
|
583
|
+
if (this._closed) return;
|
|
584
|
+
this._closed = true;
|
|
585
|
+
this._timers.forEach((id) => clearTimeout(id));
|
|
586
|
+
this._timers.clear();
|
|
587
|
+
this._intervals.forEach((id) => clearInterval(id));
|
|
588
|
+
this._intervals.clear();
|
|
589
|
+
this._animationFrames.forEach((id) => clearTimeout(id));
|
|
590
|
+
this._animationFrames.clear();
|
|
591
|
+
this._eventListeners.forEach((listener) => {
|
|
592
|
+
listener.listener = null;
|
|
593
|
+
});
|
|
594
|
+
this._eventListeners.length = 0;
|
|
595
|
+
this.onload = null;
|
|
596
|
+
this.onunload = null;
|
|
597
|
+
this.onbeforeunload = null;
|
|
598
|
+
this.onpopstate = null;
|
|
599
|
+
this.onerror = null;
|
|
600
|
+
this.onmessage = null;
|
|
601
|
+
this.onhashchange = null;
|
|
602
|
+
if (this.document) {
|
|
603
|
+
const doc = this.document;
|
|
604
|
+
if (doc.body) {
|
|
605
|
+
this.clearNodeRecursively(doc.body);
|
|
606
|
+
}
|
|
607
|
+
if (doc.head) {
|
|
608
|
+
this.clearNodeRecursively(doc.head);
|
|
609
|
+
}
|
|
610
|
+
if (doc.documentElement) {
|
|
611
|
+
this.clearNodeRecursively(doc.documentElement);
|
|
612
|
+
}
|
|
613
|
+
if (doc.setWindow) {
|
|
614
|
+
doc.setWindow(null);
|
|
615
|
+
}
|
|
616
|
+
if (doc._eventListeners) {
|
|
617
|
+
doc._eventListeners.forEach((listener) => {
|
|
618
|
+
listener.listener = null;
|
|
619
|
+
});
|
|
620
|
+
doc._eventListeners.length = 0;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
if (this.history) {
|
|
624
|
+
const hist = this.history;
|
|
625
|
+
if (hist.historyStack) {
|
|
626
|
+
hist.historyStack.forEach((entry) => {
|
|
627
|
+
entry.state = null;
|
|
628
|
+
});
|
|
629
|
+
hist.historyStack.length = 0;
|
|
630
|
+
}
|
|
631
|
+
hist.state = null;
|
|
632
|
+
hist.window = null;
|
|
633
|
+
}
|
|
634
|
+
if (this._location) {
|
|
635
|
+
this._location.urlChangeCallback = null;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Recursively clear a node and its children to prevent memory leaks
|
|
640
|
+
*/
|
|
641
|
+
clearNodeRecursively(node) {
|
|
642
|
+
if (!node) return;
|
|
643
|
+
while (node.firstChild) {
|
|
644
|
+
const child = node.firstChild;
|
|
645
|
+
node.removeChild(child);
|
|
646
|
+
this.clearNodeRecursively(child);
|
|
647
|
+
}
|
|
648
|
+
if (node._eventListeners) {
|
|
649
|
+
node._eventListeners.forEach((listener) => {
|
|
650
|
+
listener.listener = null;
|
|
651
|
+
});
|
|
652
|
+
node._eventListeners.length = 0;
|
|
653
|
+
}
|
|
654
|
+
try {
|
|
655
|
+
if (node.parentNode) {
|
|
656
|
+
node.parentNode = null;
|
|
657
|
+
}
|
|
658
|
+
} catch (e) {
|
|
659
|
+
}
|
|
660
|
+
try {
|
|
661
|
+
if (node.ownerDocument) {
|
|
662
|
+
node.ownerDocument = null;
|
|
663
|
+
}
|
|
664
|
+
} catch (e) {
|
|
665
|
+
}
|
|
666
|
+
if (node._childNodes) {
|
|
667
|
+
if (Array.isArray(node._childNodes)) {
|
|
668
|
+
node._childNodes = [];
|
|
669
|
+
} else if (node._childNodes instanceof Map) {
|
|
670
|
+
node._childNodes.clear();
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
if (node._attributes) {
|
|
674
|
+
if (Array.isArray(node._attributes)) {
|
|
675
|
+
node._attributes = [];
|
|
676
|
+
} else if (node._attributes instanceof Map) {
|
|
677
|
+
node._attributes.clear();
|
|
678
|
+
}
|
|
679
|
+
}
|
|
574
680
|
}
|
|
575
681
|
confirm(message) {
|
|
576
682
|
return false;
|
|
@@ -619,23 +725,38 @@ class WindowBase {
|
|
|
619
725
|
}
|
|
620
726
|
// Timer methods
|
|
621
727
|
setTimeout(callback, delay, ...args) {
|
|
622
|
-
|
|
728
|
+
if (this._closed) return 0;
|
|
729
|
+
const id = setTimeout(() => {
|
|
730
|
+
this._timers.delete(id);
|
|
731
|
+
callback(...args);
|
|
732
|
+
}, delay);
|
|
733
|
+
this._timers.add(id);
|
|
734
|
+
return id;
|
|
623
735
|
}
|
|
624
736
|
clearTimeout(id) {
|
|
625
737
|
clearTimeout(id);
|
|
738
|
+
this._timers.delete(id);
|
|
626
739
|
}
|
|
627
740
|
setInterval(callback, delay, ...args) {
|
|
628
|
-
|
|
741
|
+
if (this._closed) return 0;
|
|
742
|
+
const id = setInterval(callback, delay, ...args);
|
|
743
|
+
this._intervals.add(id);
|
|
744
|
+
return id;
|
|
629
745
|
}
|
|
630
746
|
clearInterval(id) {
|
|
631
747
|
clearInterval(id);
|
|
748
|
+
this._intervals.delete(id);
|
|
632
749
|
}
|
|
633
750
|
// Animation methods
|
|
634
751
|
requestAnimationFrame(callback) {
|
|
635
|
-
|
|
752
|
+
if (this._closed) return 0;
|
|
753
|
+
const id = this.setTimeout(callback, 16);
|
|
754
|
+
this._animationFrames.add(id);
|
|
755
|
+
return id;
|
|
636
756
|
}
|
|
637
757
|
cancelAnimationFrame(id) {
|
|
638
758
|
this.clearTimeout(id);
|
|
759
|
+
this._animationFrames.delete(id);
|
|
639
760
|
}
|
|
640
761
|
addEventListener(type, listener, options) {
|
|
641
762
|
if (type === "popstate" || type === "load" || type === "unload" || type === "beforeunload") {
|
|
@@ -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';\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 // Timers and intervals tracking\n private _timers: Set<number> = new Set();\n private _intervals: Set<number> = new Set();\n private _animationFrames: Set<number> = new Set();\n // Properties\n readonly clientInformation: Navigator;\n private _closed: boolean = false;\n\n get closed(): boolean {\n return this._closed;\n }\n\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\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 };\n PopStateEvent = class PopStateEvent extends this.Event {\n };\n IntersectionObserver = class IntersectionObserver {\n };\n NodeFilter = class NodeFilter {\n };\n DocumentFragment = class DocumentFragment {\n };\n HTMLMetaElement = HTMLMetaElement;\n HTMLCanvasElement = HTMLCanvasElement;\n CanvasRenderingContext2D = class CanvasRenderingContext2D {\n };\n CanvasPattern = class CanvasPattern {\n };\n CanvasGradient = class CanvasGradient {\n };\n Path2D = class Path2D {\n };\n ImageData = class ImageData {\n };\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(config?: { initialUrl?: string }) {\n const documentBase = 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(config?.initialUrl);\n documentBase.setLocation(this._location);\n this.document = documentBase;\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\n blur(): void {\n }\n\n cancelIdleCallback(handle: number): void {\n }\n\n captureEvents(): void {\n }\n\n close(): void {\n if (this._closed) return;\n\n this._closed = true;\n\n // Clear all timers\n this._timers.forEach(id => clearTimeout(id));\n this._timers.clear();\n\n // Clear all intervals\n this._intervals.forEach(id => clearInterval(id));\n this._intervals.clear();\n\n // Clear all animation frames\n this._animationFrames.forEach(id => clearTimeout(id));\n this._animationFrames.clear();\n\n // Remove all event listeners (clear references to prevent memory leaks)\n this._eventListeners.forEach(listener => {\n // Explicitly null out the listener function reference\n (listener as any).listener = null;\n });\n this._eventListeners.length = 0;\n\n // Clear all on* event handler properties\n this.onload = null;\n this.onunload = null;\n this.onbeforeunload = null;\n this.onpopstate = null;\n this.onerror = null;\n this.onmessage = null;\n this.onhashchange = null;\n\n // Clear document references\n if (this.document) {\n const doc = this.document as any;\n\n // Clear document content recursively\n if (doc.body) {\n this.clearNodeRecursively(doc.body);\n }\n\n if (doc.head) {\n this.clearNodeRecursively(doc.head);\n }\n\n if (doc.documentElement) {\n this.clearNodeRecursively(doc.documentElement);\n }\n\n // Break circular references\n if (doc.setWindow) {\n doc.setWindow(null);\n }\n\n // Clear document event listeners\n if (doc._eventListeners) {\n doc._eventListeners.forEach((listener: any) => {\n listener.listener = null;\n });\n doc._eventListeners.length = 0;\n }\n }\n\n // Clear history\n if (this.history) {\n const hist = this.history as any;\n if (hist.historyStack) {\n hist.historyStack.forEach((entry: any) => {\n entry.state = null;\n });\n hist.historyStack.length = 0;\n }\n hist.state = null;\n hist.window = null;\n }\n\n // Clear location callback\n if (this._location) {\n (this._location as any).urlChangeCallback = null;\n }\n }\n\n /**\n * Recursively clear a node and its children to prevent memory leaks\n */\n private clearNodeRecursively(node: any): void {\n if (!node) return;\n\n // Clear children first\n while (node.firstChild) {\n const child = node.firstChild;\n node.removeChild(child);\n this.clearNodeRecursively(child);\n }\n\n // Clear event listeners on the node\n if (node._eventListeners) {\n node._eventListeners.forEach((listener: any) => {\n listener.listener = null;\n });\n node._eventListeners.length = 0;\n }\n\n // Clear node properties that might hold references (safely)\n try {\n if (node.parentNode) {\n node.parentNode = null;\n }\n } catch (e) {\n // parentNode might be read-only\n }\n\n try {\n if (node.ownerDocument) {\n node.ownerDocument = null;\n }\n } catch (e) {\n // ownerDocument might be read-only (getter-only)\n }\n\n // Clear other potential circular references\n if (node._childNodes) {\n if (Array.isArray(node._childNodes)) {\n node._childNodes = [];\n } else if (node._childNodes instanceof Map) {\n node._childNodes.clear();\n }\n }\n if (node._attributes) {\n if (Array.isArray(node._attributes)) {\n node._attributes = [];\n } else if (node._attributes instanceof Map) {\n node._attributes.clear();\n }\n }\n }\n\n confirm(message?: string): boolean {\n return false;\n }\n\n focus(): void {\n }\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\n moveTo(x: number, y: number): void {\n }\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\n print(): void {\n }\n\n prompt(message?: string, _default?: string): string | null {\n return null;\n }\n\n releaseEvents(): void {\n }\n\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {\n return 0;\n }\n\n resizeBy(x: number, y: number): void {\n }\n\n resizeTo(width: number, height: number): void {\n }\n\n scroll(options?: ScrollToOptions): void;\n scroll(x: number, y: number): void;\n scroll(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n scrollBy(options?: ScrollToOptions): void;\n scrollBy(x: number, y: number): void;\n scrollBy(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n scrollTo(options?: ScrollToOptions): void;\n scrollTo(x: number, y: number): void;\n scrollTo(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n stop(): void {\n }\n\n // Timer methods\n setTimeout(callback: Function, delay?: number, ...args: any[]): number {\n if (this._closed) return 0;\n\n const id = setTimeout(() => {\n this._timers.delete(id);\n callback(...args);\n }, delay) as any;\n\n this._timers.add(id);\n return id;\n }\n\n clearTimeout(id: number): void {\n clearTimeout(id);\n this._timers.delete(id);\n }\n\n setInterval(callback: Function, delay?: number, ...args: any[]): number {\n if (this._closed) return 0;\n\n const id = setInterval(callback, delay, ...args) as any;\n this._intervals.add(id);\n return id;\n }\n\n clearInterval(id: number): void {\n clearInterval(id);\n this._intervals.delete(id);\n }\n\n // Animation methods\n requestAnimationFrame(callback: FrameRequestCallback): number {\n if (this._closed) return 0;\n\n const id = this.setTimeout(callback, 16) as number;\n this._animationFrames.add(id);\n return id;\n }\n\n cancelAnimationFrame(id: number): void {\n this.clearTimeout(id);\n this._animationFrames.delete(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 {\n return '';\n }\n\n btoa(data: string): string {\n return '';\n }\n\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> {\n return Promise.resolve({} as ImageBitmap);\n }\n\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n return Promise.resolve({} as Response);\n }\n\n queueMicrotask(callback: VoidFunction): void {\n }\n\n reportError(e: any): void {\n }\n\n structuredClone(value: any, options?: StructuredSerializeOptions): any {\n return value;\n }\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 * 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": "AAEA,SAAQ,oBAAmB;AAC3B,SAAQ,gBAAe;AACvB,SAAQ,mBAAkB;AAG1B,SAAQ,yBAAwB;AAChC,SAAQ,uBAAsB;AAC9B,SAAQ,yBAAwB;AAChC,SAAQ,yBAAwB;AAChC,SAAQ,sBAAqB;AAC7B,SAAQ,qBAAoB;AAC5B,SAAQ,uBAAsB;AAC9B,SAAQ,uBAAsB;AAC9B,SAAQ,sBAAqB;AAC7B,SAAQ,wBAAuB;AAC/B,SAAQ,oBAAmB;AAC3B,SAAQ,uBAAsB;AAC9B,SAAQ,wBAAuB;AAC/B,SAAQ,uBAAsB;AAC9B,SAAQ,yBAAwB;AAChC,SAAQ,wBAAuB;AAC/B,SAAQ,uBAAsB;AAC9B,SAAQ,wBAAuB;AAC/B,SAAQ,wBAAuB;AAC/B,SAAQ,wBAAuB;AAC/B,SAAQ,qBAAoB;AAC5B,SAAQ,uBAAsB;AAC9B,SAAQ,2BAA0B;AAClC,SAAQ,wBAAuB;AAC/B,SAAQ,wBAAuB;AAC/B,SAAQ,qBAAoB;AAC5B,SAAQ,qBAAoB;AAC5B,SAAQ,qBAAoB;AAC5B,SAAQ,0BAAyB;AACjC,SAAQ,wBAAuB;AAE/B,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,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,KAAa;AACpB,UAAM,UAAU,KAAK;AACrB,SAAK,SAAS,GAAG;AAGjB,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,EAEA,IAAI,SAAS,OAAe;AAC1B,QAAI,CAAC,MAAM,SAAS,GAAG,GAAG;AACxB,eAAS;AAAA,IACX;AACA,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AAEb,UAAM,aAAa,MAAM,YAAY,GAAG;AACxC,QAAI,eAAe,MAAM,aAAa,MAAM,YAAY,GAAG,GAAG;AAE5D,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,EAEA,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,EAEA,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,EAEA,IAAI,SAAS,OAAe;AAC1B,QAAI,CAAC,MAAM,WAAW,GAAG,GAAG;AAC1B,cAAQ,MAAM;AAAA,IAChB;AACA,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAO,OAAe;AACxB,QAAI,SAAS,CAAC,MAAM,WAAW,GAAG,GAAG;AACnC,cAAQ,MAAM;AAAA,IAChB;AACA,SAAK,UAAU;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,OAAe;AACtB,QAAI,SAAS,CAAC,MAAM,WAAW,GAAG,GAAG;AACnC,cAAQ,MAAM;AAAA,IAChB;AACA,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;AAGjB,QAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,WAAK,kBAAkB,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,QAAQ,KAAmB;AACzB,UAAM,UAAU,KAAK;AACrB,SAAK,SAAS,GAAG;AAGjB,QAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,WAAK,kBAAkB,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,OAAO,cAA8B;AAAA,EAGrC;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,SAAS,KAAmB;AAClC,QAAI;AAEF,UAAI;AAEJ,UAAI,IAAI,WAAW,IAAI,GAAG;AAExB,oBAAY,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,MAC1C,WAAW,IAAI,WAAW,GAAG,GAAG;AAE9B,oBAAY,IAAI,IAAI,KAAK,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,EAAE;AAAA,MAC7D,WAAW,IAAI,SAAS,KAAK,GAAG;AAE9B,oBAAY,IAAI,IAAI,GAAG;AAAA,MACzB,OAAO;AAEL,cAAM,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,GAAG,KAAK,SAAS;AAC9D,oBAAY,IAAI,IAAI,KAAK,IAAI;AAAA,MAC/B;AAEA,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;AAEV,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,IAEF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAC7B,QAAI;AAEF,UAAI,MAAM,KAAK;AAEf,UAAI,KAAK,cAAc,YAAY,KAAK,cAAc,SAAS;AAC7D,eAAO;AACP,YAAI,KAAK,OAAO;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEA,aAAO,KAAK;AACZ,aAAO,KAAK;AACZ,aAAO,KAAK;AAGZ,YAAM,UAAU,IAAI,IAAI,GAAG;AAC3B,WAAK,QAAQ,QAAQ;AACrB,WAAK,UAAU,QAAQ;AAAA,IACzB,SAAS,GAAG;AAAA,IAEZ;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,EAEA,OAAa;AACX,SAAK,GAAG,EAAE;AAAA,EACZ;AAAA,EAEA,UAAgB;AACd,SAAK,GAAG,CAAC;AAAA,EACX;AAAA,EAEA,GAAG,OAAsB;AACvB,QAAI,CAAC,SAAS,KAAK,aAAa,WAAW,EAAG;AAE9C,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;AAGnB,UAAI,MAAM,OAAO,KAAK,OAAO,UAAU;AACrC,QAAC,KAAK,OAAO,SAAiB,QAAQ,MAAM;AAC5C,QAAC,KAAK,OAAO,SAAiB,SAAS,MAAM,GAAG;AAAA,MAClD;AAGA,MAAC,KAAK,OAAe,sBAAsB,MAAM,OAAO,MAAM,GAAG;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,UAAU,MAAW,OAAe,KAAoB;AAEtD,SAAK,eAAe,KAAK,aAAa,MAAM,GAAG,KAAK,eAAe,CAAC;AAGpE,SAAK,aAAa,KAAK,EAAC,OAAO,MAAM,OAAO,IAAG,CAAC;AAChD,SAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,SAAK,QAAQ;AACb,SAAK,SAAS,KAAK,aAAa;AAGhC,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;AAG1C,UAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,QAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,EAGF;AAAA,EAEA,aAAa,MAAW,OAAe,KAAoB;AACzD,QAAI,KAAK,gBAAgB,KAAK,KAAK,eAAe,KAAK,aAAa,QAAQ;AAE1E,WAAK,aAAa,KAAK,YAAY,IAAI,EAAC,OAAO,MAAM,OAAO,IAAG;AAAA,IACjE,OAAO;AAEL,WAAK,eAAe,CAAC,EAAC,OAAO,MAAM,OAAO,IAAG,CAAC;AAC9C,WAAK,eAAe;AACpB,WAAK,SAAS;AAAA,IAChB;AAEA,SAAK,QAAQ;AAGb,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;AAG1C,UAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,QAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,EAGF;AACF;AAEA,MAAM,cAAmC;AAAA,EAAzC;AACE,qBAAoB;AACpB,oBAAmB;AACnB,qBAA+B,CAAC,SAAS,IAAI;AAC7C,oBAAmB;AACnB,yBAAyB;AACzB,kBAAkB;AAAA;AACpB;AAeO,MAAM,WAAW;AAAA,EAuItB,YAAY,QAAkC;AAlI9C;AAAA,SAAQ,kBAAmC,CAAC;AAE5C;AAAA,SAAQ,UAAuB,oBAAI,IAAI;AACvC,SAAQ,aAA0B,oBAAI,IAAI;AAC1C,SAAQ,mBAAgC,oBAAI,IAAI;AAGhD,SAAQ,UAAmB;AAM3B,SAAS,cAA2B,CAAC;AACrC,SAAS,iBAAwC,CAAC;AAClD,SAAS,mBAA2B;AAEpC,SAAS,QAA2B;AACpC,SAAS,WAAqB,CAAC;AAC/B,SAAS,eAA+B;AACxC,SAAS,SAAsB,CAAC;AAEhC,SAAS,cAAsB;AAC/B,SAAS,aAAqB;AAC9B,SAAS,SAAiB;AAC1B,SAAS,cAAuB,CAAC;AACjC,SAAS,UAAmB,CAAC;AAC7B,gBAAe;AAEf,0BAAwE;AACxE,+BAAkF;AAClF,uCAA0F;AAC1F,+BAAiE;AACjE,kBAAc;AACd,SAAS,cAAsB;AAC/B,SAAS,qBAA8B;AACvC,SAAS,cAAsB;AAC/B,SAAS,aAAqB;AAC9B,SAAS,cAAsB;AAC/B,SAAS,cAAsB;AAC/B,SAAS,SAAsB,CAAC;AAChC,SAAS,cAAuB,CAAC;AACjC,SAAS,SAAiB,CAAC;AAC3B,SAAS,aAAqB;AAC9B,SAAS,YAAoB;AAC7B,SAAS,UAAkB;AAC3B,SAAS,UAAkB;AAC3B,SAAS,UAAkB;AAC3B,SAAS,UAAkB;AAC3B,SAAS,aAAsB,CAAC;AAChC,SAAS,OAAmC;AAC5C,SAAS,kBAAmC,CAAC;AAC7C,kBAAiB;AACjB,SAAS,YAAqB,CAAC;AAC/B,SAAS,UAAmB,CAAC;AAC7B,SAAS,MAA0B;AACnC,SAAS,iBAAwC;AACjD,SAAS,SAAqC;AAiB9C;AAAA,gBAAO;AACP,mBAAU;AACV,uBAAc;AACd,iBAAQ,MAAM,MAAM;AAAA,IACpB;AACA,yBAAgB,MAAM,sBAAsB,KAAK,MAAM;AAAA,IACvD;AACA,gCAAuB,MAAM,qBAAqB;AAAA,IAClD;AACA,sBAAa,MAAM,WAAW;AAAA,IAC9B;AACA,4BAAmB,MAAM,iBAAiB;AAAA,IAC1C;AACA,2BAAkB;AAClB,6BAAoB;AACpB,oCAA2B,MAAM,yBAAyB;AAAA,IAC1D;AACA,yBAAgB,MAAM,cAAc;AAAA,IACpC;AACA,0BAAiB,MAAM,eAAe;AAAA,IACtC;AACA,kBAAS,MAAM,OAAO;AAAA,IACtB;AACA,qBAAY,MAAM,UAAU;AAAA,IAC5B;AAGA;AAAA,6BAAoB;AACpB,2BAAkB;AAClB,6BAAoB;AACpB,0BAAiB;AACjB,yBAAgB;AAChB,2BAAkB;AAClB,2BAAkB;AAClB,0BAAiB;AACjB,4BAAmB;AACnB,wBAAe;AACf,2BAAkB;AAClB,4BAAmB;AACnB,2BAAkB;AAClB,6BAAoB;AACpB,4BAAmB;AACnB,2BAAkB;AAClB,4BAAmB;AACnB,4BAAmB;AACnB,4BAAmB;AACnB,yBAAgB;AAChB,+BAAsB;AACtB,4BAAmB;AACnB,4BAAmB;AACnB,yBAAgB;AAChB,yBAAgB;AAChB,yBAAgB;AAChB,8BAAqB;AACrB,4BAAmB;AAiZnB;AAAA;AAAA;AAAA,mBAAoE;AACpE,6BAAqF;AACrF,0BAAkF;AAClF,gCAAwF;AACxF,4BAAoF;AACpF,sBAA0E;AAC1E,yBAA6E;AAC7E,kBAAsE;AACtE,oBAAmE;AACnE,qBAAoE;AACpE,4BAA2E;AAC3E,oBAAmE;AACnE,mBAAuE;AACvE,mBAAkE;AAClE,yBAA6E;AAC7E,kBAA0E;AAC1E,uBAAsE;AACtE,iBAAyE;AACzE,sBAA0E;AAC1E,kBAAqE;AACrE,qBAAwE;AACxE,uBAA0E;AAC1E,uBAA0E;AAC1E,sBAAyE;AACzE,uBAA0E;AAC1E,kBAAqE;AACrE,4BAA2E;AAC3E,qBAAoE;AACpE,mBAAkE;AAClE,mBAA+B;AAC/B,mBAAuE;AACvE,sBAA6E;AAC7E,+BAAqF;AACrF,mBAAkE;AAClE,qBAAoE;AACpE,qBAA4E;AAC5E,sBAA6E;AAC7E,mBAA0E;AAC1E,kBAAiE;AACjE,wBAAuE;AACvE,4BAA2E;AAC3E,uBAAsE;AACtE,gCAAsF;AACtF,uBAA2E;AAC3E,wBAA4E;AAC5E,wBAA4E;AAC5E,uBAA2E;AAC3E,sBAA0E;AAC1E,uBAA2E;AAC3E,qBAAyE;AACzE,mBAA2E;AAC3E,mBAAkE;AAClE,kBAAiE;AACjE,qBAAoE;AACpE,2BAAiF;AACjF,yBAA+E;AAC/E,0BAAgF;AAChF,0BAAgF;AAChF,yBAA+E;AAC/E,wBAA8E;AAC9E,yBAA+E;AAC/E,uBAA6E;AAC7E,sBAA0F;AAC1F,wBAAuE;AACvE,mBAAkE;AAClE,oBAAqE;AACrE,oBAAmE;AACnE,uBAAsE;AACtE,qCAA2G;AAC3G,oBAAmE;AACnE,qBAAoE;AACpE,oBAAmE;AACnE,6BAA4E;AAC5E,yBAAwE;AACxE,wBAAuE;AACvE,qBAAoE;AACpE,oBAAyE;AACzE,qBAAoE;AACpE,wBAAuE;AACvE,oBAAmE;AACnE,yBAA8E;AAC9E,sBAA2E;AAC3E,uBAA4E;AAC5E,wBAA6E;AAC7E,8BAAuF;AACvF,2BAAoF;AACpF,2BAAoF;AACpF,6BAAsF;AACtF,0BAAyE;AACzE,qBAAoE;AACpE,gCAA+E;AAC/E,sCAAqF;AACrF,kCAAiF;AACjF,iCAAgF;AAChF,mBAAuE;AAGvE;AAAA,wBAAuE;AACvE,yBAAwE;AACxE,0BAAqF;AACrF,wBAAiF;AACjF,4BAA2E;AAC3E,qBAA2E;AAC3E,0BAAgF;AAChF,qBAAoE;AACpE,oBAAmE;AACnE,sBAAmF;AACnF,sBAAmF;AACnF,sBAA6E;AAC7E,8BAA6F;AAC7F,qBAA2E;AAC3E,gCAA+F;AAC/F,oBAAmE;AAGnE;AAAA,SAAS,eAAwB,CAAC;AAGlC;AAAA,SAAS,SAAuB,CAAC;AACjC,SAAS,sBAA+B;AACxC,SAAS,SAAiB,CAAC;AAC3B,SAAS,YAAwB,CAAC;AAClC,SAAS,kBAA2B;AACpC,SAAS,SAAiB;AAC1B,SAAS,cAA2B,CAAC;AA+BrC;AAAA,SAAS,iBAA0B,CAAC;AAziBlC,UAAM,eAAe,IAAI,aAAa;AAGtC,QAAI,KAAK,YAAa,KAAK,SAAiB,WAAW;AACrD,MAAC,KAAK,SAAiB,UAAU,IAAI;AAAA,IACvC;AAEA,SAAK,YAAY,IAAI,aAAa,QAAQ,UAAU;AACpD,iBAAa,YAAY,KAAK,SAAS;AACvC,SAAK,WAAW;AAChB,SAAK,UAAU,IAAI,YAAY,IAAI;AACnC,SAAK,YAAY,IAAI,cAAc;AACnC,SAAK,oBAAoB,KAAK;AAG9B,WAAO,IAAI,MAAM,MAAM;AAAA,MACrB,IAAI,QAAoB,MAA4B;AAElD,YAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAClD,iBAAO;AAAA,QACT;AAEA,eAAQ,OAAe,IAAI;AAAA,MAC7B;AAAA,MAEA,IAAI,QAAoB,MAAuB,OAAqB;AAElE,YAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAClD,iBAAO;AAAA,QACT;AAEA,QAAC,OAAe,IAAI,IAAI;AACxB,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,QAAoB,MAAgC;AAEtD,YAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAClD,iBAAO;AAAA,QACT;AAEA,eAAO,QAAQ;AAAA,MACjB;AAAA,MAEA,QAAQ,QAAgD;AAEtD,cAAM,OAAO,OAAO,oBAAoB,MAAM;AAE9C,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,eAAK,KAAK,EAAE,SAAS,CAAC;AAAA,QACxB;AACA,eAAO;AAAA,MACT;AAAA,MAEA,yBAAyB,QAAoB,MAAuD;AAElG,YAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAClD,iBAAO;AAAA,YACL,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,OAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,OAAO,yBAAyB,QAAQ,IAAI;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EA7LA,IAAI,SAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAkDA,IAAI,WAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,MAAyB;AACpC,QAAI,OAAO,SAAS,UAAU;AAC5B,WAAK,UAAU,OAAO;AAAA,IACxB,OAAO;AACL,WAAK,UAAU,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAkIA,MAAM,SAAqB;AAAA,EAC3B;AAAA,EAEA,OAAa;AAAA,EACb;AAAA,EAEA,mBAAmB,QAAsB;AAAA,EACzC;AAAA,EAEA,gBAAsB;AAAA,EACtB;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,QAAS;AAElB,SAAK,UAAU;AAGf,SAAK,QAAQ,QAAQ,QAAM,aAAa,EAAE,CAAC;AAC3C,SAAK,QAAQ,MAAM;AAGnB,SAAK,WAAW,QAAQ,QAAM,cAAc,EAAE,CAAC;AAC/C,SAAK,WAAW,MAAM;AAGtB,SAAK,iBAAiB,QAAQ,QAAM,aAAa,EAAE,CAAC;AACpD,SAAK,iBAAiB,MAAM;AAG5B,SAAK,gBAAgB,QAAQ,cAAY;AAEvC,MAAC,SAAiB,WAAW;AAAA,IAC/B,CAAC;AACD,SAAK,gBAAgB,SAAS;AAG9B,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,eAAe;AAGpB,QAAI,KAAK,UAAU;AACjB,YAAM,MAAM,KAAK;AAGjB,UAAI,IAAI,MAAM;AACZ,aAAK,qBAAqB,IAAI,IAAI;AAAA,MACpC;AAEA,UAAI,IAAI,MAAM;AACZ,aAAK,qBAAqB,IAAI,IAAI;AAAA,MACpC;AAEA,UAAI,IAAI,iBAAiB;AACvB,aAAK,qBAAqB,IAAI,eAAe;AAAA,MAC/C;AAGA,UAAI,IAAI,WAAW;AACjB,YAAI,UAAU,IAAI;AAAA,MACpB;AAGA,UAAI,IAAI,iBAAiB;AACvB,YAAI,gBAAgB,QAAQ,CAAC,aAAkB;AAC7C,mBAAS,WAAW;AAAA,QACtB,CAAC;AACD,YAAI,gBAAgB,SAAS;AAAA,MAC/B;AAAA,IACF;AAGA,QAAI,KAAK,SAAS;AAChB,YAAM,OAAO,KAAK;AAClB,UAAI,KAAK,cAAc;AACrB,aAAK,aAAa,QAAQ,CAAC,UAAe;AACxC,gBAAM,QAAQ;AAAA,QAChB,CAAC;AACD,aAAK,aAAa,SAAS;AAAA,MAC7B;AACA,WAAK,QAAQ;AACb,WAAK,SAAS;AAAA,IAChB;AAGA,QAAI,KAAK,WAAW;AAClB,MAAC,KAAK,UAAkB,oBAAoB;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,MAAiB;AAC5C,QAAI,CAAC,KAAM;AAGX,WAAO,KAAK,YAAY;AACtB,YAAM,QAAQ,KAAK;AACnB,WAAK,YAAY,KAAK;AACtB,WAAK,qBAAqB,KAAK;AAAA,IACjC;AAGA,QAAI,KAAK,iBAAiB;AACxB,WAAK,gBAAgB,QAAQ,CAAC,aAAkB;AAC9C,iBAAS,WAAW;AAAA,MACtB,CAAC;AACD,WAAK,gBAAgB,SAAS;AAAA,IAChC;AAGA,QAAI;AACF,UAAI,KAAK,YAAY;AACnB,aAAK,aAAa;AAAA,MACpB;AAAA,IACF,SAAS,GAAG;AAAA,IAEZ;AAEA,QAAI;AACF,UAAI,KAAK,eAAe;AACtB,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF,SAAS,GAAG;AAAA,IAEZ;AAGA,QAAI,KAAK,aAAa;AACpB,UAAI,MAAM,QAAQ,KAAK,WAAW,GAAG;AACnC,aAAK,cAAc,CAAC;AAAA,MACtB,WAAW,KAAK,uBAAuB,KAAK;AAC1C,aAAK,YAAY,MAAM;AAAA,MACzB;AAAA,IACF;AACA,QAAI,KAAK,aAAa;AACpB,UAAI,MAAM,QAAQ,KAAK,WAAW,GAAG;AACnC,aAAK,cAAc,CAAC;AAAA,MACtB,WAAW,KAAK,uBAAuB,KAAK;AAC1C,aAAK,YAAY,MAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ,SAA2B;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,QAAc;AAAA,EACd;AAAA,EAEA,iBAAiB,KAAc,WAAgD;AAC7E,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,eAAiC;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAA+B;AACxC,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,OAAO,GAAW,GAAiB;AAAA,EACnC;AAAA,EAEA,OAAO,GAAW,GAAiB;AAAA,EACnC;AAAA,EAEA,KAAK,KAAoB,QAAiB,UAAuC;AAC/E,WAAO;AAAA,EACT;AAAA,EAIA,YAAY,SAAc,uBAA2D,UAAiC;AAAA,EACtH;AAAA,EAEA,QAAc;AAAA,EACd;AAAA,EAEA,OAAO,SAAkB,UAAkC;AACzD,WAAO;AAAA,EACT;AAAA,EAEA,gBAAsB;AAAA,EACtB;AAAA,EAEA,oBAAoB,UAA+B,SAAsC;AACvF,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAW,GAAiB;AAAA,EACrC;AAAA,EAEA,SAAS,OAAe,QAAsB;AAAA,EAC9C;AAAA,EAIA,OAAO,YAAuC,GAAkB;AAAA,EAChE;AAAA,EAIA,SAAS,YAAuC,GAAkB;AAAA,EAClE;AAAA,EAIA,SAAS,YAAuC,GAAkB;AAAA,EAClE;AAAA,EAEA,OAAa;AAAA,EACb;AAAA;AAAA,EAGA,WAAW,UAAoB,UAAmB,MAAqB;AACrE,QAAI,KAAK,QAAS,QAAO;AAEzB,UAAM,KAAK,WAAW,MAAM;AAC1B,WAAK,QAAQ,OAAO,EAAE;AACtB,eAAS,GAAG,IAAI;AAAA,IAClB,GAAG,KAAK;AAER,SAAK,QAAQ,IAAI,EAAE;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,IAAkB;AAC7B,iBAAa,EAAE;AACf,SAAK,QAAQ,OAAO,EAAE;AAAA,EACxB;AAAA,EAEA,YAAY,UAAoB,UAAmB,MAAqB;AACtE,QAAI,KAAK,QAAS,QAAO;AAEzB,UAAM,KAAK,YAAY,UAAU,OAAO,GAAG,IAAI;AAC/C,SAAK,WAAW,IAAI,EAAE;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,IAAkB;AAC9B,kBAAc,EAAE;AAChB,SAAK,WAAW,OAAO,EAAE;AAAA,EAC3B;AAAA;AAAA,EAGA,sBAAsB,UAAwC;AAC5D,QAAI,KAAK,QAAS,QAAO;AAEzB,UAAM,KAAK,KAAK,WAAW,UAAU,EAAE;AACvC,SAAK,iBAAiB,IAAI,EAAE;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,IAAkB;AACrC,SAAK,aAAa,EAAE;AACpB,SAAK,iBAAiB,OAAO,EAAE;AAAA,EACjC;AAAA,EAKA,iBAAiB,MAAW,UAAe,SAAqB;AAE9D,QAAI,SAAS,cAAc,SAAS,UAAU,SAAS,YAAY,SAAS,gBAAgB;AAC1F,WAAK,gBAAgB,KAAK;AAAA,QACxB;AAAA,QACA,UAAU,OAAO,aAAa,aAAa,WAAW,SAAS;AAAA,QAC/D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAIA,oBAAoB,MAAW,UAAe,SAAqB;AACjE,QAAI,SAAS,cAAc,SAAS,UAAU,SAAS,YAAY,SAAS,gBAAgB;AAC1F,YAAM,iBAAiB,OAAO,aAAa,aAAa,WAAW,SAAS;AAC5E,WAAK,kBAAkB,KAAK,gBAAgB;AAAA,QAC1C,mBAAiB,EAAE,cAAc,SAAS,QAAQ,cAAc,aAAa;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,OAAqB;AACjC,UAAM,iBAAiB,KAAK,gBAAgB,OAAO,cAAY,SAAS,SAAS,MAAM,IAAI;AAE3F,eAAW,iBAAiB,gBAAgB;AAC1C,UAAI;AACF,sBAAc,SAAS,KAAK,MAAM,KAAK;AAGvC,YAAI,cAAc,WAAW,OAAO,cAAc,YAAY,YAAY,cAAc,QAAQ,MAAM;AACpG,eAAK,oBAAoB,MAAM,MAAM,cAAc,QAAQ;AAAA,QAC7D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,OAAY,KAAoB;AAC5D,UAAM,gBAA+B;AAAA,MACnC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAEA,SAAK,cAAc,aAAa;AAAA,EAClC;AAAA,EAoIA,KAAK,MAAsB;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,MAAsB;AACzB,WAAO;AAAA,EACT;AAAA,EAIA,qBAAqB,MAAmC;AACtD,WAAO,QAAQ,QAAQ,CAAC,CAAgB;AAAA,EAC1C;AAAA,EAEA,MAAM,OAA0B,MAAuC;AACrE,WAAO,QAAQ,QAAQ,CAAC,CAAa;AAAA,EACvC;AAAA,EAEA,eAAe,UAA8B;AAAA,EAC7C;AAAA,EAEA,YAAY,GAAc;AAAA,EAC1B;AAAA,EAEA,gBAAgB,OAAY,SAA2C;AACrE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAcQ,mBAAmB,MAAc,QAAmB;AAC1D,QAAI,WAAW;AAEf,WAAO,WAAW,KAAK,QAAQ;AAC7B,YAAM,WAAW,KAAK,QAAQ,KAAK,QAAQ;AAE3C,UAAI,aAAa,IAAI;AACnB,cAAM,gBAAgB,KAAK,UAAU,QAAQ,EAAE,KAAK;AACpD,YAAI,eAAe;AACjB,gBAAM,WAAW,KAAK,SAAS,eAAe,aAAa;AAC3D,iBAAO,YAAY,QAAQ;AAAA,QAC7B;AACA;AAAA,MACF;AAEA,UAAI,WAAW,UAAU;AACvB,cAAM,cAAc,KAAK,UAAU,UAAU,QAAQ,EAAE,KAAK;AAC5D,YAAI,aAAa;AACf,gBAAM,WAAW,KAAK,SAAS,eAAe,WAAW;AACzD,iBAAO,YAAY,QAAQ;AAAA,QAC7B;AAAA,MACF;AAEA,YAAM,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACzC,UAAI,WAAW,GAAI;AAEnB,YAAM,aAAa,KAAK,UAAU,WAAW,GAAG,MAAM;AAEtD,UAAI,WAAW,WAAW,GAAG,GAAG;AAC9B,mBAAW,SAAS;AACpB;AAAA,MACF;AAEA,YAAM,gBAAgB,WAAW,SAAS,GAAG,KAAK,KAAK,iBAAiB,WAAW,MAAM,KAAK,EAAE,CAAC,CAAC;AAClG,YAAM,aAAa,WAAW,QAAQ,GAAG;AACzC,YAAM,UAAU,eAAe,KAAK,WAAW,QAAQ,KAAK,EAAE,IAAI,WAAW,UAAU,GAAG,UAAU;AACpG,YAAM,aAAa,eAAe,KAAK,KAAK,WAAW,UAAU,aAAa,CAAC,EAAE,QAAQ,KAAK,EAAE;AAEhG,YAAM,UAAU,KAAK,SAAS,cAAc,QAAQ,YAAY,CAAC;AAEjE,UAAI,WAAW,KAAK,GAAG;AACrB,aAAK,gBAAgB,YAAY,OAAO;AAAA,MAC1C;AAGA,UAAI,QAAQ,YAAY,MAAM,QAAQ;AAEpC,QAAC,KAAK,SAAiB,kBAAkB;AACzC,aAAK,SAAS,YAAY,OAAO;AAAA,MACnC,WAAW,QAAQ,YAAY,MAAM,QAAQ;AAC3C,QAAC,KAAK,SAAiB,OAAO;AAC9B,YAAI,KAAK,SAAS,iBAAiB;AACjC,eAAK,SAAS,gBAAgB,YAAY,OAAO;AAAA,QACnD,OAAO;AACL,iBAAO,YAAY,OAAO;AAAA,QAC5B;AAAA,MACF,WAAW,QAAQ,YAAY,MAAM,QAAQ;AAC3C,QAAC,KAAK,SAAiB,OAAO;AAC9B,YAAI,KAAK,SAAS,iBAAiB;AACjC,eAAK,SAAS,gBAAgB,YAAY,OAAO;AAAA,QACnD,OAAO;AACL,iBAAO,YAAY,OAAO;AAAA,QAC5B;AAAA,MACF,OAAO;AACL,eAAO,YAAY,OAAO;AAAA,MAC5B;AAEA,UAAI,eAAe;AACjB,mBAAW,SAAS;AAAA,MACtB,OAAO;AACL,cAAM,aAAa,KAAK,OAAO;AAC/B,cAAM,kBAAkB,KAAK,uBAAuB,MAAM,SAAS,GAAG,OAAO;AAE7E,YAAI,oBAAoB,IAAI;AAC1B,gBAAM,eAAe,KAAK,UAAU,SAAS,GAAG,eAAe;AAC/D,cAAI,aAAa,KAAK,GAAG;AACvB,iBAAK,mBAAmB,cAAc,OAAO;AAAA,UAC/C;AACA,qBAAW,kBAAkB,WAAW;AAAA,QAC1C,OAAO;AACL,qBAAW,SAAS;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,uBAAuB,MAAc,UAAkB,SAAyB;AACtF,UAAM,UAAU,IAAI,OAAO;AAC3B,UAAM,WAAW,KAAK,OAAO;AAC7B,QAAI,QAAQ;AACZ,QAAI,MAAM;AAEV,WAAO,MAAM,KAAK,UAAU,QAAQ,GAAG;AACrC,YAAM,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC1C,YAAM,YAAY,KAAK,QAAQ,UAAU,GAAG;AAE5C,UAAI,cAAc,GAAI,QAAO;AAE7B,UAAI,aAAa,MAAM,WAAW,WAAW;AAC3C;AACA,cAAM,WAAW,QAAQ;AAAA,MAC3B,OAAO;AACL;AACA,YAAI,UAAU,EAAG,QAAO;AACxB,cAAM,YAAY,SAAS;AAAA,MAC7B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB,iBAAyB,SAAoB;AAEnE,UAAM,YAAY;AAClB,QAAI;AAEJ,YAAQ,QAAQ,UAAU,KAAK,eAAe,OAAO,MAAM;AACzD,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,QAAQ,MAAM,CAAC,KAAK;AACxB,cAAQ,aAAa,MAAM,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,iBAAiB,SAA0B;AACjD,UAAM,kBAAkB,CAAC,QAAQ,QAAQ,MAAM,OAAO,SAAS,MAAM,OAAO,SAAS,QAAQ,QAAQ,SAAS,UAAU,SAAS,KAAK;AACtI,WAAO,gBAAgB,SAAS,QAAQ,YAAY,CAAC;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAA6B;AACnC,UAAM,MAAM,KAAK;AAGjB,QAAI,IAAI,MAAM;AACZ,aAAO,IAAI,KAAK,YAAY;AAC1B,YAAI,KAAK,YAAY,IAAI,KAAK,UAAU;AAAA,MAC1C;AAAA,IACF;AAGA,QAAI,IAAI,MAAM;AACZ,aAAO,IAAI,KAAK,YAAY;AAC1B,YAAI,KAAK,YAAY,IAAI,KAAK,UAAU;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAGF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|