diff --git a/packages/next-swc/crates/next-core/src/next_client/context.rs b/packages/next-swc/crates/next-core/src/next_client/context.rs index fa234c78cb..09cb0c687d 100644 --- a/packages/next-swc/crates/next-core/src/next_client/context.rs +++ b/packages/next-swc/crates/next-core/src/next_client/context.rs @@ -87,7 +87,6 @@ pub fn get_client_asset_context( let context: AssetContextVc = ModuleAssetContextVc::new( TransitionsByNameVc::cell(HashMap::new()), - project_root, environment, module_options_context, resolve_options_context, @@ -133,7 +132,8 @@ pub async fn get_client_runtime_entries( RuntimeEntry::Ecmascript(HtmlRuntimeAssetVc::new().into()).cell(), ]; if enable_react_refresh { - runtime_entries.push(RuntimeEntry::Request(react_refresh_request(), project_root).cell()) + runtime_entries + .push(RuntimeEntry::Request(react_refresh_request(), project_root.join("_")).cell()) }; Ok(RuntimeEntriesVc::cell(runtime_entries)) diff --git a/packages/next-swc/crates/next-core/src/next_client/runtime_entry.rs b/packages/next-swc/crates/next-core/src/next_client/runtime_entry.rs index 4d799340cc..f133f76fb5 100644 --- a/packages/next-swc/crates/next-core/src/next_client/runtime_entry.rs +++ b/packages/next-swc/crates/next-core/src/next_client/runtime_entry.rs @@ -1,7 +1,10 @@ use anyhow::{bail, Result}; use turbo_tasks::ValueToString; use turbo_tasks_fs::FileSystemPathVc; -use turbopack_core::{context::AssetContextVc, resolve::parse::RequestVc}; +use turbopack_core::{ + context::AssetContextVc, + resolve::{origin::PlainResolveOriginVc, parse::RequestVc}, +}; use turbopack_ecmascript::{ chunk::{EcmascriptChunkPlaceableVc, EcmascriptChunkPlaceablesVc}, resolve::cjs_resolve, @@ -25,8 +28,9 @@ impl RuntimeEntryVc { RuntimeEntry::Request(r, path) => (r, path), }; - let context = context.with_context_path(path); - let assets = cjs_resolve(request, context).primary_assets().await?; + let assets = cjs_resolve(PlainResolveOriginVc::new(context, path).into(), request) + .primary_assets() + .await?; let mut runtime_entries = Vec::with_capacity(assets.len()); for asset in &assets { diff --git a/packages/next-swc/crates/next-core/src/react_refresh.rs b/packages/next-swc/crates/next-core/src/react_refresh.rs index 15bacbe199..f6b7a2c60b 100644 --- a/packages/next-swc/crates/next-core/src/react_refresh.rs +++ b/packages/next-swc/crates/next-core/src/react_refresh.rs @@ -12,9 +12,8 @@ use turbopack::{ resolve_options_context::ResolveOptionsContextVc, }; use turbopack_core::{ - context::AssetContextVc, issue::{Issue, IssueSeverity, IssueSeverityVc, IssueVc}, - resolve::{parse::RequestVc, ResolveResult}, + resolve::{origin::ResolveOriginVc, parse::RequestVc, ResolveResult}, }; #[turbo_tasks::function] @@ -57,8 +56,8 @@ pub async fn assert_can_resolve_react_refresh( /// Resolves the React Refresh runtime module from the given [AssetContextVc]. #[turbo_tasks::function] -pub async fn resolve_react_refresh(context: AssetContextVc) -> Result { - match &*cjs_resolve(react_refresh_request(), context).await? { +pub async fn resolve_react_refresh(origin: ResolveOriginVc) -> Result { + match &*cjs_resolve(origin, react_refresh_request()).await? { ResolveResult::Single(asset, _) => { if let Some(placeable) = EcmascriptChunkPlaceableVc::resolve_from(asset).await? { Ok(placeable) diff --git a/packages/next-swc/crates/next-core/src/server_render/asset.rs b/packages/next-swc/crates/next-core/src/server_render/asset.rs index fddc0c2a60..a55c6b74f5 100644 --- a/packages/next-swc/crates/next-core/src/server_render/asset.rs +++ b/packages/next-swc/crates/next-core/src/server_render/asset.rs @@ -140,7 +140,7 @@ fn get_intermediate_module( embed_file!("server_renderer.js").into(), ) .into(), - context.with_context_path(entry_asset.path()), + context, Value::new(ModuleAssetType::Ecmascript), EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::React { refresh: false }]), context.environment(), diff --git a/packages/next-swc/crates/next-core/src/server_rendered_source.rs b/packages/next-swc/crates/next-core/src/server_rendered_source.rs index 7719e40661..8cd1c173d6 100644 --- a/packages/next-swc/crates/next-core/src/server_rendered_source.rs +++ b/packages/next-swc/crates/next-core/src/server_rendered_source.rs @@ -79,7 +79,6 @@ pub async fn create_server_rendered_source( transitions.insert("next-client".to_string(), next_client_transition); let context: AssetContextVc = ModuleAssetContextVc::new( TransitionsByNameVc::cell(transitions), - project_path, EnvironmentVc::new( Value::new(ExecutionEnvironment::NodeJsLambda( NodeJsEnvironment { @@ -111,6 +110,7 @@ pub async fn create_server_rendered_source( vec![ProcessEnvAssetVc::new(project_path, env).as_ecmascript_chunk_placeable()]; Ok(create_server_rendered_source_for_directory( + project_path, context, pages_dir, EcmascriptChunkPlaceablesVc::cell(server_runtime_entries), @@ -124,6 +124,7 @@ pub async fn create_server_rendered_source( /// Handles a single page file in the pages directory #[turbo_tasks::function] async fn create_server_rendered_source_for_file( + context_path: FileSystemPathVc, context: AssetContextVc, page_file: FileSystemPathVc, runtime_entries: EcmascriptChunkPlaceablesVc, @@ -131,11 +132,8 @@ async fn create_server_rendered_source_for_file( server_path: FileSystemPathVc, intermediate_output_path: FileSystemPathVc, ) -> Result { - let context_path = context.context_path(); let source_asset = SourceAssetVc::new(page_file).into(); - let entry_asset = context - .with_context_path(page_file.parent()) - .process(source_asset); + let entry_asset = context.process(source_asset); let chunking_context = DevChunkingContextVc::new( context_path, @@ -165,6 +163,7 @@ async fn create_server_rendered_source_for_file( /// [create_server_rendered_source_for_file] method for files. #[turbo_tasks::function] async fn create_server_rendered_source_for_directory( + context_path: FileSystemPathVc, context: AssetContextVc, input_dir: FileSystemPathVc, runtime_entries: EcmascriptChunkPlaceablesVc, @@ -193,6 +192,7 @@ async fn create_server_rendered_source_for_directory( }; sources.push( create_server_rendered_source_for_file( + context_path, context, *file, runtime_entries, @@ -210,6 +210,7 @@ async fn create_server_rendered_source_for_directory( DirectoryEntry::Directory(dir) => { sources.push( create_server_rendered_source_for_directory( + context_path, context, *dir, runtime_entries, diff --git a/packages/next-swc/crates/next-core/src/web_entry_source.rs b/packages/next-swc/crates/next-core/src/web_entry_source.rs index c84c07a32c..a6cbc19d7b 100644 --- a/packages/next-swc/crates/next-core/src/web_entry_source.rs +++ b/packages/next-swc/crates/next-core/src/web_entry_source.rs @@ -7,7 +7,7 @@ use turbo_tasks_fs::FileSystemPathVc; use turbopack::ecmascript::EcmascriptModuleAssetVc; use turbopack_core::{ chunk::{ChunkGroupVc, ChunkableAssetVc}, - resolve::parse::RequestVc, + resolve::{origin::PlainResolveOriginVc, parse::RequestVc}, }; use turbopack_dev_server::{ html::DevHtmlAsset, @@ -32,10 +32,11 @@ pub async fn create_web_entry_source( let runtime_entries = get_resolved_client_runtime_entries(project_root, env, browserslist_query); + let origin = PlainResolveOriginVc::new(context, project_root.join("_")).as_resolve_origin(); let chunks: Vec<_> = stream::iter(entry_requests) .then(|r| { - context - .resolve_asset(context.context_path(), r, context.resolve_options()) + origin + .resolve_asset(r, origin.resolve_options()) .primary_assets() .into_future() })