diff --git a/packages/next-swc/crates/next-core/Cargo.toml b/packages/next-swc/crates/next-core/Cargo.toml index fad26ae380..89a951c125 100644 --- a/packages/next-swc/crates/next-core/Cargo.toml +++ b/packages/next-swc/crates/next-core/Cargo.toml @@ -16,6 +16,7 @@ serde = "1.0.136" serde_json = "1.0.85" tokio = { version = "1.11.0", features = ["full"] } turbo-tasks = { path = "../turbo-tasks" } +turbo-tasks-env = { path = "../turbo-tasks-env" } turbo-tasks-fs = { path = "../turbo-tasks-fs" } turbopack = { path = "../turbopack" } turbopack-core = { path = "../turbopack-core" } diff --git a/packages/next-swc/crates/next-core/src/env.rs b/packages/next-swc/crates/next-core/src/env.rs index e39e962675..3e9b4fed1d 100644 --- a/packages/next-swc/crates/next-core/src/env.rs +++ b/packages/next-swc/crates/next-core/src/env.rs @@ -1,12 +1,15 @@ use anyhow::Result; +use turbo_tasks_env::{CommandLineProcessEnvVc, FilterProcessEnvVc, ProcessEnvVc}; use turbo_tasks_fs::FileSystemPathVc; -use turbopack_env::ProcessEnvVc; +use turbopack_env::TryDotenvProcessEnvVc; /// Loads a series of dotenv files according to the precedence rules set by /// https://nextjs.org/docs/basic-features/environment-variables#environment-variable-load-order #[turbo_tasks::function] pub async fn load_env(project_path: FileSystemPathVc) -> Result { - let node_env = std::env::var("NODE_ENV").unwrap_or_else(|_| "development".into()); + let env = CommandLineProcessEnvVc::new().as_process_env(); + let node_env = env.read("NODE_ENV").await?; + let node_env = node_env.as_deref().unwrap_or("development"); let files = [ Some(format!(".env.{node_env}.local")), @@ -21,14 +24,14 @@ pub async fn load_env(project_path: FileSystemPathVc) -> Result { .into_iter() .flatten(); - let env = files.fold(ProcessEnvVc::from_command_line(), |prior, f| { + let env = files.fold(env, |prior, f| { let path = project_path.join(&f); - ProcessEnvVc::from_dotenv_file(path, Some(prior)) + TryDotenvProcessEnvVc::new(prior, path).as_process_env() }); Ok(env) } pub fn filter_for_client(env: ProcessEnvVc) -> ProcessEnvVc { - ProcessEnvVc::filter(env, "NEXT_PUBLIC_".to_string()) + FilterProcessEnvVc::new(env, "NEXT_PUBLIC_".to_string()).into() } 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 7b0a8de62d..bf2034bfb8 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 @@ -3,6 +3,7 @@ use std::collections::HashMap; use anyhow::Result; use turbo_tasks::Value; +use turbo_tasks_env::ProcessEnvVc; use turbo_tasks_fs::FileSystemPathVc; use turbopack::{ module_options::module_options_context::{ModuleOptionsContext, ModuleOptionsContextVc}, @@ -17,7 +18,7 @@ use turbopack_core::{ }; use turbopack_dev_server::html_runtime_asset::HtmlRuntimeAssetVc; use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc; -use turbopack_env::{ProcessEnvAssetVc, ProcessEnvVc}; +use turbopack_env::ProcessEnvAssetVc; use crate::{ env::filter_for_client, 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 a3f02a174e..c034a11a54 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 @@ -3,6 +3,7 @@ use std::collections::HashMap; use anyhow::Result; use serde_json::json; use turbo_tasks::{primitives::JsonValueVc, Value}; +use turbo_tasks_env::ProcessEnvVc; use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemEntryType, FileSystemPathVc}; use turbopack::{ module_options::ModuleOptionsContext, resolve_options_context::ResolveOptionsContext, @@ -21,7 +22,7 @@ use turbopack_dev_server::source::{ ContentSourceVc, NoContentSourceVc, }; use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc; -use turbopack_env::{ProcessEnvAssetVc, ProcessEnvVc}; +use turbopack_env::ProcessEnvAssetVc; use crate::{ next_client::{ 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 e05beaaa79..236936b0cd 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 @@ -2,6 +2,7 @@ use std::future::IntoFuture; use anyhow::{anyhow, Result}; use futures::{prelude::*, stream}; +use turbo_tasks_env::ProcessEnvVc; use turbo_tasks_fs::FileSystemPathVc; use turbopack::ecmascript::EcmascriptModuleAssetVc; use turbopack_core::{ @@ -12,7 +13,6 @@ use turbopack_dev_server::{ html::DevHtmlAsset, source::{asset_graph::AssetGraphContentSourceVc, ContentSourceVc}, }; -use turbopack_env::ProcessEnvVc; use crate::next_client::context::{ get_client_asset_context, get_client_chunking_context, get_resolved_client_runtime_entries,