@@ -56,50 +56,28 @@ export default function withAsyncComponents(app : React$Element) : Promise<Resul
56
56
} )
57
57
}
58
58
59
- const doWalk = ( el , ctx = { } , fetchRoot = false ) => {
60
- const resolvers = [ ]
59
+ const visitor = ( element , instance , context ) => {
60
+ if ( instance && typeof instance . getAsyncComponentData === 'function' ) {
61
+ const { id, ssrMode, getResolver } = instance . getAsyncComponentData ( )
61
62
62
- const visitor = ( element , instance , context ) => {
63
- const skipRoot = ! fetchRoot && ( element === el )
64
- if ( instance
65
- && typeof instance . getAsyncComponentData === 'function'
66
- && ! skipRoot
67
- ) {
68
- const { id, defer, getResolver } = instance . getAsyncComponentData ( )
63
+ const isBoundary = context . asyncComponentsAncestor &&
64
+ context . asyncComponentsAncestor . isBoundary
69
65
70
- if ( rehydrateState ) {
71
- if ( ! rehydrateState . resolved [ id ] ) {
72
- return false
73
- }
74
- rehydrateState [ id ] = false
75
- } else if ( defer ) {
76
- // Deferred, so return false to stop walking down this branch.
66
+ if ( rehydrateState != null ) {
67
+ if ( ! rehydrateState . resolved [ id ] ) {
77
68
return false
78
69
}
79
-
80
- const resolver = getResolver ( )
81
- resolvers . push ( {
82
- resolver,
83
- element,
84
- context : Object . assign ( context , { ASYNC_WALKER_BOUNDARY : true } ) ,
85
- } )
70
+ rehydrateState [ id ] = false
71
+ } else if ( ssrMode === 'defer' || isBoundary ) {
72
+ // Deferred, so return false to stop walking down this branch.
86
73
return false
87
74
}
88
- return undefined
75
+ return getResolver ( )
89
76
}
90
-
91
- reactTreeWalker ( el , visitor , ctx )
92
-
93
- const nestedPromises = resolvers . map ( ( { resolver, element, context } ) =>
94
- resolver . then ( ( ) => doWalk ( element , context ) ) ,
95
- )
96
-
97
- return nestedPromises . length > 0
98
- ? Promise . all ( nestedPromises )
99
- : Promise . resolve ( [ ] )
77
+ return true
100
78
}
101
79
102
- return doWalk ( appWithAsyncComponents , { } , true )
80
+ return reactTreeWalker ( appWithAsyncComponents , visitor , { } )
103
81
// Swallow errors.
104
82
. catch ( ( ) => undefined )
105
83
// Ensure that state rehydration is killed
0 commit comments