use node js chunking context for evaluation (#66710)

### What?

Refactoring to use node.js chunking context for evaluation

see https://github.com/vercel/turbo/pull/8402

### Why?

### Turbopack changes

* vercel/turbo#8422
* vercel/turbo#8402
This commit is contained in:
Tobias Koppers 2024-06-12 12:38:28 +02:00 committed by GitHub
parent eb6575adb9
commit 4398e348ee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 110 additions and 166 deletions

74
Cargo.lock generated
View file

@ -321,7 +321,7 @@ dependencies = [
[[package]]
name = "auto-hash-map"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"serde",
"smallvec",
@ -3092,7 +3092,7 @@ dependencies = [
[[package]]
name = "node-file-trace"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"serde",
@ -6964,12 +6964,12 @@ dependencies = [
[[package]]
name = "turbo-prehash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
[[package]]
name = "turbo-tasks"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-trait",
@ -7001,7 +7001,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"cargo-lock",
@ -7013,7 +7013,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-bytes"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"bytes",
@ -7027,7 +7027,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"dotenvs",
@ -7041,7 +7041,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fetch"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"lazy_static",
@ -7057,7 +7057,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7089,7 +7089,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-hash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"md4",
"turbo-tasks-macros",
@ -7099,7 +7099,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"proc-macro-error",
@ -7113,7 +7113,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros-shared"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"proc-macro2",
"quote",
@ -7123,7 +7123,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-malloc"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"mimalloc",
]
@ -7131,7 +7131,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-memory"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7158,7 +7158,7 @@ dependencies = [
[[package]]
name = "turbopack"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-recursion",
@ -7188,7 +7188,7 @@ dependencies = [
[[package]]
name = "turbopack-binding"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"auto-hash-map",
"mdxjs",
@ -7229,7 +7229,7 @@ dependencies = [
[[package]]
name = "turbopack-browser"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7252,7 +7252,7 @@ dependencies = [
[[package]]
name = "turbopack-cli-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"clap",
@ -7269,7 +7269,7 @@ dependencies = [
[[package]]
name = "turbopack-core"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-recursion",
@ -7298,7 +7298,7 @@ dependencies = [
[[package]]
name = "turbopack-css"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7325,7 +7325,7 @@ dependencies = [
[[package]]
name = "turbopack-dev-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-compression",
@ -7361,7 +7361,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-trait",
@ -7396,7 +7396,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-hmr-protocol"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"serde",
"serde_json",
@ -7407,7 +7407,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-plugins"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-trait",
@ -7432,7 +7432,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-runtime"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indoc",
@ -7448,7 +7448,7 @@ dependencies = [
[[package]]
name = "turbopack-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7464,7 +7464,7 @@ dependencies = [
[[package]]
name = "turbopack-image"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"base64 0.21.4",
@ -7483,7 +7483,7 @@ dependencies = [
[[package]]
name = "turbopack-json"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"serde",
@ -7498,7 +7498,7 @@ dependencies = [
[[package]]
name = "turbopack-mdx"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"mdxjs",
@ -7513,7 +7513,7 @@ dependencies = [
[[package]]
name = "turbopack-node"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"async-stream",
@ -7547,7 +7547,7 @@ dependencies = [
[[package]]
name = "turbopack-nodejs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7567,7 +7567,7 @@ dependencies = [
[[package]]
name = "turbopack-resolve"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7585,7 +7585,7 @@ dependencies = [
[[package]]
name = "turbopack-static"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"serde",
@ -7601,7 +7601,7 @@ dependencies = [
[[package]]
name = "turbopack-swc-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"swc_core",
"turbo-tasks",
@ -7612,7 +7612,7 @@ dependencies = [
[[package]]
name = "turbopack-trace-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"either",
@ -7632,7 +7632,7 @@ dependencies = [
[[package]]
name = "turbopack-trace-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"crossbeam-channel",
@ -7648,7 +7648,7 @@ dependencies = [
[[package]]
name = "turbopack-wasm"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240611.2#b37b9c6ca913628cb2193b42ffc9feabaaba91f1"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240612.1#4592752b6dea8e23aef995dac3c46187864e602f"
dependencies = [
"anyhow",
"indexmap 1.9.3",

View file

@ -37,11 +37,11 @@ swc_core = { version = "0.93.2", features = [
testing = { version = "0.35.25" }
# Turbo crates
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240611.2" }
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240612.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-240611.2" }
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240612.1" }
# [TODO]: need to refactor embed_directory! macro usage in next-core
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240611.2" }
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240612.1" }
# General Deps

View file

@ -18,7 +18,7 @@ use next_core::{
get_client_runtime_entries, ClientContextType, RuntimeEntries,
},
next_client_reference::{
ClientReferenceGraph, ClientReferenceType, NextEcmascriptClientReferenceTransition,
client_reference_graph, ClientReferenceType, NextEcmascriptClientReferenceTransition,
},
next_config::NextConfig,
next_dynamic::NextDynamicTransition,
@ -47,7 +47,7 @@ use turbopack_binding::{
asset::AssetContent,
chunk::{
availability_info::AvailabilityInfo, ChunkingContext, ChunkingContextExt,
EvaluatableAssets,
EntryChunkGroupResult, EvaluatableAssets,
},
file_source::FileSource,
module::Module,
@ -56,7 +56,6 @@ use turbopack_binding::{
source::Source,
virtual_output::VirtualOutputAsset,
},
nodejs::EntryChunkGroupResult,
turbopack::{
module_options::ModuleOptionsContext,
resolve_options_context::ResolveOptionsContext,
@ -791,9 +790,8 @@ impl AppEndpoint {
}
let client_shared_availability_info = client_shared_chunk_group.availability_info;
let client_reference_graph = ClientReferenceGraph::new(Vc::cell(vec![rsc_entry_asset]));
let client_reference_types = client_reference_graph.types();
let client_references = client_reference_graph.entry(rsc_entry_asset);
let client_references = client_reference_graph(Vc::cell(vec![rsc_entry_asset]));
let client_reference_types = client_references.types();
let ssr_chunking_context = if process_ssr {
Some(match runtime {

View file

@ -12,7 +12,10 @@ use turbopack_binding::{
turbopack::{
core::{
asset::AssetContent,
chunk::{availability_info::AvailabilityInfo, ChunkingContextExt},
chunk::{
availability_info::AvailabilityInfo, ChunkingContext, ChunkingContextExt,
EntryChunkGroupResult,
},
context::AssetContext,
module::Module,
output::{OutputAsset, OutputAssets},
@ -21,7 +24,6 @@ use turbopack_binding::{
virtual_output::VirtualOutputAsset,
},
ecmascript::chunk::EcmascriptChunkPlaceable,
nodejs::EntryChunkGroupResult,
},
};

View file

@ -37,7 +37,7 @@ use turbopack_binding::{
asset::AssetContent,
chunk::{
availability_info::AvailabilityInfo, ChunkingContext, ChunkingContextExt,
EvaluatableAssets,
EntryChunkGroupResult, EvaluatableAssets,
},
context::AssetContext,
file_source::FileSource,
@ -51,10 +51,8 @@ use turbopack_binding::{
source::Source,
virtual_output::VirtualOutputAsset,
},
ecmascript::{
chunk::EcmascriptChunkPlaceable, resolve::esm_resolve, EcmascriptModuleAsset,
},
nodejs::{EntryChunkGroupResult, NodeJsChunkingContext},
ecmascript::{resolve::esm_resolve, EcmascriptModuleAsset},
nodejs::NodeJsChunkingContext,
turbopack::{
module_options::ModuleOptionsContext,
resolve_options_context::ResolveOptionsContext,
@ -771,13 +769,6 @@ impl PageEndpoint {
// `/_app` and `/_document` never get rendered directly so they don't need to be
// wrapped in the route module.
let ssr_module = if pathname == "/_app" || pathname == "/_document" {
let Some(ssr_module) =
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(ssr_module)
.await?
else {
bail!("expected an ECMAScript chunk placeable module");
};
ssr_module
} else {
create_page_ssr_entry_module(

View file

@ -35,7 +35,6 @@ use turbopack_binding::{
tasks_fs::{DiskFileSystem, FileSystem, FileSystemPath, VirtualFileSystem},
},
turbopack::{
browser::BrowserChunkingContext,
core::{
changed::content_changed,
chunk::ChunkingContext,
@ -565,7 +564,7 @@ impl Project {
let next_mode = self.next_mode().await?;
let node_execution_chunking_context = Vc::upcast(
BrowserChunkingContext::builder(
NodeJsChunkingContext::builder(
self.project_path(),
node_root,
node_root,

View file

@ -1,5 +1,5 @@
use turbo_tasks::{RcStr, Vc};
use turbopack_binding::turbopack::ecmascript::chunk::EcmascriptChunkPlaceable;
use turbopack_binding::turbopack::core::module::Module;
use crate::app_segment_config::NextSegmentConfig;
@ -12,7 +12,7 @@ pub struct AppEntry {
/// the pathname to refer to this entry.
pub original_name: RcStr,
/// The RSC module asset for the route or page.
pub rsc_entry: Vc<Box<dyn EcmascriptChunkPlaceable>>,
pub rsc_entry: Vc<Box<dyn Module>>,
/// The source code config for this entry.
pub config: Vc<NextSegmentConfig>,
}

View file

@ -1,6 +1,6 @@
use std::io::Write;
use anyhow::{bail, Result};
use anyhow::Result;
use indexmap::indexmap;
use turbo_tasks::{RcStr, TryJoinIterExt, Value, ValueToString, Vc};
use turbopack_binding::{
@ -14,7 +14,7 @@ use turbopack_binding::{
source::Source,
virtual_source::VirtualSource,
},
ecmascript::{chunk::EcmascriptChunkPlaceable, utils::StringifyJs},
ecmascript::utils::StringifyJs,
turbopack::ModuleAssetContext,
},
};
@ -125,12 +125,6 @@ pub async fn get_app_page_entry(
);
};
let Some(rsc_entry) =
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(rsc_entry).await?
else {
bail!("expected an ECMAScript chunk placeable module");
};
Ok(AppEntry {
pathname,
original_name,

View file

@ -1,4 +1,4 @@
use anyhow::{bail, Result};
use anyhow::Result;
use indexmap::indexmap;
use turbo_tasks::{RcStr, Value, ValueToString, Vc};
use turbopack_binding::{
@ -10,7 +10,6 @@ use turbopack_binding::{
reference_type::{EntryReferenceSubType, ReferenceType},
source::Source,
},
ecmascript::chunk::EcmascriptChunkPlaceable,
turbopack::ModuleAssetContext,
},
};
@ -122,12 +121,6 @@ pub async fn get_app_route_entry(
);
}
let Some(rsc_entry) =
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(rsc_entry).await?
else {
bail!("expected an ECMAScript chunk placeable module");
};
Ok(AppEntry {
pathname,
original_name,

View file

@ -8,6 +8,6 @@ pub use ecmascript_client_reference::{
ecmascript_client_reference_transition::NextEcmascriptClientReferenceTransition,
};
pub use visit_client_reference::{
ClientReference, ClientReferenceGraph, ClientReferenceGraphResult, ClientReferenceType,
client_reference_graph, ClientReference, ClientReferenceGraphResult, ClientReferenceType,
ClientReferenceTypes,
};

View file

@ -48,6 +48,7 @@ pub enum ClientReferenceType {
}
#[turbo_tasks::value]
#[derive(Debug)]
pub struct ClientReferenceGraphResult {
pub client_references: Vec<ClientReference>,
pub server_component_entries: Vec<Vc<NextServerComponentModule>>,
@ -56,84 +57,54 @@ pub struct ClientReferenceGraphResult {
#[turbo_tasks::value(transparent)]
pub struct ClientReferenceTypes(IndexSet<ClientReferenceType>);
#[turbo_tasks::value]
pub struct ClientReferenceGraph {
graph: AdjacencyMap<VisitClientReferenceNode>,
#[turbo_tasks::value_impl]
impl ClientReferenceGraphResult {
#[turbo_tasks::function]
pub fn types(&self) -> Vc<ClientReferenceTypes> {
Vc::cell(
self.client_references
.iter()
.map(|r| r.ty())
.collect::<IndexSet<_>>(),
)
}
}
#[turbo_tasks::value_impl]
impl ClientReferenceGraph {
#[turbo_tasks::function]
pub async fn new(entries: Vc<Modules>) -> Result<Vc<Self>> {
async move {
let entries = entries.await?;
#[turbo_tasks::function]
pub async fn client_reference_graph(
entries: Vc<Modules>,
) -> Result<Vc<ClientReferenceGraphResult>> {
async move {
let entries = entries.await?;
let graph = AdjacencyMap::new()
.skip_duplicates()
.visit(
entries
.iter()
.copied()
.map(|module| async move {
Ok(VisitClientReferenceNode {
server_component: None,
ty: VisitClientReferenceNodeType::Internal(
module,
module.ident().to_string().await?,
),
})
})
.try_join()
.await?,
VisitClientReference,
)
.await
.completed()?
.into_inner();
Ok(ClientReferenceGraph { graph }.cell())
}
.instrument(tracing::info_span!("find client references"))
.await
}
#[turbo_tasks::function]
pub async fn types(self: Vc<Self>) -> Result<Vc<ClientReferenceTypes>> {
let this = self.await?;
let mut client_reference_types = IndexSet::new();
for node in this.graph.reverse_topological() {
match &node.ty {
VisitClientReferenceNodeType::Internal(..)
| VisitClientReferenceNodeType::ServerComponentEntry(..) => {
// No-op. These nodes are only useful during graph
// traversal.
}
VisitClientReferenceNodeType::ClientReference(client_reference, _) => {
client_reference_types.insert(client_reference.ty());
}
}
}
Ok(Vc::cell(client_reference_types))
}
#[turbo_tasks::function]
pub async fn entry(
self: Vc<Self>,
entry: Vc<Box<dyn Module>>,
) -> Result<Vc<ClientReferenceGraphResult>> {
let this = self.await?;
let mut client_references = vec![];
let mut server_component_entries = vec![];
for node in this
.graph
.reverse_topological_from_node(&VisitClientReferenceNode {
server_component: None,
ty: VisitClientReferenceNodeType::Internal(entry, entry.ident().to_string().await?),
})
{
let graph = AdjacencyMap::new()
.skip_duplicates()
.visit(
entries
.iter()
.copied()
.map(|module| async move {
Ok(VisitClientReferenceNode {
server_component: None,
ty: VisitClientReferenceNodeType::Internal(
module,
module.ident().to_string().await?,
),
})
})
.try_join()
.await?,
VisitClientReference,
)
.await
.completed()?
.into_inner()
.into_reverse_topological();
for node in graph {
match &node.ty {
VisitClientReferenceNodeType::Internal(_asset, _) => {
// No-op. These nodes are only useful during graph
@ -154,6 +125,8 @@ impl ClientReferenceGraph {
}
.cell())
}
.instrument(tracing::info_span!("find client references"))
.await
}
struct VisitClientReference;

View file

@ -20,7 +20,7 @@ use turbopack_binding::{
source::Source,
virtual_source::VirtualSource,
},
ecmascript::{chunk::EcmascriptChunkPlaceable, utils::StringifyJs},
ecmascript::utils::StringifyJs,
},
};
@ -42,7 +42,7 @@ pub async fn create_page_ssr_entry_module(
pages_structure: Vc<PagesStructure>,
runtime: NextRuntime,
next_config: Vc<NextConfig>,
) -> Result<Vc<Box<dyn EcmascriptChunkPlaceable>>> {
) -> Result<Vc<Box<dyn Module>>> {
let definition_page = &*next_original_name.await?;
let definition_pathname = &*pathname.await?;
@ -170,12 +170,6 @@ pub async fn create_page_ssr_entry_module(
}
}
let Some(ssr_module) =
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(ssr_module).await?
else {
bail!("expected an ECMAScript chunk placeable module");
};
Ok(ssr_module)
}

View file

@ -206,7 +206,7 @@
"@types/ws": "8.2.0",
"@vercel/ncc": "0.34.0",
"@vercel/nft": "0.27.1",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240611.2",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240612.1",
"acorn": "8.11.3",
"amphtml-validator": "1.0.35",
"anser": "1.4.9",

View file

@ -1090,8 +1090,8 @@ importers:
specifier: 0.27.1
version: 0.27.1
'@vercel/turbopack-ecmascript-runtime':
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240611.2
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240611.2'
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240612.1
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240612.1'
acorn:
specifier: 8.11.3
version: 8.11.3
@ -25890,8 +25890,8 @@ 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-240611.2':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240611.2}
'@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240612.1':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240612.1}
name: '@vercel/turbopack-ecmascript-runtime'
version: 0.0.0
dependencies: