side effects optimization (#58972)

### What?

Code update for refactoring in https://github.com/vercel/turbo/pull/6590


Closes PACK-2043
This commit is contained in:
Tobias Koppers 2023-12-06 09:23:46 +01:00 committed by GitHub
parent 06cf74a66a
commit 0082d54893
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 426 additions and 298 deletions

69
Cargo.lock generated
View file

@ -322,7 +322,7 @@ dependencies = [
[[package]]
name = "auto-hash-map"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"serde",
"smallvec",
@ -3549,7 +3549,7 @@ dependencies = [
[[package]]
name = "node-file-trace"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"serde",
@ -7678,7 +7678,7 @@ dependencies = [
[[package]]
name = "turbo-tasks"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-trait",
@ -7710,7 +7710,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"cargo-lock",
@ -7722,7 +7722,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-bytes"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"bytes",
@ -7737,7 +7737,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"dotenvs",
@ -7751,7 +7751,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fetch"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7768,7 +7768,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7799,7 +7799,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-hash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"base16",
"hex",
@ -7811,7 +7811,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"convert_case 0.6.0",
@ -7825,7 +7825,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros-shared"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"proc-macro2",
"quote",
@ -7835,7 +7835,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-malloc"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"mimalloc",
]
@ -7843,7 +7843,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-memory"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7868,7 +7868,7 @@ dependencies = [
[[package]]
name = "turbopack"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-recursion",
@ -7900,7 +7900,7 @@ dependencies = [
[[package]]
name = "turbopack-binding"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"auto-hash-map",
"mdxjs",
@ -7941,7 +7941,7 @@ dependencies = [
[[package]]
name = "turbopack-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -7965,7 +7965,7 @@ dependencies = [
[[package]]
name = "turbopack-cli-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"clap 4.4.2",
@ -7983,7 +7983,7 @@ dependencies = [
[[package]]
name = "turbopack-core"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-recursion",
@ -8013,7 +8013,7 @@ dependencies = [
[[package]]
name = "turbopack-css"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-trait",
@ -8027,6 +8027,7 @@ dependencies = [
"serde",
"smallvec",
"swc_core",
"tracing",
"turbo-tasks",
"turbo-tasks-build",
"turbo-tasks-fs",
@ -8039,7 +8040,7 @@ dependencies = [
[[package]]
name = "turbopack-dev"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -8063,7 +8064,7 @@ dependencies = [
[[package]]
name = "turbopack-dev-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-compression",
@ -8100,7 +8101,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-trait",
@ -8134,7 +8135,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-hmr-protocol"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"serde",
"serde_json",
@ -8145,7 +8146,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-plugins"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-trait",
@ -8168,7 +8169,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-runtime"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indoc",
@ -8185,7 +8186,7 @@ dependencies = [
[[package]]
name = "turbopack-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indexmap 1.9.3",
@ -8201,7 +8202,7 @@ dependencies = [
[[package]]
name = "turbopack-image"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"base64 0.21.4",
@ -8221,7 +8222,7 @@ dependencies = [
[[package]]
name = "turbopack-json"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"serde",
@ -8236,7 +8237,7 @@ dependencies = [
[[package]]
name = "turbopack-mdx"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"mdxjs",
@ -8251,7 +8252,7 @@ dependencies = [
[[package]]
name = "turbopack-node"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"async-stream",
@ -8286,7 +8287,7 @@ dependencies = [
[[package]]
name = "turbopack-static"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"serde",
@ -8302,7 +8303,7 @@ dependencies = [
[[package]]
name = "turbopack-swc-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"swc_core",
"turbo-tasks",
@ -8313,7 +8314,7 @@ dependencies = [
[[package]]
name = "turbopack-trace-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"crossbeam-channel",
@ -8328,7 +8329,7 @@ dependencies = [
[[package]]
name = "turbopack-wasm"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231205.2#8cb1c34181948ea6e85584d05eb9f69e86e11859"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-231206.2#16bbf81a2a45b85737e569312b1ee76eec6c388c"
dependencies = [
"anyhow",
"indexmap 1.9.3",

View file

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

View file

@ -1,6 +1,6 @@
use std::collections::HashMap;
use anyhow::{bail, Context, Result};
use anyhow::{Context, Result};
use indexmap::IndexSet;
use next_core::{
all_assets_from_entries,
@ -822,9 +822,9 @@ impl AppEndpoint {
.edge_rsc_runtime_entries()
.await?
.clone_value();
let Some(evaluatable) = Vc::try_resolve_sidecast(app_entry.rsc_entry).await? else {
bail!("Entry module must be evaluatable");
};
let evaluatable = Vc::try_resolve_sidecast(app_entry.rsc_entry)
.await?
.context("Entry module must be evaluatable")?;
evaluatable_assets.push(evaluatable);
let (loader, manifest) = create_server_actions_manifest(

View file

@ -17,6 +17,8 @@ use turbopack_binding::{
context::AssetContext,
module::Module,
output::{OutputAsset, OutputAssets},
reference_type::{EntryReferenceSubType, ReferenceType},
source::Source,
virtual_output::VirtualOutputAsset,
},
ecmascript::chunk::EcmascriptChunkPlaceable,
@ -34,7 +36,7 @@ use crate::{
pub struct InstrumentationEndpoint {
project: Vc<Project>,
context: Vc<Box<dyn AssetContext>>,
userland_module: Vc<Box<dyn Module>>,
source: Vc<Box<dyn Source>>,
is_edge: bool,
}
@ -44,13 +46,13 @@ impl InstrumentationEndpoint {
pub fn new(
project: Vc<Project>,
context: Vc<Box<dyn AssetContext>>,
userland_module: Vc<Box<dyn Module>>,
source: Vc<Box<dyn Source>>,
is_edge: bool,
) -> Vc<Self> {
Self {
project,
context,
userland_module,
source,
is_edge,
}
.cell()
@ -58,10 +60,18 @@ impl InstrumentationEndpoint {
#[turbo_tasks::function]
async fn edge_files(&self) -> Result<Vc<OutputAssets>> {
let userland_module = self
.context
.process(
self.source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Instrumentation)),
)
.module();
let module = wrap_edge_entry(
self.context,
self.project.project_path(),
self.userland_module,
userland_module,
"instrumentation".to_string(),
);
@ -102,7 +112,15 @@ impl InstrumentationEndpoint {
self.project.server_compile_time_info().environment(),
);
let Some(module) = Vc::try_resolve_downcast(self.userland_module).await? else {
let userland_module = self
.context
.process(
self.source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Instrumentation)),
)
.module();
let Some(module) = Vc::try_resolve_downcast(userland_module).await? else {
bail!("Entry module must be evaluatable");
};

View file

@ -21,6 +21,8 @@ use turbopack_binding::{
context::AssetContext,
module::Module,
output::{OutputAsset, OutputAssets},
reference_type::{EntryReferenceSubType, ReferenceType},
source::Source,
virtual_output::VirtualOutputAsset,
},
ecmascript::chunk::EcmascriptChunkPlaceable,
@ -37,7 +39,7 @@ use crate::{
pub struct MiddlewareEndpoint {
project: Vc<Project>,
context: Vc<Box<dyn AssetContext>>,
userland_module: Vc<Box<dyn Module>>,
source: Vc<Box<dyn Source>>,
}
#[turbo_tasks::value_impl]
@ -46,23 +48,28 @@ impl MiddlewareEndpoint {
pub fn new(
project: Vc<Project>,
context: Vc<Box<dyn AssetContext>>,
userland_module: Vc<Box<dyn Module>>,
source: Vc<Box<dyn Source>>,
) -> Vc<Self> {
Self {
project,
context,
userland_module,
source,
}
.cell()
}
#[turbo_tasks::function]
async fn edge_files(&self) -> Result<Vc<OutputAssets>> {
let module = get_middleware_module(
self.context,
self.project.project_path(),
self.userland_module,
);
let userland_module = self
.context
.process(
self.source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Middleware)),
)
.module();
let module =
get_middleware_module(self.context, self.project.project_path(), userland_module);
let module = wrap_edge_entry(
self.context,
@ -85,9 +92,9 @@ impl MiddlewareEndpoint {
bail!("Entry module must be evaluatable");
};
let Some(evaluatable) = Vc::try_resolve_sidecast(module).await? else {
bail!("Entry module must be evaluatable");
};
let evaluatable = Vc::try_resolve_sidecast(module)
.await?
.context("Entry module must be evaluatable")?;
evaluatable_assets.push(evaluatable);
let edge_chunking_context = self.project.edge_chunking_context();
@ -102,7 +109,15 @@ impl MiddlewareEndpoint {
async fn output_assets(self: Vc<Self>) -> Result<Vc<OutputAssets>> {
let this = self.await?;
let config = parse_config_from_source(this.userland_module);
let userland_module = this
.context
.process(
this.source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Middleware)),
)
.module();
let config = parse_config_from_source(userland_module);
let edge_files = self.edge_files();
let mut output_assets = edge_files.await?.clone_value();

View file

@ -645,7 +645,9 @@ impl PageEndpoint {
async move {
let this = self.await?;
let ssr_module = module_context.process(self.source(), reference_type.clone());
let ssr_module = module_context
.process(self.source(), reference_type.clone())
.module();
let config = parse_config_from_source(ssr_module).await?;
let is_edge = matches!(config.runtime, NextRuntime::Edge);
@ -663,9 +665,9 @@ impl PageEndpoint {
);
let mut evaluatable_assets = edge_runtime_entries.await?.clone_value();
let Some(evaluatable) = Vc::try_resolve_sidecast(ssr_module).await? else {
bail!("Entry module must be evaluatable");
};
let evaluatable = Vc::try_resolve_sidecast(ssr_module)
.await?
.context("could not process page loader entry module")?;
evaluatable_assets.push(evaluatable);
let edge_files = edge_chunking_context.evaluated_chunk_group(

View file

@ -42,7 +42,6 @@ use turbopack_binding::{
environment::ServerAddr,
file_source::FileSource,
output::{OutputAsset, OutputAssets},
reference_type::{EntryReferenceSubType, ReferenceType},
resolve::{find_context_file, FindContextFileResult},
source::Source,
version::{Update, Version, VersionState, VersionedContent},
@ -729,15 +728,13 @@ impl Project {
}
#[turbo_tasks::function]
fn middleware_endpoint(self: Vc<Self>, source: Vc<Box<dyn Source>>) -> Vc<MiddlewareEndpoint> {
async fn middleware_endpoint(
self: Vc<Self>,
source: Vc<Box<dyn Source>>,
) -> Result<Vc<MiddlewareEndpoint>> {
let context = self.middleware_context();
let module = context.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Middleware)),
);
MiddlewareEndpoint::new(self, context, module)
Ok(MiddlewareEndpoint::new(self, context, source))
}
#[turbo_tasks::function]
@ -775,12 +772,7 @@ impl Project {
self.node_instrumentation_context()
};
let module = context.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Undefined)),
);
InstrumentationEndpoint::new(self, context, module, is_edge)
InstrumentationEndpoint::new(self, context, source, is_edge)
}
#[turbo_tasks::function]

View file

@ -1,6 +1,6 @@
use std::{io::Write, iter::once};
use anyhow::{bail, Result};
use anyhow::{bail, Context, Result};
use indexmap::{map::Entry, IndexMap};
use next_core::{
next_manifests::{ActionLayer, ActionManifestWorkerEntry, ServerReferenceManifest},
@ -57,10 +57,9 @@ pub(crate) async fn create_server_actions_manifest(
let actions = get_actions(rsc_entry, server_reference_modules, asset_context);
let loader =
build_server_actions_loader(project_path, page_name, actions, asset_context).await?;
let Some(evaluable) = Vc::try_resolve_sidecast::<Box<dyn EvaluatableAsset>>(loader).await?
else {
bail!("loader module must be evaluatable");
};
let evaluable = Vc::try_resolve_sidecast::<Box<dyn EvaluatableAsset>>(loader)
.await?
.context("loader module must be evaluatable")?;
let loader_id = loader
.as_chunk_item(Vc::upcast(chunking_context))
@ -108,10 +107,12 @@ async fn build_server_actions_loader(
let file = File::from(contents.build());
let source = VirtualSource::new(output_path, AssetContent::file(file.into()));
let import_map = import_map.into_iter().map(|(k, v)| (v, k)).collect();
let module = asset_context.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(import_map))),
);
let module = asset_context
.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(import_map))),
)
.module();
let Some(placeable) =
Vc::try_resolve_sidecast::<Box<dyn EcmascriptChunkPlaceable>>(module).await?
@ -249,7 +250,10 @@ async fn to_rsc_context(
} else {
ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined)
};
Ok(asset_context.process(Vc::upcast(source), Value::new(ty)))
let module = asset_context
.process(Vc::upcast(source), Value::new(ty))
.module();
Ok(module)
}
/// Our graph traversal visitor, which finds the primary modules directly

View file

@ -1,4 +1,4 @@
use anyhow::{bail, Result};
use anyhow::{bail, Context, Result};
use indexmap::IndexMap;
use turbo_tasks::{Value, ValueToString, Vc};
use turbo_tasks_fs::{File, FileSystemPath};
@ -77,35 +77,39 @@ pub async fn bootstrap(
config.insert("PAGE".to_string(), path.to_string());
config.insert("PATHNAME".to_string(), pathname);
let config_asset = context.process(
Vc::upcast(VirtualSource::new(
asset.ident().path().join("bootstrap-config.ts".to_string()),
AssetContent::file(
File::from(
config
.iter()
.map(|(k, v)| format!("export const {} = {};\n", k, StringifyJs(v)))
.collect::<Vec<_>>()
.join(""),
)
.into(),
),
)),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
);
let config_asset = context
.process(
Vc::upcast(VirtualSource::new(
asset.ident().path().join("bootstrap-config.ts".to_string()),
AssetContent::file(
File::from(
config
.iter()
.map(|(k, v)| format!("export const {} = {};\n", k, StringifyJs(v)))
.collect::<Vec<_>>()
.join(""),
)
.into(),
),
)),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
)
.module();
let mut inner_assets = inner_assets.await?.clone_value();
inner_assets.insert("ENTRY".to_string(), asset);
inner_assets.insert("BOOTSTRAP_CONFIG".to_string(), config_asset);
let asset = context.process(
bootstrap_asset,
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let asset = context
.process(
bootstrap_asset,
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
let Some(asset) = Vc::try_resolve_sidecast::<Box<dyn EvaluatableAsset>>(asset).await? else {
bail!("internal module must be evaluatable");
};
let asset = Vc::try_resolve_sidecast::<Box<dyn EvaluatableAsset>>(asset)
.await?
.context("internal module must be evaluatable")?;
Ok(asset)
}

View file

@ -146,9 +146,10 @@ impl LoaderTreeBuilder {
EcmaScriptModulesReferenceSubType::Undefined,
));
let module =
self.server_component_transition
.process(source, self.context, reference_ty);
let module = self
.server_component_transition
.process(source, self.context, reference_ty)
.module();
self.inner_assets.insert(format!("COMPONENT_{i}"), module);
}
@ -268,15 +269,16 @@ impl LoaderTreeBuilder {
app_page.clone(),
);
self.inner_assets.insert(
inner_module_id,
self.context.process(
let module = self
.context
.process(
source,
Value::new(ReferenceType::EcmaScriptModules(
EcmaScriptModulesReferenceSubType::Undefined,
)),
),
);
)
.module();
self.inner_assets.insert(inner_module_id, module);
let s = " ";
writeln!(self.loader_tree_code, "{s}{identifier},")?;
@ -346,15 +348,16 @@ impl LoaderTreeBuilder {
let inner_module_id = format!("METADATA_ALT_{i}");
self.imports
.push(format!("import {identifier} from \"{inner_module_id}\";"));
self.inner_assets.insert(
inner_module_id,
self.context.process(
let module = self
.context
.process(
Vc::upcast(TextContentFileSource::new(Vc::upcast(FileSource::new(
alt_path,
)))),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
),
);
)
.module();
self.inner_assets.insert(inner_module_id, module);
writeln!(self.loader_tree_code, "{s} alt: {identifier},")?;
}

View file

@ -47,10 +47,12 @@ pub async fn get_middleware_module(
INNER.to_string() => userland_module
};
let module = context.process(
source,
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let module = context
.process(
source,
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
Ok(module)
}

View file

@ -106,10 +106,12 @@ pub async fn get_app_page_entry(
let file = File::from(result.build());
let source = VirtualSource::new(source.ident().path(), AssetContent::file(file.into()));
let mut rsc_entry = context.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let mut rsc_entry = context
.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
if is_edge {
rsc_entry = wrap_edge_page(
@ -190,10 +192,12 @@ async fn wrap_edge_page(
INNER.to_string() => entry
};
let wrapped = context.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let wrapped = context
.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
Ok(wrap_edge_entry(
context,

View file

@ -67,19 +67,23 @@ pub async fn get_app_route_entry(
)
.await?;
let userland_module = context.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::AppRoute)),
);
let userland_module = context
.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::AppRoute)),
)
.module();
let inner_assets = indexmap! {
INNER.to_string() => userland_module
};
let mut rsc_entry = context.process(
Vc::upcast(virtual_source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let mut rsc_entry = context
.process(
Vc::upcast(virtual_source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
if is_edge {
rsc_entry = wrap_edge_route(
@ -129,10 +133,12 @@ async fn wrap_edge_route(
INNER.to_string() => entry
};
let wrapped = context.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let wrapped = context
.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
Ok(wrap_edge_entry(context, project_root, wrapped, pathname))
}

View file

@ -63,13 +63,15 @@ pub async fn dynamic_image_metadata_source(
};
let source = Vc::upcast(FileSource::new(path));
let exports = &*collect_direct_exports(asset_context.process(
source,
turbo_tasks::Value::new(ReferenceType::EcmaScriptModules(
EcmaScriptModulesReferenceSubType::Undefined,
)),
))
.await?;
let module = asset_context
.process(
source,
turbo_tasks::Value::new(ReferenceType::EcmaScriptModules(
EcmaScriptModulesReferenceSubType::Undefined,
)),
)
.module();
let exports = &*collect_direct_exports(module).await?;
let exported_fields_excluding_default = exports
.iter()
.filter(|e| *e != "default")

View file

@ -17,7 +17,7 @@ use turbopack_binding::{
resolve::{parse::Request, pattern::Pattern},
},
dev::{react_refresh::assert_can_resolve_react_refresh, DevChunkingContext},
ecmascript::chunk::EcmascriptChunkingContext,
ecmascript::{chunk::EcmascriptChunkingContext, TreeShakingMode},
node::execution_context::ExecutionContext,
turbopack::{
condition::ContextCondition,
@ -267,6 +267,7 @@ pub async fn get_client_module_options_context(
preset_env_versions: Some(env),
execution_context: Some(execution_context),
custom_ecma_transform_plugins,
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};

View file

@ -1,4 +1,4 @@
use anyhow::{bail, Result};
use anyhow::{bail, Context, Result};
use turbo_tasks::Vc;
use turbopack_binding::turbopack::{
core::{
@ -72,10 +72,9 @@ impl ParseCss for CssClientReferenceModule {
impl ProcessCss for CssClientReferenceModule {
#[turbo_tasks::function]
async fn get_css_with_placeholder(&self) -> Result<Vc<CssWithPlaceholderResult>> {
let Some(imp) = Vc::try_resolve_sidecast::<Box<dyn ProcessCss>>(self.client_module).await?
else {
bail!("CSS client reference client module must be CSS processable");
};
let imp = Vc::try_resolve_sidecast::<Box<dyn ProcessCss>>(self.client_module)
.await?
.context("CSS client reference client module must be CSS processable")?;
Ok(imp.get_css_with_placeholder())
}
@ -85,10 +84,9 @@ impl ProcessCss for CssClientReferenceModule {
&self,
chunking_context: Vc<Box<dyn ChunkingContext>>,
) -> Result<Vc<FinalCssResult>> {
let Some(imp) = Vc::try_resolve_sidecast::<Box<dyn ProcessCss>>(self.client_module).await?
else {
bail!("CSS client reference client module must be CSS processable");
};
let imp = Vc::try_resolve_sidecast::<Box<dyn ProcessCss>>(self.client_module)
.await?
.context("CSS client reference client module must be CSS processable")?;
Ok(imp.finalize_css(chunking_context))
}

View file

@ -39,11 +39,14 @@ impl CustomModuleType for CssClientReferenceModuleType {
context: Vc<ModuleAssetContext>,
_part: Option<Vc<ModulePart>>,
) -> Result<Vc<Box<dyn Module>>> {
let client_module = self.client_transition.process(
source,
context,
Value::new(ReferenceType::Css(CssReferenceSubType::Internal)),
);
let client_module = self
.client_transition
.process(
source,
context,
Value::new(ReferenceType::Css(CssReferenceSubType::Internal)),
)
.module();
let Some(client_module) =
Vc::try_resolve_sidecast::<Box<dyn CssChunkPlaceable>>(client_module).await?

View file

@ -99,10 +99,13 @@ impl EcmascriptClientReferenceProxyModule {
proxy_module_content,
);
let proxy_module = this.server_asset_context.process(
Vc::upcast(proxy_source),
Value::new(ReferenceType::Undefined),
);
let proxy_module = this
.server_asset_context
.process(
Vc::upcast(proxy_source),
Value::new(ReferenceType::Undefined),
)
.module();
let Some(proxy_module) =
Vc::try_resolve_downcast_type::<EcmascriptModuleAsset>(proxy_module).await?

View file

@ -2,8 +2,8 @@ use anyhow::{bail, Result};
use turbo_tasks::{Value, Vc};
use turbopack_binding::turbopack::{
core::{
context::ProcessResult,
file_source::FileSource,
module::Module,
reference_type::{EntryReferenceSubType, ReferenceType},
source::Source,
},
@ -50,7 +50,7 @@ impl Transition for NextEcmascriptClientReferenceTransition {
source: Vc<Box<dyn Source>>,
context: Vc<ModuleAssetContext>,
_reference_type: Value<ReferenceType>,
) -> Result<Vc<Box<dyn Module>>> {
) -> Result<Vc<ProcessResult>> {
let context = self.process_context(context);
let this = self.await?;
@ -66,21 +66,27 @@ impl Transition for NextEcmascriptClientReferenceTransition {
} else {
source
};
let client_module = this.client_transition.process(
client_source,
context,
Value::new(ReferenceType::Entry(
EntryReferenceSubType::AppClientComponent,
)),
);
let client_module = this
.client_transition
.process(
client_source,
context,
Value::new(ReferenceType::Entry(
EntryReferenceSubType::AppClientComponent,
)),
)
.module();
let ssr_module = this.ssr_transition.process(
source,
context,
Value::new(ReferenceType::Entry(
EntryReferenceSubType::AppClientComponent,
)),
);
let ssr_module = this
.ssr_transition
.process(
source,
context,
Value::new(ReferenceType::Entry(
EntryReferenceSubType::AppClientComponent,
)),
)
.module();
let Some(client_module) =
Vc::try_resolve_sidecast::<Box<dyn EcmascriptChunkPlaceable>>(client_module).await?
@ -105,11 +111,14 @@ impl Transition for NextEcmascriptClientReferenceTransition {
context.layer,
);
Ok(Vc::upcast(EcmascriptClientReferenceProxyModule::new(
source.ident(),
Vc::upcast(server_context),
client_module,
ssr_module,
)))
Ok(
ProcessResult::Module(Vc::upcast(EcmascriptClientReferenceProxyModule::new(
source.ident(),
Vc::upcast(server_context),
client_module,
ssr_module,
)))
.cell(),
)
}
}

View file

@ -9,7 +9,7 @@ use turbopack_binding::{
turbopack::{
core::{
changed::any_content_changed_of_module,
context::AssetContext,
context::{AssetContext, ProcessResult},
file_source::FileSource,
ident::AssetIdent,
issue::{
@ -849,19 +849,28 @@ async fn load_next_config_and_custom_routes_internal(
);
let config_asset = config_file.map(FileSource::new);
let config_changed = config_asset.map_or_else(Completion::immutable, |config_asset| {
let config_changed = if let Some(config_asset) = config_asset {
// This invalidates the execution when anything referenced by the config file
// changes
let config_asset = context.process(
Vc::upcast(config_asset),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
);
any_content_changed_of_module(config_asset)
});
let load_next_config_asset = context.process(
next_asset("entry/config/next.js".to_string()),
Value::new(ReferenceType::Entry(EntryReferenceSubType::Undefined)),
);
match *context
.process(
Vc::upcast(config_asset),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
)
.await?
{
ProcessResult::Module(module) => any_content_changed_of_module(module),
ProcessResult::Ignore => Completion::immutable(),
}
} else {
Completion::immutable()
};
let load_next_config_asset = context
.process(
next_asset("entry/config/next.js".to_string()),
Value::new(ReferenceType::Entry(EntryReferenceSubType::Undefined)),
)
.module();
let config_value = evaluate(
load_next_config_asset,
project_path,

View file

@ -1,7 +1,7 @@
use anyhow::Result;
use turbo_tasks::{Value, Vc};
use turbopack_binding::turbopack::{
core::{module::Module, reference_type::ReferenceType, source::Source},
core::{context::ProcessResult, reference_type::ReferenceType, source::Source},
turbopack::{
transition::{ContextTransition, Transition},
ModuleAssetContext,
@ -39,15 +39,21 @@ impl Transition for NextDynamicTransition {
source: Vc<Box<dyn Source>>,
context: Vc<ModuleAssetContext>,
_reference_type: Value<ReferenceType>,
) -> Result<Vc<Box<dyn Module>>> {
) -> Result<Vc<ProcessResult>> {
let context = self.process_context(context);
let this = self.await?;
let client_module =
this.client_transition
.process(source, context, Value::new(ReferenceType::Undefined));
Ok(Vc::upcast(NextDynamicEntryModule::new(client_module)))
Ok(match *this
.client_transition
.process(source, context, Value::new(ReferenceType::Undefined))
.await?
{
ProcessResult::Module(client_module) => {
ProcessResult::Module(Vc::upcast(NextDynamicEntryModule::new(client_module)))
}
ProcessResult::Ignore => ProcessResult::Ignore,
}
.cell())
}
}

View file

@ -39,8 +39,11 @@ pub async fn wrap_edge_entry(
"MODULE".to_string() => entry
};
Ok(context.process(
Vc::upcast(virtual_source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
))
let module = context
.process(
Vc::upcast(virtual_source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
Ok(module)
}

View file

@ -446,22 +446,25 @@ async fn get_mock_stylesheet(
let context =
node_evaluate_asset_context(execution_context, None, None, "next_font".to_string());
let loader_path = mock_fs.root().join("loader.js".to_string());
let mocked_response_asset = context.process(
Vc::upcast(VirtualSource::new(
loader_path,
AssetContent::file(
File::from(format!(
"import data from './{}'; export default function load() {{ return data; }};",
response_path
.file_name()
.context("Must exist")?
.to_string_lossy(),
))
.into(),
),
)),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
);
let mocked_response_asset = context
.process(
Vc::upcast(VirtualSource::new(
loader_path,
AssetContent::file(
File::from(format!(
"import data from './{}'; export default function load() {{ return data; \
}};",
response_path
.file_name()
.context("Must exist")?
.to_string_lossy(),
))
.into(),
),
)),
Value::new(ReferenceType::Internal(InnerAssets::empty())),
)
.module();
let root = mock_fs.root();
let val = evaluate(

View file

@ -1,5 +1,6 @@
use anyhow::Result;
use indexmap::indexmap;
use turbo_tasks::Vc;
use turbo_tasks::{TaskInput, Vc};
use turbopack_binding::{
turbo::tasks::Value,
turbopack::{
@ -15,7 +16,7 @@ use turbopack_binding::{
use super::source_asset::StructuredImageFileSource;
#[turbo_tasks::value(serialization = "auto_for_input")]
#[derive(Clone, Copy, Debug, PartialOrd, Ord, Hash)]
#[derive(Clone, Copy, Debug, PartialOrd, Ord, Hash, TaskInput)]
pub enum BlurPlaceholderMode {
/// Do not generate a blur placeholder at all.
None,
@ -37,30 +38,32 @@ pub struct StructuredImageModuleType {
pub blur_placeholder_mode: BlurPlaceholderMode,
}
#[turbo_tasks::value_impl]
impl StructuredImageModuleType {
pub(crate) fn create_module(
#[turbo_tasks::function]
pub(crate) async fn create_module(
source: Vc<Box<dyn Source>>,
blur_placeholder_mode: BlurPlaceholderMode,
context: Vc<ModuleAssetContext>,
) -> Vc<Box<dyn Module>> {
) -> Result<Vc<Box<dyn Module>>> {
let static_asset = StaticModuleAsset::new(source, Vc::upcast(context));
context.process(
Vc::upcast(
StructuredImageFileSource {
image: source,
blur_placeholder_mode,
}
.cell(),
),
Value::new(ReferenceType::Internal(Vc::cell(indexmap!(
"IMAGE".to_string() => Vc::upcast(static_asset)
)))),
)
let module = context
.process(
Vc::upcast(
StructuredImageFileSource {
image: source,
blur_placeholder_mode,
}
.cell(),
),
Value::new(ReferenceType::Internal(Vc::cell(indexmap!(
"IMAGE".to_string() => Vc::upcast(static_asset)
)))),
)
.module();
Ok(module)
}
}
#[turbo_tasks::value_impl]
impl StructuredImageModuleType {
#[turbo_tasks::function]
pub fn new(blur_placeholder_mode: Value<BlurPlaceholderMode>) -> Vc<Self> {
StructuredImageModuleType::cell(StructuredImageModuleType {

View file

@ -43,7 +43,9 @@ pub async fn create_page_ssr_entry_module(
let definition_page = &*next_original_name.await?;
let definition_pathname = &*pathname.await?;
let ssr_module = ssr_module_context.process(source, reference_type.clone());
let ssr_module = ssr_module_context
.process(source, reference_type.clone())
.module();
let reference_type = reference_type.into_value();
@ -116,12 +118,14 @@ pub async fn create_page_ssr_entry_module(
));
}
let mut ssr_module = ssr_module_context.process(
source,
Value::new(ReferenceType::Internal(Vc::cell(indexmap! {
INNER.to_string() => ssr_module,
}))),
);
let mut ssr_module = ssr_module_context
.process(
source,
Value::new(ReferenceType::Internal(Vc::cell(indexmap! {
INNER.to_string() => ssr_module,
}))),
)
.module();
if matches!(runtime, NextRuntime::Edge) {
if reference_type == ReferenceType::Entry(EntryReferenceSubType::Page) {
@ -209,10 +213,12 @@ async fn wrap_edge_page(
INNER.to_string() => entry
};
let wrapped = context.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
);
let wrapped = context
.process(
Vc::upcast(source),
Value::new(ReferenceType::Internal(Vc::cell(inner_assets))),
)
.module();
Ok(wrap_edge_entry(
context,

View file

@ -17,7 +17,7 @@ use turbopack_binding::{
free_var_references,
resolve::{parse::Request, pattern::Pattern},
},
ecmascript::{references::esm::UrlRewriteBehavior, TransformPlugin},
ecmascript::{references::esm::UrlRewriteBehavior, TransformPlugin, TreeShakingMode},
ecmascript_plugin::transform::directives::client::ClientDirectiveTransformer,
node::execution_context::ExecutionContext,
turbopack::{
@ -389,6 +389,7 @@ pub async fn get_server_module_options_context(
execution_context: Some(execution_context),
esm_url_rewrite_behavior: url_rewrite_behavior,
use_lightningcss,
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};
@ -458,6 +459,7 @@ pub async fn get_server_module_options_context(
custom_ecma_transform_plugins: base_ecma_transform_plugins,
execution_context: Some(execution_context),
use_lightningcss,
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};
let foreign_code_module_options_context = ModuleOptionsContext {
@ -543,6 +545,7 @@ pub async fn get_server_module_options_context(
custom_ecma_transform_plugins: base_ecma_transform_plugins,
execution_context: Some(execution_context),
use_lightningcss,
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};
let foreign_code_module_options_context = ModuleOptionsContext {
@ -582,6 +585,7 @@ pub async fn get_server_module_options_context(
ServerContextType::AppRoute { .. } => {
let module_options_context = ModuleOptionsContext {
execution_context: Some(execution_context),
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};
let internal_module_options_context = ModuleOptionsContext {
@ -630,6 +634,7 @@ pub async fn get_server_module_options_context(
let module_options_context = ModuleOptionsContext {
execution_context: Some(execution_context),
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
};
let internal_module_options_context = ModuleOptionsContext {
@ -669,6 +674,7 @@ pub async fn get_server_module_options_context(
pub fn get_build_module_options_context() -> Vc<ModuleOptionsContext> {
ModuleOptionsContext {
enable_typescript_transform: Some(Default::default()),
tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
..Default::default()
}
.cell()

View file

@ -187,17 +187,19 @@ impl ResolvePlugin for ExternalCjsModulesResolvePlugin {
// unsupported file type, bundle it
Ok(ResolveResultOption::none())
}
(FileType::CommonJs, _) => {
// mark as external
Ok(ResolveResultOption::some(
ResolveResult::primary(ResolveResultItem::OriginalReferenceExternal).cell(),
))
}
(FileType::EcmaScriptModule, true) => {
// mark as external
Ok(ResolveResultOption::some(
ResolveResult::primary(ResolveResultItem::OriginalReferenceExternal).cell(),
))
(FileType::CommonJs, _) | (FileType::EcmaScriptModule, true) => {
if let Some(request) = request.await?.request() {
// mark as external
Ok(ResolveResultOption::some(
ResolveResult::primary(ResolveResultItem::OriginalReferenceTypeExternal(
request,
))
.cell(),
))
} else {
// unsupported request, bundle it
Ok(ResolveResultOption::none())
}
}
(FileType::EcmaScriptModule, false) => {
// even with require() this resolves to a ESM,

View file

@ -33,7 +33,7 @@ pub async fn get_swc_ecma_transform_plugin_impl(
project_path: Vc<FileSystemPath>,
plugin_configs: &[(String, serde_json::Value)],
) -> Result<Vc<OptionTransformPlugin>> {
use anyhow::bail;
use anyhow::{bail, Context};
use turbo_tasks::Value;
use turbo_tasks_fs::FileContent;
use turbopack_binding::turbopack::{
@ -83,9 +83,10 @@ pub async fn get_swc_ecma_transform_plugin_impl(
None,
)
.await?;
let Some(plugin_module) = *plugin_wasm_module_resolve_result.first_module().await? else {
bail!("Expected to find module");
};
let plugin_module = plugin_wasm_module_resolve_result
.first_module()
.await?
.context("Expected to find module")?;
let content = &*plugin_module.content().file_content().await?;

View file

@ -53,15 +53,22 @@ pub async fn create_page_loader_entry_module(
AssetContent::file(file.into()),
));
Ok(client_context.process(
virtual_source,
Value::new(ReferenceType::Internal(Vc::cell(indexmap! {
"PAGE".to_string() => client_context.process(
entry_asset,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Page))
),
}))),
))
let module = client_context
.process(
entry_asset,
Value::new(ReferenceType::Entry(EntryReferenceSubType::Page)),
)
.module();
let module = client_context
.process(
virtual_source,
Value::new(ReferenceType::Internal(Vc::cell(indexmap! {
"PAGE".to_string() => module,
}))),
)
.module();
Ok(module)
}
#[turbo_tasks::value(shared)]

View file

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

View file

@ -73,7 +73,12 @@ function registerExportsForReactRefresh(
if (isSafeExport(key)) {
continue
}
var exportValue = moduleExports[key]
try {
var exportValue = moduleExports[key]
} catch {
// This might fail due to circular dependencies
continue
}
var typeID = moduleID + ' %exports% ' + key
RefreshRuntime.register(exportValue, typeID)
}
@ -91,7 +96,12 @@ function getRefreshBoundarySignature(moduleExports: unknown): Array<unknown> {
if (isSafeExport(key)) {
continue
}
var exportValue = moduleExports[key]
try {
var exportValue = moduleExports[key]
} catch {
// This might fail due to circular dependencies
continue
}
signature.push(key)
signature.push(RefreshRuntime.getFamilyByType(exportValue))
}
@ -113,7 +123,12 @@ function isReactRefreshBoundary(moduleExports: unknown): boolean {
if (isSafeExport(key)) {
continue
}
var exportValue = moduleExports[key]
try {
var exportValue = moduleExports[key]
} catch {
// This might fail due to circular dependencies
return false
}
if (!RefreshRuntime.isLikelyComponentType(exportValue)) {
areAllExportsComponents = false
}

View file

@ -1077,8 +1077,8 @@ importers:
specifier: 0.24.4
version: 0.24.4
'@vercel/turbopack-ecmascript-runtime':
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231205.2
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231205.2(react-refresh@0.12.0)(webpack@5.86.0)'
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231206.2
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231206.2(react-refresh@0.12.0)(webpack@5.86.0)'
acorn:
specifier: 8.5.0
version: 8.5.0
@ -24647,9 +24647,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-231205.2(react-refresh@0.12.0)(webpack@5.86.0)':
resolution: {registry: https://registry.npmjs.org/, tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231205.2}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231205.2'
'@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231206.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-231206.2}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-231206.2'
name: '@vercel/turbopack-ecmascript-runtime'
version: 0.0.0
dependencies: