Skip to content

Commit

Permalink
refactor(turbopack-core): Use ResolvedVc in ContextCondition (#74711)
Browse files Browse the repository at this point in the history
  • Loading branch information
bgw authored Jan 13, 2025
1 parent 5a935b0 commit 521cdae
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 44 deletions.
16 changes: 3 additions & 13 deletions crates/next-core/src/next_client/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use anyhow::Result;
use turbo_rcstr::RcStr;
use turbo_tasks::{FxIndexMap, ResolvedVc, Value, Vc};
use turbo_tasks_env::EnvMap;
use turbo_tasks_fs::{FileSystem, FileSystemPath};
use turbo_tasks_fs::FileSystemPath;
use turbopack::{
module_options::{
module_options_context::ModuleOptionsContext, CssOptionsContext, EcmascriptOptionsContext,
Expand All @@ -19,7 +19,6 @@ use turbopack_core::{
CompileTimeDefineValue, CompileTimeDefines, CompileTimeInfo, DefineableNameSegment,
FreeVarReference, FreeVarReferences,
},
condition::ContextCondition,
environment::{BrowserEnvironment, Environment, ExecutionEnvironment},
free_var_references,
resolve::{parse::Request, pattern::Pattern},
Expand All @@ -31,7 +30,6 @@ use turbopack_node::{

use super::transforms::get_next_client_transforms_rules;
use crate::{
embed_js::next_js_fs,
mode::NextMode,
next_build::get_postcss_package_mapping,
next_client::runtime_entry::{RuntimeEntries, RuntimeEntry},
Expand Down Expand Up @@ -60,7 +58,7 @@ use crate::{
get_decorators_transform_options, get_jsx_transform_options,
get_typescript_transform_options,
},
util::foreign_code_context_condition,
util::{foreign_code_context_condition, internal_assets_conditions},
};

fn defines(define_env: &FxIndexMap<RcStr, RcStr>) -> CompileTimeDefines {
Expand Down Expand Up @@ -212,14 +210,6 @@ pub async fn get_client_resolve_options_context(
.cell())
}

fn internal_assets_conditions() -> ContextCondition {
ContextCondition::any(vec![
ContextCondition::InPath(next_js_fs().root()),
ContextCondition::InPath(turbopack_ecmascript_runtime::embed_fs().root()),
ContextCondition::InPath(turbopack_node::embed_js::embed_fs().root()),
])
}

#[turbo_tasks::function]
pub async fn get_client_module_options_context(
project_path: ResolvedVc<FileSystemPath>,
Expand Down Expand Up @@ -387,7 +377,7 @@ pub async fn get_client_module_options_context(
foreign_codes_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_context.resolved_cell(),
),
],
Expand Down
33 changes: 8 additions & 25 deletions crates/next-core/src/next_server/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use anyhow::{bail, Result};
use turbo_rcstr::RcStr;
use turbo_tasks::{FxIndexMap, ResolvedVc, Value, Vc};
use turbo_tasks_env::{EnvMap, ProcessEnv};
use turbo_tasks_fs::{FileSystem, FileSystemPath};
use turbo_tasks_fs::FileSystemPath;
use turbopack::{
module_options::{
CssOptionsContext, EcmascriptOptionsContext, JsxTransformOptions, ModuleOptionsContext,
Expand All @@ -19,7 +19,6 @@ use turbopack_core::{
CompileTimeDefineValue, CompileTimeDefines, CompileTimeInfo, DefineableNameSegment,
FreeVarReferences,
},
condition::ContextCondition,
environment::{
Environment, ExecutionEnvironment, NodeJsEnvironment, NodeJsVersion, RuntimeVersions,
},
Expand All @@ -41,7 +40,6 @@ use super::{
transforms::{get_next_server_internal_transforms_rules, get_next_server_transforms_rules},
};
use crate::{
embed_js::next_js_fs,
mode::NextMode,
next_build::get_postcss_package_mapping,
next_client::RuntimeEntries,
Expand Down Expand Up @@ -71,8 +69,8 @@ use crate::{
get_typescript_transform_options,
},
util::{
foreign_code_context_condition, get_transpiled_packages, load_next_js_templateon,
NextRuntime,
foreign_code_context_condition, get_transpiled_packages, internal_assets_conditions,
load_next_js_templateon, NextRuntime,
},
};

Expand Down Expand Up @@ -396,21 +394,6 @@ pub async fn get_server_compile_time_info(
.await
}

/// Determins if the module is an internal asset (i.e overlay, fallback) coming
/// from the embedded FS, don't apply user defined transforms.
///
/// [TODO] turbopack specific embed fs should be handled by internals of
/// turbopack itself and user config should not try to leak this. However,
/// currently we apply few transform options subject to next.js's configuration
/// even if it's embedded assets.
fn internal_assets_conditions() -> ContextCondition {
ContextCondition::any(vec![
ContextCondition::InPath(next_js_fs().root()),
ContextCondition::InPath(turbopack_ecmascript_runtime::embed_fs().root()),
ContextCondition::InPath(turbopack_node::embed_js::embed_fs().root()),
])
}

#[turbo_tasks::function]
pub async fn get_server_module_options_context(
project_path: ResolvedVc<FileSystemPath>,
Expand Down Expand Up @@ -648,7 +631,7 @@ pub async fn get_server_module_options_context(
foreign_code_module_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_module_options_context.resolved_cell(),
),
],
Expand Down Expand Up @@ -713,7 +696,7 @@ pub async fn get_server_module_options_context(
foreign_code_module_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_module_options_context.resolved_cell(),
),
],
Expand Down Expand Up @@ -789,7 +772,7 @@ pub async fn get_server_module_options_context(
foreign_code_module_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_module_options_context.resolved_cell(),
),
],
Expand Down Expand Up @@ -864,7 +847,7 @@ pub async fn get_server_module_options_context(
foreign_code_module_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_module_options_context.resolved_cell(),
),
],
Expand Down Expand Up @@ -961,7 +944,7 @@ pub async fn get_server_module_options_context(
foreign_code_module_options_context.resolved_cell(),
),
(
internal_assets_conditions(),
internal_assets_conditions().await?,
internal_module_options_context.resolved_cell(),
),
],
Expand Down
33 changes: 31 additions & 2 deletions crates/next-core/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use turbo_tasks::{
};
use turbo_tasks_fs::{
self, json::parse_json_rope_with_source_context, rope::Rope, util::join_path, File,
FileContent, FileSystemPath,
FileContent, FileSystem, FileSystemPath,
};
use turbopack_core::{
asset::AssetContent,
Expand All @@ -32,6 +32,7 @@ use turbopack_ecmascript::{
};

use crate::{
embed_js::next_js_fs,
next_config::{NextConfig, RouteHas},
next_import_map::get_next_package,
next_manifests::MiddlewareMatcher,
Expand Down Expand Up @@ -121,7 +122,10 @@ pub async fn foreign_code_context_condition(
// of the `node_modules` specific resolve options (the template files are
// technically node module files).
let not_next_template_dir = ContextCondition::not(ContextCondition::InPath(
get_next_package(*project_path).join(NEXT_TEMPLATE_PATH.into()),
get_next_package(*project_path)
.join(NEXT_TEMPLATE_PATH.into())
.to_resolved()
.await?,
));

let result = ContextCondition::all(vec![
Expand All @@ -137,6 +141,31 @@ pub async fn foreign_code_context_condition(
Ok(result)
}

/// Determines if the module is an internal asset (i.e overlay, fallback) coming
/// from the embedded FS, don't apply user defined transforms.
///
/// [TODO] turbopack specific embed fs should be handled by internals of

Check warning on line 147 in crates/next-core/src/util.rs

View workflow job for this annotation

GitHub Actions / rustdoc check / build

unresolved link to `TODO`
/// turbopack itself and user config should not try to leak this. However,
/// currently we apply few transform options subject to next.js's configuration
/// even if it's embedded assets.
pub async fn internal_assets_conditions() -> Result<ContextCondition> {
Ok(ContextCondition::any(vec![
ContextCondition::InPath(next_js_fs().root().to_resolved().await?),
ContextCondition::InPath(
turbopack_ecmascript_runtime::embed_fs()
.root()
.to_resolved()
.await?,
),
ContextCondition::InPath(
turbopack_node::embed_js::embed_fs()
.root()
.to_resolved()
.await?,
),
]))
}

#[derive(
Default,
PartialEq,
Expand Down
6 changes: 3 additions & 3 deletions turbopack/crates/turbopack-core/src/condition.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
use anyhow::Result;
use futures::{stream, StreamExt};
use serde::{Deserialize, Serialize};
use turbo_tasks::{trace::TraceRawVcs, Vc};
use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc};
use turbo_tasks_fs::FileSystemPath;

#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq)]
#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq, NonLocalValue)]
pub enum ContextCondition {
All(Vec<ContextCondition>),
Any(Vec<ContextCondition>),
Not(Box<ContextCondition>),
InDirectory(String),
InPath(Vc<FileSystemPath>),
InPath(ResolvedVc<FileSystemPath>),
}

impl ContextCondition {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use turbopack_core::{
},
};

#[turbo_tasks::value(shared, local)]
#[turbo_tasks::value(shared)]
#[derive(Default, Clone)]
pub struct ResolveOptionsContext {
#[serde(default)]
Expand Down

0 comments on commit 521cdae

Please sign in to comment.