diff --git a/crates/node_binding/binding.d.ts b/crates/node_binding/binding.d.ts index ade54a26eb3..5925fadc52a 100644 --- a/crates/node_binding/binding.d.ts +++ b/crates/node_binding/binding.d.ts @@ -1403,20 +1403,20 @@ export interface RawInfo { } export interface RawJavascriptParserOptions { - dynamicImportMode: string - dynamicImportPreload: string - dynamicImportPrefetch: string + dynamicImportMode?: string + dynamicImportPreload?: string + dynamicImportPrefetch?: string dynamicImportFetchPriority?: string - url: string - exprContextCritical: boolean - wrappedContextCritical: boolean + url?: string + exprContextCritical?: boolean + wrappedContextCritical?: boolean exportsPresence?: string importExportsPresence?: string reexportExportsPresence?: string - strictExportPresence: boolean - worker: Array + strictExportPresence?: boolean + worker?: Array overrideStrict?: string - importMeta: boolean + importMeta?: boolean } export interface RawLazyCompilationOption { diff --git a/crates/rspack_binding_options/src/options/raw_module/mod.rs b/crates/rspack_binding_options/src/options/raw_module/mod.rs index f0dfbf0504d..ae6d1422b18 100644 --- a/crates/rspack_binding_options/src/options/raw_module/mod.rs +++ b/crates/rspack_binding_options/src/options/raw_module/mod.rs @@ -258,32 +258,38 @@ impl From for ParserOptions { #[derive(Debug, Default)] #[napi(object)] pub struct RawJavascriptParserOptions { - pub dynamic_import_mode: String, - pub dynamic_import_preload: String, - pub dynamic_import_prefetch: String, + pub dynamic_import_mode: Option, + pub dynamic_import_preload: Option, + pub dynamic_import_prefetch: Option, pub dynamic_import_fetch_priority: Option, - pub url: String, - pub expr_context_critical: bool, - pub wrapped_context_critical: bool, + pub url: Option, + pub expr_context_critical: Option, + pub wrapped_context_critical: Option, pub exports_presence: Option, pub import_exports_presence: Option, pub reexport_exports_presence: Option, - pub strict_export_presence: bool, - pub worker: Vec, + pub strict_export_presence: Option, + pub worker: Option>, pub override_strict: Option, - pub import_meta: bool, + pub import_meta: Option, } impl From for JavascriptParserOptions { fn from(value: RawJavascriptParserOptions) -> Self { Self { - dynamic_import_mode: DynamicImportMode::from(value.dynamic_import_mode.as_str()), - dynamic_import_preload: JavascriptParserOrder::from(value.dynamic_import_preload.as_str()), - dynamic_import_prefetch: JavascriptParserOrder::from(value.dynamic_import_prefetch.as_str()), + dynamic_import_mode: value + .dynamic_import_mode + .map(|v| DynamicImportMode::from(v.as_str())), + dynamic_import_preload: value + .dynamic_import_preload + .map(|v| JavascriptParserOrder::from(v.as_str())), + dynamic_import_prefetch: value + .dynamic_import_prefetch + .map(|v| JavascriptParserOrder::from(v.as_str())), dynamic_import_fetch_priority: value .dynamic_import_fetch_priority .map(|x| DynamicImportFetchPriority::from(x.as_str())), - url: JavascriptParserUrl::from(value.url.as_str()), + url: value.url.map(|v| JavascriptParserUrl::from(v.as_str())), expr_context_critical: value.expr_context_critical, wrapped_context_critical: value.wrapped_context_critical, exports_presence: value diff --git a/crates/rspack_core/src/options/module.rs b/crates/rspack_core/src/options/module.rs index a6f01bf5778..af03bb71b28 100644 --- a/crates/rspack_core/src/options/module.rs +++ b/crates/rspack_core/src/options/module.rs @@ -221,20 +221,20 @@ impl From<&str> for OverrideStrict { #[derive(Debug, Clone, MergeFrom)] pub struct JavascriptParserOptions { - pub dynamic_import_mode: DynamicImportMode, - pub dynamic_import_preload: JavascriptParserOrder, - pub dynamic_import_prefetch: JavascriptParserOrder, + pub dynamic_import_mode: Option, + pub dynamic_import_preload: Option, + pub dynamic_import_prefetch: Option, pub dynamic_import_fetch_priority: Option, - pub url: JavascriptParserUrl, - pub expr_context_critical: bool, - pub wrapped_context_critical: bool, + pub url: Option, + pub expr_context_critical: Option, + pub wrapped_context_critical: Option, pub exports_presence: Option, pub import_exports_presence: Option, pub reexport_exports_presence: Option, - pub strict_export_presence: bool, - pub worker: Vec, + pub strict_export_presence: Option, + pub worker: Option>, pub override_strict: Option, - pub import_meta: bool, + pub import_meta: Option, } #[derive(Debug, Clone, MergeFrom)] diff --git a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs index c4105b00c05..5ccfc8e8967 100644 --- a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs +++ b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs @@ -844,7 +844,7 @@ impl HarmonyExportImportedSpecifierDependency { options .reexport_exports_presence .or(options.exports_presence) - .unwrap_or(if options.strict_export_presence { + .unwrap_or(if let Some(true) = options.strict_export_presence { ExportPresenceMode::Error } else { ExportPresenceMode::Auto diff --git a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_specifier_dependency.rs b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_specifier_dependency.rs index 71405c4ba34..514a2ca87d4 100644 --- a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_specifier_dependency.rs +++ b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_specifier_dependency.rs @@ -102,7 +102,7 @@ impl HarmonyImportSpecifierDependency { options .import_exports_presence .or(options.exports_presence) - .unwrap_or(if options.strict_export_presence { + .unwrap_or(if let Some(true) = options.strict_export_presence { ExportPresenceMode::Error } else { ExportPresenceMode::Auto diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/import_parser_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/import_parser_plugin.rs index 459c5e54ac5..5c3e93e2dd7 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/import_parser_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/import_parser_plugin.rs @@ -31,10 +31,15 @@ impl JavascriptParserPlugin for ImportParserPlugin { return None; } let dynamic_import_mode = parser.javascript_options.dynamic_import_mode; - let dynamic_import_preload = parser.javascript_options.dynamic_import_preload.get_order(); + let dynamic_import_preload = parser + .javascript_options + .dynamic_import_preload + .expect("should have dynamic_import_preload") + .get_order(); let dynamic_import_prefetch = parser .javascript_options .dynamic_import_prefetch + .expect("should have dynamic_import_prefetch") .get_order(); let dynamic_import_fetch_priority = parser.javascript_options.dynamic_import_fetch_priority; @@ -55,7 +60,7 @@ impl JavascriptParserPlugin for ImportParserPlugin { let mode = magic_comment_options .get_webpack_mode() .map(|x| DynamicImportMode::from(x.as_str())) - .unwrap_or(dynamic_import_mode); + .unwrap_or(dynamic_import_mode.expect("should have dynamic_import_mode")); let chunk_name = magic_comment_options .get_webpack_chunk_name() .map(|x| x.to_owned()); diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/context_dependency_helper.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/context_dependency_helper.rs index a9f14114dcc..6d805872282 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/context_dependency_helper.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/context_dependency_helper.rs @@ -84,7 +84,7 @@ pub fn create_context_dependency( } } - if parser.javascript_options.wrapped_context_critical { + if let Some(true) = parser.javascript_options.wrapped_context_critical { let range = param.range(); let warn: Diagnostic = create_traceable_error( "Critical dependency".into(), @@ -161,7 +161,7 @@ pub fn create_context_dependency( replaces.push((json_stringify(&postfix), postfix_range.0, postfix_range.1)) } - if parser.javascript_options.wrapped_context_critical { + if let Some(true) = parser.javascript_options.wrapped_context_critical { let range = param.range(); let warn: Diagnostic = create_traceable_error( "Critical dependency".into(), @@ -191,7 +191,7 @@ pub fn create_context_dependency( critical, } } else { - if parser.javascript_options.expr_context_critical { + if let Some(true) = parser.javascript_options.expr_context_critical { let range = param.range(); let warn: Diagnostic = create_traceable_error( "Critical dependency".into(), diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs index bdd2b61c030..c2cc6595f1e 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs @@ -295,7 +295,7 @@ impl<'parser> JavascriptParser<'parser> { plugins.push(Box::new( parser_plugin::ImportMetaContextDependencyParserPlugin, )); - if javascript_options.import_meta { + if let Some(true) = javascript_options.import_meta { plugins.push(Box::new(parser_plugin::ImportMetaPlugin)); } else { plugins.push(Box::new(parser_plugin::ImportMetaDisabledPlugin)); @@ -341,13 +341,16 @@ impl<'parser> JavascriptParser<'parser> { ))); plugins.push(Box::new(parser_plugin::ImportParserPlugin)); let parse_url = javascript_options.url; - if !matches!(parse_url, JavascriptParserUrl::Disable) { + if !matches!(parse_url, Some(JavascriptParserUrl::Disable)) { plugins.push(Box::new(parser_plugin::URLPlugin { - relative: matches!(parse_url, JavascriptParserUrl::Relative), + relative: matches!(parse_url, Some(JavascriptParserUrl::Relative)), })); } plugins.push(Box::new(parser_plugin::WorkerPlugin::new( - &javascript_options.worker, + javascript_options + .worker + .as_ref() + .expect("should have worker"), ))); plugins.push(Box::new(parser_plugin::OverrideStrictPlugin)); } diff --git a/packages/rspack-test-tools/tests/__snapshots__/Defaults.test.js.snap b/packages/rspack-test-tools/tests/__snapshots__/Defaults.test.js.snap index ea11c5b027b..fc3eacc35b9 100644 --- a/packages/rspack-test-tools/tests/__snapshots__/Defaults.test.js.snap +++ b/packages/rspack-test-tools/tests/__snapshots__/Defaults.test.js.snap @@ -161,12 +161,8 @@ Object { "dynamicImportMode": "lazy", "dynamicImportPrefetch": false, "dynamicImportPreload": false, - "exportsPresence": undefined, "exprContextCritical": true, - "importExportsPresence": undefined, "importMeta": true, - "overrideStrict": undefined, - "reexportExportsPresence": undefined, "strictExportPresence": false, "url": true, "worker": Array [ diff --git a/packages/rspack/src/config/adapter.ts b/packages/rspack/src/config/adapter.ts index 73143fe602a..cdcae9ff811 100644 --- a/packages/rspack/src/config/adapter.ts +++ b/packages/rspack/src/config/adapter.ts @@ -655,19 +655,14 @@ function getRawJavascriptParserOptions( parser: JavascriptParserOptions ): RawJavascriptParserOptions { return { - dynamicImportMode: parser.dynamicImportMode ?? "lazy", - dynamicImportPreload: parser.dynamicImportPreload?.toString() ?? "false", - dynamicImportPrefetch: parser.dynamicImportPrefetch?.toString() ?? "false", - dynamicImportFetchPriority: parser.dynamicImportFetchPriority?.toString(), - importMeta: parser.importMeta ?? true, - url: - parser.url === false - ? "false" - : parser.url === "relative" - ? parser.url - : "true", - exprContextCritical: parser.exprContextCritical ?? true, - wrappedContextCritical: parser.wrappedContextCritical ?? false, + dynamicImportMode: parser.dynamicImportMode, + dynamicImportPreload: parser.dynamicImportPreload?.toString(), + dynamicImportPrefetch: parser.dynamicImportPrefetch?.toString(), + dynamicImportFetchPriority: parser.dynamicImportFetchPriority, + importMeta: parser.importMeta, + url: parser.url?.toString(), + exprContextCritical: parser.exprContextCritical, + wrappedContextCritical: parser.wrappedContextCritical, exportsPresence: parser.exportsPresence === false ? "false" : parser.exportsPresence, importExportsPresence: @@ -678,13 +673,13 @@ function getRawJavascriptParserOptions( parser.reexportExportsPresence === false ? "false" : parser.reexportExportsPresence, - strictExportPresence: parser.strictExportPresence ?? false, + strictExportPresence: parser.strictExportPresence, worker: typeof parser.worker === "boolean" ? parser.worker ? ["..."] : [] - : parser.worker ?? ["..."], + : parser.worker, overrideStrict: parser.overrideStrict }; } diff --git a/packages/rspack/src/config/defaults.ts b/packages/rspack/src/config/defaults.ts index 821d74078c2..8dfdbb6defa 100644 --- a/packages/rspack/src/config/defaults.ts +++ b/packages/rspack/src/config/defaults.ts @@ -242,12 +242,8 @@ const applyJavascriptParserOptionsDefaults = ( D(parserOptions, "url", true); D(parserOptions, "exprContextCritical", true); D(parserOptions, "wrappedContextCritical", false); - D(parserOptions, "exportsPresence", undefined); - D(parserOptions, "importExportsPresence", undefined); - D(parserOptions, "reexportExportsPresence", undefined); D(parserOptions, "strictExportPresence", false); D(parserOptions, "worker", ["..."]); - D(parserOptions, "overrideStrict", undefined); D(parserOptions, "importMeta", true); };