aberdeen 1.17.0 → 1.18.0
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/src/aberdeen.js +11 -2
- package/dist/src/aberdeen.js.map +3 -3
- package/dist/tests/fakedom.js +12 -2
- package/dist/tests/fakedom.js.map +3 -3
- package/dist/tests/helpers.js +12 -2
- package/dist/tests/helpers.js.map +3 -3
- package/dist-docs/Tutorial/index.html +2 -2
- package/dist-docs/aberdeen/A/index.html +2 -2
- package/dist-docs/aberdeen/CUSTOM_DUMP/index.html +2 -2
- package/dist-docs/aberdeen/NO_COPY/index.html +2 -2
- package/dist-docs/aberdeen/OPAQUE/index.html +2 -2
- package/dist-docs/aberdeen/PromiseProxy/index.html +5 -5
- package/dist-docs/aberdeen/clean/index.html +2 -2
- package/dist-docs/aberdeen/clone/index.html +2 -2
- package/dist-docs/aberdeen/copy/index.html +3 -3
- package/dist-docs/aberdeen/count/index.html +2 -2
- package/dist-docs/aberdeen/cssVars/index.html +2 -2
- package/dist-docs/aberdeen/darkMode/index.html +2 -2
- package/dist-docs/aberdeen/default/index.html +2 -2
- package/dist-docs/aberdeen/derive/index.html +2 -2
- package/dist-docs/aberdeen/disableCreateDestroy/index.html +2 -2
- package/dist-docs/aberdeen/dump/index.html +2 -2
- package/dist-docs/aberdeen/index.html +2 -2
- package/dist-docs/aberdeen/insertCss/index.html +2 -2
- package/dist-docs/aberdeen/insertGlobalCss/index.html +2 -2
- package/dist-docs/aberdeen/invertString/index.html +2 -2
- package/dist-docs/aberdeen/isEmpty/index.html +2 -2
- package/dist-docs/aberdeen/map/index.html +4 -4
- package/dist-docs/aberdeen/merge/index.html +3 -3
- package/dist-docs/aberdeen/mount/index.html +2 -2
- package/dist-docs/aberdeen/multiMap/index.html +4 -4
- package/dist-docs/aberdeen/onEach/index.html +2 -2
- package/dist-docs/aberdeen/partition/index.html +4 -4
- package/dist-docs/aberdeen/peek/index.html +5 -5
- package/dist-docs/aberdeen/proxy/index.html +2 -2
- package/dist-docs/aberdeen/ref/index.html +2 -2
- package/dist-docs/aberdeen/runQueue/index.html +2 -2
- package/dist-docs/aberdeen/setErrorHandler/index.html +2 -2
- package/dist-docs/aberdeen/setSpacingCssVars/index.html +2 -2
- package/dist-docs/aberdeen/unmountAll/index.html +2 -2
- package/dist-docs/aberdeen/unproxy/index.html +2 -2
- package/dist-docs/assets/aberdeen/aberdeen.js +11 -2
- package/dist-docs/assets/aberdeen/aberdeen.js.map +3 -3
- package/dist-docs/dispatcher/Dispatcher/index.html +4 -4
- package/dist-docs/dispatcher/MATCH_FAILED/index.html +2 -2
- package/dist-docs/dispatcher/MATCH_REST/index.html +2 -2
- package/dist-docs/dispatcher/index.html +2 -2
- package/dist-docs/hierarchy.html +1 -1
- package/dist-docs/index.html +2 -2
- package/dist-docs/media/CHANGELOG.md +9 -1
- package/dist-docs/modules.html +1 -1
- package/dist-docs/prediction/applyCanon/index.html +2 -2
- package/dist-docs/prediction/applyPrediction/index.html +2 -2
- package/dist-docs/prediction/index.html +2 -2
- package/dist-docs/route/Route/index.html +9 -9
- package/dist-docs/route/back/index.html +2 -2
- package/dist-docs/route/current/index.html +2 -2
- package/dist-docs/route/go/index.html +2 -2
- package/dist-docs/route/index.html +2 -2
- package/dist-docs/route/interceptLinks/index.html +2 -2
- package/dist-docs/route/matchCurrent/index.html +2 -2
- package/dist-docs/route/persistScroll/index.html +2 -2
- package/dist-docs/route/push/index.html +2 -2
- package/dist-docs/route/setLog/index.html +2 -2
- package/dist-docs/route/up/index.html +2 -2
- package/dist-docs/sitemap.xml +59 -59
- package/dist-docs/transitions/grow/index.html +2 -2
- package/dist-docs/transitions/index.html +2 -2
- package/dist-docs/transitions/shrink/index.html +2 -2
- package/package.json +1 -1
- package/skill/aberdeen.md +54 -54
- package/skill/dispatcher.md +6 -6
- package/skill/prediction.md +3 -3
- package/skill/route.md +18 -18
- package/skill/transitions.md +3 -3
- package/src/aberdeen.ts +15 -4
package/dist/tests/fakedom.js
CHANGED
|
@@ -566,7 +566,17 @@ function setMediaQuery(query, matches) {
|
|
|
566
566
|
mediaQueries.get(query)._trigger(matches);
|
|
567
567
|
}
|
|
568
568
|
}
|
|
569
|
-
var
|
|
569
|
+
var Temporal = {};
|
|
570
|
+
for (const name of "Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime".split(" ")) {
|
|
571
|
+
Temporal[name] = class {
|
|
572
|
+
#brand = true;
|
|
573
|
+
toString() {
|
|
574
|
+
this.#brand;
|
|
575
|
+
return `[Temporal.${name}]`;
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
var globals = { Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal };
|
|
570
580
|
Object.assign(global, globals);
|
|
571
581
|
Object.assign(window, globals);
|
|
572
582
|
export {
|
|
@@ -578,5 +588,5 @@ export {
|
|
|
578
588
|
clearBody
|
|
579
589
|
};
|
|
580
590
|
|
|
581
|
-
//# debugId=
|
|
591
|
+
//# debugId=DF55C10CD150A50F64756E2164756E21
|
|
582
592
|
//# sourceMappingURL=fakedom.js.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../tests/fakedom.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n\n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n\n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n\n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n\n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n\n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n\n remove(): void {\n this.parentNode?.removeChild(this);\n }\n\n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n\n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n\n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n\n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n\n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n\n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n\n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n\n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n\n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n\n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n\n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n\n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n\n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n\n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n\n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n\n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n\n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n\n get offsetHeight(): number {\n return 20;\n }\n\n get offsetWidth(): number {\n return 200;\n }\n\n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n\n public _scrollTop?: number;\n public _scrollLeft?: number;\n\n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n\n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n\n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n\n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n\n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n\n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n\n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n\n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n\n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n\n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n\n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n\n if (item.time > targetTime) break;\n\n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n\n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n\n toString(): string {\n return JSON.stringify(this.textContent);\n }\n\n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n\n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n\n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n\n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n\n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams};\nObject.assign(global, globals);\nObject.assign(window, globals);\n"
|
|
5
|
+
"let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n \n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "DF55C10CD150A50F64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/tests/helpers.js
CHANGED
|
@@ -566,7 +566,17 @@ function setMediaQuery(query, matches) {
|
|
|
566
566
|
mediaQueries.get(query)._trigger(matches);
|
|
567
567
|
}
|
|
568
568
|
}
|
|
569
|
-
var
|
|
569
|
+
var Temporal = {};
|
|
570
|
+
for (const name of "Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime".split(" ")) {
|
|
571
|
+
Temporal[name] = class {
|
|
572
|
+
#brand = true;
|
|
573
|
+
toString() {
|
|
574
|
+
this.#brand;
|
|
575
|
+
return `[Temporal.${name}]`;
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
var globals = { Node, Element: Element2, TextNode, document: document2, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal };
|
|
570
580
|
Object.assign(global, globals);
|
|
571
581
|
Object.assign(window, globals);
|
|
572
582
|
|
|
@@ -675,5 +685,5 @@ export {
|
|
|
675
685
|
AssertError
|
|
676
686
|
};
|
|
677
687
|
|
|
678
|
-
//# debugId=
|
|
688
|
+
//# debugId=5CEC966923AD557764756E2164756E21
|
|
679
689
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../tests/fakedom.ts", "../../tests/helpers.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n\n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n\n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n\n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n\n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n\n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n\n remove(): void {\n this.parentNode?.removeChild(this);\n }\n\n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n\n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n\n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n\n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n\n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n\n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n\n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n\n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n\n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n\n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n\n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n\n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n\n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n\n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n\n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n\n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n\n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n\n get offsetHeight(): number {\n return 20;\n }\n\n get offsetWidth(): number {\n return 200;\n }\n\n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n\n public _scrollTop?: number;\n public _scrollLeft?: number;\n\n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n\n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n\n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n\n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n\n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n\n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n\n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n\n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n\n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n\n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n\n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n\n if (item.time > targetTime) break;\n\n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n\n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n\n toString(): string {\n return JSON.stringify(this.textContent);\n }\n\n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n\n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n\n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n\n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n\n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams};\nObject.assign(global, globals);\nObject.assign(window, globals);\n",
|
|
5
|
+
"let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n \n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n",
|
|
6
6
|
"import { expect } from 'bun:test';\nimport * as fakedom from './fakedom';\nexport * as fakedom from './fakedom';\n\n// Fakedom must be imported first, as it sets up the global environment.\nimport A from \"aberdeen\";\n\nfunction toDisplay(value: any) {\n\tif (value instanceof Map) {\n\t\tlet results: string[] = []\n\t\tvalue.forEach((value,key) => results.push(JSON.stringify(key)+\": \"+JSON.stringify(value)))\n\t\treturn \"map{\" + results.join(\", \") + \"}\"\n\t} else {\n\t\treturn JSON.stringify(value)\n\t}\n}\n\nexport class AssertError extends Error {\n\tconstructor(text: string, actual: any, expected: any, expectLiteral: boolean = false) {\n\t\ttext += `\n\t\tActual: ${toDisplay(actual)}\n\t\tExpected: ${expectLiteral ? expected : toDisplay(expected)}`\n\t\tsuper(text)\n\t}\n}\n\nexport function assert(bool: any, msg?: string): void {\n\tif (!bool) throw new AssertError(`assert failed${msg ? \": \"+msg : \"\"}`, bool, \"something trueish\", true)\n}\n\nexport function assertContains(actual: any, expected: {indexOf: (v: any)=>number}, msg?: string): void {\n\tactual = (''+actual)\n\tif (actual.indexOf(expected) < 0) throw new AssertError(`contains failed ${msg ? \": \"+msg : \"\"}`, actual, `something containing '${expected}'`, true)\n}\n\nexport function getBody(): string {\n\treturn document.body.toString().replace(/^body{(.*)}$/,'$1').replace(/^body\\b/,'')\n}\n\nexport function assertBody(expected: string): void {\n\tlet actual = getBody();\n\tif (actual !== expected) throw new Error(`assertBody failed\\nActual: ${actual}\\nExpected: ${expected}`)\n}\n\n/** Get the full CSS content from the :root style tag in head */\nexport function getCss(): string {\n\tlet css = '';\n\tfor(const el of document.head.childNodes) {\n\t\tif (el instanceof Element && el.tagName === 'style') {\n\t\t\tcss += el.textContent + \"\\n\";\n\t\t}\n\t}\n\treturn css;\n}\n\nexport function assertCss(...expected: string[]) {\n\tconst found = getCss().split(\"\\n\").map(s => s.trim()).filter(s => s);\n\texpect(found).toEqual(expected);\n}\n\n\nexport async function assertThrow(what: string, func: ()=>void): Promise<void>;\nexport async function assertThrow(func: ()=>void): Promise<void>;\n\nexport async function assertThrow(a: any, b?: any): Promise<void> {\n\tif (typeof a == 'function') {\n\t\tb = a\n\t\ta = undefined\n\t}\n\ttry {\n\t\tawait b()\n\t} catch(e) {\n const s = ''+e\n\t\tif (a && s.indexOf(a)<0) throw new AssertError(`wrong exception`, s, `something containing \"${a}\"`, true)\n\t\treturn\n\t}\n\tthrow new AssertError(`exception expected`, undefined, `something containing \"${a}\"`, true)\n}\n\nexport const passTime = fakedom.passTime\n\nexport function assertDomUpdates(expected: {new?: number, changed?: number}) {\n\tconst counts = fakedom.getCounts()\n\tif (expected.new!=null) expect(counts.new).toEqual(expected.new)\n\tif (expected.changed!=null) expect(counts.changed).toEqual(expected.changed)\n}\n\nexport async function reset() {\n\tA.copy(A.cssVars, {});\n\tA.unmountAll();\n\ttry {\n\t\tawait fakedom.passTime(2001); // wait for deletion transitions\n\t\tassertBody(``);\n\t} finally {\n\t\t// Force-clear DOM and state even if errors occurred\n\t\tfakedom.clearBody();\n\t}\n\tfakedom.resetCounts();\n\tA.setErrorHandler();\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAI,WAAmB;AAAvB,IAA0B,cAAsB;AACzC,IAAM,cAAc,QAAQ,GAAS;AAAA,EAAE,WAAW,cAAc;AAAA;AAChE,IAAM,YAAY,QAAQ,GAAqC;AAAA,EAClE,OAAO,EAAE,KAAK,UAAU,SAAS,YAAY;AAAA;AAE1C,IAAM,YAAY,QAAQ,GAAS;AAAA,EACtC,UAAS,KAAK,WAAW,SAAS;AAAA;AAAA;AAGtC,MAAM,KAAK;AAAA,EACP,aAA6B;AAAA,EAC7B,aAAqB,CAAC;AAAA,MAElB,WAAW,GAAqB;AAAA,IAChC,OAAO,KAAK,WAAW,CAAE;AAAA;AAAA,MAGzB,eAAe,GAAqB;AAAA,IACpC,OAAO,KAAK,WAAW,EAAE;AAAA;AAAA,EAG7B,UAAU,CAAC,OAAiC;AAAA,IACxC,IAAI,CAAC,KAAK;AAAA,MAAY;AAAA,IACtB,IAAI,WAAW,KAAK,WAAW;AAAA,IAC/B,IAAI,MAAM,SAAS,QAAQ,IAAI;AAAA,IAC/B,IAAI,MAAM;AAAA,MAAG,MAAM,IAAI,MAAM,wBAAwB;AAAA,IACrD,OAAO,SAAS,MAAM;AAAA;AAE9B;AAAA;AAEA,MAAM,iBAAgB,KAAK;AAAA,EACvB;AAAA,EACA;AAAA,EACA,SAAiC,CAAC;AAAA,EAClC,QAAgC,CAAC;AAAA,EACjC,SAAwC,CAAC;AAAA,EACzC;AAAA,EAOA,WAAW,CAAC,KAAa,cAAuB;AAAA,IAC5C,MAAM;AAAA,IACN,KAAK,UAAU;AAAA,IACf,KAAK,eAAe;AAAA,IACpB,KAAK,aAAa,CAAC;AAAA,IACnB;AAAA;AAAA,EAGJ,WAAW,CAAC,MAAkB;AAAA,IAC1B,KAAK,aAAa,MAAM,IAAI;AAAA;AAAA,EAGhC,YAAY,CAAC,MAAY,KAAwB;AAAA,IAC7C,IAAI,KAAK;AAAA,MAAY,KAAK,WAAW,YAAY,IAAI;AAAA,IAChD;AAAA;AAAA,IACL,KAAK,aAAa;AAAA,IAClB,IAAI,KAAK;AAAA,MACL,IAAI,MAAM,KAAK,WAAW,QAAQ,GAAG;AAAA,MACrC,IAAI,MAAM;AAAA,QAAG,MAAM,IAAI,MAAM,uBAAuB;AAAA,MACpD,KAAK,WAAW,OAAO,KAAK,GAAG,IAAI;AAAA,IACvC,EAAO;AAAA,MACH,KAAK,WAAW,KAAK,IAAI;AAAA;AAAA;AAAA,EAIjC,WAAW,CAAC,MAAkB;AAAA,IAC1B,IAAI,MAAM,KAAK,WAAW,QAAQ,IAAI;AAAA,IACtC,IAAI,MAAM;AAAA,MAAG,MAAM,IAAI,MAAM,eAAe;AAAA,IAC5C,KAAK,WAAW,OAAO,KAAK,CAAC;AAAA,IAC7B,KAAK,aAAa;AAAA,IAClB;AAAA;AAAA,EAGJ,MAAM,GAAS;AAAA,IACX,KAAK,YAAY,YAAY,IAAI;AAAA;AAAA,EAGrC,YAAY,CAAC,SAAe,SAAqB;AAAA,IAC7C,KAAK,aAAa,SAAS,OAAO;AAAA,IAClC,KAAK,YAAY,OAAO;AAAA;AAAA,EAG5B,YAAY,CAAC,GAAW,GAAc;AAAA,IAClC,IAAI,KAAK,QAAQ,MAAM;AAAA,MAAI,OAAO,KAAK,MAAM;AAAA,IACxC;AAAA,WAAK,MAAM,KAAK,KAAK;AAAA,IAC1B;AAAA;AAAA,EAGJ,YAAY,CAAC,GAA+B;AAAA,IACxC,OAAO,KAAK,MAAM;AAAA;AAAA,EAGtB,eAAe,CAAC,GAAiB;AAAA,IAC7B,OAAO,KAAK,MAAM;AAAA,IAClB;AAAA;AAAA,MAGA,SAAS,GAKX;AAAA,IACE,OAAO,KAAK,eAAe,KAAK,aAAa;AAAA,MACzC,KAAK,IAAI,UAAoB;AAAA,QACzB,IAAI,MAAM,KAAK,aAAa;AAAA,QAC5B,WAAU,QAAQ;AAAA,UAAO,IAAI,IAAI,IAAI;AAAA,QACrC,KAAK,aAAa,GAAG;AAAA;AAAA,MAEzB,QAAQ,IAAI,UAAoB;AAAA,QAC5B,IAAI,MAAM,KAAK,aAAa;AAAA,QAC5B,WAAU,QAAQ;AAAA,UAAO,IAAI,OAAO,IAAI;AAAA,QACxC,KAAK,aAAa,GAAG;AAAA;AAAA,MAEzB,QAAQ,CAAC,MAAc,UAAoB;AAAA,QACvC,IAAI,UAAU,QAAS,UAAU,SAAS,CAAC,KAAK,aAAa,EAAE,IAAI,IAAI;AAAA,UAAI,KAAK,WAAY,IAAI,IAAI;AAAA,QAC/F;AAAA,eAAK,WAAY,OAAO,IAAI;AAAA;AAAA,MAErC,UAAU,CAAC,SAAiB,KAAK,aAAa,EAAE,IAAI,IAAI;AAAA,IAC5D;AAAA;AAAA,MAGA,aAAa,GAAwB;AAAA,IACrC,IAAI,KAAK,sBAAsB;AAAA,MAAS,OAAO,KAAK;AAAA,IACpD;AAAA;AAAA,EAGJ,YAAY,GAAgB;AAAA,IACxB,OAAO,IAAI,IAAI,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC;AAAA;AAAA,EAGtE,YAAY,CAAC,KAAwB;AAAA,IACjC,KAAK,aAAa,SAAS,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,SAAS;AAAA;AAAA,MAGxE,UAAU,GAAqB;AAAA,IAC/B,OAAO,KAAK,WAAW;AAAA;AAAA,MAGvB,SAAS,GAAqB;AAAA,IAC9B,OAAO,KAAK,WAAW,KAAK,WAAW,SAAS;AAAA;AAAA,MAGhD,WAAW,CAAC,MAAc;AAAA,IAC1B,KAAK,aAAa,CAAC,IAAI,SAAS,IAAI,CAAC;AAAA;AAAA,MAGrC,WAAW,GAAG;AAAA,IACd,IAAI,OAAO;AAAA,IACX,SAAQ,SAAS,KAAK,YAAY;AAAA,MAC9B,IAAI,iBAAiB,UAAU;AAAA,QAC3B,QAAQ,MAAM;AAAA,MAClB;AAAA,IACJ;AAAA,IACA,OAAO;AAAA;AAAA,EAGX,gBAAgB,CAAC,UAA6B;AAAA,IAC1C,MAAM,UAAqB,CAAC;AAAA,IAC5B,KAAK,2BAA2B,UAAU,OAAO;AAAA,IACjD,OAAO;AAAA;AAAA,EAGH,0BAA0B,CAAC,UAAkB,SAA0B;AAAA,IAC3E,WAAW,SAAS,KAAK,YAAY;AAAA,MACjC,IAAI,iBAAiB,UAAS;AAAA,QAC1B,IAAI,MAAM,YAAY,UAAU;AAAA,UAC5B,QAAQ,KAAK,KAAK;AAAA,QACtB;AAAA,QACA,MAAM,2BAA2B,UAAU,OAAO;AAAA,MACtD;AAAA,IACJ;AAAA;AAAA,MAGA,SAAS,CAAC,MAAc;AAAA,IACxB,KAAK,aAAa,CAAC;AAAA,IACnB,IAAI,MAAM;AAAA,MACN,IAAI,IAAI,IAAI,SAAQ,oBAAoB;AAAA,MACxC,EAAE,cAAc;AAAA,MAChB,KAAK,YAAY,CAAC;AAAA,IACtB;AAAA;AAAA,MAGA,KAAK,CAAC,KAAa;AAAA,IACnB,IAAI,QAAQ;AAAA,MAAI,MAAM,IAAI,MAAM,2CAA2C;AAAA,IAC3E,KAAK,SAAS,CAAC;AAAA,IACf;AAAA;AAAA,MAGA,KAAK,GAA2B;AAAA,IAChC,SAAQ,KAAK,KAAK,QAAQ;AAAA,MACtB,IAAI,KAAK,OAAO,OAAO;AAAA,QAAI,OAAO,KAAK,OAAO;AAAA,IAClD;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,MAGZ,SAAS,CAAC,GAAW;AAAA,IACrB,KAAK,MAAM,QAAQ;AAAA,IACnB;AAAA;AAAA,MAGA,YAAY,GAAW;AAAA,IACvB,OAAO;AAAA;AAAA,MAGP,WAAW,GAAW;AAAA,IACtB,OAAO;AAAA;AAAA,MAGP,SAAS,GAAW;AAAA,IACpB,OAAO,KAAK,cAAc;AAAA;AAAA,MAG1B,SAAS,CAAC,OAAe;AAAA,IACzB,KAAK,aAAa;AAAA;AAAA,MAGlB,UAAU,GAAW;AAAA,IACrB,OAAO,KAAK,eAAe;AAAA;AAAA,MAG3B,UAAU,CAAC,OAAe;AAAA,IAC1B,KAAK,cAAc;AAAA;AAAA,EAGhB;AAAA,EACA;AAAA,EAEP,QAAQ,GAAW;AAAA,IACf,IAAI,MAAgB,CAAC;AAAA,IACrB,UAAS,QAAQ,OAAO,YAAY,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,GAAG,CAAC,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,GAA+C;AAAA,MACtJ,SAAQ,OAAO,OAAO,KAAK,KAAK,EAAE,KAAK,GAAG;AAAA,QACtC,MAAM,YAAY,UAAU,IAAI,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,GAAG,IAAI;AAAA,QAChF,MAAM,SAAS,YAAY;AAAA,QAC3B,IAAI,IAAI,OAAO,OAAO,cAAc,IAAI,MAAM;AAAA,UAAG;AAAA,QACjD,IAAI,QAAQ,KAAK,MAAM;AAAA,QACvB,IAAI,MAAM,QAAQ,GAAG,KAAK,KAAK,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,MAAM;AAAA,UAAQ,QAAQ,KAAK,UAAU,KAAK;AAAA,QACrG,IAAI,KAAK,SAAS,KAAK;AAAA,MAC3B;AAAA,IACJ;AAAA,IACA,SAAQ,SAAS,KAAK;AAAA,MAAY,IAAI,KAAK,MAAM,SAAS,CAAC;AAAA,IAE3D,MAAM,MAAM,KAAK,MAAM,WAAW,MAAM,KAAK,MAAM,SAAS,QAAQ,MAAM,GAAG,IAAI;AAAA,IACjF,OAAO,KAAK,UAAU,OAAO,IAAI,SAAS,IAAI,IAAI,KAAK,GAAG,OAAO;AAAA;AAAA,EAGrE,gBAAgB,CAAC,MAAc,MAAsB;AAAA,IACjD,KAAK,OAAO,QAAQ,KAAK,OAAO,SAAS,IAAI;AAAA,IAC7C,KAAK,OAAO,MAAM,IAAI,IAAI;AAAA,IAC1B;AAAA;AAAA,EAGJ,mBAAmB,CAAC,MAAc,MAAsB;AAAA,IACpD,IAAI,KAAK,OAAO,OAAO;AAAA,MACnB,IAAI,KAAK,OAAO,MAAM,OAAO,IAAI,GAAG;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA,EAGJ,KAAK,CAAC,MAA2D;AAAA,IAC7D,IAAI,OAAO,SAAS;AAAA,MAAU,OAAO,EAAC,MAAM,KAAI;AAAA,IAChD,IAAI,OAAO,KAAK;AAAA,IAChB,KAAK,SAAS;AAAA,IACd,KAAK,iBAAiB,QAAQ,GAAG;AAAA,IACjC,KAAK,kBAAkB,QAAQ,GAAG;AAAA,MAAE,KAAK,UAAU;AAAA;AAAA,IACnD,IAAI,OAAuB;AAAA,IAC3B,OAAM,QAAQ,CAAC,KAAK,SAAS;AAAA,MACzB,IAAI,QAAQ,KAAK,OAAO;AAAA,MACxB,IAAI,OAAO;AAAA,QACP,SAAQ,QAAQ,OAAO;AAAA,UACnB,KAAK,KAAK,MAAM,IAAI;AAAA,QACxB;AAAA,MACJ;AAAA,MACA,OAAO,KAAK;AAAA,IAChB;AAAA;AAAA,EAGJ,cAAc,CAAC,IAAiC;AAAA,IAC5C,IAAI,KAAK,MAAM,OAAO;AAAA,MAAI,OAAO;AAAA,IACjC,SAAQ,SAAS,KAAK,YAAY;AAAA,MAC9B,IAAI,iBAAiB,UAAS;AAAA,QAC1B,IAAI,KAAK,MAAM,eAAe,EAAE;AAAA,QAChC,IAAI;AAAA,UAAI,OAAO;AAAA,MACnB;AAAA,IACJ;AAAA,IACA;AAAA;AAER;AAIA,IAAM,YAAW;AAAA,EACb,eAAe,CAAC,QAAgB,IAAI,SAAQ,KAAK,8BAA8B;AAAA,EAC/E,iBAAiB,CAAC,cAAsB,QAAgB,IAAI,SAAQ,KAAK,YAAY;AAAA,EACrF,gBAAgB,CAAC,SAAiB,IAAI,SAAS,IAAI;AAAA,EACnD,MAAM,IAAI,SAAQ,QAAQ,8BAA8B;AAAA,EACxD,MAAM,IAAI,SAAQ,QAAQ,8BAA8B;AAC5D;AAAA;AAGA,MAAM,aAAa;AAAA,EACP,QAAgB;AAAA,MAEpB,IAAI,GAAW;AAAA,IAAE,OAAO,KAAK;AAAA;AAAA,MAC7B,IAAI,CAAC,OAAe;AAAA,IACpB,IAAI,MAAM,WAAW,GAAG,GAAG;AAAA,MAEvB,MAAM,aAAa,IAAI,IAAI,KAAK,KAAK;AAAA,MACrC,KAAK,QAAQ,GAAG,WAAW,aAAa,WAAW,OAAO;AAAA,IAC9D,EAAO;AAAA,MACH,KAAK,QAAQ;AAAA;AAAA;AAAA,MAIjB,IAAI,GAAW;AAAA,IACf,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,OAAO,IAAI;AAAA;AAAA,MAGX,QAAQ,GAAW;AAAA,IACnB,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,OAAO,IAAI;AAAA;AAAA,MAEX,QAAQ,CAAC,OAAe;AAAA,IACxB,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,IAAI,WAAW;AAAA,IACf,KAAK,QAAQ,IAAI;AAAA;AAAA,MAGjB,MAAM,GAAW;AAAA,IACjB,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,OAAO,IAAI;AAAA;AAAA,MAEX,MAAM,CAAC,OAAe;AAAA,IACtB,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,IAAI,SAAS;AAAA,IACb,KAAK,QAAQ,IAAI;AAAA;AAAA,MAGjB,IAAI,GAAW;AAAA,IACf,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,OAAO,IAAI;AAAA;AAAA,MAEX,IAAI,CAAC,OAAe;AAAA,IACpB,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAAA,IAC9B,IAAI,OAAO;AAAA,IACX,KAAK,QAAQ,IAAI;AAAA;AAEzB;AAAA;AAEA,MAAM,YAAY;AAAA,EACN,SAAc;AAAA,EACd,WAA6C,CAAC;AAAA,EAC9C,SAAiB;AAAA,EAEzB,WAAW,GAAG;AAAA,IAEV,KAAK,WAAW,CAAC,EAAC,KAAK,SAAS,MAAM,OAAO,KAAI,CAAC;AAAA;AAAA,MAGlD,KAAK,GAAQ;AAAA,IACb,OAAO,KAAK;AAAA;AAAA,EAGhB,SAAS,CAAC,OAAY,OAAe,KAAmB;AAAA,IAEpD,KAAK,WAAW,KAAK,SAAS,MAAM,GAAG,KAAK,SAAS,CAAC;AAAA,IAGtD,KAAK,SAAS,KAAK,EAAC,KAAK,MAAK,CAAC;AAAA,IAC/B,KAAK,SAAS,KAAK,SAAS,SAAS;AAAA,IACrC,KAAK,SAAS;AAAA,IAGd,SAAS,OAAO;AAAA;AAAA,EAGpB,YAAY,CAAC,OAAY,OAAe,KAAmB;AAAA,IAEvD,KAAK,SAAS,KAAK,UAAU,EAAC,KAAK,MAAK;AAAA,IACxC,KAAK,SAAS;AAAA,IAGd,SAAS,OAAO;AAAA;AAAA,EAGpB,EAAE,CAAC,OAAqB;AAAA,IACpB,MAAM,WAAW,KAAK,SAAS;AAAA,IAC/B,IAAI,YAAY,KAAK,WAAW,KAAK,SAAS,QAAQ;AAAA,MAClD,KAAK,SAAS;AAAA,MACd,MAAM,QAAQ,KAAK,SAAS,KAAK;AAAA,MACjC,KAAK,SAAS,MAAM;AAAA,MACpB,SAAS,OAAO,MAAM;AAAA,MAGtB,WAAW,MAAM;AAAA,QACb,MAAM,QAAQ;AAAA,UACV,MAAM;AAAA,UACN,OAAO,KAAK;AAAA,UACZ,QAAQ;AAAA,UACR,gBAAgB,MAAM;AAAA,UACtB,iBAAiB,MAAM;AAAA,QAC3B;AAAA,QACA,OAAO,cAAc,KAAK;AAAA,SAC3B,CAAC;AAAA,IACR;AAAA;AAAA,EAGJ,IAAI,GAAS;AAAA,IACT,KAAK,GAAG,EAAE;AAAA;AAAA,EAGd,OAAO,GAAS;AAAA,IACZ,KAAK,GAAG,CAAC;AAAA;AAAA,EAIb,MAAM,GAAS;AAAA,IACX,KAAK,SAAS;AAAA,IACd,KAAK,WAAW,CAAC,EAAC,KAAK,SAAS,MAAM,OAAO,KAAI,CAAC;AAAA,IAClD,KAAK,SAAS;AAAA;AAAA,EAGlB,UAAU,GAAW;AAAA,IACjB,OAAO,KAAK,SAAS;AAAA;AAE7B;AAAA;AAEA,MAAM,WAAW;AAAA,EACL,aAA4C,CAAC;AAAA,EAErD,gBAAgB,CAAC,MAAc,UAA0B;AAAA,IACrD,IAAI,CAAC,KAAK,WAAW,OAAO;AAAA,MACxB,KAAK,WAAW,QAAQ,IAAI;AAAA,IAChC;AAAA,IACA,KAAK,WAAW,MAAM,IAAI,QAAQ;AAAA;AAAA,EAGtC,mBAAmB,CAAC,MAAc,UAA0B;AAAA,IACxD,IAAI,KAAK,WAAW,OAAO;AAAA,MACvB,KAAK,WAAW,MAAM,OAAO,QAAQ;AAAA,IACzC;AAAA;AAAA,EAGJ,aAAa,CAAC,OAAkB;AAAA,IAC5B,MAAM,YAAY,KAAK,WAAW,MAAM;AAAA,IACxC,IAAI,WAAW;AAAA,MACX,WAAW,YAAY,WAAW;AAAA,QAC9B,SAAS,KAAK,MAAM,KAAK;AAAA,MAC7B;AAAA,IACJ;AAAA;AAAA,EAGJ,UAAU,CAAC,OAA+B;AAAA,IACtC,IAAI,CAAC,aAAa,IAAI,KAAK,GAAG;AAAA,MAC1B,aAAa,IAAI,OAAO,IAAI,eAAe,KAAK,CAAC;AAAA,IACrD;AAAA,IACA,OAAO,aAAa,IAAI,KAAK;AAAA;AAAA,EAIjC,MAAM,GAAS;AAAA,IACX,KAAK,aAAa,CAAC;AAAA;AAE3B;AAEA,IAAM,WAAW,IAAI;AACrB,IAAM,UAAU,IAAI;AACpB,IAAM,SAAS,IAAI;AAGZ,IAAM,oBAAoB,QAAQ,GAAS;AAAA,EAC9C,SAAS,OAAO;AAAA,EAChB,QAAQ,OAAO;AAAA;AAUnB,IAAI,WAA0B,CAAC;AAC/B,IAAI,cAAsB;AAC1B,IAAI,iBAAwB,CAAC;AAE7B,IAAM,iBAAiB,OAAO;AAC9B,IAAM,mBAAmB,OAAO;AAEhC,SAAS,QAAQ,CAAC,MAAmB;AAAA,EACjC,MAAM,MAAM,SAAS,QAAQ,IAAI;AAAA,EACjC,IAAI,MAAM;AAAA,IAAG;AAAA,EACb,SAAS,OAAO,KAAK,CAAC;AAAA,EACtB,IAAI,KAAK,OAAO;AAAA,IAAa,cAAc,KAAK;AAAA,EAChD,KAAK,KAAK;AAAA;AAGd,IAAM,aAAa,QAAQ,CAAC,MAAkB,MAAoB;AAAA,EAC9D,MAAM,OAAoB,EAAE,MAAM,MAAM,OAAO,aAAa,QAAQ,UAAW;AAAA,EAC/E,KAAK,SAAS,eAAe,MAAM;AAAA,IAC/B,IAAI;AAAA,MAAE,SAAS,IAAI;AAAA,MACnB,OAAO,GAAG;AAAA,MAAE,eAAe,KAAK,CAAC;AAAA;AAAA,KAClC,IAAI;AAAA,EACP,SAAS,KAAK,IAAI;AAAA;AAGtB,IAAM,iBAAiB,QAAQ,CAAC,MAAwB;AAAA,EACpD,MAAM,OAAoB,EAAE,MAAM,MAAM,GAAG,QAAQ,UAAW;AAAA,EAC9D,KAAK,SAAS,eAAe,MAAM;AAAA,IAC/B,IAAI;AAAA,MAAE,SAAS,IAAI;AAAA,MACnB,OAAO,GAAG;AAAA,MAAE,eAAe,KAAK,CAAC;AAAA;AAAA,KAClC,CAAC;AAAA,EACJ,SAAS,KAAK,IAAI;AAAA;AAMf,IAAM,WAAW,cAAc,CAAC,KAAa,GAAkB;AAAA,EAClE,IAAI,aAAa,cAAc;AAAA,EAC/B,OAAM,MAAM;AAAA,IACR,MAAM,IAAI,QAAQ,aAAW,eAAe,SAAS,CAAC,CAAC;AAAA,IAGvD,IAAI,eAAe,QAAQ;AAAA,MACvB,MAAM,MAAM,eAAe,MAAM;AAAA,MACjC,MAAM;AAAA,IACV;AAAA,IAEA,IAAI,CAAC,SAAS,QAAQ;AAAA,MAGlB,IAAI,UAAU;AAAA,MACd,SAAS,IAAI,EAAG,IAAI,KAAK,CAAC,SAAS,KAAK;AAAA,QACpC,MAAM,IAAI,QAAQ,aAAW,eAAe,SAAS,CAAC,CAAC;AAAA,QACvD,UAAU,SAAS,SAAS;AAAA,MAChC;AAAA,MACA,IAAI,CAAC;AAAA,QAAS;AAAA,IAClB;AAAA,IAGA,IAAI,cAAc;AAAA,IAClB,SAAQ,MAAM,EAAG,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC3C,IAAI,SAAS,KAAK,OAAO,SAAS,aAAa;AAAA,QAAM,cAAc;AAAA,IACvE;AAAA,IACA,IAAI,OAAO,SAAS;AAAA,IAEpB,IAAI,KAAK,OAAO;AAAA,MAAY;AAAA,IAG5B,SAAS,OAAO,aAAa,CAAC;AAAA,IAC9B,iBAAiB,KAAK,MAAM;AAAA,IAC5B,IAAI,KAAK,OAAO;AAAA,MAAa,cAAc,KAAK;AAAA,IAChD,MAAM,KAAK,KAAK;AAAA,EACpB;AAAA,EACA,cAAc;AAAA;AAGlB,IAAM,gBAAgB,IAAI,IAAI,6EAA6E,MAAM,GAAG,CAAC;AAAA;AAErH,MAAM,iBAAiB,KAAK;AAAA,EACxB;AAAA,EAEA,WAAW,CAAC,aAAqB;AAAA,IAC7B,MAAM;AAAA,IACN,KAAK,cAAc,KAAK;AAAA,IACxB;AAAA;AAAA,EAGJ,QAAQ,GAAW;AAAA,IACf,OAAO,KAAK,UAAU,KAAK,WAAW;AAAA;AAAA,EAG1C,MAAM,GAAG;AAAA,IACL,KAAK,YAAY,YAAY,IAAI;AAAA;AAEzC;AAEA,SAAS,gBAAgB,CAAC,IAAqC;AAAA,EAC3D,OAAO,GAAG;AAAA;AAAA;AAId,MAAM,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,EACQ,YAAuC,IAAI;AAAA,EAEnD,WAAW,CAAC,OAAe;AAAA,IACvB,KAAK,QAAQ;AAAA,IAEb,MAAM,SAAS,kBAAkB,IAAI,KAAK;AAAA,IAC1C,KAAK,UAAU,WAAW,YAAY,SAAU,MAAM,SAAS,MAAM,IAAI,QAAQ;AAAA;AAAA,EAGrF,gBAAgB,CAAC,MAAc,UAAgC;AAAA,IAC3D,IAAI,SAAS,UAAU;AAAA,MACnB,KAAK,UAAU,IAAI,QAAQ;AAAA,IAC/B;AAAA;AAAA,EAGJ,mBAAmB,CAAC,MAAc,UAAgC;AAAA,IAC9D,IAAI,SAAS,UAAU;AAAA,MACnB,KAAK,UAAU,OAAO,QAAQ;AAAA,IAClC;AAAA;AAAA,EAIJ,QAAQ,CAAC,SAAkB;AAAA,IACvB,KAAK,UAAU;AAAA,IACf,MAAM,QAAQ,EAAE,SAAS,OAAO,KAAK,MAAM;AAAA,IAC3C,WAAW,YAAY,KAAK,WAAW;AAAA,MACnC,SAAS,KAAK;AAAA,IAClB;AAAA;AAER;AAEA,IAAM,eAAe,IAAI;AACzB,IAAM,oBAAoB,IAAI;AAGvB,SAAS,aAAa,CAAC,OAAe,SAAkB;AAAA,EAC3D,kBAAkB,IAAI,OAAO,OAAO;AAAA,EAEpC,IAAI,aAAa,IAAI,KAAK,GAAG;AAAA,IACzB,aAAa,IAAI,KAAK,EAAG,SAAS,OAAO;AAAA,EAC7C;AAAA;AAKJ,IAAM,WAA2D,CAAC;AAClE,WAAW,QAAQ,gGAAgG,MAAM,GAAG,GAAG;AAAA,EAC3H,SAAS,QAAQ,MAAM;AAAA,IACnB,SAAS;AAAA,IACT,QAAQ,GAAG;AAAA,MACP,KAAK;AAAA,MACL,OAAO,aAAa;AAAA;AAAA,EAE5B;AACJ;AAGA,IAAM,UAAU,EAAC,MAAM,mBAAS,UAAU,qBAAU,QAAQ,YAAY,gBAAgB,kBAAkB,UAAU,SAAS,iBAAiB,SAAQ;AACtJ,OAAO,OAAO,QAAQ,OAAO;AAC7B,OAAO,OAAO,QAAQ,OAAO;;;AC1oB7B;AAKA;AAEA,SAAS,SAAS,CAAC,OAAY;AAAA,EAC9B,IAAI,iBAAiB,KAAK;AAAA,IACzB,IAAI,UAAoB,CAAC;AAAA,IACzB,MAAM,QAAQ,CAAC,QAAM,QAAQ,QAAQ,KAAK,KAAK,UAAU,GAAG,IAAE,OAAK,KAAK,UAAU,MAAK,CAAC,CAAC;AAAA,IACzF,OAAO,SAAS,QAAQ,KAAK,IAAI,IAAI;AAAA,EACtC,EAAO;AAAA,IACN,OAAO,KAAK,UAAU,KAAK;AAAA;AAAA;AAAA;AAItB,MAAM,oBAAoB,MAAM;AAAA,EACtC,WAAW,CAAC,MAAc,QAAa,UAAe,gBAAyB,OAAO;AAAA,IACrF,QAAQ;AAAA,cACI,UAAU,MAAM;AAAA,cAChB,gBAAgB,WAAW,UAAU,QAAQ;AAAA,IACzD,MAAM,IAAI;AAAA;AAEZ;AAEO,SAAS,MAAM,CAAC,MAAW,KAAoB;AAAA,EACrD,IAAI,CAAC;AAAA,IAAM,MAAM,IAAI,YAAY,gBAAgB,MAAM,OAAK,MAAM,MAAM,MAAM,qBAAqB,IAAI;AAAA;AAGjG,SAAS,cAAc,CAAC,QAAa,UAAuC,KAAoB;AAAA,EACtG,SAAU,KAAG;AAAA,EACb,IAAI,OAAO,QAAQ,QAAQ,IAAI;AAAA,IAAG,MAAM,IAAI,YAAY,mBAAmB,MAAM,OAAK,MAAM,MAAM,QAAQ,yBAAyB,aAAa,IAAI;AAAA;AAG9I,SAAS,OAAO,GAAW;AAAA,EACjC,OAAO,SAAS,KAAK,SAAS,EAAE,QAAQ,gBAAe,IAAI,EAAE,QAAQ,WAAU,EAAE;AAAA;AAG3E,SAAS,UAAU,CAAC,UAAwB;AAAA,EAClD,IAAI,SAAS,QAAQ;AAAA,EACrB,IAAI,WAAW;AAAA,IAAU,MAAM,IAAI,MAAM;AAAA,YAAgC;AAAA,YAAqB,UAAU;AAAA;AAIlG,SAAS,MAAM,GAAW;AAAA,EAChC,IAAI,MAAM;AAAA,EACV,WAAU,MAAM,SAAS,KAAK,YAAY;AAAA,IACzC,IAAI,cAAc,WAAW,GAAG,YAAY,SAAS;AAAA,MACpD,OAAO,GAAG,cAAc;AAAA;AAAA,IACzB;AAAA,EACD;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,SAAS,IAAI,UAAoB;AAAA,EAChD,MAAM,QAAQ,OAAO,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAK,CAAC;AAAA,EACnE,OAAO,KAAK,EAAE,QAAQ,QAAQ;AAAA;AAO/B,eAAsB,WAAW,CAAC,GAAQ,GAAwB;AAAA,EACjE,IAAI,OAAO,KAAK,YAAY;AAAA,IAC3B,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,IAAI;AAAA,IACH,MAAM,EAAE;AAAA,IACP,OAAM,GAAG;AAAA,IACJ,MAAM,IAAI,KAAG;AAAA,IACnB,IAAI,KAAK,EAAE,QAAQ,CAAC,IAAE;AAAA,MAAG,MAAM,IAAI,YAAY,mBAAmB,GAAG,yBAAyB,MAAM,IAAI;AAAA,IACxG;AAAA;AAAA,EAED,MAAM,IAAI,YAAY,sBAAsB,WAAW,yBAAyB,MAAM,IAAI;AAAA;AAGpF,IAAM,YAAmB;AAEzB,SAAS,gBAAgB,CAAC,UAA4C;AAAA,EAC5E,MAAM,SAAiB,UAAU;AAAA,EACjC,IAAI,SAAS,OAAK;AAAA,IAAM,OAAO,OAAO,GAAG,EAAE,QAAQ,SAAS,GAAG;AAAA,EAC/D,IAAI,SAAS,WAAS;AAAA,IAAM,OAAO,OAAO,OAAO,EAAE,QAAQ,SAAS,OAAO;AAAA;AAG5E,eAAsB,KAAK,GAAG;AAAA,EAC7B,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAAA,EACpB,EAAE,WAAW;AAAA,EACb,IAAI;AAAA,IACH,MAAc,SAAS,IAAI;AAAA,IAC3B,WAAW,EAAE;AAAA,YACZ;AAAA,IAEO,UAAU;AAAA;AAAA,EAEX,YAAY;AAAA,EACpB,EAAE,gBAAgB;AAAA;",
|
|
9
|
+
"debugId": "5CEC966923AD557764756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tutorial | Aberdeen - v1.
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tutorial | Aberdeen - v1.18.0</title><link rel="icon" href="../assets/favicon.png" type="image/png"/><meta name="description" content="Documentation for Aberdeen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script defer src="../assets/custom.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">Aberdeen - v1.18.0</a><div id="tsd-toolbar-links"><a href="https://aberdeenjs.org/">What's this?</a><a href="https://aberdeenjs.org/Tutorial/">Tutorial</a><a href="https://github.com/vanviegen/aberdeen">GitHub</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">Tutorial</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="tutorial" class="tsd-anchor-link">Tutorial<a href="#tutorial" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><h2 id="creating-elements" class="tsd-anchor-link">Creating elements<a href="#creating-elements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This is a complete Aberdeen application:</p>
|
|
2
2
|
<pre><code class="javascript"><span class="hl-0">import</span><span class="hl-1"> </span><span class="hl-2">A</span><span class="hl-1"> </span><span class="hl-0">from</span><span class="hl-1"> </span><span class="hl-3">'aberdeen'</span><span class="hl-1">;</span><br/><span class="hl-7">A</span><span class="hl-1">(</span><span class="hl-3">'h3#Hello world'</span><span class="hl-1">);</span>
|
|
3
3
|
</code><button type="button">Copy</button></pre>
|
|
4
4
|
|
|
@@ -302,4 +302,4 @@
|
|
|
302
302
|
<li><a href="https://aberdeenjs.org/modules.html">Reference documentation</a></li>
|
|
303
303
|
<li><a href="https://aberdeenjs.org/#examples">Examples</a></li>
|
|
304
304
|
</ul>
|
|
305
|
-
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#tutorial"><span>Tutorial</span></a><ul><li><a href="#creating-elements"><span>Creating elements</span></a></li><li><a href="#inline-styles"><span>Inline styles</span></a></li><li><ul><li><a href="#property-shortcuts"><span>Property shortcuts</span></a></li><li><a href="#css-variables"><span>CSS variables</span></a></li><li><a href="#spacing-variables"><span>Spacing variables</span></a></li></ul></li><li><a href="#nesting-content"><span>Nesting content</span></a></li><li><a href="#observable-objects"><span>Observable objects</span></a></li><li><a href="#conditional-rendering"><span>Conditional rendering</span></a></li><li><a href="#observable-primitive-values"><span>Observable primitive values</span></a></li><li><a href="#observable-arrays-and-sets"><span>Observable arrays and sets</span></a></li><li><a href="#typescript-and-classes"><span>Type<wbr/>Script and classes</span></a></li><li><a href="#efficient-list-rendering-with-aoneach"><span>Efficient list rendering with <wbr/>A.on<wbr/>Each</span></a></li><li><a href="#two-way-binding"><span>Two-<wbr/>way binding</span></a></li><li><a href="#css"><span>CSS</span></a></li><li><a href="#transitions"><span>Transitions</span></a></li><li><a href="#advanced-peeking-without-subscribing"><span>Advanced: <wbr/>Peeking without subscribing</span></a></li><li><a href="#derived-values"><span>Derived values</span></a></li><li><a href="#ui-components"><span>UI <wbr/>Components</span></a></li><li><a href="#debugging-with-adump"><span>Debugging with <wbr/>A.dump()</span></a></li><li><a href="#html-to-aberdeen"><span>html-<wbr/>to-<wbr/>aberdeen</span></a></li><li><a href="#routing"><span>Routing</span></a></li><li><a href="#prediction"><span>Prediction</span></a></li><li><a href="#full-example-multi-page-app"><span>Full <wbr/>Example: <wbr/>Multi-<wbr/>page <wbr/>App</span></a></li><li><a href="#further-reading"><span>Further reading</span></a></li></ul></div></details></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://aberdeenjs.org/" class="tsd-nav-link">What's this?</a><a href="https://aberdeenjs.org/Tutorial/" class="tsd-nav-link">Tutorial</a><a href="https://github.com/vanviegen/aberdeen" class="tsd-nav-link">GitHub</a></nav><nav class="tsd-navigation"><a href="../modules.html">Aberdeen - v1.
|
|
305
|
+
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#tutorial"><span>Tutorial</span></a><ul><li><a href="#creating-elements"><span>Creating elements</span></a></li><li><a href="#inline-styles"><span>Inline styles</span></a></li><li><ul><li><a href="#property-shortcuts"><span>Property shortcuts</span></a></li><li><a href="#css-variables"><span>CSS variables</span></a></li><li><a href="#spacing-variables"><span>Spacing variables</span></a></li></ul></li><li><a href="#nesting-content"><span>Nesting content</span></a></li><li><a href="#observable-objects"><span>Observable objects</span></a></li><li><a href="#conditional-rendering"><span>Conditional rendering</span></a></li><li><a href="#observable-primitive-values"><span>Observable primitive values</span></a></li><li><a href="#observable-arrays-and-sets"><span>Observable arrays and sets</span></a></li><li><a href="#typescript-and-classes"><span>Type<wbr/>Script and classes</span></a></li><li><a href="#efficient-list-rendering-with-aoneach"><span>Efficient list rendering with <wbr/>A.on<wbr/>Each</span></a></li><li><a href="#two-way-binding"><span>Two-<wbr/>way binding</span></a></li><li><a href="#css"><span>CSS</span></a></li><li><a href="#transitions"><span>Transitions</span></a></li><li><a href="#advanced-peeking-without-subscribing"><span>Advanced: <wbr/>Peeking without subscribing</span></a></li><li><a href="#derived-values"><span>Derived values</span></a></li><li><a href="#ui-components"><span>UI <wbr/>Components</span></a></li><li><a href="#debugging-with-adump"><span>Debugging with <wbr/>A.dump()</span></a></li><li><a href="#html-to-aberdeen"><span>html-<wbr/>to-<wbr/>aberdeen</span></a></li><li><a href="#routing"><span>Routing</span></a></li><li><a href="#prediction"><span>Prediction</span></a></li><li><a href="#full-example-multi-page-app"><span>Full <wbr/>Example: <wbr/>Multi-<wbr/>page <wbr/>App</span></a></li><li><a href="#further-reading"><span>Further reading</span></a></li></ul></div></details></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://aberdeenjs.org/" class="tsd-nav-link">What's this?</a><a href="https://aberdeenjs.org/Tutorial/" class="tsd-nav-link">Tutorial</a><a href="https://github.com/vanviegen/aberdeen" class="tsd-nav-link">GitHub</a></nav><nav class="tsd-navigation"><a href="../modules.html">Aberdeen - v1.18.0</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en" data-base="../../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>A | Aberdeen - v1.
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>A | Aberdeen - v1.18.0</title><link rel="icon" href="../../assets/favicon.png" type="image/png"/><meta name="description" content="Documentation for Aberdeen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../../assets/style.css"/><link rel="stylesheet" href="../../assets/highlight.css"/><script defer src="../../assets/main.js"></script><script defer src="../../assets/custom.js"></script><script async src="../../assets/icons.js" id="tsd-icons-script"></script><script async src="../../assets/search.js" id="tsd-search-script"></script><script async src="../../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../../index.html" class="title">Aberdeen - v1.18.0</a><div id="tsd-toolbar-links"><a href="https://aberdeenjs.org/">What's this?</a><a href="https://aberdeenjs.org/Tutorial/">Tutorial</a><a href="https://github.com/vanviegen/aberdeen">GitHub</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../">aberdeen</a></li><li><a href="" aria-current="page">A</a></li></ul><h1>Function A</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="a"><span class="tsd-kind-call-signature">A</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">...</span><span class="tsd-kind-parameter">args</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">Element</span><a href="#a" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>The core function for building reactive user interfaces in Aberdeen. It creates and inserts new DOM elements
|
|
2
2
|
and sets attributes/properties/event listeners on DOM elements. It does so in a reactive way, meaning that
|
|
3
3
|
changes will be (mostly) undone when the current <em>scope</em> is destroyed or will be re-execute.</p>
|
|
4
4
|
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-signature-symbol">...</span><span class="tsd-kind-parameter">args</span>: <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></span><div class="tsd-comment tsd-typography"><p>Any number of arguments can be given. How they're interpreted depends on their types:</p>
|
|
@@ -112,4 +112,4 @@ The elements must be separated by spaces, except before a <code>.cssClass</code>
|
|
|
112
112
|
</code><button type="button">Copy</button></pre>
|
|
113
113
|
|
|
114
114
|
<p>This is often used together with <a href="../ref/" class="tsd-kind-function">ref</a>, in order to use properties other than <code>.value</code>.</p>
|
|
115
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vanviegen/aberdeen/blob/
|
|
115
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vanviegen/aberdeen/blob/2ceb97ea9df980616e80ddf2bdec51c9edfa42cc/src/aberdeen.ts#L2410">aberdeen.ts:2410</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#string-arguments"><span>String arguments</span></a><a href="#function-arguments"><span>Function arguments</span></a><a href="#object-arguments"><span>Object arguments</span></a><a href="#dom-node-arguments"><span>DOM node arguments</span></a><a href="#property-rules"><span>Property rules</span></a><a href="#css-shortcuts"><span>CSS shortcuts</span></a></div></details></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://aberdeenjs.org/" class="tsd-nav-link">What's this?</a><a href="https://aberdeenjs.org/Tutorial/" class="tsd-nav-link">Tutorial</a><a href="https://github.com/vanviegen/aberdeen" class="tsd-nav-link">GitHub</a></nav><nav class="tsd-navigation"><a href="../../modules.html">Aberdeen - v1.18.0</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|