Skip to content

Commit cf5ea43

Browse files
authored
test: enable lazyBarrel and inlineConst for rspack-test (#11710)
1 parent c3fdfbf commit cf5ea43

File tree

27 files changed

+153
-109
lines changed

27 files changed

+153
-109
lines changed

crates/rspack_core/src/context_module.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,7 @@ impl Module for ContextModule {
950950
let name = if !(name.contains(WEBPACK_CHUNK_NAME_INDEX_PLACEHOLDER)
951951
|| name.contains(WEBPACK_CHUNK_NAME_REQUEST_PLACEHOLDER))
952952
{
953-
Cow::Owned(format!("{name}[index]"))
953+
Cow::Owned(format!("{name}{WEBPACK_CHUNK_NAME_INDEX_PLACEHOLDER}"))
954954
} else {
955955
Cow::Borrowed(name)
956956
};

crates/rspack_core/src/dependency/runtime_template.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,10 @@ pub fn module_id(
377377

378378
pub fn import_statement(
379379
module: &dyn Module,
380-
runtime: Option<&RuntimeSpec>,
381380
compilation: &Compilation,
382381
runtime_requirements: &mut RuntimeGlobals,
383382
id: &DependencyId,
383+
import_var: &str,
384384
request: &str,
385385
update: bool, // whether a new variable should be created or the existing one updated
386386
) -> (String, String) {
@@ -396,8 +396,6 @@ pub fn import_statement(
396396

397397
runtime_requirements.insert(RuntimeGlobals::REQUIRE);
398398

399-
let import_var = compilation.get_import_var(id, runtime);
400-
401399
let opt_declaration = if update { "" } else { "var " };
402400

403401
let import_content = format!(

crates/rspack_plugin_javascript/src/dependency/esm/esm_import_dependency.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,23 +155,22 @@ pub fn esm_import_dependency_apply<T: ModuleDependency>(
155155
RuntimeCondition::Boolean(true)
156156
};
157157

158+
let import_var = compilation.get_import_var(module_dependency.id(), *runtime);
158159
let content: (String, String) = import_statement(
159160
*module,
160-
*runtime,
161161
compilation,
162162
runtime_requirements,
163163
module_dependency.id(),
164+
&import_var,
164165
module_dependency.request(),
165166
false,
166167
);
167168
let TemplateContext {
168169
init_fragments,
169170
compilation,
170171
module,
171-
runtime,
172172
..
173173
} = code_generatable_context;
174-
let import_var = compilation.get_import_var(module_dependency.id(), *runtime);
175174

176175
// https://github.com/webpack/webpack/blob/ac7e531436b0d47cd88451f497cdfd0dad41535d/lib/dependencies/HarmonyImportDependency.js#L282-L285
177176
let module_key = ref_module

crates/rspack_plugin_javascript/src/dependency/hmr/esm_accept_dependency.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,13 @@ impl DependencyTemplate for ESMAcceptDependencyTemplate {
107107
.map(|d| d.request())
108108
};
109109
if let Some(request) = request {
110+
let import_var = compilation.get_import_var(id, *runtime);
110111
let stmts = import_statement(
111112
*module,
112-
*runtime,
113113
compilation,
114114
runtime_requirements,
115115
id,
116+
&import_var,
116117
request,
117118
true,
118119
);

crates/rspack_plugin_wasm/src/dependency/wasm_import_dependency.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ impl WasmImportDependency {
3030
factorize_info: Default::default(),
3131
}
3232
}
33-
pub fn name(&self) -> &str {
33+
34+
pub fn name(&self) -> &Atom {
3435
&self.name
3536
}
3637
}

crates/rspack_plugin_wasm/src/parser_and_generator.rs

Lines changed: 79 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,16 @@ use rspack_cacheable::{
99
cacheable, cacheable_dyn,
1010
with::{AsInner, AsMap},
1111
};
12-
use rspack_collections::Identifier;
1312
use rspack_core::{
14-
AssetInfo, BoxDependency, BuildMetaExportsType, ChunkGraph, Compilation,
15-
DependencyType::WasmImport,
16-
ExportsInfoGetter, Filename, GenerateContext, GetUsedNameParam, Module, ModuleDependency,
17-
ModuleGraph, ModuleId, ModuleIdentifier, NormalModule, ParseContext, ParseResult,
18-
ParserAndGenerator, PathData, PrefetchExportsInfoMode, RuntimeGlobals, SourceType,
19-
StaticExportsDependency, StaticExportsSpec, UsedName, property_access,
13+
AssetInfo, BoxDependency, BuildMetaExportsType, ChunkGraph, CodeGenerationData, Compilation,
14+
Dependency, DependencyId, DependencyType, Filename, GenerateContext, Module, ModuleDependency,
15+
ModuleGraph, ModuleIdentifier, ModuleInitFragments, NormalModule, ParseContext, ParseResult,
16+
ParserAndGenerator, PathData, RuntimeGlobals, SourceType, StaticExportsDependency,
17+
StaticExportsSpec, TemplateContext, export_from_import, import_statement,
2018
rspack_sources::{BoxSource, RawStringSource, Source, SourceExt},
2119
};
2220
use rspack_error::{Diagnostic, IntoTWithDiagnosticArray, Result, TWithDiagnosticArray};
23-
use rspack_util::itoa;
21+
use rspack_util::{itoa, json_stringify};
2422
use swc_core::atoms::Atom;
2523
use wasmparser::{Import, Parser, Payload};
2624

@@ -35,6 +33,13 @@ pub struct AsyncWasmParserAndGenerator {
3533

3634
pub(crate) static WASM_SOURCE_TYPE: &[SourceType; 2] = &[SourceType::Wasm, SourceType::JavaScript];
3735

36+
#[derive(Debug)]
37+
struct DepModule<'a> {
38+
request: &'a str,
39+
import_var: String,
40+
deps: Vec<(DependencyId, Atom)>,
41+
}
42+
3843
#[cacheable_dyn]
3944
#[async_trait::async_trait]
4045
impl ParserAndGenerator for AsyncWasmParserAndGenerator {
@@ -160,8 +165,7 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator {
160165
runtime_requirements.insert(RuntimeGlobals::EXPORTS);
161166
runtime_requirements.insert(RuntimeGlobals::INSTANTIATE_WASM);
162167

163-
let mut dep_modules = IndexMap::<ModuleIdentifier, (String, &ModuleId)>::new();
164-
let mut wasm_deps_by_request = IndexMap::<&str, Vec<(Identifier, String, String)>>::new();
168+
let mut dep_modules = IndexMap::<ModuleIdentifier, DepModule>::new();
165169
let mut promises: Vec<String> = vec![];
166170

167171
let module_graph = &compilation.get_module_graph();
@@ -170,7 +174,7 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator {
170174
.get_dependencies()
171175
.iter()
172176
.map(|id| module_graph.dependency_by_id(id).expect("should be ok"))
173-
.filter(|dep| dep.dependency_type() == &WasmImport)
177+
.filter(|dep| dep.dependency_type() == &DependencyType::WasmImport)
174178
.map(|dep| {
175179
(
176180
dep,
@@ -179,78 +183,80 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator {
179183
})
180184
.for_each(|(dep, mgm)| {
181185
if let Some(mgm) = mgm {
182-
if !dep_modules.contains_key(&mgm.module_identifier) {
183-
let mut len_buffer = itoa::Buffer::new();
184-
let len_str = len_buffer.format(dep_modules.len());
185-
let import_var = format!("WEBPACK_IMPORTED_MODULE_{}", len_str);
186-
let val = (
187-
import_var.clone(),
188-
ChunkGraph::get_module_id(
189-
&compilation.module_ids_artifact,
190-
mgm.module_identifier,
191-
)
192-
.expect("should have module id"),
193-
);
194-
195-
if ModuleGraph::is_async(compilation, &mgm.module_identifier) {
196-
promises.push(import_var);
197-
}
198-
dep_modules.insert(mgm.module_identifier, val);
199-
}
200-
201186
let dep = dep
202187
.as_any()
203188
.downcast_ref::<WasmImportDependency>()
204189
.expect("should be wasm import dependency");
205-
206-
let dep_name = serde_json::to_string(dep.name()).expect("should be ok.");
207-
let Some(UsedName::Normal(used_name)) = ExportsInfoGetter::get_used_name(
208-
GetUsedNameParam::WithNames(&module_graph.get_prefetched_exports_info(
209-
&mgm.module_identifier,
210-
PrefetchExportsInfoMode::Default,
211-
)),
212-
*runtime,
213-
&[dep.name().into()],
214-
) else {
215-
return;
216-
};
217190
let request = dep.request();
218-
let val = (
219-
mgm.module_identifier,
220-
dep_name,
221-
property_access(used_name, 0),
222-
);
223-
if let Some(deps) = wasm_deps_by_request.get_mut(&request) {
224-
deps.push(val);
225-
} else {
226-
wasm_deps_by_request.insert(request, vec![val]);
227-
}
191+
let len = dep_modules.len();
192+
let dep_module = dep_modules.entry(mgm.module_identifier).or_insert_with(|| {
193+
let mut len_buffer = itoa::Buffer::new();
194+
let len_str = len_buffer.format(len);
195+
let import_var = format!("WEBPACK_IMPORTED_MODULE_{}", len_str);
196+
if ModuleGraph::is_async(compilation, &mgm.module_identifier) {
197+
promises.push(import_var.clone());
198+
}
199+
DepModule {
200+
request,
201+
import_var,
202+
deps: vec![],
203+
}
204+
});
205+
dep_module.deps.push((*dep.id(), dep.name().clone()));
228206
}
229207
});
230208

231-
let imports_code = dep_modules
209+
let (imports_code, imports_compat_code): (Vec<String>, Vec<String>) = dep_modules
232210
.iter()
233-
.map(|(_, val)| render_import_stmt(&val.0, val.1))
234-
.collect::<Vec<_>>()
235-
.join("");
236-
237-
let import_obj_request_items = wasm_deps_by_request
238-
.into_iter()
239-
.map(|(request, deps)| {
240-
let deps = deps
211+
.map(|(_, dep_module)| {
212+
import_statement(
213+
module,
214+
compilation,
215+
runtime_requirements,
216+
&dep_module.deps[0].0,
217+
&dep_module.import_var,
218+
dep_module.request,
219+
false,
220+
)
221+
})
222+
.unzip();
223+
let imports_code = imports_code.join("");
224+
let imports_compat_code = imports_compat_code.join("");
225+
226+
let mut template_context = TemplateContext {
227+
compilation,
228+
module,
229+
runtime_requirements,
230+
init_fragments: &mut ModuleInitFragments::default(),
231+
runtime: *runtime,
232+
concatenation_scope: None,
233+
data: &mut CodeGenerationData::default(),
234+
};
235+
let import_obj_request_items = dep_modules
236+
.into_values()
237+
.map(|dep_module| {
238+
let deps = dep_module
239+
.deps
241240
.into_iter()
242-
.map(|(id, name, used_name)| {
243-
let import_var = dep_modules.get(&id).expect("should be ok");
244-
let import_var = &import_var.0;
245-
format!("{name}: {import_var}{used_name}")
241+
.map(|(dep_id, export_name)| {
242+
let export = export_from_import(
243+
&mut template_context,
244+
true,
245+
dep_module.request,
246+
&dep_module.import_var,
247+
std::slice::from_ref(&export_name),
248+
&dep_id,
249+
false,
250+
false,
251+
Some(true),
252+
);
253+
let name = json_stringify(&export_name);
254+
format!("{name}: {export}")
246255
})
247256
.collect::<Vec<_>>()
248257
.join(",\n");
249258

250-
format!(
251-
"{}: {{\n{deps}\n}}",
252-
serde_json::to_string(request).expect("should be ok")
253-
)
259+
format!("{}: {{\n{deps}\n}}", json_stringify(dep_module.request))
254260
})
255261
.collect::<Vec<_>>();
256262

@@ -276,15 +282,15 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator {
276282
.insert(RuntimeGlobals::ASYNC_MODULE);
277283
let promises = promises.join(", ");
278284
let decl = format!(
279-
"var __webpack_instantiate__ = function ([{promises}]) {{\nreturn {instantiate_call};\n}}\n",
285+
"var __webpack_instantiate__ = function ([{promises}]) {{\n{imports_compat_code}return {instantiate_call};\n}}\n",
280286
);
281287
let async_dependencies = format!(
282288
"{}(module, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) {{
283289
try {{
284-
{imports_code}
290+
{imports_code}
285291
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([{promises}]);
286292
var [{promises}] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__;
287-
await {instantiate_call};
293+
{imports_compat_code}await {instantiate_call};
288294
289295
__webpack_async_result__();
290296
@@ -297,7 +303,7 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator {
297303
RawStringSource::from(format!("{decl}{async_dependencies}"))
298304
} else {
299305
RawStringSource::from(format!(
300-
"{imports_code} module.exports = {instantiate_call};"
306+
"{imports_code}{imports_compat_code}module.exports = {instantiate_call};"
301307
))
302308
};
303309

@@ -339,11 +345,6 @@ async fn render_wasm_name(
339345
.await
340346
}
341347

342-
fn render_import_stmt(import_var: &str, module_id: &ModuleId) -> String {
343-
let module_id = serde_json::to_string(module_id).expect("TODO");
344-
format!("var {import_var} = __webpack_require__({module_id});\n",)
345-
}
346-
347348
fn hash_for_source(source: &BoxSource) -> String {
348349
let mut hasher = DefaultHasher::new();
349350
source.hash(&mut hasher);

packages/rspack-test-tools/src/processor/cache.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ export class CacheProcessor<T extends ECompilerType> extends BasicProcessor<T> {
118118
bundlerInfo: {
119119
force: false
120120
}
121-
}
121+
},
122+
inlineConst: true,
123+
lazyBarrel: true
122124
}
123125
} as TCompilerOptions<T>;
124126

packages/rspack-test-tools/src/processor/config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ export class ConfigProcessor<
7777
bundlerInfo: {
7878
force: false
7979
}
80-
}
80+
},
81+
inlineConst: true,
82+
lazyBarrel: true
8183
}
8284
} as TCompilerOptions<T>;
8385
}

packages/rspack-test-tools/src/processor/diagnostic.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ export class DiagnosticProcessor<
113113
bundlerInfo: {
114114
force: false
115115
}
116-
}
116+
},
117+
inlineConst: true,
118+
lazyBarrel: true
117119
}
118120
} as TCompilerOptions<T>;
119121
}

packages/rspack-test-tools/src/processor/hash.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ export class HashProcessor<
6161
bundlerInfo: {
6262
force: false
6363
}
64-
}
64+
},
65+
inlineConst: true,
66+
lazyBarrel: true
6567
}
6668
} as TCompilerOptions<T>;
6769
}

0 commit comments

Comments
 (0)