Skip to content

Commit cf44664

Browse files
committed
fix(rust): correct hooks order of DataUriPlugin
1 parent f3d97fc commit cf44664

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

crates/rolldown/src/utils/apply_inner_plugins.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ pub fn apply_inner_plugins(
2121
options: &NormalizedBundlerOptions,
2222
user_plugins: &mut Vec<SharedPluginable>,
2323
) -> ApplyInnerPluginsReturn {
24-
let mut before_user_plugins: Vec<SharedPluginable> =
25-
vec![Arc::new(rolldown_plugin_oxc_runtime::OxcRuntimePlugin)];
24+
let mut before_user_plugins: Vec<SharedPluginable> = vec![
25+
Arc::new(rolldown_plugin_data_uri::DataUriPlugin::default()),
26+
Arc::new(rolldown_plugin_oxc_runtime::OxcRuntimePlugin),
27+
];
2628

2729
let mut lazy_compilation_context = None;
2830

@@ -47,8 +49,6 @@ pub fn apply_inner_plugins(
4749
user_plugins.splice(0..0, before_user_plugins);
4850
}
4951

50-
user_plugins.push(Arc::new(rolldown_plugin_data_uri::DataUriPlugin::default()));
51-
5252
let copy_module_plugin =
5353
rolldown_plugin_copy_module::CopyModulePlugin::new(&options.module_types);
5454
if copy_module_plugin.is_active() {

crates/rolldown_plugin_data_uri/src/lib.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use arcstr::ArcStr;
44
use rolldown_common::ModuleType;
55
use rolldown_plugin::{
66
HookLoadArgs, HookLoadOutput, HookLoadReturn, HookResolveIdArgs, HookResolveIdOutput,
7-
HookResolveIdReturn, HookUsage, Plugin, PluginContext, SharedLoadPluginContext,
7+
HookResolveIdReturn, HookUsage, Plugin, PluginContext, PluginHookMeta, PluginOrder,
8+
SharedLoadPluginContext,
89
};
910
use 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

Comments
 (0)