rspack_plugin_dll/
lib.rs

1use rspack_cacheable::{
2  cacheable,
3  with::{AsPreset, AsVec},
4};
5use rspack_core::{BuildMeta, LibraryType, ModuleId};
6use rspack_util::atom::Atom;
7use rustc_hash::FxHashMap as HashMap;
8use serde::{Serialize, ser::SerializeSeq};
9
10mod dll_entry;
11mod dll_reference;
12mod flag_all_modules_as_used_plugin;
13mod lib_manifest_plugin;
14
15pub type DllManifestContent = HashMap<String, DllManifestContentItem>;
16
17#[cacheable]
18#[derive(Debug, Default, Clone)]
19pub enum DllManifestContentItemExports {
20  #[default]
21  True,
22  Vec(#[cacheable(with=AsVec<AsPreset>)] Vec<Atom>),
23}
24
25impl Serialize for DllManifestContentItemExports {
26  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
27  where
28    S: serde::Serializer,
29  {
30    match self {
31      DllManifestContentItemExports::True => serializer.serialize_bool(true),
32      DllManifestContentItemExports::Vec(vec) => {
33        let mut seq = serializer.serialize_seq(Some(vec.len()))?;
34        for item in vec {
35          seq.serialize_element(item)?;
36        }
37        seq.end()
38      }
39    }
40  }
41}
42
43#[cacheable]
44#[derive(Debug, Default, Clone, Serialize)]
45#[serde(rename_all = "camelCase")]
46pub struct DllManifestContentItem {
47  pub build_meta: BuildMeta,
48
49  #[serde(skip_serializing_if = "Option::is_none")]
50  pub exports: Option<DllManifestContentItemExports>,
51
52  #[serde(skip_serializing_if = "Option::is_none")]
53  pub id: Option<ModuleId>,
54}
55
56#[derive(Debug, Clone, Serialize)]
57pub struct DllManifest {
58  pub content: DllManifestContent,
59
60  #[serde(skip_serializing_if = "Option::is_none")]
61  pub name: Option<String>,
62
63  #[serde(skip_serializing_if = "Option::is_none")]
64  pub r#type: Option<LibraryType>,
65}
66
67pub use dll_entry::dll_entry_plugin::{DllEntryPlugin, DllEntryPluginOptions};
68pub use dll_reference::dll_reference_agency_plugin::{
69  DllReferenceAgencyPlugin, DllReferenceAgencyPluginOptions,
70};
71pub use flag_all_modules_as_used_plugin::FlagAllModulesAsUsedPlugin;
72pub use lib_manifest_plugin::{LibManifestPlugin, LibManifestPluginOptions};