@@ -148,17 +148,33 @@ export class ModuleGraph {
148
148
) : Promise < Set < ModuleNode > | undefined > {
149
149
mod . isSelfAccepting = isSelfAccepting
150
150
const prevImports = mod . importedModules
151
- const nextImports = ( mod . importedModules = new Set ( ) )
152
151
let noLongerImported : Set < ModuleNode > | undefined
152
+
153
+ let resolvePromises = [ ]
154
+ let resolveResults = new Array ( importedModules . size )
155
+ let index = 0
153
156
// update import graph
154
157
for ( const imported of importedModules ) {
155
- const dep =
156
- typeof imported === 'string'
157
- ? await this . ensureEntryFromUrl ( imported , ssr )
158
- : imported
159
- dep . importers . add ( mod )
160
- nextImports . add ( dep )
158
+ const nextIndex = index ++
159
+ if ( typeof imported === 'string' ) {
160
+ resolvePromises . push (
161
+ this . ensureEntryFromUrl ( imported , ssr ) . then ( ( dep ) => {
162
+ dep . importers . add ( mod )
163
+ resolveResults [ nextIndex ] = dep
164
+ } ) ,
165
+ )
166
+ } else {
167
+ imported . importers . add ( mod )
168
+ resolveResults [ nextIndex ] = imported
169
+ }
170
+ }
171
+
172
+ if ( resolvePromises . length ) {
173
+ await Promise . all ( resolvePromises )
161
174
}
175
+
176
+ const nextImports = ( mod . importedModules = new Set ( resolveResults ) )
177
+
162
178
// remove the importer from deps that were imported but no longer are.
163
179
prevImports . forEach ( ( dep ) => {
164
180
if ( ! nextImports . has ( dep ) ) {
@@ -169,15 +185,30 @@ export class ModuleGraph {
169
185
}
170
186
}
171
187
} )
188
+
172
189
// update accepted hmr deps
173
- const deps = ( mod . acceptedHmrDeps = new Set ( ) )
190
+ resolvePromises = [ ]
191
+ resolveResults = new Array ( acceptedModules . size )
192
+ index = 0
174
193
for ( const accepted of acceptedModules ) {
175
- const dep =
176
- typeof accepted === 'string'
177
- ? await this . ensureEntryFromUrl ( accepted , ssr )
178
- : accepted
179
- deps . add ( dep )
194
+ const nextIndex = index ++
195
+ if ( typeof accepted === 'string' ) {
196
+ resolvePromises . push (
197
+ this . ensureEntryFromUrl ( accepted , ssr ) . then ( ( dep ) => {
198
+ resolveResults [ nextIndex ] = dep
199
+ } ) ,
200
+ )
201
+ } else {
202
+ resolveResults [ nextIndex ] = accepted
203
+ }
204
+ }
205
+
206
+ if ( resolvePromises . length ) {
207
+ await Promise . all ( resolvePromises )
180
208
}
209
+
210
+ mod . acceptedHmrDeps = new Set ( resolveResults )
211
+
181
212
// update accepted hmr exports
182
213
mod . acceptedHmrExports = acceptedExports
183
214
mod . importedBindings = importedBindings
0 commit comments