Skip to content

Commit f3f5061

Browse files
authored
refactor: move collectTypescriptInfo out of rspackExperiments (#12535)
1 parent 1c5ec4b commit f3f5061

File tree

25 files changed

+160
-105
lines changed

25 files changed

+160
-105
lines changed

crates/rspack_loader_swc/src/lib.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,7 @@ impl SwcLoader {
125125
if !is_typescript {
126126
return;
127127
}
128-
let Some(options) = &self
129-
.options_with_additional
130-
.rspack_experiments
131-
.collect_typescript_info
132-
else {
128+
let Some(options) = &self.options_with_additional.collect_typescript_info else {
133129
return;
134130
};
135131
collected_ts_info = Some(collect_typescript_info(

crates/rspack_loader_swc/src/options.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use swc_core::base::config::{
1414
#[serde(rename_all = "camelCase", default)]
1515
pub struct RawRspackExperiments {
1616
pub import: Option<Vec<RawImportOptions>>,
17-
pub collect_type_script_info: Option<RawCollectTypeScriptInfoOptions>,
1817
}
1918

2019
#[derive(Default, Deserialize, Debug)]
@@ -27,7 +26,6 @@ pub struct RawCollectTypeScriptInfoOptions {
2726
#[derive(Default, Debug)]
2827
pub(crate) struct RspackExperiments {
2928
pub(crate) import: Option<Vec<ImportOptions>>,
30-
pub(crate) collect_typescript_info: Option<CollectTypeScriptInfoOptions>,
3129
}
3230

3331
#[derive(Default, Debug)]
@@ -49,7 +47,6 @@ impl From<RawRspackExperiments> for RspackExperiments {
4947
import: value
5048
.import
5149
.map(|i| i.into_iter().map(|v| v.into()).collect()),
52-
collect_typescript_info: value.collect_type_script_info.map(|v| v.into()),
5350
}
5451
}
5552
}
@@ -113,6 +110,9 @@ pub struct SwcLoaderJsOptions {
113110
#[serde(default)]
114111
pub source_map_ignore_list: Option<FilePattern>,
115112

113+
#[serde(default)]
114+
pub collect_type_script_info: Option<RawCollectTypeScriptInfoOptions>,
115+
116116
#[serde(default)]
117117
pub rspack_experiments: Option<RawRspackExperiments>,
118118
}
@@ -123,6 +123,7 @@ pub(crate) struct SwcCompilerOptionsWithAdditional {
123123
raw_options: String,
124124
pub(crate) swc_options: Options,
125125
pub(crate) rspack_experiments: RspackExperiments,
126+
pub(crate) collect_typescript_info: Option<CollectTypeScriptInfoOptions>,
126127
}
127128

128129
impl AsRefStrConverter for SwcCompilerOptionsWithAdditional {
@@ -156,6 +157,7 @@ impl TryFrom<&str> for SwcCompilerOptionsWithAdditional {
156157
error,
157158
is_module,
158159
schema,
160+
collect_type_script_info,
159161
rspack_experiments,
160162
source_map_ignore_list,
161163
} = option;
@@ -191,6 +193,7 @@ impl TryFrom<&str> for SwcCompilerOptionsWithAdditional {
191193
..serde_json::from_value(serde_json::Value::Object(Default::default()))?
192194
},
193195
rspack_experiments: rspack_experiments.unwrap_or_default().into(),
196+
collect_typescript_info: collect_type_script_info.map(|v| v.into()),
194197
})
195198
}
196199
}

packages/rspack/etc/core.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7907,6 +7907,7 @@ export type SwcLoaderModuleConfig = ModuleConfig;
79077907
// @public (undocumented)
79087908
export type SwcLoaderOptions = Config_2 & {
79097909
isModule?: boolean | "unknown";
7910+
collectTypeScriptInfo?: CollectTypeScriptInfoOptions;
79107911
rspackExperiments?: {
79117912
import?: PluginImportOptions;
79127913
collectTypeScriptInfo?: CollectTypeScriptInfoOptions;

packages/rspack/src/builtin-loader/swc/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,19 @@ export type SwcLoaderTsParserConfig = TsParserConfig;
2020
export type SwcLoaderTransformConfig = TransformConfig;
2121
export type SwcLoaderOptions = Config & {
2222
isModule?: boolean | "unknown";
23+
/**
24+
* Collects information from TypeScript's AST for consumption by subsequent Rspack processes,
25+
* providing better TypeScript development experience and smaller output bundle size.
26+
*/
27+
collectTypeScriptInfo?: CollectTypeScriptInfoOptions;
2328
/**
2429
* Experimental features provided by Rspack.
2530
* @experimental
2631
*/
2732
rspackExperiments?: {
2833
import?: PluginImportOptions;
2934
/**
35+
* @deprecated Use top-level `collectTypeScriptInfo` instead.
3036
* Collects information from TypeScript's AST for consumption by subsequent Rspack processes,
3137
* providing better TypeScript development experience and smaller output bundle size.
3238
*/

packages/rspack/src/config/adapterRuleUse.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { type LoaderObject, parsePathQueryFragment } from "../loader-runner";
1313
import type { Logger } from "../logging/Logger";
1414
import type { Module } from "../Module";
1515
import type { ResolveRequest } from "../Resolver";
16-
import { isNil } from "../util";
16+
import { deprecate, isNil } from "../util";
1717
import type Hash from "../util/hash";
1818
import type { RspackOptionsNormalized } from "./normalization";
1919
import type {
@@ -499,6 +499,13 @@ const getSwcLoaderOptions: GetLoaderOptions = (options, _) => {
499499
options.jsc.experimental ??= {};
500500
options.jsc.experimental.disableAllLints ??= true;
501501

502+
// resolve top-level `collectTypeScriptInfo` options (stable API)
503+
if (options.collectTypeScriptInfo) {
504+
options.collectTypeScriptInfo = resolveCollectTypeScriptInfo(
505+
options.collectTypeScriptInfo
506+
);
507+
}
508+
502509
// resolve `rspackExperiments.import` options
503510
const { rspackExperiments } = options;
504511
if (rspackExperiments) {
@@ -508,9 +515,17 @@ const getSwcLoaderOptions: GetLoaderOptions = (options, _) => {
508515
);
509516
}
510517
if (rspackExperiments.collectTypeScriptInfo) {
511-
rspackExperiments.collectTypeScriptInfo = resolveCollectTypeScriptInfo(
512-
rspackExperiments.collectTypeScriptInfo
518+
deprecate(
519+
"`rspackExperiments.collectTypeScriptInfo` is deprecated and will be removed in Rspack v2.0. Use top-level `collectTypeScriptInfo` instead."
513520
);
521+
// If top-level is not set, use rspackExperiments config
522+
if (!options.collectTypeScriptInfo) {
523+
options.collectTypeScriptInfo = resolveCollectTypeScriptInfo(
524+
rspackExperiments.collectTypeScriptInfo
525+
);
526+
}
527+
// Remove from rspackExperiments to avoid duplication
528+
delete rspackExperiments.collectTypeScriptInfo;
514529
}
515530
}
516531
}

tests/rspack-test/configCases/inline-enum/basic/rspack.config.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@ function config(index, { concatenateModules } = {}) {
2525
},
2626
target: "esnext"
2727
},
28-
rspackExperiments: {
29-
collectTypeScriptInfo: {
30-
exportedEnum: true
31-
}
28+
collectTypeScriptInfo: {
29+
exportedEnum: true
3230
}
3331
}
3432
}

tests/rspack-test/configCases/inline-enum/cjs/rspack.config.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ module.exports = {
1818
},
1919
target: "esnext"
2020
},
21-
rspackExperiments: {
22-
collectTypeScriptInfo: {
23-
exportedEnum: true
24-
}
21+
collectTypeScriptInfo: {
22+
exportedEnum: true
2523
}
2624
}
2725
}

tests/rspack-test/configCases/inline-enum/const-enum-only/rspack.config.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@ module.exports = {
1717
},
1818
target: "esnext"
1919
},
20-
rspackExperiments: {
21-
collectTypeScriptInfo: {
22-
exportedEnum: "const-only"
23-
}
20+
collectTypeScriptInfo: {
21+
exportedEnum: "const-only"
2422
}
2523
}
2624
}

tests/rspack-test/configCases/inline-enum/enum-dynamically-defined/rspack.config.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@ module.exports = {
1717
},
1818
target: "esnext"
1919
},
20-
rspackExperiments: {
21-
collectTypeScriptInfo: {
22-
exportedEnum: true
23-
}
20+
collectTypeScriptInfo: {
21+
exportedEnum: true
2422
}
2523
}
2624
}

tests/rspack-test/configCases/inline-enum/enum-expression/rspack.config.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ module.exports = {
1818
},
1919
target: "esnext"
2020
},
21-
rspackExperiments: {
22-
collectTypeScriptInfo: {
23-
exportedEnum: true
24-
}
21+
collectTypeScriptInfo: {
22+
exportedEnum: true
2523
}
2624
}
2725
}

0 commit comments

Comments
 (0)