move ProcessEnv into turbo-tasks-env (vercel/turbo#462)
make ProcessEnv a trait to allow other implemenetations of it
This commit is contained in:
parent
8c80ba4f78
commit
d49a9c3b9d
5 changed files with 14 additions and 8 deletions
|
@ -16,6 +16,7 @@ serde = "1.0.136"
|
||||||
serde_json = "1.0.85"
|
serde_json = "1.0.85"
|
||||||
tokio = { version = "1.11.0", features = ["full"] }
|
tokio = { version = "1.11.0", features = ["full"] }
|
||||||
turbo-tasks = { path = "../turbo-tasks" }
|
turbo-tasks = { path = "../turbo-tasks" }
|
||||||
|
turbo-tasks-env = { path = "../turbo-tasks-env" }
|
||||||
turbo-tasks-fs = { path = "../turbo-tasks-fs" }
|
turbo-tasks-fs = { path = "../turbo-tasks-fs" }
|
||||||
turbopack = { path = "../turbopack" }
|
turbopack = { path = "../turbopack" }
|
||||||
turbopack-core = { path = "../turbopack-core" }
|
turbopack-core = { path = "../turbopack-core" }
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use turbo_tasks_env::{CommandLineProcessEnvVc, FilterProcessEnvVc, ProcessEnvVc};
|
||||||
use turbo_tasks_fs::FileSystemPathVc;
|
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
|
/// 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
|
/// https://nextjs.org/docs/basic-features/environment-variables#environment-variable-load-order
|
||||||
#[turbo_tasks::function]
|
#[turbo_tasks::function]
|
||||||
pub async fn load_env(project_path: FileSystemPathVc) -> Result<ProcessEnvVc> {
|
pub async fn load_env(project_path: FileSystemPathVc) -> Result<ProcessEnvVc> {
|
||||||
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 = [
|
let files = [
|
||||||
Some(format!(".env.{node_env}.local")),
|
Some(format!(".env.{node_env}.local")),
|
||||||
|
@ -21,14 +24,14 @@ pub async fn load_env(project_path: FileSystemPathVc) -> Result<ProcessEnvVc> {
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.flatten();
|
.flatten();
|
||||||
|
|
||||||
let env = files.fold(ProcessEnvVc::from_command_line(), |prior, f| {
|
let env = files.fold(env, |prior, f| {
|
||||||
let path = project_path.join(&f);
|
let path = project_path.join(&f);
|
||||||
ProcessEnvVc::from_dotenv_file(path, Some(prior))
|
TryDotenvProcessEnvVc::new(prior, path).as_process_env()
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(env)
|
Ok(env)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn filter_for_client(env: ProcessEnvVc) -> ProcessEnvVc {
|
pub fn filter_for_client(env: ProcessEnvVc) -> ProcessEnvVc {
|
||||||
ProcessEnvVc::filter(env, "NEXT_PUBLIC_".to_string())
|
FilterProcessEnvVc::new(env, "NEXT_PUBLIC_".to_string()).into()
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ use std::collections::HashMap;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use turbo_tasks::Value;
|
use turbo_tasks::Value;
|
||||||
|
use turbo_tasks_env::ProcessEnvVc;
|
||||||
use turbo_tasks_fs::FileSystemPathVc;
|
use turbo_tasks_fs::FileSystemPathVc;
|
||||||
use turbopack::{
|
use turbopack::{
|
||||||
module_options::module_options_context::{ModuleOptionsContext, ModuleOptionsContextVc},
|
module_options::module_options_context::{ModuleOptionsContext, ModuleOptionsContextVc},
|
||||||
|
@ -17,7 +18,7 @@ use turbopack_core::{
|
||||||
};
|
};
|
||||||
use turbopack_dev_server::html_runtime_asset::HtmlRuntimeAssetVc;
|
use turbopack_dev_server::html_runtime_asset::HtmlRuntimeAssetVc;
|
||||||
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc;
|
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc;
|
||||||
use turbopack_env::{ProcessEnvAssetVc, ProcessEnvVc};
|
use turbopack_env::ProcessEnvAssetVc;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
env::filter_for_client,
|
env::filter_for_client,
|
||||||
|
|
|
@ -3,6 +3,7 @@ use std::collections::HashMap;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use turbo_tasks::{primitives::JsonValueVc, Value};
|
use turbo_tasks::{primitives::JsonValueVc, Value};
|
||||||
|
use turbo_tasks_env::ProcessEnvVc;
|
||||||
use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemEntryType, FileSystemPathVc};
|
use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemEntryType, FileSystemPathVc};
|
||||||
use turbopack::{
|
use turbopack::{
|
||||||
module_options::ModuleOptionsContext, resolve_options_context::ResolveOptionsContext,
|
module_options::ModuleOptionsContext, resolve_options_context::ResolveOptionsContext,
|
||||||
|
@ -21,7 +22,7 @@ use turbopack_dev_server::source::{
|
||||||
ContentSourceVc, NoContentSourceVc,
|
ContentSourceVc, NoContentSourceVc,
|
||||||
};
|
};
|
||||||
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc;
|
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceablesVc;
|
||||||
use turbopack_env::{ProcessEnvAssetVc, ProcessEnvVc};
|
use turbopack_env::ProcessEnvAssetVc;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
next_client::{
|
next_client::{
|
||||||
|
|
|
@ -2,6 +2,7 @@ use std::future::IntoFuture;
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use futures::{prelude::*, stream};
|
use futures::{prelude::*, stream};
|
||||||
|
use turbo_tasks_env::ProcessEnvVc;
|
||||||
use turbo_tasks_fs::FileSystemPathVc;
|
use turbo_tasks_fs::FileSystemPathVc;
|
||||||
use turbopack::ecmascript::EcmascriptModuleAssetVc;
|
use turbopack::ecmascript::EcmascriptModuleAssetVc;
|
||||||
use turbopack_core::{
|
use turbopack_core::{
|
||||||
|
@ -12,7 +13,6 @@ use turbopack_dev_server::{
|
||||||
html::DevHtmlAsset,
|
html::DevHtmlAsset,
|
||||||
source::{asset_graph::AssetGraphContentSourceVc, ContentSourceVc},
|
source::{asset_graph::AssetGraphContentSourceVc, ContentSourceVc},
|
||||||
};
|
};
|
||||||
use turbopack_env::ProcessEnvVc;
|
|
||||||
|
|
||||||
use crate::next_client::context::{
|
use crate::next_client::context::{
|
||||||
get_client_asset_context, get_client_chunking_context, get_resolved_client_runtime_entries,
|
get_client_asset_context, get_client_chunking_context, get_resolved_client_runtime_entries,
|
||||||
|
|
Loading…
Reference in a new issue