diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs index 4a4ddbda55bfc..1b895f6ee690e 100644 --- a/crates/turborepo-lib/src/turbo_json/loader.rs +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -1,8 +1,10 @@ use std::collections::HashMap; +use itertools::Itertools; use tracing::debug; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use turborepo_errors::Spanned; +use turborepo_micro_frontend::MICRO_FRONTENDS_PACKAGE_INTERNAL; use turborepo_repository::{ package_graph::{PackageInfo, PackageName}, package_json::PackageJson, @@ -184,7 +186,10 @@ impl TurboJsonLoader { Error::NoTurboJSON => Ok(TurboJson::default()), err => Err(err), })?; - turbo_json.with_proxy(); + let needs_proxy_build = packages + .keys() + .contains(&PackageName::from(MICRO_FRONTENDS_PACKAGE_INTERNAL)); + turbo_json.with_proxy(needs_proxy_build); Ok(turbo_json) } else { turbo_json diff --git a/crates/turborepo-lib/src/turbo_json/mod.rs b/crates/turborepo-lib/src/turbo_json/mod.rs index afa025dfc652e..25c5f02f84ba9 100644 --- a/crates/turborepo-lib/src/turbo_json/mod.rs +++ b/crates/turborepo-lib/src/turbo_json/mod.rs @@ -12,6 +12,7 @@ use serde::{Deserialize, Serialize}; use struct_iterable::Iterable; use turbopath::AbsoluteSystemPath; use turborepo_errors::Spanned; +use turborepo_micro_frontend::MICRO_FRONTENDS_PACKAGE_INTERNAL; use turborepo_repository::package_graph::ROOT_PKG_NAME; use turborepo_unescape::UnescapedString; @@ -610,7 +611,7 @@ impl TurboJson { } /// Adds a local proxy task to a workspace TurboJson - pub fn with_proxy(&mut self) { + pub fn with_proxy(&mut self, needs_proxy_build: bool) { if self.extends.is_empty() { self.extends = Spanned::new(vec!["//".into()]); } @@ -619,6 +620,11 @@ impl TurboJson { TaskName::from("proxy"), Spanned::new(RawTaskDefinition { cache: Some(Spanned::new(false)), + depends_on: needs_proxy_build.then(|| { + Spanned::new(vec![Spanned::new(UnescapedString::from(format!( + "{MICRO_FRONTENDS_PACKAGE_INTERNAL}#build" + )))]) + }), ..Default::default() }), ); diff --git a/crates/turborepo-micro-frontend/src/lib.rs b/crates/turborepo-micro-frontend/src/lib.rs index 8a0cabc54ff39..e250d7779088a 100644 --- a/crates/turborepo-micro-frontend/src/lib.rs +++ b/crates/turborepo-micro-frontend/src/lib.rs @@ -13,7 +13,8 @@ use turbopath::AbsoluteSystemPath; /// /// This is subject to change at any time. pub const DEFAULT_MICRO_FRONTENDS_CONFIG: &str = "micro-frontends.jsonc"; -pub const MICRO_FRONTENDS_PACKAGES: &[&str] = ["@vercel/micro-frontends-internal"].as_slice(); +pub const MICRO_FRONTENDS_PACKAGES: &[&str] = [MICRO_FRONTENDS_PACKAGE_INTERNAL].as_slice(); +pub const MICRO_FRONTENDS_PACKAGE_INTERNAL: &str = "@vercel/micro-frontends-internal"; /// The minimal amount of information Turborepo needs to correctly start a local /// proxy server for microfrontends diff --git a/crates/turborepo-unescape/src/lib.rs b/crates/turborepo-unescape/src/lib.rs index 27e1b9a637fd6..bbffef4ac3a9d 100644 --- a/crates/turborepo-unescape/src/lib.rs +++ b/crates/turborepo-unescape/src/lib.rs @@ -57,6 +57,11 @@ impl From for String { } } +impl From for UnescapedString { + fn from(value: String) -> Self { + Self(value) + } +} // For testing purposes impl From<&'static str> for UnescapedString { fn from(value: &'static str) -> Self {