diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 2fe6b5a3cd39a16..aeb2341f90d4456 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -2314,7 +2314,6 @@ dependencies = [ "next-swc", "node-file-trace", "once_cell", - "owo-colors", "sentry", "serde", "serde_json", @@ -2323,10 +2322,6 @@ dependencies = [ "tracing-chrome", "tracing-futures", "tracing-subscriber", - "turbo-tasks", - "turbo-tasks-memory", - "turbopack-core", - "turbopack-dev-server", ] [[package]] diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index 9b82ee01deab0bc..5d69bf51da9a55b 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -55,12 +55,7 @@ tracing = { version = "0.1.32", features = ["release_max_level_info"] } tracing-futures = "0.2.5" tracing-subscriber = "0.3.9" tracing-chrome = "0.5.0" -owo-colors = "3" -turbo-tasks = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591" } -turbo-tasks-memory = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591" } -turbopack-core = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591" } -turbopack-dev-server = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591" } -next-dev = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591" } +next-dev = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591", features = ["serializable"] } node-file-trace = { git = "https://github.com/vercel/turbo.git", rev = "a11422fdf6b1b3cde9072d90aab6d9eebfacb591", default-features = false, features = ["node-api"] } # There are few build targets we can't use native-tls which default features rely on, # allow to specify alternative (rustls) instead via features. diff --git a/packages/next-swc/crates/napi/src/lib.rs b/packages/next-swc/crates/napi/src/lib.rs index d7b92f00e28df43..00a39b3888755b7 100644 --- a/packages/next-swc/crates/napi/src/lib.rs +++ b/packages/next-swc/crates/napi/src/lib.rs @@ -26,7 +26,6 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#![feature(future_join)] #![recursion_limit = "2048"] //#![deny(clippy::all)] diff --git a/packages/next-swc/crates/napi/src/turbopack.rs b/packages/next-swc/crates/napi/src/turbopack.rs index 6b4c0e3d6d23a88..a51bb50b9b5cb5d 100644 --- a/packages/next-swc/crates/napi/src/turbopack.rs +++ b/packages/next-swc/crates/napi/src/turbopack.rs @@ -1,157 +1,9 @@ -use std::{ - future::join, - net::{IpAddr, Ipv4Addr}, - path::PathBuf, - time::{Duration, Instant}, -}; - use crate::util::MapErr; use napi::bindgen_prelude::*; -use next_dev::{register, NextDevServerBuilder}; -use owo_colors::OwoColorize; -use serde::Deserialize; -use turbo_tasks::{util::FormatDuration, TurboTasks}; -use turbo_tasks_memory::MemoryBackend; -use turbopack_core::issue::IssueSeverity; - -#[derive(Clone, Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -#[allow(unused)] -struct TurboDevServerOptions { - #[serde(default = "default_port")] - port: u16, - - #[serde(default = "default_host")] - hostname: IpAddr, - - #[serde(default)] - eager_compile: bool, - - #[serde(default)] - log_level: Option, - - #[serde(default)] - show_all: bool, - - #[serde(default)] - log_detail: bool, - - #[serde(default = "default_dir")] - dir: PathBuf, - - #[serde(default = "default_dir")] - root_dir: PathBuf, - - #[serde(default)] - allow_retry: bool, - - #[serde(default)] - dev: bool, - - #[serde(default)] - is_next_dev_command: bool, - - #[serde(default)] - server_components_external_packages: Vec, -} - -fn default_port() -> u16 { - 3000 -} - -fn default_host() -> IpAddr { - IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)) -} - -fn default_dir() -> PathBuf { - std::env::current_dir().expect("Current dir should be accessible") -} - -async fn start_server(options: TurboDevServerOptions) -> napi::Result<()> { - let start = Instant::now(); - - register(); - - let tt = TurboTasks::new(MemoryBackend::new()); - let tt_clone = tt.clone(); - - let dir = options - .dir - .canonicalize() - .expect("Cannot canonicalize project directory") - .to_str() - .expect("project directory contains invalid characters") - .to_string(); - - let root_dir = options - .root_dir - .canonicalize() - .expect("Cannot canonicalize project directory") - .to_str() - .expect("project directory contains invalid characters") - .to_string(); - - //server_component_external - - let mut server = NextDevServerBuilder::new(tt, dir, root_dir) - .entry_request("src/index".into()) - .eager_compile(options.eager_compile) - .hostname(options.hostname) - .port(options.port) - .log_detail(options.log_detail) - .show_all(options.show_all) - .log_level( - options - .log_level - .map_or_else(|| IssueSeverity::Warning, |l| l), - ); - - for package in options.server_components_external_packages { - server = server.server_component_external(package); - } - - let server = server.build().await.convert_err()?; - - let index_uri = if server.addr.ip().is_loopback() || server.addr.ip().is_unspecified() { - format!("http://localhost:{}", server.addr.port()) - } else { - format!("http://{}", server.addr) - }; - println!( - "{} - started server on {}:{}, url: {}", - "ready".green(), - server.addr.ip(), - server.addr.port(), - index_uri - ); - - let stats_future = async move { - println!( - "{event_type} - initial compilation {start}", - event_type = "event".purple(), - start = FormatDuration(start.elapsed()), - ); - - loop { - let (elapsed, _count) = tt_clone - .get_or_wait_update_info(Duration::from_millis(100)) - .await; - println!( - "{event_type} - updated in {elapsed}", - event_type = "event".purple(), - elapsed = FormatDuration(elapsed), - ); - } - }; - - join!(stats_future, async { server.future.await.unwrap() }).await; - - Ok(()) -} +use next_dev::{devserver_options::DevServerOptions, start_server}; #[napi] pub async fn start_turbo_dev(options: Buffer) -> napi::Result<()> { - let options: TurboDevServerOptions = serde_json::from_slice(&options)?; - - start_server(options).await + let options: DevServerOptions = serde_json::from_slice(&options)?; + start_server(&options).await.convert_err() } diff --git a/packages/next/build/swc/index.js b/packages/next/build/swc/index.js index 56be55263b25ce7..66ac3f03d97d123 100644 --- a/packages/next/build/swc/index.js +++ b/packages/next/build/swc/index.js @@ -342,7 +342,13 @@ function loadNative() { teardownTraceSubscriber: bindings.teardownTraceSubscriber, teardownCrashReporter: bindings.teardownCrashReporter, turbo: { - startDev: (options) => bindings.startTurboDev(toBuffer(options)), + startDev: (options) => { + const devOptions = { + ...options, + noOpen: options.noOpen ?? true, + } + bindings.startTurboDev(toBuffer(devOptions)) + }, startTrace: (options = {}) => bindings.runTurboTracing(toBuffer({ exact: true, ...options })), },