@@ -112,14 +112,15 @@ function scan(element: ElementLike) {
112112 // FIX 7: Early return optimization
113113 if ( pending . size === 0 ) return
114114
115- // FIX 7: Create snapshot to iterate safely
115+ // FIX 7: Create snapshot to prevent modification-during-iteration issues
116+ // (concurrent scans may delete tags from pending)
116117 const tagList = Array . from ( pending . keys ( ) )
117118
118119 for ( const tagName of tagList ) {
119120 const child : Element | null =
120121 element instanceof Element && element . matches ( tagName ) ? element : element . querySelector ( tagName )
121122 if ( customElements . get ( tagName ) || child ) {
122- // Skip if already triggered and no longer in pending
123+ // Skip if already processed and not re-registered
123124 if ( triggered . has ( tagName ) && ! pending . has ( tagName ) ) continue
124125
125126 triggered . add ( tagName )
@@ -167,8 +168,9 @@ export function lazyDefine(tagNameOrObj: string | Record<string, () => void>, si
167168 }
168169
169170 for ( const [ tagName , callback ] of Object . entries ( tagNameOrObj ) ) {
170- // FIX 6: Late registration - execute immediately if already triggered AND elements exist
171- if ( triggered . has ( tagName ) && document . querySelector ( tagName ) !== null ) {
171+ // FIX 6: Late registration - execute immediately if already triggered
172+ // Check both triggered state and element existence to avoid executing for removed elements
173+ if ( triggered . has ( tagName ) && document . querySelector ( tagName ) ) {
172174 // eslint-disable-next-line github/no-then
173175 Promise . resolve ( ) . then ( ( ) => {
174176 try {
0 commit comments