Skip to content

Commit 28abee8

Browse files
authored
refactor: remove as much getRawOptions as possible (#8773)
1 parent 0352d73 commit 28abee8

File tree

21 files changed

+894
-1117
lines changed

21 files changed

+894
-1117
lines changed

crates/node_binding/binding.d.ts

Lines changed: 21 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export declare class EntryOptionsDto {
3232
get runtime(): false | string | undefined
3333
set runtime(chunkLoading: boolean | string | undefined)
3434
get chunkLoading(): string | undefined
35-
set chunkLoading(chunkLoading: string | undefined)
35+
set chunkLoading(chunkLoading: string | false | undefined)
3636
get asyncChunks(): boolean | undefined
3737
set asyncChunks(asyncChunks: boolean | undefined)
3838
get baseUri(): string | undefined
@@ -612,7 +612,7 @@ export interface JsEntryData {
612612
export interface JsEntryOptions {
613613
name?: string
614614
runtime?: false | string
615-
chunkLoading?: string
615+
chunkLoading?: false | string
616616
asyncChunks?: boolean
617617
publicPath?: "auto" | JsFilename
618618
baseUri?: string
@@ -686,7 +686,7 @@ export interface JsLibraryAuxiliaryComment {
686686
export interface JsLibraryCustomUmdObject {
687687
amd?: string
688688
commonjs?: string
689-
root?: Array<string>
689+
root?: Array<string> | string
690690
}
691691

692692
export interface JsLibraryName {
@@ -697,11 +697,11 @@ export interface JsLibraryName {
697697
}
698698

699699
export interface JsLibraryOptions {
700-
name?: JsLibraryName
701-
export?: Array<string>
702-
libraryType: string
700+
name?: string | Array<string> | JsLibraryCustomUmdObject
701+
export?: Array<string> | string
702+
type: string
703703
umdNamedDefine?: boolean
704-
auxiliaryComment?: JsLibraryAuxiliaryComment
704+
auxiliaryComment?: string | JsLibraryAuxiliaryComment
705705
amdContainer?: string
706706
}
707707

@@ -1198,14 +1198,6 @@ export interface RawCacheGroupOptions {
11981198

11991199
export interface RawCacheOptions {
12001200
type: string
1201-
maxGenerations: number
1202-
maxAge: number
1203-
profile: boolean
1204-
buildDependencies: Array<string>
1205-
cacheDirectory: string
1206-
cacheLocation: string
1207-
name: string
1208-
version: string
12091201
}
12101202

12111203
export interface RawConsumeOptions {
@@ -1274,12 +1266,6 @@ export interface RawCopyRspackPluginOptions {
12741266
patterns: Array<RawCopyPattern>
12751267
}
12761268

1277-
export interface RawCrossOriginLoading {
1278-
type: "bool" | "string"
1279-
stringPayload?: string
1280-
boolPayload?: boolean
1281-
}
1282-
12831269
export interface RawCssAutoGeneratorOptions {
12841270
exportsConvention?: "as-is" | "camel-case" | "camel-case-only" | "dashes" | "dashes-only"
12851271
exportsOnly?: boolean
@@ -1381,8 +1367,8 @@ export interface RawEvalDevToolModulePluginOptions {
13811367
sourceUrlComment?: string
13821368
}
13831369

1384-
export interface RawExperimentCacheOptionsCommon {
1385-
type: "disable"|"memory"
1370+
export interface RawExperimentCacheOptionsMemory {
1371+
type: "memory" | "disable"
13861372
}
13871373

13881374
export interface RawExperimentCacheOptionsPersistent {
@@ -1396,9 +1382,9 @@ export interface RawExperimentCacheOptionsPersistent {
13961382
export interface RawExperiments {
13971383
layers: boolean
13981384
topLevelAwait: boolean
1399-
incremental?: RawIncremental
1400-
rspackFuture: RawRspackFuture
1401-
cache: RawExperimentCacheOptionsPersistent | RawExperimentCacheOptionsCommon
1385+
incremental?: false | { [key: string]: boolean }
1386+
rspackFuture?: RawRspackFuture
1387+
cache: RawExperimentCacheOptionsPersistent | RawExperimentCacheOptionsMemory | boolean
14021388
}
14031389

14041390
export interface RawExperimentSnapshotOptions {
@@ -1745,26 +1731,23 @@ export interface RawOccurrenceChunkIdsPluginOptions {
17451731

17461732
export interface RawOptimizationOptions {
17471733
removeAvailableModules: boolean
1748-
sideEffects: string
1749-
usedExports: string
1734+
sideEffects: boolean | string
1735+
usedExports: boolean | string
17501736
providedExports: boolean
17511737
innerGraph: boolean
1752-
mangleExports: string
1738+
mangleExports: boolean | string
17531739
concatenateModules: boolean
17541740
}
17551741

17561742
export interface RawOptions {
17571743
mode?: undefined | 'production' | 'development' | 'none'
1758-
target: Array<string>
17591744
context: string
17601745
output: RawOutputOptions
17611746
resolve: RawResolveOptions
17621747
resolveLoader: RawResolveOptions
17631748
module: RawModuleOptions
1764-
devtool: string
17651749
optimization: RawOptimizationOptions
17661750
stats: RawStatsOptions
1767-
snapshot: RawSnapshotOptions
17681751
cache: RawCacheOptions
17691752
experiments: RawExperiments
17701753
node?: RawNodeOption
@@ -1780,12 +1763,12 @@ export interface RawOutputOptions {
17801763
clean: boolean | JsCleanOptions
17811764
publicPath: "auto" | JsFilename
17821765
assetModuleFilename: JsFilename
1783-
wasmLoading: string
1766+
wasmLoading: string | false
17841767
enabledWasmLoadingTypes: Array<string>
17851768
webassemblyModuleFilename: string
17861769
filename: JsFilename
17871770
chunkFilename: JsFilename
1788-
crossOriginLoading: RawCrossOriginLoading
1771+
crossOriginLoading: string | false
17891772
cssFilename: JsFilename
17901773
cssChunkFilename: JsFilename
17911774
hotUpdateMainFilename: string
@@ -1801,7 +1784,7 @@ export interface RawOutputOptions {
18011784
importMetaName: string
18021785
iife: boolean
18031786
module: boolean
1804-
chunkLoading: string
1787+
chunkLoading: string | false
18051788
chunkLoadTimeout: number
18061789
charset: boolean
18071790
enabledChunkLoadingTypes?: Array<string>
@@ -1812,10 +1795,10 @@ export interface RawOutputOptions {
18121795
hashDigestLength: number
18131796
hashSalt?: string
18141797
asyncChunks: boolean
1815-
workerChunkLoading: string
1816-
workerWasmLoading: string
1798+
workerChunkLoading: string | false
1799+
workerWasmLoading: string | false
18171800
workerPublicPath: string
1818-
scriptType: "module" | "text/javascript" | "false"
1801+
scriptType: "module" | "text/javascript" | false
18191802
environment: RawEnvironment
18201803
compareBeforeEmit: boolean
18211804
}
@@ -1963,10 +1946,6 @@ export interface RawSizeLimitsPluginOptions {
19631946
maxEntrypointSize?: number
19641947
}
19651948

1966-
export interface RawSnapshotOptions {
1967-
1968-
}
1969-
19701949
export interface RawSourceMapDevToolPluginOptions {
19711950
append?: (false | null) | string | Function
19721951
columns?: boolean

crates/rspack_binding_values/src/compilation/entries.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use rspack_napi::napi::bindgen_prelude::*;
44

55
use crate::{
66
dependency::JsDependency, entry::JsEntryOptions, library::JsLibraryOptions, JsDependencyWrapper,
7+
RawChunkLoading, WithFalse,
78
};
89

910
#[napi]
@@ -58,12 +59,15 @@ impl EntryOptionsDTO {
5859
}
5960
}
6061

61-
#[napi(setter)]
62-
pub fn set_chunk_loading(&mut self, chunk_loading: Either<String, ()>) {
63-
self.0.chunk_loading = match chunk_loading {
64-
Either::A(s) => Some(Into::into(s.as_str())),
65-
Either::B(_) => None,
66-
};
62+
#[napi(setter, ts_type = "(chunkLoading: string | false | undefined)")]
63+
pub fn set_chunk_loading(&mut self, chunk_loading: Either<RawChunkLoading, ()>) {
64+
match chunk_loading {
65+
Either::A(WithFalse::False) => self.0.chunk_loading = Some(ChunkLoading::Disable),
66+
Either::A(WithFalse::True(s)) => {
67+
self.0.chunk_loading = Some(ChunkLoading::Enable(s.as_str().into()))
68+
}
69+
Either::B(_) => self.0.chunk_loading = None,
70+
}
6771
}
6872

6973
#[napi(getter)]

crates/rspack_binding_values/src/options/entry.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use napi_derive::napi;
33
use rspack_core::{EntryOptions, EntryRuntime};
44

55
use super::library::JsLibraryOptions;
6-
use crate::JsFilename;
6+
use crate::{JsFilename, RawChunkLoading};
77

88
#[derive(Debug)]
99
#[napi(object, object_to_js = false)]
@@ -34,7 +34,8 @@ pub struct JsEntryOptions {
3434
pub name: Option<String>,
3535
#[napi(ts_type = "false | string")]
3636
pub runtime: Option<JsEntryRuntime>,
37-
pub chunk_loading: Option<String>,
37+
#[napi(ts_type = "false | string")]
38+
pub chunk_loading: Option<RawChunkLoading>,
3839
pub async_chunks: Option<bool>,
3940
#[napi(ts_type = "\"auto\" | JsFilename")]
4041
pub public_path: Option<JsFilename>,
@@ -50,7 +51,7 @@ impl From<JsEntryOptions> for EntryOptions {
5051
Self {
5152
name: value.name,
5253
runtime: value.runtime.map(|r| JsEntryRuntimeWrapper(r).into()),
53-
chunk_loading: value.chunk_loading.as_deref().map(Into::into),
54+
chunk_loading: value.chunk_loading.map(Into::into),
5455
async_chunks: value.async_chunks,
5556
public_path: value.public_path.map(Into::into),
5657
base_uri: value.base_uri,

crates/rspack_binding_values/src/options/library.rs

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1+
use std::vec;
2+
3+
use napi::bindgen_prelude::Either3;
14
use napi_derive::napi;
25
use rspack_core::LibraryAuxiliaryComment;
36
use rspack_core::{LibraryCustomUmdObject, LibraryName, LibraryNonUmdObject, LibraryOptions};
7+
use rspack_napi::napi::bindgen_prelude::Either;
48

59
#[derive(Debug)]
610
#[napi(object)]
711
pub struct JsLibraryCustomUmdObject {
812
pub amd: Option<String>,
913
pub commonjs: Option<String>,
10-
pub root: Option<Vec<String>>,
14+
pub root: Option<Either<Vec<String>, String>>,
1115
}
1216

1317
impl From<JsLibraryCustomUmdObject> for LibraryCustomUmdObject {
1418
fn from(value: JsLibraryCustomUmdObject) -> Self {
1519
Self {
1620
amd: value.amd,
1721
commonjs: value.commonjs,
18-
root: value.root,
22+
root: value.root.map(|v| match v {
23+
Either::A(v) => v,
24+
Either::B(v) => vec![v],
25+
}),
1926
}
2027
}
2128
}
@@ -25,7 +32,7 @@ impl From<LibraryCustomUmdObject> for JsLibraryCustomUmdObject {
2532
Self {
2633
amd: value.amd,
2734
commonjs: value.commonjs,
28-
root: value.root,
35+
root: value.root.map(Either::A),
2936
}
3037
}
3138
}
@@ -100,6 +107,17 @@ pub struct JsLibraryAuxiliaryComment {
100107
pub amd: Option<String>,
101108
}
102109

110+
impl From<String> for JsLibraryAuxiliaryComment {
111+
fn from(value: String) -> Self {
112+
Self {
113+
root: Some(value.clone()),
114+
commonjs: Some(value.clone()),
115+
commonjs2: Some(value.clone()),
116+
amd: Some(value),
117+
}
118+
}
119+
}
120+
103121
impl From<JsLibraryAuxiliaryComment> for LibraryAuxiliaryComment {
104122
fn from(value: JsLibraryAuxiliaryComment) -> Self {
105123
Self {
@@ -125,23 +143,33 @@ impl From<LibraryAuxiliaryComment> for JsLibraryAuxiliaryComment {
125143
#[derive(Debug)]
126144
#[napi(object)]
127145
pub struct JsLibraryOptions {
128-
pub name: Option<JsLibraryName>,
129-
pub export: Option<Vec<String>>,
146+
pub name: Option<Either3<String, Vec<String>, JsLibraryCustomUmdObject>>,
147+
pub export: Option<Either<Vec<String>, String>>,
130148
// webpack type
131-
pub library_type: String,
149+
pub r#type: String,
132150
pub umd_named_define: Option<bool>,
133-
pub auxiliary_comment: Option<JsLibraryAuxiliaryComment>,
151+
pub auxiliary_comment: Option<Either<String, JsLibraryAuxiliaryComment>>,
134152
pub amd_container: Option<String>,
135153
}
136154

137155
impl From<JsLibraryOptions> for LibraryOptions {
138156
fn from(value: JsLibraryOptions) -> Self {
139157
Self {
140-
name: value.name.map(Into::into),
141-
export: value.export,
142-
library_type: value.library_type,
158+
name: value.name.map(|name| match name {
159+
Either3::A(name) => LibraryName::NonUmdObject(LibraryNonUmdObject::String(name)),
160+
Either3::B(names) => LibraryName::NonUmdObject(LibraryNonUmdObject::Array(names)),
161+
Either3::C(umd_object) => LibraryName::UmdObject(umd_object.into()),
162+
}),
163+
export: value.export.map(|v| match v {
164+
Either::A(v) => v,
165+
Either::B(v) => vec![v],
166+
}),
167+
library_type: value.r#type,
143168
umd_named_define: value.umd_named_define,
144-
auxiliary_comment: value.auxiliary_comment.map(Into::into),
169+
auxiliary_comment: value.auxiliary_comment.map(|v| match v {
170+
Either::A(v) => Into::<JsLibraryAuxiliaryComment>::into(v).into(),
171+
Either::B(v) => v.into(),
172+
}),
145173
amd_container: value.amd_container,
146174
}
147175
}
@@ -150,11 +178,17 @@ impl From<JsLibraryOptions> for LibraryOptions {
150178
impl From<LibraryOptions> for JsLibraryOptions {
151179
fn from(value: LibraryOptions) -> Self {
152180
JsLibraryOptions {
153-
name: value.name.map(|name| name.into()),
154-
export: value.export,
155-
library_type: value.library_type,
181+
name: value.name.map(|name| match name {
182+
LibraryName::NonUmdObject(LibraryNonUmdObject::String(name)) => Either3::A(name),
183+
LibraryName::NonUmdObject(LibraryNonUmdObject::Array(names)) => Either3::B(names),
184+
LibraryName::UmdObject(umd_object) => Either3::C(umd_object.into()),
185+
}),
186+
export: value.export.map(Either::A),
187+
r#type: value.library_type,
156188
umd_named_define: value.umd_named_define,
157-
auxiliary_comment: value.auxiliary_comment.map(|comment| comment.into()),
189+
auxiliary_comment: value
190+
.auxiliary_comment
191+
.map(|comment| Either::B(comment.into())),
158192
amd_container: value.amd_container,
159193
}
160194
}

0 commit comments

Comments
 (0)