Skip to main content

rspack_plugin_devtool/
lib.rs

1mod 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}