From 4398e348ee724d88282881137311680ee60fb23c Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 12 Jun 2024 12:38:28 +0200 Subject: [PATCH] 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 --- Cargo.lock | 74 +++++------ Cargo.toml | 6 +- packages/next-swc/crates/next-api/src/app.rs | 10 +- .../crates/next-api/src/instrumentation.rs | 6 +- .../next-swc/crates/next-api/src/pages.rs | 15 +-- .../next-swc/crates/next-api/src/project.rs | 3 +- .../next-core/src/next_app/app_entry.rs | 4 +- .../next-core/src/next_app/app_page_entry.rs | 10 +- .../next-core/src/next_app/app_route_entry.rs | 9 +- .../src/next_client_reference/mod.rs | 2 +- .../visit_client_reference.rs | 117 +++++++----------- .../next-core/src/next_pages/page_entry.rs | 10 +- packages/next/package.json | 2 +- pnpm-lock.yaml | 8 +- 14 files changed, 110 insertions(+), 166 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 040f6ae611..41ca6d9d95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index fcb447ed14..4a001ab9c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 diff --git a/packages/next-swc/crates/next-api/src/app.rs b/packages/next-swc/crates/next-api/src/app.rs index 0e24456eb9..84e0181e8a 100644 --- a/packages/next-swc/crates/next-api/src/app.rs +++ b/packages/next-swc/crates/next-api/src/app.rs @@ -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 { diff --git a/packages/next-swc/crates/next-api/src/instrumentation.rs b/packages/next-swc/crates/next-api/src/instrumentation.rs index 03ce17691e..c229ba9632 100644 --- a/packages/next-swc/crates/next-api/src/instrumentation.rs +++ b/packages/next-swc/crates/next-api/src/instrumentation.rs @@ -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, }, }; diff --git a/packages/next-swc/crates/next-api/src/pages.rs b/packages/next-swc/crates/next-api/src/pages.rs index d6b0c39873..e25e617f35 100644 --- a/packages/next-swc/crates/next-api/src/pages.rs +++ b/packages/next-swc/crates/next-api/src/pages.rs @@ -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::>(ssr_module) - .await? - else { - bail!("expected an ECMAScript chunk placeable module"); - }; - ssr_module } else { create_page_ssr_entry_module( diff --git a/packages/next-swc/crates/next-api/src/project.rs b/packages/next-swc/crates/next-api/src/project.rs index 03a31f2878..797a3d52a4 100644 --- a/packages/next-swc/crates/next-api/src/project.rs +++ b/packages/next-swc/crates/next-api/src/project.rs @@ -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, diff --git a/packages/next-swc/crates/next-core/src/next_app/app_entry.rs b/packages/next-swc/crates/next-core/src/next_app/app_entry.rs index 444717924f..5b712255a1 100644 --- a/packages/next-swc/crates/next-core/src/next_app/app_entry.rs +++ b/packages/next-swc/crates/next-core/src/next_app/app_entry.rs @@ -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>, + pub rsc_entry: Vc>, /// The source code config for this entry. pub config: Vc, } diff --git a/packages/next-swc/crates/next-core/src/next_app/app_page_entry.rs b/packages/next-swc/crates/next-core/src/next_app/app_page_entry.rs index 9beb79635d..6d1fddffb5 100644 --- a/packages/next-swc/crates/next-core/src/next_app/app_page_entry.rs +++ b/packages/next-swc/crates/next-core/src/next_app/app_page_entry.rs @@ -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::>(rsc_entry).await? - else { - bail!("expected an ECMAScript chunk placeable module"); - }; - Ok(AppEntry { pathname, original_name, diff --git a/packages/next-swc/crates/next-core/src/next_app/app_route_entry.rs b/packages/next-swc/crates/next-core/src/next_app/app_route_entry.rs index 06aa3e7439..0a95f81a93 100644 --- a/packages/next-swc/crates/next-core/src/next_app/app_route_entry.rs +++ b/packages/next-swc/crates/next-core/src/next_app/app_route_entry.rs @@ -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::>(rsc_entry).await? - else { - bail!("expected an ECMAScript chunk placeable module"); - }; - Ok(AppEntry { pathname, original_name, diff --git a/packages/next-swc/crates/next-core/src/next_client_reference/mod.rs b/packages/next-swc/crates/next-core/src/next_client_reference/mod.rs index 984741119c..836ed29a7e 100644 --- a/packages/next-swc/crates/next-core/src/next_client_reference/mod.rs +++ b/packages/next-swc/crates/next-core/src/next_client_reference/mod.rs @@ -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, }; diff --git a/packages/next-swc/crates/next-core/src/next_client_reference/visit_client_reference.rs b/packages/next-swc/crates/next-core/src/next_client_reference/visit_client_reference.rs index 330e912d09..7192f266e7 100644 --- a/packages/next-swc/crates/next-core/src/next_client_reference/visit_client_reference.rs +++ b/packages/next-swc/crates/next-core/src/next_client_reference/visit_client_reference.rs @@ -48,6 +48,7 @@ pub enum ClientReferenceType { } #[turbo_tasks::value] +#[derive(Debug)] pub struct ClientReferenceGraphResult { pub client_references: Vec, pub server_component_entries: Vec>, @@ -56,84 +57,54 @@ pub struct ClientReferenceGraphResult { #[turbo_tasks::value(transparent)] pub struct ClientReferenceTypes(IndexSet); -#[turbo_tasks::value] -pub struct ClientReferenceGraph { - graph: AdjacencyMap, +#[turbo_tasks::value_impl] +impl ClientReferenceGraphResult { + #[turbo_tasks::function] + pub fn types(&self) -> Vc { + Vc::cell( + self.client_references + .iter() + .map(|r| r.ty()) + .collect::>(), + ) + } } -#[turbo_tasks::value_impl] -impl ClientReferenceGraph { - #[turbo_tasks::function] - pub async fn new(entries: Vc) -> Result> { - async move { - let entries = entries.await?; +#[turbo_tasks::function] +pub async fn client_reference_graph( + entries: Vc, +) -> Result> { + 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) -> Result> { - 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, - entry: Vc>, - ) -> Result> { - 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; diff --git a/packages/next-swc/crates/next-core/src/next_pages/page_entry.rs b/packages/next-swc/crates/next-core/src/next_pages/page_entry.rs index 00d1245621..39b31f4ada 100644 --- a/packages/next-swc/crates/next-core/src/next_pages/page_entry.rs +++ b/packages/next-swc/crates/next-core/src/next_pages/page_entry.rs @@ -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, runtime: NextRuntime, next_config: Vc, -) -> Result>> { +) -> Result>> { 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::>(ssr_module).await? - else { - bail!("expected an ECMAScript chunk placeable module"); - }; - Ok(ssr_module) } diff --git a/packages/next/package.json b/packages/next/package.json index eef7d4bad1..d83e19ede2 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67527c3d04..4b8b9b6fba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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: