turbopack: Chunking Refactor Step 2 (#56504)

### What?

The second step in our chunking refactoring, this removes our use of Module::as_chunk and Module::as_root_chunk. Instead, the only way to generate a chunk is directly from a root ChunkItem.

### Why?

In the end we want to avoid creating chunks from modules directly, but enforce everything going through the ChunkingContext to be chunked. This allows us to replace the existing chunking algorithm with a much more efficient one that avoid duplication between chunks in first place and doesn't require a post-chunking optimization.

### How?

https://github.com/vercel/turbo/pull/6120

Re: https://github.com/vercel/next.js/pull/56467
Closes WEB-1721

Co-authored-by: Tobias Koppers <1365881+sokra@users.noreply.github.com>
This commit is contained in:
Justin Ridgewell 2023-10-06 02:29:14 -04:00 committed by GitHub
parent 9d150b116d
commit 2af1e784c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 103 additions and 145 deletions

70
Cargo.lock generated
View file

@ -289,9 +289,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.68"
version = "0.1.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
dependencies = [
"proc-macro2",
"quote",
@ -321,7 +321,7 @@ dependencies = [
[[package]]
name = "auto-hash-map"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"serde",
"smallvec",
@ -3515,7 +3515,7 @@ dependencies = [
[[package]]
name = "node-file-trace"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"serde",
@ -7368,7 +7368,7 @@ dependencies = [
[[package]]
name = "turbo-tasks"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-trait",
@ -7400,7 +7400,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"cargo-lock",
@ -7412,7 +7412,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-bytes"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"bytes",
@ -7427,7 +7427,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"dotenvs",
@ -7441,7 +7441,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fetch"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7458,7 +7458,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7488,7 +7488,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-hash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"base16",
"hex",
@ -7500,7 +7500,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"convert_case 0.6.0",
@ -7514,7 +7514,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros-shared"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"proc-macro2",
"quote",
@ -7524,7 +7524,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-malloc"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"mimalloc",
]
@ -7532,7 +7532,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-memory"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7557,7 +7557,7 @@ dependencies = [
[[package]]
name = "turbopack"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-recursion",
@ -7588,7 +7588,7 @@ dependencies = [
[[package]]
name = "turbopack-binding"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"auto-hash-map",
"mdxjs",
@ -7628,7 +7628,7 @@ dependencies = [
[[package]]
name = "turbopack-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7650,7 +7650,7 @@ dependencies = [
[[package]]
name = "turbopack-cli-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"clap 4.4.2",
@ -7674,7 +7674,7 @@ dependencies = [
[[package]]
name = "turbopack-core"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-recursion",
@ -7703,7 +7703,7 @@ dependencies = [
[[package]]
name = "turbopack-css"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-trait",
@ -7725,7 +7725,7 @@ dependencies = [
[[package]]
name = "turbopack-dev"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7749,7 +7749,7 @@ dependencies = [
[[package]]
name = "turbopack-dev-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-compression",
@ -7786,7 +7786,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-trait",
@ -7820,7 +7820,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-hmr-protocol"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"serde",
"serde_json",
@ -7831,7 +7831,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-plugins"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-trait",
@ -7854,7 +7854,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-runtime"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indoc",
@ -7871,7 +7871,7 @@ dependencies = [
[[package]]
name = "turbopack-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7887,7 +7887,7 @@ dependencies = [
[[package]]
name = "turbopack-image"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"base64 0.21.4",
@ -7907,7 +7907,7 @@ dependencies = [
[[package]]
name = "turbopack-json"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"serde",
@ -7922,7 +7922,7 @@ dependencies = [
[[package]]
name = "turbopack-mdx"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"mdxjs",
@ -7937,7 +7937,7 @@ dependencies = [
[[package]]
name = "turbopack-node"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"async-stream",
@ -7972,7 +7972,7 @@ dependencies = [
[[package]]
name = "turbopack-static"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"serde",
@ -7988,7 +7988,7 @@ dependencies = [
[[package]]
name = "turbopack-swc-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"swc_core",
"turbo-tasks",
@ -7999,7 +7999,7 @@ dependencies = [
[[package]]
name = "turbopack-wasm"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231005.2#2207c3eb716b81c719385e43d25d7399f673fc11"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231006.1#59ac1533324bfac62e75d759dd6cdee0f44a0b96"
dependencies = [
"anyhow",
"indexmap 1.9.3",

View file

@ -40,11 +40,11 @@ swc_core = { version = "0.83.28", features = [
testing = { version = "0.34.1" }
# Turbo crates
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231005.2" }
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231006.1" }
# [TODO]: need to refactor embed_directory! macro usages, as well as resolving turbo_tasks::function, macros..
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231005.2" }
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231006.1" }
# [TODO]: need to refactor embed_directory! macro usage in next-core
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231005.2" }
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-231006.1" }
# General Deps

View file

@ -39,8 +39,9 @@ use turbopack_binding::{
turbopack::{
core::{
asset::{Asset, AssetContent},
chunk::{ChunkableModuleExt, ChunkingContext, EvaluatableAssets},
chunk::{ChunkingContext, EvaluatableAssets},
file_source::FileSource,
module::Module,
output::{OutputAsset, OutputAssets},
virtual_output::VirtualOutputAsset,
},
@ -507,7 +508,13 @@ impl AppEndpoint {
let mut server_assets = vec![];
let mut client_assets = vec![];
let app_entry = app_entry.await?;
let client_shared_chunks = get_app_client_shared_chunks(
app_entry
.rsc_entry
.ident()
.with_modifier(Vc::cell("client_shared_chunks".to_string())),
this.app_project.client_runtime_entries(),
this.app_project.project().client_chunking_context(),
);
@ -524,7 +531,6 @@ impl AppEndpoint {
}
}
let app_entry = app_entry.await?;
let rsc_entry = app_entry.rsc_entry;
let rsc_entry_asset = Vc::upcast(rsc_entry);
@ -707,9 +713,7 @@ impl AppEndpoint {
}
let files = chunking_context.evaluated_chunk_group(
app_entry
.rsc_entry
.as_root_chunk(Vc::upcast(chunking_context)),
app_entry.rsc_entry.ident(),
Vc::cell(evaluatable_assets),
);
server_assets.extend(files.await?.iter().copied());

View file

@ -13,7 +13,7 @@ use turbopack_binding::{
turbopack::{
core::{
asset::AssetContent,
chunk::{ChunkableModuleExt, ChunkingContext},
chunk::ChunkingContext,
context::AssetContext,
module::Module,
output::{OutputAsset, OutputAssets},
@ -88,10 +88,8 @@ impl MiddlewareEndpoint {
let edge_chunking_context = self.project.edge_middleware_chunking_context();
let edge_files = edge_chunking_context.evaluated_chunk_group(
module.as_root_chunk(Vc::upcast(edge_chunking_context)),
Vc::cell(evaluatable_assets),
);
let edge_files = edge_chunking_context
.evaluated_chunk_group(module.ident(), Vc::cell(evaluatable_assets));
Ok(edge_files)
}

View file

@ -37,10 +37,11 @@ use turbopack_binding::{
build::BuildChunkingContext,
core::{
asset::AssetContent,
chunk::{ChunkableModuleExt, ChunkingContext, EvaluatableAssets},
chunk::{ChunkingContext, EvaluatableAssets},
context::AssetContext,
file_source::FileSource,
issue::{IssueSeverity, OptionIssueSource},
module::Module,
output::{OutputAsset, OutputAssets},
reference_type::{
EcmaScriptModulesReferenceSubType, EntryReferenceSubType, ReferenceType,
@ -549,11 +550,9 @@ impl PageEndpoint {
let client_chunking_context = this.pages_project.project().client_chunking_context();
let client_entry_chunk = client_module.as_root_chunk(Vc::upcast(client_chunking_context));
let mut client_chunks = client_chunking_context
.evaluated_chunk_group(
client_entry_chunk,
client_module.ident(),
this.pages_project
.client_runtime_entries()
.with_entry(Vc::upcast(client_main_module))
@ -611,10 +610,8 @@ impl PageEndpoint {
};
evaluatable_assets.push(evaluatable);
let edge_files = edge_chunking_context.evaluated_chunk_group(
ssr_module.as_root_chunk(Vc::upcast(edge_chunking_context)),
Vc::cell(evaluatable_assets),
);
let edge_files = edge_chunking_context
.evaluated_chunk_group(ssr_module.ident(), Vc::cell(evaluatable_assets));
Ok(SsrChunk::Edge { files: edge_files }.cell())
} else {

View file

@ -27,7 +27,10 @@ use turbopack_binding::{
turbopack::{
build::BuildChunkingContext,
core::{
chunk::EvaluatableAssets, compile_time_info::CompileTimeInfo, file_source::FileSource,
chunk::{ChunkingContext, EvaluatableAssets},
compile_time_info::CompileTimeInfo,
file_source::FileSource,
ident::AssetIdent,
output::OutputAsset,
},
ecmascript::chunk::EcmascriptChunkingContext,
@ -256,8 +259,15 @@ pub async fn compute_app_entries_chunks(
) -> Result<()> {
let client_relative_path_ref = client_relative_path.await?;
let app_client_shared_chunks =
get_app_client_shared_chunks(app_entries.client_runtime_entries, client_chunking_context);
let app_client_shared_chunks = get_app_client_shared_chunks(
AssetIdent::from_path(
client_chunking_context
.context_path()
.join("client shared chunk group".to_string()),
),
app_entries.client_runtime_entries,
client_chunking_context,
);
let mut app_shared_client_chunks_paths = vec![];
for chunk in app_client_shared_chunks.await?.iter().copied() {

View file

@ -27,10 +27,11 @@ use turbopack_binding::{
turbopack::{
build::BuildChunkingContext,
core::{
chunk::{ChunkableModuleExt, ChunkingContext, EvaluatableAssets},
chunk::{ChunkingContext, EvaluatableAssets},
compile_time_info::CompileTimeInfo,
context::AssetContext,
file_source::FileSource,
module::Module,
output::OutputAsset,
reference_type::{EntryReferenceSubType, ReferenceType},
source::Source,
@ -400,12 +401,8 @@ pub async fn compute_page_entries_chunks(
.insert(pathname.clone_value(), asset_path.to_string());
}
let client_entry_chunk = page_entry
.client_module
.as_root_chunk(Vc::upcast(client_chunking_context));
let client_chunks = client_chunking_context.evaluated_chunk_group(
client_entry_chunk,
page_entry.client_module.ident(),
page_entries
.client_runtime_entries
.with_entry(Vc::upcast(page_entry.client_module)),

View file

@ -4,10 +4,7 @@ use serde::{Deserialize, Serialize};
use turbo_tasks::{debug::ValueDebugFormat, trace::TraceRawVcs, TryJoinIterExt, Vc};
use turbopack_binding::turbopack::{
build::BuildChunkingContext,
core::{
chunk::{ChunkableModuleExt, ChunkingContext},
output::OutputAssets,
},
core::{chunk::ChunkingContextExt, output::OutputAssets},
ecmascript::chunk::EcmascriptChunkingContext,
};
@ -46,24 +43,21 @@ pub async fn get_app_client_references_chunks(
match client_reference_ty {
ClientReferenceType::EcmascriptClientReference(ecmascript_client_reference) => {
let ecmascript_client_reference_ref = ecmascript_client_reference.await?;
let client_entry_chunk = ecmascript_client_reference_ref
.client_module
.as_root_chunk(Vc::upcast(client_chunking_context));
let ssr_entry_chunk = ecmascript_client_reference_ref
.ssr_module
.as_root_chunk(Vc::upcast(ssr_chunking_context));
ClientReferenceChunks {
client_chunks: client_chunking_context.chunk_group(client_entry_chunk),
ssr_chunks: ssr_chunking_context.chunk_group(ssr_entry_chunk),
client_chunks: client_chunking_context.root_chunk_group(Vc::upcast(
ecmascript_client_reference_ref.client_module,
)),
ssr_chunks: ssr_chunking_context.root_chunk_group(Vc::upcast(
ecmascript_client_reference_ref.ssr_module,
)),
}
}
ClientReferenceType::CssClientReference(css_client_reference) => {
let css_client_reference_ref = css_client_reference.await?;
let client_entry_chunk = css_client_reference_ref
.client_module
.as_root_chunk(Vc::upcast(client_chunking_context));
ClientReferenceChunks {
client_chunks: client_chunking_context.chunk_group(client_entry_chunk),
client_chunks: client_chunking_context.root_chunk_group(Vc::upcast(
css_client_reference_ref.client_module,
)),
ssr_chunks: OutputAssets::empty(),
}
}

View file

@ -1,41 +1,17 @@
use anyhow::Result;
use turbo_tasks::{TryJoinIterExt, Value, Vc};
use turbo_tasks::Vc;
use turbopack_binding::turbopack::{
core::{
chunk::{availability_info::AvailabilityInfo, ChunkingContext, EvaluatableAssets},
chunk::{ChunkingContext, EvaluatableAssets},
ident::AssetIdent,
output::OutputAssets,
},
ecmascript::chunk::{EcmascriptChunk, EcmascriptChunkPlaceable, EcmascriptChunkingContext},
ecmascript::chunk::EcmascriptChunkingContext,
};
#[turbo_tasks::function]
pub async fn get_app_shared_client_chunk(
app_client_runtime_entries: Vc<EvaluatableAssets>,
client_chunking_context: Vc<Box<dyn EcmascriptChunkingContext>>,
) -> Result<Vc<EcmascriptChunk>> {
let client_runtime_entries: Vec<_> = app_client_runtime_entries
.await?
.iter()
.map(|entry| async move {
Ok(Vc::try_resolve_sidecast::<Box<dyn EcmascriptChunkPlaceable>>(*entry).await?)
})
.try_join()
.await?
.into_iter()
.flatten()
.collect();
Ok(EcmascriptChunk::new_normalized(
client_chunking_context,
// TODO(alexkirsz) Should this accept Evaluatable instead?
Vc::cell(client_runtime_entries),
None,
Value::new(AvailabilityInfo::Untracked),
))
}
#[turbo_tasks::function]
pub async fn get_app_client_shared_chunks(
ident: Vc<AssetIdent>,
app_client_runtime_entries: Vc<EvaluatableAssets>,
client_chunking_context: Vc<Box<dyn EcmascriptChunkingContext>>,
) -> Result<Vc<OutputAssets>> {
@ -43,13 +19,8 @@ pub async fn get_app_client_shared_chunks(
return Ok(OutputAssets::empty());
}
let app_client_shared_chunk =
get_app_shared_client_chunk(app_client_runtime_entries, client_chunking_context);
let app_client_shared_chunks = client_chunking_context.evaluated_chunk_group(
Vc::upcast(app_client_shared_chunk),
app_client_runtime_entries,
);
let app_client_shared_chunks =
client_chunking_context.evaluated_chunk_group(ident, app_client_runtime_entries);
Ok(app_client_shared_chunks)
}

View file

@ -8,7 +8,7 @@ use turbopack_binding::{
asset::{Asset, AssetContent},
chunk::{
availability_info::AvailabilityInfo, Chunk, ChunkData, ChunkItem, ChunkItemExt,
ChunkableModule, ChunkableModuleExt, ChunkableModuleReference, ChunkingContext,
ChunkableModule, ChunkableModuleReference, ChunkingContext, ChunkingContextExt,
ChunkingType, ChunkingTypeOption, ChunksData,
},
ident::AssetIdent,
@ -111,9 +111,7 @@ impl WithClientChunksChunkItem {
async fn chunks(self: Vc<Self>) -> Result<Vc<OutputAssets>> {
let this = self.await?;
let inner = this.inner.await?;
Ok(this
.context
.chunk_group(inner.asset.as_root_chunk(Vc::upcast(this.context))))
Ok(this.context.root_chunk_group(Vc::upcast(inner.asset)))
}
#[turbo_tasks::function]

View file

@ -2,7 +2,7 @@ use anyhow::{bail, Result};
use turbo_tasks::Vc;
use turbopack_binding::turbopack::core::{
asset::{Asset, AssetContent},
chunk::{ChunkableModule, ChunkableModuleExt, ChunkingContext},
chunk::{ChunkableModule, ChunkingContext, ChunkingContextExt},
ident::AssetIdent,
module::Module,
output::OutputAssets,
@ -41,8 +41,7 @@ impl NextDynamicEntryModule {
bail!("dynamic client asset must be chunkable");
};
let client_entry_chunk = client_entry_module.as_root_chunk(client_chunking_context);
Ok(client_chunking_context.chunk_group(client_entry_chunk))
Ok(client_chunking_context.root_chunk_group(client_entry_module))
}
}

View file

@ -9,10 +9,7 @@ use turbopack_binding::{
turbopack::{
core::{
asset::{Asset, AssetContent},
chunk::{
ChunkData, ChunkableModuleExt, ChunkingContext, ChunksData, EvaluatableAsset,
EvaluatableAssets,
},
chunk::{ChunkData, ChunkingContext, ChunksData, EvaluatableAsset, EvaluatableAssets},
context::AssetContext,
ident::AssetIdent,
module::Module,
@ -138,10 +135,9 @@ impl PageLoaderAsset {
bail!("internal module must be evaluatable");
};
Ok(this.client_chunking_context.evaluated_chunk_group(
module.as_root_chunk(this.client_chunking_context),
EvaluatableAssets::one(module),
))
Ok(this
.client_chunking_context
.evaluated_chunk_group(module.ident(), EvaluatableAssets::one(module)))
}
#[turbo_tasks::function]

View file

@ -191,7 +191,7 @@
"@types/ws": "8.2.0",
"@vercel/ncc": "0.34.0",
"@vercel/nft": "0.22.6",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1",
"acorn": "8.5.0",
"amphtml-validator": "1.0.35",
"anser": "1.4.9",

View file

@ -1058,8 +1058,8 @@ importers:
specifier: 0.22.6
version: 0.22.6
'@vercel/turbopack-ecmascript-runtime':
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2(react-refresh@0.12.0)(webpack@5.86.0)'
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1(react-refresh@0.12.0)(webpack@5.86.0)'
acorn:
specifier: 8.5.0
version: 8.5.0
@ -9082,7 +9082,7 @@ packages:
fast-deep-equal: 3.1.3
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
uri-js: 4.2.2
uri-js: 4.4.1
dev: true
/alex@9.1.0:
@ -25928,12 +25928,6 @@ packages:
tslib: 2.6.2
dev: true
/uri-js@4.2.2:
resolution: {integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==}
dependencies:
punycode: 2.1.1
dev: true
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
@ -26762,9 +26756,9 @@ packages:
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
'@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2(react-refresh@0.12.0)(webpack@5.86.0)':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231005.2'
'@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1(react-refresh@0.12.0)(webpack@5.86.0)':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231006.1'
name: '@vercel/turbopack-ecmascript-runtime'
version: 0.0.0
dependencies: