rspack_plugin_devtool/
lib.rs1mod eval_dev_tool_module_plugin;
2mod eval_source_map_dev_tool_plugin;
3mod generate_debug_id;
4mod module_filename_helpers;
5mod source_map_dev_tool_module_options_plugin;
6mod source_map_dev_tool_plugin;
7
8use std::sync::{Arc, LazyLock};
9
10pub use eval_dev_tool_module_plugin::*;
11pub use eval_source_map_dev_tool_plugin::*;
12use futures::future::BoxFuture;
13use rspack_core::{ModuleIdentifier, runtime_mode::RuntimeMode};
14use rspack_error::Result;
15pub use source_map_dev_tool_module_options_plugin::*;
16pub use source_map_dev_tool_plugin::*;
17
18static WEBPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE: LazyLock<ModuleFilenameTemplate> =
19 LazyLock::new(|| {
20 ModuleFilenameTemplate::String("webpack://[namespace]/[resourcePath]".to_string())
21 });
22static RSPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE: LazyLock<ModuleFilenameTemplate> =
23 LazyLock::new(|| {
24 ModuleFilenameTemplate::String("rspack://[namespace]/[resourcePath]".to_string())
25 });
26static WEBPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE_WITH_HASH: LazyLock<ModuleFilenameTemplate> =
27 LazyLock::new(|| {
28 ModuleFilenameTemplate::String("webpack://[namespace]/[resourcePath]?[hash]".to_string())
29 });
30static RSPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE_WITH_HASH: LazyLock<ModuleFilenameTemplate> =
31 LazyLock::new(|| {
32 ModuleFilenameTemplate::String("rspack://[namespace]/[resourcePath]?[hash]".to_string())
33 });
34
35pub(crate) fn default_source_map_module_filename_template(
36 runtime_mode: RuntimeMode,
37) -> &'static ModuleFilenameTemplate {
38 match runtime_mode {
39 RuntimeMode::Webpack => &WEBPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE,
40 RuntimeMode::Rspack => &RSPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE,
41 }
42}
43
44pub(crate) fn default_source_map_fallback_module_filename_template(
45 runtime_mode: RuntimeMode,
46) -> &'static ModuleFilenameTemplate {
47 match runtime_mode {
48 RuntimeMode::Webpack => &WEBPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE_WITH_HASH,
49 RuntimeMode::Rspack => &RSPACK_SOURCE_MAP_MODULE_FILENAME_TEMPLATE_WITH_HASH,
50 }
51}
52
53pub(crate) fn default_eval_module_filename_template(
54 runtime_mode: RuntimeMode,
55) -> &'static ModuleFilenameTemplate {
56 default_source_map_fallback_module_filename_template(runtime_mode)
57}
58
59pub type ModuleFilenameTemplateFn =
60 Arc<dyn Fn(ModuleFilenameTemplateFnCtx) -> BoxFuture<'static, Result<String>> + Sync + Send>;
61
62pub struct ModuleFilenameTemplateFnCtx {
63 pub identifier: String,
64 pub short_identifier: String,
65 pub resource: String,
66 pub resource_path: String,
67 pub absolute_resource_path: String,
68 pub relative_resource_path: Option<String>,
69 pub loaders: String,
70 pub all_loaders: String,
71 pub query: String,
72 pub module_id: String,
73 pub hash: String,
74 pub namespace: String,
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Hash)]
78enum SourceReference {
79 Source(Arc<str>),
80 Module(ModuleIdentifier),
81}