Skip to content

Commit fd8f6de

Browse files
committed
squash commits
1 parent 090d7ba commit fd8f6de

File tree

16 files changed

+175
-35
lines changed

16 files changed

+175
-35
lines changed

crates/node_binding/napi-binding.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2380,7 +2380,7 @@ export interface RawJavascriptParserOptions {
23802380
reexportExportsPresence?: string
23812381
worker?: Array<string>
23822382
overrideStrict?: string
2383-
importMeta?: boolean
2383+
importMeta?: string
23842384
/**
23852385
* This option is experimental in Rspack only and subject to change or be removed anytime.
23862386
* @experimental

crates/rspack/src/builder/mod.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1702,7 +1702,13 @@ impl ModuleOptionsBuilder {
17021702
wrapped_context_critical: Some(false),
17031703
wrapped_context_reg_exp: Some(RspackRegex::new(".*").expect("should initialize `Regex`")),
17041704
worker: Some(vec!["...".to_string()]),
1705-
import_meta: Some(true),
1705+
import_meta: target_properties.module.map(|val| {
1706+
if val {
1707+
ImportMeta::PreserveUnknown
1708+
} else {
1709+
ImportMeta::Auto
1710+
}
1711+
}),
17061712
require_alias: Some(false),
17071713
require_as_expression: Some(true),
17081714
require_dynamic: Some(true),

crates/rspack/tests/snapshots/defaults__default_options.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1635,7 +1635,7 @@ CompilerOptions {
16351635
),
16361636
override_strict: None,
16371637
import_meta: Some(
1638-
true,
1638+
Auto,
16391639
),
16401640
require_alias: Some(
16411641
false,

crates/rspack_binding_api/src/raw_options/raw_module/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use rspack_core::{
1919
CssAutoGeneratorOptions, CssAutoParserOptions, CssGeneratorOptions, CssModuleGeneratorOptions,
2020
CssModuleParserOptions, CssParserImport, CssParserImportContext, CssParserOptions,
2121
DescriptionData, DynamicImportFetchPriority, DynamicImportMode, ExportPresenceMode, FuncUseCtx,
22-
GeneratorOptions, GeneratorOptionsMap, JavascriptParserCommonjsExportsOption,
22+
GeneratorOptions, GeneratorOptionsMap, ImportMeta, JavascriptParserCommonjsExportsOption,
2323
JavascriptParserCommonjsOptions, JavascriptParserOptions, JavascriptParserOrder,
2424
JavascriptParserUrl, JsonGeneratorOptions, JsonParserOptions, ModuleNoParseRule,
2525
ModuleNoParseRules, ModuleNoParseTestFn, ModuleOptions, ModuleRule, ModuleRuleEffect,
@@ -287,7 +287,7 @@ pub struct RawJavascriptParserOptions {
287287
pub reexport_exports_presence: Option<String>,
288288
pub worker: Option<Vec<String>>,
289289
pub override_strict: Option<String>,
290-
pub import_meta: Option<bool>,
290+
pub import_meta: Option<String>,
291291
/// This option is experimental in Rspack only and subject to change or be removed anytime.
292292
/// @experimental
293293
pub require_alias: Option<bool>,
@@ -365,7 +365,7 @@ impl From<RawJavascriptParserOptions> for JavascriptParserOptions {
365365
override_strict: value
366366
.override_strict
367367
.map(|e| OverrideStrict::from(e.as_str())),
368-
import_meta: value.import_meta,
368+
import_meta: value.import_meta.map(|e| ImportMeta::from(e.as_str())),
369369
require_alias: value.require_alias,
370370
require_as_expression: value.require_as_expression,
371371
require_dynamic: value.require_dynamic,

crates/rspack_core/src/options/module.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,24 @@ impl From<&str> for OverrideStrict {
281281
}
282282
}
283283

284+
#[cacheable]
285+
#[derive(Debug, Clone, Copy, MergeFrom)]
286+
pub enum ImportMeta {
287+
PreserveUnknown,
288+
Auto,
289+
None,
290+
}
291+
292+
impl From<&str> for ImportMeta {
293+
fn from(value: &str) -> Self {
294+
match value {
295+
"preserve-unknown" => Self::PreserveUnknown,
296+
"false" => Self::None,
297+
_ => Self::Auto,
298+
}
299+
}
300+
}
301+
284302
#[cacheable]
285303
#[derive(Debug, Clone, MergeFrom, Default)]
286304
pub struct JavascriptParserOptions {
@@ -299,7 +317,7 @@ pub struct JavascriptParserOptions {
299317
pub type_reexports_presence: Option<TypeReexportPresenceMode>,
300318
pub worker: Option<Vec<String>>,
301319
pub override_strict: Option<OverrideStrict>,
302-
pub import_meta: Option<bool>,
320+
pub import_meta: Option<ImportMeta>,
303321
pub require_alias: Option<bool>,
304322
pub require_as_expression: Option<bool>,
305323
pub require_dynamic: Option<bool>,

crates/rspack_plugin_javascript/src/parser_plugin/import_meta_plugin.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use itertools::Itertools;
2-
use rspack_core::{ConstDependency, property_access};
2+
use rspack_core::{ConstDependency, ImportMeta, property_access};
33
use rspack_error::{Error, Severity};
44
use rspack_util::SpanExt;
55
use swc_core::{
@@ -18,7 +18,7 @@ use crate::{
1818
},
1919
};
2020

21-
pub struct ImportMetaPlugin;
21+
pub struct ImportMetaPlugin(pub(crate) ImportMeta);
2222

2323
impl ImportMetaPlugin {
2424
fn import_meta_url(&self, parser: &JavascriptParser) -> String {
@@ -32,11 +32,15 @@ impl ImportMetaPlugin {
3232
}
3333

3434
fn import_meta_unknown_property(&self, members: &Vec<String>) -> String {
35-
format!(
36-
r#"/* unsupported import.meta.{} */ undefined{}"#,
37-
members.join("."),
38-
property_access(members, 1)
39-
)
35+
if matches!(self.0, ImportMeta::PreserveUnknown) {
36+
format!("import.meta{}", property_access(members, 0))
37+
} else {
38+
format!(
39+
r#"/* unsupported import.meta.{} */ undefined{}"#,
40+
members.join("."),
41+
property_access(members, 1)
42+
)
43+
}
4044
}
4145

4246
fn process_import_meta_resolve(
@@ -334,6 +338,10 @@ impl JavascriptParserPlugin for ImportMetaPlugin {
334338
root_info: &ExportedVariableInfo,
335339
expr: &swc_core::ecma::ast::MemberExpr,
336340
) -> Option<bool> {
341+
if matches!(self.0, ImportMeta::PreserveUnknown) {
342+
return Some(true);
343+
}
344+
337345
match root_info {
338346
ExportedVariableInfo::Name(root) => {
339347
if root == expr_name::IMPORT_META {

crates/rspack_plugin_javascript/src/parser_plugin/node_stuff_plugin.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rspack_core::{
2-
CachedConstDependency, ConstDependency, NodeDirnameOption, NodeFilenameOption, NodeGlobalOption,
3-
RuntimeGlobals, RuntimeRequirementsDependency, get_context, parse_resource,
2+
CachedConstDependency, ConstDependency, ImportMeta, NodeDirnameOption, NodeFilenameOption,
3+
NodeGlobalOption, RuntimeGlobals, RuntimeRequirementsDependency, get_context, parse_resource,
44
};
55
use rspack_error::{Diagnostic, cyan, yellow};
66
use rspack_util::SpanExt;
@@ -589,7 +589,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
589589
return None;
590590
}
591591
// Skip if importMeta is disabled
592-
if parser.javascript_options.import_meta == Some(false) {
592+
if matches!(
593+
parser.javascript_options.import_meta,
594+
Some(ImportMeta::None)
595+
) {
593596
return None;
594597
}
595598
// Skip if node: false or node.filename is disabled
@@ -625,7 +628,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
625628
return None;
626629
}
627630
// Skip if importMeta is disabled
628-
if parser.javascript_options.import_meta == Some(false) {
631+
if matches!(
632+
parser.javascript_options.import_meta,
633+
Some(ImportMeta::None)
634+
) {
629635
return None;
630636
}
631637
// Skip if node: false or node.dirname is disabled
@@ -660,7 +666,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
660666
match for_name {
661667
expr_name::IMPORT_META_FILENAME => {
662668
// Skip processing if importMeta is disabled
663-
if parser.javascript_options.import_meta == Some(false) {
669+
if matches!(
670+
parser.javascript_options.import_meta,
671+
Some(ImportMeta::None)
672+
) {
664673
return None;
665674
}
666675
// Skip processing if node: false or node.filename is disabled
@@ -681,7 +690,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
681690
}
682691
expr_name::IMPORT_META_DIRNAME => {
683692
// Skip processing if importMeta is disabled
684-
if parser.javascript_options.import_meta == Some(false) {
693+
if matches!(
694+
parser.javascript_options.import_meta,
695+
Some(ImportMeta::None)
696+
) {
685697
return None;
686698
}
687699
// Skip processing if node: false or node.dirname is disabled
@@ -762,7 +774,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
762774
return None;
763775
}
764776
// Skip processing if importMeta is disabled
765-
if parser.javascript_options.import_meta == Some(false) {
777+
if matches!(
778+
parser.javascript_options.import_meta,
779+
Some(ImportMeta::None)
780+
) {
766781
return None;
767782
}
768783
let property = if for_name == expr_name::IMPORT_META_FILENAME {
@@ -797,7 +812,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
797812
};
798813

799814
// Skip processing if importMeta is disabled
800-
if parser.javascript_options.import_meta == Some(false) {
815+
if matches!(
816+
parser.javascript_options.import_meta,
817+
Some(ImportMeta::None)
818+
) {
801819
return None;
802820
}
803821

@@ -820,7 +838,10 @@ impl JavascriptParserPlugin for NodeStuffPlugin {
820838
}
821839

822840
// Skip processing if importMeta is disabled
823-
if parser.javascript_options.import_meta == Some(false) {
841+
if matches!(
842+
parser.javascript_options.import_meta,
843+
Some(ImportMeta::None)
844+
) {
824845
return None;
825846
}
826847

crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rspack_cacheable::{
2121
};
2222
use rspack_core::{
2323
AsyncDependenciesBlock, BoxDependency, BoxDependencyTemplate, BuildInfo, BuildMeta,
24-
CompilerOptions, DependencyRange, FactoryMeta, JavascriptParserCommonjsExportsOption,
24+
CompilerOptions, DependencyRange, FactoryMeta, ImportMeta, JavascriptParserCommonjsExportsOption,
2525
JavascriptParserOptions, ModuleIdentifier, ModuleLayer, ModuleType, ParseMeta, ResourceData,
2626
SideEffectsBailoutItemWithSpan,
2727
};
@@ -415,8 +415,12 @@ impl<'parser> JavascriptParser<'parser> {
415415
plugins.push(Box::new(
416416
parser_plugin::ImportMetaContextDependencyParserPlugin,
417417
));
418-
if let Some(true) = javascript_options.import_meta {
419-
plugins.push(Box::new(parser_plugin::ImportMetaPlugin));
418+
if !matches!(javascript_options.import_meta, Some(ImportMeta::None)) {
419+
plugins.push(Box::new(parser_plugin::ImportMetaPlugin(
420+
javascript_options
421+
.import_meta
422+
.unwrap_or(ImportMeta::PreserveUnknown),
423+
)));
420424
} else {
421425
plugins.push(Box::new(parser_plugin::ImportMetaDisabledPlugin));
422426
}

packages/rspack/etc/core.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3868,7 +3868,7 @@ export type JavascriptParserOptions = {
38683868
dynamicImportPreload?: boolean | number;
38693869
dynamicImportPrefetch?: boolean | number;
38703870
dynamicImportFetchPriority?: 'low' | 'high' | 'auto';
3871-
importMeta?: boolean;
3871+
importMeta?: boolean | 'preserve-unknown';
38723872
url?: 'relative' | 'new-url-relative' | boolean;
38733873
exprContextCritical?: boolean;
38743874
unknownContextCritical?: boolean;

packages/rspack/src/config/adapter.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,10 @@ function getRawJavascriptParserOptions(
561561
dynamicImportPreload: parser.dynamicImportPreload?.toString(),
562562
dynamicImportPrefetch: parser.dynamicImportPrefetch?.toString(),
563563
dynamicImportFetchPriority: parser.dynamicImportFetchPriority,
564-
importMeta: parser.importMeta,
564+
importMeta:
565+
typeof parser.importMeta === 'boolean'
566+
? String(parser.importMeta)
567+
: parser.importMeta,
565568
url: parser.url?.toString(),
566569
exprContextCritical: parser.exprContextCritical,
567570
unknownContextCritical: parser.unknownContextCritical,

0 commit comments

Comments
 (0)