@@ -34,8 +34,17 @@ export function morph(from, toHtml, options) {
3434 }
3535
3636 let updateChildrenOnly = false
37-
38- if ( shouldSkip ( updating , from , to , ( ) => updateChildrenOnly = true ) ) return
37+ let skipChildren = false
38+
39+ // If we used `shouldSkip()` here and append the `skipChildren` function on the end, it will cause the signature of the `updating`
40+ // hook to change. For example, when it was `shouldSkip()` the signature was `updating: (el, toEl, childrenOnly, skip)`. But if
41+ // we append `skipChildren()`, it would make the signature `updating: (el, toEl, childrenOnly, skipChildren, skip)`. This is
42+ // a breaking change due to how the `shouldSkip()` function is structured.
43+ //
44+ // So we're using `shouldSkipChildren()` instead which doesn't have this problem as it allows us to pass in the `skipChildren()`
45+ // function as an earlier parameter and then append it to the `updating` hook signature manually. The signature of `updating`
46+ // hook is now `updating: (el, toEl, childrenOnly, skip, skipChildren)`.
47+ if ( shouldSkipChildren ( updating , ( ) => skipChildren = true , from , to , ( ) => updateChildrenOnly = true ) ) return
3948
4049 // Initialize the server-side HTML element with Alpine...
4150 if ( from . nodeType === 1 && window . Alpine ) {
@@ -60,7 +69,9 @@ export function morph(from, toHtml, options) {
6069
6170 updated ( from , to )
6271
63- patchChildren ( from , to )
72+ if ( ! skipChildren ) {
73+ patchChildren ( from , to )
74+ }
6475 }
6576
6677 function differentElementNamesTypesOrKeys ( from , to ) {
@@ -386,6 +397,19 @@ function shouldSkip(hook, ...args) {
386397 return skip
387398}
388399
400+ // Due to the structure of the `shouldSkip()` function, we can't pass in the `skipChildren`
401+ // function as an argument as it would change the signature of the existing hooks. So we
402+ // are using this function instead which doesn't have this problem as we can pass the
403+ // `skipChildren` function in as an earlier argument and then append it to the end
404+ // of the hook signature manually.
405+ function shouldSkipChildren ( hook , skipChildren , ...args ) {
406+ let skip = false
407+
408+ hook ( ...args , ( ) => skip = true , skipChildren )
409+
410+ return skip
411+ }
412+
389413let patched = false
390414
391415export function createElement ( html ) {
0 commit comments