@@ -8,7 +8,7 @@ import type { Alias, AliasOptions } from 'types/alias'
8
8
import aliasPlugin from '@rollup/plugin-alias'
9
9
import { build } from 'esbuild'
10
10
import type { RollupOptions } from 'rollup'
11
- import type { Plugin } from './plugin'
11
+ import type { HookHandler , Plugin } from './plugin'
12
12
import type {
13
13
BuildOptions ,
14
14
RenderBuiltAssetUrl ,
@@ -33,7 +33,11 @@ import {
33
33
normalizeAlias ,
34
34
normalizePath
35
35
} from './utils'
36
- import { resolvePlugins } from './plugins'
36
+ import {
37
+ createPluginHookUtils ,
38
+ getSortedPluginsByHook ,
39
+ resolvePlugins
40
+ } from './plugins'
37
41
import type { ESBuildOptions } from './plugins/esbuild'
38
42
import {
39
43
CLIENT_ENTRY ,
@@ -289,7 +293,7 @@ export interface LegacyOptions {
289
293
buildSsrCjsExternalHeuristics ?: boolean
290
294
}
291
295
292
- export interface ResolveWorkerOptions {
296
+ export interface ResolveWorkerOptions extends PluginHookUtils {
293
297
format : 'es' | 'iife'
294
298
plugins : Plugin [ ]
295
299
rollupOptions : RollupOptions
@@ -334,9 +338,16 @@ export type ResolvedConfig = Readonly<
334
338
worker : ResolveWorkerOptions
335
339
appType : AppType
336
340
experimental : ExperimentalOptions
337
- }
341
+ } & PluginHookUtils
338
342
>
339
343
344
+ export interface PluginHookUtils {
345
+ getSortedPlugins : ( hookName : keyof Plugin ) => Plugin [ ]
346
+ getSortedPluginHooks : < K extends keyof Plugin > (
347
+ hookName : K
348
+ ) => NonNullable < HookHandler < Plugin [ K ] > > [ ]
349
+ }
350
+
340
351
export type ResolveFn = (
341
352
id : string ,
342
353
importer ?: string ,
@@ -431,9 +442,11 @@ export async function resolveConfig(
431
442
432
443
// run config hooks
433
444
const userPlugins = [ ...prePlugins , ...normalPlugins , ...postPlugins ]
434
- for ( const p of userPlugins ) {
435
- if ( p . config ) {
436
- const res = await p . config ( config , configEnv )
445
+ for ( const p of getSortedPluginsByHook ( 'config' , userPlugins ) ) {
446
+ const hook = p . config
447
+ const handler = hook && 'handler' in hook ? hook . handler : hook
448
+ if ( handler ) {
449
+ const res = await handler ( config , configEnv )
437
450
if ( res ) {
438
451
config = mergeConfig ( config , res )
439
452
}
@@ -598,9 +611,11 @@ export async function resolveConfig(
598
611
...workerNormalPlugins ,
599
612
...workerPostPlugins
600
613
]
601
- for ( const p of workerUserPlugins ) {
602
- if ( p . config ) {
603
- const res = await p . config ( workerConfig , configEnv )
614
+ for ( const p of getSortedPluginsByHook ( 'config' , workerUserPlugins ) ) {
615
+ const hook = p . config
616
+ const handler = hook && 'handler' in hook ? hook . handler : hook
617
+ if ( handler ) {
618
+ const res = await handler ( workerConfig , configEnv )
604
619
if ( res ) {
605
620
workerConfig = mergeConfig ( workerConfig , res )
606
621
}
@@ -609,7 +624,9 @@ export async function resolveConfig(
609
624
const resolvedWorkerOptions : ResolveWorkerOptions = {
610
625
format : workerConfig . worker ?. format || 'iife' ,
611
626
plugins : [ ] ,
612
- rollupOptions : workerConfig . worker ?. rollupOptions || { }
627
+ rollupOptions : workerConfig . worker ?. rollupOptions || { } ,
628
+ getSortedPlugins : undefined ! ,
629
+ getSortedPluginHooks : undefined !
613
630
}
614
631
615
632
const resolvedConfig : ResolvedConfig = {
@@ -660,7 +677,9 @@ export async function resolveConfig(
660
677
importGlobRestoreExtension : false ,
661
678
hmrPartialAccept : false ,
662
679
...config . experimental
663
- }
680
+ } ,
681
+ getSortedPlugins : undefined ! ,
682
+ getSortedPluginHooks : undefined !
664
683
}
665
684
const resolved : ResolvedConfig = {
666
685
...config ,
@@ -673,31 +692,34 @@ export async function resolveConfig(
673
692
normalPlugins ,
674
693
postPlugins
675
694
)
695
+ Object . assign ( resolved , createPluginHookUtils ( resolved . plugins ) )
676
696
677
697
const workerResolved : ResolvedConfig = {
678
698
...workerConfig ,
679
699
...resolvedConfig ,
680
700
isWorker : true ,
681
701
mainConfig : resolved
682
702
}
683
-
684
703
resolvedConfig . worker . plugins = await resolvePlugins (
685
704
workerResolved ,
686
705
workerPrePlugins ,
687
706
workerNormalPlugins ,
688
707
workerPostPlugins
689
708
)
709
+ Object . assign (
710
+ resolvedConfig . worker ,
711
+ createPluginHookUtils ( resolvedConfig . worker . plugins )
712
+ )
690
713
691
714
// call configResolved hooks
692
- await Promise . all (
693
- userPlugins
694
- . map ( ( p ) => p . configResolved ?.( resolved ) )
695
- . concat (
696
- resolvedConfig . worker . plugins . map ( ( p ) =>
697
- p . configResolved ?.( workerResolved )
698
- )
699
- )
700
- )
715
+ await Promise . all ( [
716
+ ...resolved
717
+ . getSortedPluginHooks ( 'configResolved' )
718
+ . map ( ( hook ) => hook ( resolved ) ) ,
719
+ ...resolvedConfig . worker
720
+ . getSortedPluginHooks ( 'configResolved' )
721
+ . map ( ( hook ) => hook ( workerResolved ) )
722
+ ] )
701
723
702
724
// validate config
703
725
0 commit comments