Skip to content

Commit 64cb060

Browse files
committed
address pr comments
1 parent 0114d5e commit 64cb060

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

src/lazy-define.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ const ready = new Promise<void>(resolve => {
66
if (document.readyState !== 'loading') {
77
resolve()
88
} else {
9-
document.addEventListener('readystatechange', () => resolve(), {once: true})
9+
document.addEventListener('readystatechange', () => resolve(), { once: true })
1010
}
1111
})
1212

1313
const firstInteraction = new Promise<void>(resolve => {
1414
const controller = new AbortController()
1515
controller.signal.addEventListener('abort', () => resolve())
16-
const listenerOptions = {once: true, passive: true, signal: controller.signal}
16+
const listenerOptions = { once: true, passive: true, signal: controller.signal }
1717
const handler = () => controller.abort()
1818

1919
document.addEventListener('mousedown', handler, listenerOptions)
@@ -65,11 +65,12 @@ function scan(element: ElementLike) {
6565
if (scanTimer != null) return
6666
scanTimer = requestAnimationFrame(() => {
6767
scanTimer = null
68+
const elements = new Set(pendingElements)
69+
pendingElements.clear()
6870
if (!dynamicElements.size) {
69-
pendingElements.clear()
7071
return
7172
}
72-
for (const el of pendingElements) {
73+
outer: for (const el of elements) {
7374
for (const tagName of dynamicElements.keys()) {
7475
const child: Element | null = el instanceof Element && el.matches(tagName) ? el : el.querySelector(tagName)
7576
if (customElements.get(tagName) || child) {
@@ -78,10 +79,10 @@ function scan(element: ElementLike) {
7879
// eslint-disable-next-line github/no-then
7980
for (const cb of dynamicElements.get(tagName) || []) strategy(tagName).then(cb)
8081
dynamicElements.delete(tagName)
82+
if (!dynamicElements.size) break outer
8183
}
8284
}
8385
}
84-
pendingElements.clear()
8586
})
8687
}
8788

@@ -91,7 +92,7 @@ export function lazyDefine(object: Record<string, () => void>): void
9192
export function lazyDefine(tagName: string, callback: () => void): void
9293
export function lazyDefine(tagNameOrObj: string | Record<string, () => void>, singleCallback?: () => void) {
9394
if (typeof tagNameOrObj === 'string' && singleCallback) {
94-
tagNameOrObj = {[tagNameOrObj]: singleCallback}
95+
tagNameOrObj = { [tagNameOrObj]: singleCallback }
9596
}
9697
for (const [tagName, callback] of Object.entries(tagNameOrObj)) {
9798
if (!dynamicElements.has(tagName)) dynamicElements.set(tagName, new Set<() => void>())
@@ -112,5 +113,5 @@ export function observe(target: ElementLike): void {
112113

113114
scan(target)
114115

115-
elementLoader.observe(target, {subtree: true, childList: true})
116+
elementLoader.observe(target, { subtree: true, childList: true })
116117
}

0 commit comments

Comments
 (0)