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};