Skip to content

Commit 9fdb06f

Browse files
authored
feat: support entrypoint.getEntrypointChunk() (#9625)
1 parent 3162d9a commit 9fdb06f

File tree

16 files changed

+76
-26
lines changed

16 files changed

+76
-26
lines changed

crates/node_binding/binding.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ export declare class JsChunkGroup {
109109
isInitial(): boolean
110110
getParents(): JsChunkGroup[]
111111
getRuntimeChunk(): JsChunk
112+
getEntrypointChunk(): JsChunk
112113
getFiles(): Array<string>
113114
getModulePreOrderIndex(module: JsModule): number | null
114115
getModulePostOrderIndex(module: JsModule): number | null

crates/node_binding/src/chunk_group.rs

+7
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@ impl JsChunkGroup {
119119
Ok(JsChunkWrapper::new(chunk_ukey, compilation))
120120
}
121121

122+
#[napi(ts_return_type = "JsChunk")]
123+
pub fn get_entrypoint_chunk(&self) -> napi::Result<JsChunkWrapper> {
124+
let (compilation, chunk_group) = self.as_ref()?;
125+
let chunk_ukey = chunk_group.get_entrypoint_chunk();
126+
Ok(JsChunkWrapper::new(chunk_ukey, compilation))
127+
}
128+
122129
#[napi]
123130
pub fn get_files(&self) -> napi::Result<Vec<&String>> {
124131
let (compilation, chunk_group) = self.as_ref()?;

crates/rspack_core/src/build_chunk_graph/code_splitter.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ impl CodeSplitter {
437437
entrypoint.set_runtime_chunk(chunk.ukey());
438438
}
439439

440-
entrypoint.set_entry_point_chunk(chunk.ukey());
440+
entrypoint.set_entrypoint_chunk(chunk.ukey());
441441
entrypoint.connect_chunk(chunk);
442442

443443
compilation
@@ -529,7 +529,7 @@ Remove the 'runtime' option from the entrypoint."
529529
compilation
530530
.chunk_group_by_ukey
531531
.expect_get(key)
532-
.get_entry_point_chunk()
532+
.get_entrypoint_chunk()
533533
.as_u32()
534534
})),
535535
);
@@ -550,7 +550,7 @@ Remove the 'runtime' option from the entrypoint."
550550
let entry_point = compilation.chunk_group_by_ukey.expect_get(ukey);
551551
let entry_point_chunk = compilation
552552
.chunk_by_ukey
553-
.expect_get(&entry_point.get_entry_point_chunk());
553+
.expect_get(&entry_point.get_entrypoint_chunk());
554554
let referenced_chunks =
555555
entry_point_chunk.get_all_referenced_chunks(&compilation.chunk_group_by_ukey);
556556

@@ -559,13 +559,13 @@ Remove the 'runtime' option from the entrypoint."
559559
let dependency_chunk_ukey = compilation
560560
.chunk_group_by_ukey
561561
.expect_get(dependency_ukey)
562-
.get_entry_point_chunk();
562+
.get_entrypoint_chunk();
563563
if referenced_chunks.contains(&dependency_chunk_ukey) {
564564
runtime_errors.push(Diagnostic::from(
565565
error!(
566566
"Entrypoints '{name}' and '{dep}' use 'dependOn' to depend on each other in a circular way."
567567
),
568-
).with_chunk(Some(entry_point.get_entry_point_chunk().as_u32())));
568+
).with_chunk(Some(entry_point.get_entrypoint_chunk().as_u32())));
569569
entry_point_runtime = Some(entry_point_chunk.ukey());
570570
has_error = true;
571571
break;
@@ -605,7 +605,7 @@ Remove the 'runtime' option from the entrypoint."
605605
let chunk = match compilation.named_chunks.get(runtime) {
606606
Some(ukey) => {
607607
if !self.runtime_chunks.contains(ukey) {
608-
let entry_chunk = entry_point.get_entry_point_chunk();
608+
let entry_chunk = entry_point.get_entrypoint_chunk();
609609
runtime_errors.push(Diagnostic::from(
610610
error!(
611611
"Entrypoint '{name}' has a 'runtime' option which points to another entrypoint named '{runtime}'.
@@ -707,7 +707,7 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
707707
self.chunk_groups_for_combining.insert(*cgi);
708708
} else {
709709
// The application may start here: We start with an empty list of available modules
710-
let chunk = chunk_group.get_entry_point_chunk();
710+
let chunk = chunk_group.get_entrypoint_chunk();
711711
for module in modules {
712712
self
713713
.queue
@@ -847,7 +847,7 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
847847

848848
Some(root_modules)
849849
} else if chunk_group.kind.is_entrypoint() && chunk_group.is_initial() {
850-
let entry_chunk_ukey = chunk_group.get_entry_point_chunk();
850+
let entry_chunk_ukey = chunk_group.get_entrypoint_chunk();
851851
let entry_modules = compilation
852852
.chunk_graph
853853
.get_chunk_entry_modules(&entry_chunk_ukey);
@@ -1395,7 +1395,7 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
13951395
self.chunk_group_infos.entry(ukey).or_insert(cgi);
13961396

13971397
entrypoint.set_runtime_chunk(chunk.ukey());
1398-
entrypoint.set_entry_point_chunk(chunk.ukey());
1398+
entrypoint.set_entrypoint_chunk(chunk.ukey());
13991399
compilation.async_entrypoints.push(entrypoint.ukey);
14001400
self.next_chunk_group_index += 1;
14011401
entrypoint.index = Some(self.next_chunk_group_index);

crates/rspack_core/src/build_chunk_graph/new_code_splitter.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ impl CodeSplitter {
898898
entrypoint.module_post_order_indices = post_order_indices;
899899

900900
let entry_chunk = compilation.chunk_by_ukey.expect_get_mut(&entry_chunk_ukey);
901-
entrypoint.set_entry_point_chunk(entry_chunk_ukey);
901+
entrypoint.set_entrypoint_chunk(entry_chunk_ukey);
902902

903903
if initial {
904904
compilation
@@ -1161,7 +1161,7 @@ Or do you want to use the entrypoints '{name}' and '{entry_runtime}' independent
11611161
.expect("unreachable");
11621162
let entry_point_chunk = compilation
11631163
.chunk_by_ukey
1164-
.expect_get(&entrypoint.get_entry_point_chunk());
1164+
.expect_get(&entrypoint.get_entrypoint_chunk());
11651165
let entry_point_chunk_ukey = entry_point_chunk.ukey();
11661166
let referenced_chunks =
11671167
entry_point_chunk.get_all_referenced_chunks(&compilation.chunk_group_by_ukey);
@@ -1173,7 +1173,7 @@ Or do you want to use the entrypoints '{name}' and '{entry_runtime}' independent
11731173
let dep_entrypoint = compilation
11741174
.chunk_group_by_ukey
11751175
.expect_get_mut(dep_entrypoint_ukey);
1176-
let dependency_chunk_ukey = dep_entrypoint.get_entry_point_chunk();
1176+
let dependency_chunk_ukey = dep_entrypoint.get_entrypoint_chunk();
11771177
if referenced_chunks.contains(&dependency_chunk_ukey) {
11781178
// cycle dep
11791179
compilation

crates/rspack_core/src/chunk_graph/chunk_graph_chunk.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ impl ChunkGraph {
693693
for chunk_group_ukey in chunk.get_sorted_groups_iter(chunk_group_by_ukey) {
694694
let chunk_group = chunk_group_by_ukey.expect_get(chunk_group_ukey);
695695
if chunk_group.kind.is_entrypoint() {
696-
let entry_point_chunk = chunk_group.get_entry_point_chunk();
696+
let entry_point_chunk = chunk_group.get_entrypoint_chunk();
697697
let cgc = self.expect_chunk_graph_chunk(&entry_point_chunk);
698698
for (_, chunk_group_ukey) in cgc.entry_modules.iter() {
699699
let chunk_group = chunk_group_by_ukey.expect_get(chunk_group_ukey);

crates/rspack_core/src/chunk_group.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub struct ChunkGroup {
4949
pub(crate) next_post_order_index: usize,
5050
// Entrypoint
5151
pub(crate) runtime_chunk: Option<ChunkUkey>,
52-
pub(crate) entry_point_chunk: Option<ChunkUkey>,
52+
pub(crate) entrypoint_chunk: Option<ChunkUkey>,
5353
origins: Vec<OriginRecord>,
5454
pub(crate) is_over_size_limit: Option<bool>,
5555
}
@@ -68,7 +68,7 @@ impl ChunkGroup {
6868
next_pre_order_index: 0,
6969
next_post_order_index: 0,
7070
runtime_chunk: None,
71-
entry_point_chunk: None,
71+
entrypoint_chunk: None,
7272
index: None,
7373
origins: vec![],
7474
is_over_size_limit: None,
@@ -159,14 +159,14 @@ impl ChunkGroup {
159159
}
160160
}
161161

162-
pub fn set_entry_point_chunk(&mut self, chunk_ukey: ChunkUkey) {
163-
self.entry_point_chunk = Some(chunk_ukey);
162+
pub fn set_entrypoint_chunk(&mut self, chunk_ukey: ChunkUkey) {
163+
self.entrypoint_chunk = Some(chunk_ukey);
164164
}
165165

166-
pub fn get_entry_point_chunk(&self) -> ChunkUkey {
166+
pub fn get_entrypoint_chunk(&self) -> ChunkUkey {
167167
match self.kind {
168168
ChunkGroupKind::Entrypoint { .. } => self
169-
.entry_point_chunk
169+
.entrypoint_chunk
170170
.expect("EntryPoint runtime chunk not set"),
171171
ChunkGroupKind::Normal { .. } => {
172172
unreachable!("Normal chunk group doesn't have runtime chunk")
@@ -240,9 +240,9 @@ impl ChunkGroup {
240240
}
241241
}
242242

243-
if let Some(entry_point_chunk) = self.entry_point_chunk {
243+
if let Some(entry_point_chunk) = self.entrypoint_chunk {
244244
if entry_point_chunk == *old_chunk {
245-
self.entry_point_chunk = Some(*new_chunk);
245+
self.entrypoint_chunk = Some(*new_chunk);
246246
}
247247
}
248248

crates/rspack_core/src/compiler/module_executor/execute.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ impl Task<MakeTaskContext> for ExecuteTask {
138138
);
139139
entrypoint.connect_chunk(chunk);
140140
entrypoint.set_runtime_chunk(chunk.ukey());
141-
entrypoint.set_entry_point_chunk(chunk.ukey());
141+
entrypoint.set_entrypoint_chunk(chunk.ukey());
142142

143143
compilation.chunk_group_by_ukey.add(entrypoint);
144144

crates/rspack_plugin_javascript/src/dependency/worker/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl DependencyTemplate for WorkerDependency {
111111
.chunk_graph
112112
.get_block_chunk_group(block, &compilation.chunk_group_by_ukey)
113113
})
114-
.map(|entrypoint| entrypoint.get_entry_point_chunk())
114+
.map(|entrypoint| entrypoint.get_entrypoint_chunk())
115115
.and_then(|ukey| compilation.chunk_by_ukey.get(&ukey))
116116
.and_then(|chunk| chunk.id(&compilation.chunk_ids_artifact))
117117
.and_then(|chunk_id| serde_json::to_string(chunk_id).ok())

crates/rspack_plugin_runtime/src/runtime_module/get_chunk_filename.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ impl RuntimeModule for GetChunkFilenameRuntimeModule {
116116
chunk.get_all_referenced_async_entrypoints(&compilation.chunk_group_by_ukey)
117117
{
118118
let entrypoint = compilation.chunk_group_by_ukey.expect_get(&entrypoint);
119-
chunks.insert(entrypoint.get_entry_point_chunk());
119+
chunks.insert(entrypoint.get_entrypoint_chunk());
120120
}
121121
chunks
122122
}

crates/rspack_plugin_runtime/src/runtime_module/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ mod rspack_unique_id;
3939
mod rspack_version;
4040
mod runtime_id;
4141
mod startup_chunk_dependencies;
42-
mod startup_entry_point;
42+
mod startup_entrypoint;
4343
mod system_context;
4444
mod utils;
4545
pub use amd_define::AmdDefineRuntimeModule;
@@ -83,6 +83,6 @@ pub use rspack_unique_id::RspackUniqueIdRuntimeModule;
8383
pub use rspack_version::RspackVersionRuntimeModule;
8484
pub use runtime_id::RuntimeIdRuntimeModule;
8585
pub use startup_chunk_dependencies::StartupChunkDependenciesRuntimeModule;
86-
pub use startup_entry_point::StartupEntrypointRuntimeModule;
86+
pub use startup_entrypoint::StartupEntrypointRuntimeModule;
8787
pub use system_context::SystemContextRuntimeModule;
8888
pub use utils::*;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const a = 1;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
it("should compile", async () => {
2+
const { a } = await import(/* webpackChunkName: "async" */ "./async");
3+
expect(a).toBe(1);
4+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/** @type {import("@rspack/core").Configuration} */
2+
module.exports = {
3+
entry: "./index.js",
4+
output: {
5+
filename: "[name].js"
6+
},
7+
optimization: {
8+
runtimeChunk: true
9+
},
10+
plugins: [
11+
{
12+
/**@param {import("@rspack/core").Compiler} compiler */
13+
apply(compiler) {
14+
compiler.hooks.thisCompilation.tap("test", compilation => {
15+
compilation.hooks.afterSeal.tap("test", () => {
16+
let entrypoint = compilation.entrypoints.get("main");
17+
let entrypointChunk = entrypoint.getEntrypointChunk();
18+
expect(entrypointChunk.name).toBe("main");
19+
let chunks = entrypointChunk.getAllReferencedChunks();
20+
expect([...chunks].map(c => c.name)).toEqual([
21+
"runtime~main",
22+
"main",
23+
"async"
24+
]);
25+
});
26+
});
27+
}
28+
}
29+
]
30+
};

packages/rspack/etc/core.api.md

+2
Original file line numberDiff line numberDiff line change
@@ -1776,6 +1776,8 @@ class Entrypoint extends ChunkGroup {
17761776
// (undocumented)
17771777
static __from_binding(binding: JsChunkGroup): Entrypoint;
17781778
// (undocumented)
1779+
getEntrypointChunk(): Readonly<Chunk | null>;
1780+
// (undocumented)
17791781
getRuntimeChunk(): Readonly<Chunk | null>;
17801782
}
17811783

packages/rspack/src/Entrypoint.ts

+5
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@ export class Entrypoint extends ChunkGroup {
2727
const chunkBinding = this.#inner.getRuntimeChunk();
2828
return chunkBinding ? Chunk.__from_binding(chunkBinding) : null;
2929
}
30+
31+
getEntrypointChunk(): Readonly<Chunk | null> {
32+
const chunkBinding = this.#inner.getEntrypointChunk();
33+
return chunkBinding ? Chunk.__from_binding(chunkBinding) : null;
34+
}
3035
}

0 commit comments

Comments
 (0)