refactor AssetContext (vercel/turbo#465)
remove context_path from AssetContext remove most with_* methods from AssetContext add ResolveOrigin trait use ResolveOrigin to pass along context path and context for resolving ecmascript and css module assets implement ResolveOrigin Noteable change: Many places use `origin_path` instead of `context_path` which means it points to the issuer module path instead of the issuer module directory.
This commit is contained in:
parent
e4f92b7206
commit
e8359f7964
6 changed files with 23 additions and 18 deletions
|
@ -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))
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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<EcmascriptChunkPlaceableVc> {
|
||||
match &*cjs_resolve(react_refresh_request(), context).await? {
|
||||
pub async fn resolve_react_refresh(origin: ResolveOriginVc) -> Result<EcmascriptChunkPlaceableVc> {
|
||||
match &*cjs_resolve(origin, react_refresh_request()).await? {
|
||||
ResolveResult::Single(asset, _) => {
|
||||
if let Some(placeable) = EcmascriptChunkPlaceableVc::resolve_from(asset).await? {
|
||||
Ok(placeable)
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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<AssetGraphContentSourceVc> {
|
||||
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,
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue