turbopack/module_options/
module_options_context.rs1use std::fmt::Debug;
2
3use serde::{Deserialize, Serialize};
4use turbo_esregex::EsRegex;
5use turbo_rcstr::RcStr;
6use turbo_tasks::{FxIndexMap, NonLocalValue, ResolvedVc, ValueDefault, Vc, trace::TraceRawVcs};
7use turbo_tasks_fs::FileSystemPath;
8use turbopack_core::{
9 chunk::{MinifyType, SourceMapsType},
10 condition::ContextCondition,
11 environment::Environment,
12 resolve::options::ImportMapping,
13};
14use turbopack_ecmascript::{TreeShakingMode, references::esm::UrlRewriteBehavior};
15pub use turbopack_mdx::MdxTransformOptions;
16use turbopack_node::{
17 execution_context::ExecutionContext,
18 transforms::{postcss::PostCssTransformOptions, webpack::WebpackLoaderItems},
19};
20
21use super::ModuleRule;
22
23#[derive(Clone, PartialEq, Eq, Debug, TraceRawVcs, Serialize, Deserialize, NonLocalValue)]
24pub struct LoaderRuleItem {
25 pub loaders: ResolvedVc<WebpackLoaderItems>,
26 pub rename_as: Option<RcStr>,
27}
28
29#[derive(Default)]
30#[turbo_tasks::value(transparent)]
31pub struct WebpackRules(FxIndexMap<RcStr, LoaderRuleItem>);
32
33#[derive(Default)]
34#[turbo_tasks::value(transparent)]
35pub struct OptionWebpackRules(Option<ResolvedVc<WebpackRules>>);
36
37#[derive(Default)]
38#[turbo_tasks::value(transparent)]
39pub struct WebpackConditions(pub FxIndexMap<RcStr, ConditionItem>);
40
41#[derive(Default)]
42#[turbo_tasks::value(transparent)]
43pub struct OptionWebpackConditions(Option<ResolvedVc<WebpackConditions>>);
44
45#[derive(Clone, PartialEq, Eq, Debug, TraceRawVcs, Serialize, Deserialize, NonLocalValue)]
46pub enum ConditionPath {
47 Glob(RcStr),
48 Regex(ResolvedVc<EsRegex>),
49}
50
51#[turbo_tasks::value(shared)]
52#[derive(Clone, Debug)]
53pub struct ConditionItem {
54 pub path: ConditionPath,
55}
56
57#[turbo_tasks::value(shared)]
58#[derive(Clone, Debug)]
59pub struct WebpackLoadersOptions {
60 pub rules: ResolvedVc<WebpackRules>,
61 pub conditions: ResolvedVc<OptionWebpackConditions>,
62 pub loader_runner_package: Option<ResolvedVc<ImportMapping>>,
63}
64
65#[derive(Clone, PartialEq, Eq, Debug, TraceRawVcs, Serialize, Deserialize, NonLocalValue)]
68pub enum DecoratorsKind {
69 Legacy,
70 Ecma,
71}
72
73#[derive(Clone, PartialEq, Eq, Debug, TraceRawVcs, Serialize, Deserialize, NonLocalValue)]
75pub enum TypeofWindow {
76 Object,
77 Undefined,
78}
79
80#[turbo_tasks::value(shared)]
86#[derive(Default, Clone, Debug)]
87pub struct DecoratorsOptions {
88 pub decorators_kind: Option<DecoratorsKind>,
89 pub emit_decorators_metadata: bool,
94 pub decorators_before_export: bool,
99 pub use_define_for_class_fields: bool,
100}
101
102#[turbo_tasks::value_impl]
103impl ValueDefault for DecoratorsOptions {
104 #[turbo_tasks::function]
105 fn value_default() -> Vc<Self> {
106 Self::default().cell()
107 }
108}
109
110#[turbo_tasks::value(shared)]
113#[derive(Default, Clone, Debug)]
114pub struct TypescriptTransformOptions {
115 pub use_define_for_class_fields: bool,
116}
117
118#[turbo_tasks::value_impl]
119impl ValueDefault for TypescriptTransformOptions {
120 #[turbo_tasks::function]
121 fn value_default() -> Vc<Self> {
122 Self::default().cell()
123 }
124}
125
126#[turbo_tasks::value(shared)]
128#[derive(Default, Clone, Debug)]
129pub struct JsxTransformOptions {
130 pub development: bool,
131 pub react_refresh: bool,
132 pub import_source: Option<RcStr>,
133 pub runtime: Option<RcStr>,
134}
135
136#[turbo_tasks::value(shared)]
137#[derive(Clone, Default)]
138#[serde(default)]
139pub struct ModuleOptionsContext {
140 pub ecmascript: EcmascriptOptionsContext,
141 pub css: CssOptionsContext,
142
143 pub enable_postcss_transform: Option<ResolvedVc<PostCssTransformOptions>>,
144 pub enable_webpack_loaders: Option<ResolvedVc<WebpackLoadersOptions>>,
145 pub enable_mdx: bool,
148 pub enable_mdx_rs: Option<ResolvedVc<MdxTransformOptions>>,
149
150 pub preset_env_versions: Option<ResolvedVc<Environment>>,
151 pub execution_context: Option<ResolvedVc<ExecutionContext>>,
152 pub side_effect_free_packages: Vec<RcStr>,
153 pub tree_shaking_mode: Option<TreeShakingMode>,
154
155 pub enable_externals_tracing: Option<ResolvedVc<FileSystemPath>>,
161
162 pub keep_last_successful_parse: bool,
166
167 pub module_rules: Vec<ModuleRule>,
169 pub rules: Vec<(ContextCondition, ResolvedVc<ModuleOptionsContext>)>,
172 pub placeholder_for_future_extensions: (),
173}
174
175#[turbo_tasks::value(shared)]
176#[derive(Clone, Default)]
177#[serde(default)]
178pub struct EcmascriptOptionsContext {
179 pub enable_typeof_window_inlining: Option<TypeofWindow>,
180 pub enable_jsx: Option<ResolvedVc<JsxTransformOptions>>,
181 pub enable_types: bool,
184 pub enable_typescript_transform: Option<ResolvedVc<TypescriptTransformOptions>>,
185 pub enable_decorators: Option<ResolvedVc<DecoratorsOptions>>,
186 pub esm_url_rewrite_behavior: Option<UrlRewriteBehavior>,
187 pub import_externals: bool,
190 pub ignore_dynamic_requests: bool,
194 pub source_maps: SourceMapsType,
196
197 pub placeholder_for_future_extensions: (),
198}
199
200#[turbo_tasks::value(shared)]
201#[derive(Clone, Default)]
202#[serde(default)]
203pub struct CssOptionsContext {
204 pub enable_raw_css: bool,
210
211 pub minify_type: MinifyType,
212
213 pub source_maps: SourceMapsType,
215
216 pub placeholder_for_future_extensions: (),
217}
218
219#[turbo_tasks::value_impl]
220impl ValueDefault for ModuleOptionsContext {
221 #[turbo_tasks::function]
222 fn value_default() -> Vc<Self> {
223 Self::cell(Default::default())
224 }
225}