From 04507dfe591e7e5c05db9ee3539f6ca3110e09c7 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 24 Feb 2025 21:19:17 +0100 Subject: [PATCH 1/2] Turbopack: unique middleware layer name --- crates/next-api/src/project.rs | 102 +++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/crates/next-api/src/project.rs b/crates/next-api/src/project.rs index 216744fbbdf77..5c45029833e30 100644 --- a/crates/next-api/src/project.rs +++ b/crates/next-api/src/project.rs @@ -1223,7 +1223,7 @@ impl Project { } #[turbo_tasks::function] - async fn middleware_context(self: Vc) -> Result>> { + async fn edge_middleware_context(self: Vc) -> Result>> { let mut transitions = vec![]; let app_dir = *find_app_dir(self.project_path()).await?; @@ -1244,7 +1244,7 @@ impl Project { )); } - let edge_module_context = ModuleAssetContext::new( + Ok(Vc::upcast(ModuleAssetContext::new( TransitionOptions { named_transitions: transitions.clone().into_iter().collect(), ..Default::default() @@ -1273,8 +1273,68 @@ impl Project { self.next_config(), self.execution_context(), ), + Vc::cell("middleware-edge".into()), + ))) + } + + #[turbo_tasks::function] + async fn node_middleware_context(self: Vc) -> Result>> { + let mut transitions = vec![]; + + let app_dir = *find_app_dir(self.project_path()).await?; + let app_project = *self.app_project().await?; + + let ecmascript_client_reference_transition_name = match app_project { + Some(app_project) => Some(app_project.client_transition_name().to_resolved().await?), + None => None, + }; + + if let Some(app_project) = app_project { + transitions.push(( + ECMASCRIPT_CLIENT_TRANSITION_NAME.into(), + app_project + .edge_ecmascript_client_reference_transition() + .to_resolved() + .await?, + )); + } + + Ok(Vc::upcast(ModuleAssetContext::new( + TransitionOptions { + named_transitions: transitions.clone().into_iter().collect(), + ..Default::default() + } + .cell(), + self.server_compile_time_info(), + get_server_module_options_context( + self.project_path(), + self.execution_context(), + Value::new(ServerContextType::Middleware { + app_dir, + ecmascript_client_reference_transition_name, + }), + self.next_mode(), + self.next_config(), + NextRuntime::NodeJs, + self.encryption_key(), + ), + get_server_resolve_options_context( + self.project_path(), + Value::new(ServerContextType::Middleware { + app_dir, + ecmascript_client_reference_transition_name, + }), + self.next_mode(), + self.next_config(), + self.execution_context(), + ), Vc::cell("middleware".into()), - ); + ))) + } + + #[turbo_tasks::function] + async fn middleware_context(self: Vc) -> Result>> { + let edge_module_context = self.edge_middleware_context(); let middleware = self.find_middleware(); let FindContextFileResult::Found(fs_path, _) = *middleware.await? else { @@ -1292,41 +1352,9 @@ impl Project { let config = parse_config_from_source(module, NextRuntime::Edge).await?; if matches!(config.runtime, NextRuntime::NodeJs) { - let server_module_context = ModuleAssetContext::new( - TransitionOptions { - named_transitions: transitions.clone().into_iter().collect(), - ..Default::default() - } - .cell(), - self.server_compile_time_info(), - get_server_module_options_context( - self.project_path(), - self.execution_context(), - Value::new(ServerContextType::Middleware { - app_dir, - ecmascript_client_reference_transition_name, - }), - self.next_mode(), - self.next_config(), - NextRuntime::NodeJs, - self.encryption_key(), - ), - get_server_resolve_options_context( - self.project_path(), - Value::new(ServerContextType::Middleware { - app_dir, - ecmascript_client_reference_transition_name, - }), - self.next_mode(), - self.next_config(), - self.execution_context(), - ), - Vc::cell("middleware".into()), - ); - - Ok(Vc::upcast(server_module_context)) + Ok(self.node_middleware_context()) } else { - Ok(Vc::upcast(edge_module_context)) + Ok(edge_module_context) } } From 74a9005d0c49f7567e95a430ecf383143f50a996 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 24 Feb 2025 22:15:53 +0100 Subject: [PATCH 2/2] Fix test --- test/development/middleware-errors/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/development/middleware-errors/index.test.ts b/test/development/middleware-errors/index.test.ts index 7bc2e251094f9..b788b30bd301b 100644 --- a/test/development/middleware-errors/index.test.ts +++ b/test/development/middleware-errors/index.test.ts @@ -212,7 +212,7 @@ describe('middleware - development errors', () => { isTurbopack ? '\n ⨯ Error: booooom!' + // TODO(veil): Should be sourcemapped - '\n at [project]/middleware.js [middleware] (ecmascript)' + '\n at [project]/middleware.js [middleware-edge] (ecmascript)' : '\n ⨯ Error: booooom!' + // TODO: Should be anonymous method without a method name '\n at (middleware.js:3)' +