mod amd_library_plugin;
mod assign_library_plugin;
mod export_property_library_plugin;
mod module_library_plugin;
mod system_library_plugin;
mod umd_library_plugin;
mod utils;
use std::path::PathBuf;
pub use amd_library_plugin::AmdLibraryPlugin;
pub use assign_library_plugin::*;
pub use export_property_library_plugin::ExportPropertyLibraryPlugin;
use rspack_core::{BoxPlugin, PluginExt};
use rspack_plugin_esm_library::EsmLibraryPlugin;
use rspack_plugin_split_chunks::CacheGroup;
pub use system_library_plugin::SystemLibraryPlugin;
pub use umd_library_plugin::UmdLibraryPlugin;
use crate::module_library_plugin::ModuleLibraryPlugin;
pub fn enable_library_plugin(
library_type: String,
preserve_modules: Option<PathBuf>,
split_chunks: Option<Vec<CacheGroup>>,
plugins: &mut Vec<BoxPlugin>,
) {
let ns_object_used = library_type != "module";
match library_type.as_str() {
"var" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec![]),
declare: true,
unnamed: Unnamed::Error,
named: None,
})
.boxed(),
),
"assign-properties" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec![]),
declare: false,
unnamed: Unnamed::Error,
named: Some(Named::Copy),
})
.boxed(),
),
"assign" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec![]),
declare: false,
unnamed: Unnamed::Error,
named: None,
})
.boxed(),
),
"this" | "window" | "self" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type: library_type.clone(),
prefix: Prefix::Array(vec![library_type]),
declare: false,
unnamed: Unnamed::Copy,
named: None,
})
.boxed(),
),
"global" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Global,
declare: false,
unnamed: Unnamed::Copy,
named: None,
})
.boxed(),
),
"commonjs" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec!["exports".to_string()]),
declare: false,
unnamed: Unnamed::Copy,
named: None,
})
.boxed(),
),
"commonjs-static" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec!["exports".to_string()]),
declare: false,
unnamed: Unnamed::Static,
named: None,
})
.boxed(),
),
"commonjs2" | "commonjs-module" => plugins.push(
AssignLibraryPlugin::new(AssignLibraryPluginOptions {
library_type,
prefix: Prefix::Array(vec!["module".to_string(), "exports".to_string()]),
declare: false,
unnamed: Unnamed::Assign,
named: None,
})
.boxed(),
),
"umd" | "umd2" => {
plugins
.push(ExportPropertyLibraryPlugin::new(library_type.clone(), ns_object_used, true).boxed());
plugins.push(UmdLibraryPlugin::new("umd2" == library_type, library_type).boxed());
}
"amd" | "amd-require" => {
plugins
.push(ExportPropertyLibraryPlugin::new(library_type.clone(), ns_object_used, true).boxed());
plugins.push(AmdLibraryPlugin::new("amd-require" == library_type, library_type).boxed());
}
"module" => {
plugins
.push(ExportPropertyLibraryPlugin::new(library_type.clone(), ns_object_used, true).boxed());
plugins.push(ModuleLibraryPlugin::default().boxed());
}
"modern-module" => {
plugins.push(
rspack_plugin_remove_duplicate_modules::RemoveDuplicateModulesPlugin::default().boxed(),
);
plugins.push(EsmLibraryPlugin::new(preserve_modules, split_chunks).boxed());
}
"system" => {
plugins.push(
ExportPropertyLibraryPlugin::new(library_type.clone(), library_type != "module", true)
.boxed(),
);
plugins.push(SystemLibraryPlugin::default().boxed());
}
_ => {}
}
}