@@ -4,7 +4,8 @@ use arcstr::ArcStr;
44use rolldown_common:: ModuleType ;
55use rolldown_plugin:: {
66 HookLoadArgs , HookLoadOutput , HookLoadReturn , HookResolveIdArgs , HookResolveIdOutput ,
7- HookResolveIdReturn , HookUsage , Plugin , PluginContext , SharedLoadPluginContext ,
7+ HookResolveIdReturn , HookUsage , Plugin , PluginContext , PluginHookMeta , PluginOrder ,
8+ SharedLoadPluginContext ,
89} ;
910use rolldown_utils:: {
1011 dashmap:: FxDashMap ,
@@ -27,6 +28,15 @@ impl Plugin for DataUriPlugin {
2728 Cow :: Borrowed ( "builtin:data-uri" )
2829 }
2930
31+ fn register_hook_usage ( & self ) -> HookUsage {
32+ HookUsage :: ResolveId | HookUsage :: Load
33+ }
34+
35+ fn resolve_id_meta ( & self ) -> Option < PluginHookMeta > {
36+ // Users might have other plugins to handle data URLs, we should give them a chance to do so by resolving data URLs as late as possible.
37+ Some ( PluginHookMeta { order : Some ( PluginOrder :: PinPost ) } )
38+ }
39+
3040 async fn resolve_id (
3141 & self ,
3242 _ctx : & PluginContext ,
@@ -66,6 +76,11 @@ impl Plugin for DataUriPlugin {
6676 Ok ( None )
6777 }
6878
79+ fn load_meta ( & self ) -> Option < PluginHookMeta > {
80+ // If a `data URL` is resolved by this plugin, we want to provide the content directly without letting other plugins or rolldown to handle it.
81+ Some ( PluginHookMeta { order : Some ( PluginOrder :: Pre ) } )
82+ }
83+
6984 async fn load ( & self , _ctx : SharedLoadPluginContext , args : & HookLoadArgs < ' _ > ) -> HookLoadReturn {
7085 if is_data_url ( args. id ) {
7186 let Some ( resolved) = self . resolved_data_uri . get ( args. id ) else {
@@ -81,8 +96,4 @@ impl Plugin for DataUriPlugin {
8196 Ok ( None )
8297 }
8398 }
84-
85- fn register_hook_usage ( & self ) -> HookUsage {
86- HookUsage :: ResolveId | HookUsage :: Load
87- }
8899}
0 commit comments