use std::{borrow::Cow, sync::Arc};
use rolldown::{BundlerOptions, InputItem};
use rolldown_plugin::{
HookResolveIdArgs, HookResolveIdOutput, HookResolveIdReturn, HookUsage, Plugin, PluginContext,
};
use rolldown_testing::{manual_integration_test, test_config::TestMeta};
#[derive(Debug)]
struct TestPlugin;
impl Plugin for TestPlugin {
fn name(&self) -> Cow<'static, str> {
"test-plugin".into()
}
async fn resolve_id(
&self,
_ctx: &PluginContext,
args: &HookResolveIdArgs<'_>,
) -> HookResolveIdReturn {
if args.specifier == "ext" {
return Ok(Some(HookResolveIdOutput {
id: arcstr::literal!("ext"),
external: Some(true.into()),
..Default::default()
}));
}
Ok(None)
}
fn register_hook_usage(&self) -> HookUsage {
HookUsage::ResolveId
}
}
#[tokio::test(flavor = "multi_thread")]
async fn test() {
manual_integration_test!()
.build(TestMeta { expect_error: true, ..Default::default() })
.run_with_plugins(
BundlerOptions {
input: Some(vec![InputItem { name: Some("ext".to_string()), import: "ext".to_string() }]),
..Default::default()
},
vec![Arc::new(TestPlugin)],
)
.await;
}