Skip to content

Commit 82e0f2c

Browse files
committed
gate behind has_next_support
1 parent 215af26 commit 82e0f2c

File tree

6 files changed

+133
-113
lines changed

6 files changed

+133
-113
lines changed

crates/next-api/src/project.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,8 +1097,13 @@ impl Project {
10971097
}
10981098

10991099
#[turbo_tasks::function]
1100-
pub(super) fn client_compile_time_info(&self) -> Vc<CompileTimeInfo> {
1101-
get_client_compile_time_info(self.browserslist_query.clone(), self.define_env.client())
1100+
pub(super) async fn client_compile_time_info(self: Vc<Self>) -> Result<Vc<CompileTimeInfo>> {
1101+
let this = self.await?;
1102+
Ok(get_client_compile_time_info(
1103+
this.browserslist_query.clone(),
1104+
this.define_env.client(),
1105+
self.ci_has_next_support(),
1106+
))
11021107
}
11031108

11041109
#[turbo_tasks::function]
@@ -1336,6 +1341,7 @@ impl Project {
13361341
self.project_path(),
13371342
this.define_env.nodejs(),
13381343
self.current_node_js_version(),
1344+
self.ci_has_next_support(),
13391345
))
13401346
}
13411347

@@ -1346,6 +1352,7 @@ impl Project {
13461352
self.project_path().owned().await?,
13471353
this.define_env.edge(),
13481354
self.current_node_js_version(),
1355+
self.ci_has_next_support(),
13491356
))
13501357
}
13511358

crates/next-core/src/next_client/context.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,15 @@ async fn next_client_defines(define_env: Vc<OptionEnvMap>) -> Result<Vc<CompileT
8080
}
8181

8282
#[turbo_tasks::function]
83-
async fn next_client_free_vars(define_env: Vc<OptionEnvMap>) -> Result<Vc<FreeVarReferences>> {
83+
async fn next_client_free_vars(
84+
define_env: Vc<OptionEnvMap>,
85+
has_next_support: Vc<bool>,
86+
) -> Result<Vc<FreeVarReferences>> {
8487
Ok(free_var_references!(
85-
..free_var_references_with_vercel_system_env_warnings(defines(&*define_env.await?)),
88+
..free_var_references_with_vercel_system_env_warnings(
89+
defines(&*define_env.await?),
90+
*has_next_support.await?
91+
),
8692
Buffer = FreeVarReference::EcmaScriptModule {
8793
request: rcstr!("node:buffer"),
8894
lookup_path: None,
@@ -101,6 +107,7 @@ async fn next_client_free_vars(define_env: Vc<OptionEnvMap>) -> Result<Vc<FreeVa
101107
pub async fn get_client_compile_time_info(
102108
browserslist_query: RcStr,
103109
define_env: Vc<OptionEnvMap>,
110+
has_next_support: Vc<bool>,
104111
) -> Result<Vc<CompileTimeInfo>> {
105112
CompileTimeInfo::builder(
106113
Environment::new(ExecutionEnvironment::Browser(
@@ -116,7 +123,11 @@ pub async fn get_client_compile_time_info(
116123
.await?,
117124
)
118125
.defines(next_client_defines(define_env).to_resolved().await?)
119-
.free_var_references(next_client_free_vars(define_env).to_resolved().await?)
126+
.free_var_references(
127+
next_client_free_vars(define_env, has_next_support)
128+
.to_resolved()
129+
.await?,
130+
)
120131
.cell()
121132
.await
122133
}

crates/next-core/src/next_edge/context.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,13 @@ async fn next_edge_defines(define_env: Vc<OptionEnvMap>) -> Result<Vc<CompileTim
4747
async fn next_edge_free_vars(
4848
project_path: FileSystemPath,
4949
define_env: Vc<OptionEnvMap>,
50+
has_next_support: Vc<bool>,
5051
) -> Result<Vc<FreeVarReferences>> {
5152
Ok(free_var_references!(
52-
..free_var_references_with_vercel_system_env_warnings(defines(&*define_env.await?)),
53+
..free_var_references_with_vercel_system_env_warnings(
54+
defines(&*define_env.await?),
55+
*has_next_support.await?
56+
),
5357
Buffer = FreeVarReference::EcmaScriptModule {
5458
request: rcstr!("buffer"),
5559
lookup_path: Some(project_path),
@@ -64,6 +68,7 @@ pub async fn get_edge_compile_time_info(
6468
project_path: FileSystemPath,
6569
define_env: Vc<OptionEnvMap>,
6670
node_version: ResolvedVc<NodeJsVersion>,
71+
has_next_support: Vc<bool>,
6772
) -> Result<Vc<CompileTimeInfo>> {
6873
CompileTimeInfo::builder(
6974
Environment::new(ExecutionEnvironment::EdgeWorker(
@@ -74,7 +79,7 @@ pub async fn get_edge_compile_time_info(
7479
)
7580
.defines(next_edge_defines(define_env).to_resolved().await?)
7681
.free_var_references(
77-
next_edge_free_vars(project_path, define_env)
82+
next_edge_free_vars(project_path, define_env, has_next_support)
7883
.to_resolved()
7984
.await?,
8085
)

crates/next-core/src/next_server/context.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,15 +355,23 @@ async fn next_server_defines(define_env: Vc<OptionEnvMap>) -> Result<Vc<CompileT
355355
}
356356

357357
#[turbo_tasks::function]
358-
async fn next_server_free_vars(define_env: Vc<OptionEnvMap>) -> Result<Vc<FreeVarReferences>> {
359-
Ok(free_var_references_with_vercel_system_env_warnings(defines(&*define_env.await?)).cell())
358+
async fn next_server_free_vars(
359+
define_env: Vc<OptionEnvMap>,
360+
has_next_support: Vc<bool>,
361+
) -> Result<Vc<FreeVarReferences>> {
362+
Ok(free_var_references_with_vercel_system_env_warnings(
363+
defines(&*define_env.await?),
364+
*has_next_support.await?,
365+
)
366+
.cell())
360367
}
361368

362369
#[turbo_tasks::function]
363370
pub async fn get_server_compile_time_info(
364371
cwd: Vc<FileSystemPath>,
365372
define_env: Vc<OptionEnvMap>,
366373
node_version: ResolvedVc<NodeJsVersion>,
374+
has_next_support: Vc<bool>,
367375
) -> Result<Vc<CompileTimeInfo>> {
368376
CompileTimeInfo::builder(
369377
Environment::new(ExecutionEnvironment::NodeJsLambda(
@@ -378,7 +386,11 @@ pub async fn get_server_compile_time_info(
378386
.await?,
379387
)
380388
.defines(next_server_defines(define_env).to_resolved().await?)
381-
.free_var_references(next_server_free_vars(define_env).to_resolved().await?)
389+
.free_var_references(
390+
next_server_free_vars(define_env, has_next_support)
391+
.to_resolved()
392+
.await?,
393+
)
382394
.cell()
383395
.await
384396
}

crates/next-core/src/util.rs

Lines changed: 88 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bincode::{Decode, Encode};
55
use next_taskless::{expand_next_js_template, expand_next_js_template_no_imports};
66
use serde::{Deserialize, de::DeserializeOwned};
77
use turbo_rcstr::{RcStr, rcstr};
8-
use turbo_tasks::{FxIndexMap, NonLocalValue, TaskInput, Vc, trace::TraceRawVcs};
8+
use turbo_tasks::{FxIndexMap, NonLocalValue, TaskInput, Vc, fxindexset, trace::TraceRawVcs};
99
use turbo_tasks_fs::{File, FileContent, FileJsonContent, FileSystem, FileSystemPath, rope::Rope};
1010
use turbopack::module_options::RuleCondition;
1111
use turbopack_core::{
@@ -62,9 +62,10 @@ pub fn defines(define_env: &FxIndexMap<RcStr, Option<RcStr>>) -> CompileTimeDefi
6262
CompileTimeDefines(defines)
6363
}
6464

65-
/// Emits warnings or errors when inlining frequently changing system env vars
65+
/// Emits warnings or errors when inlining frequently changing Vercel system env vars
6666
pub fn free_var_references_with_vercel_system_env_warnings(
6767
defines: CompileTimeDefines,
68+
has_next_support: bool,
6869
) -> FreeVarReferences {
6970
// constant:
7071
// VERCEL
@@ -98,74 +99,104 @@ pub fn free_var_references_with_vercel_system_env_warnings(
9899
// VERCEL_GIT_COMMIT_AUTHOR_NAME
99100
// VERCEL_GIT_PREVIOUS_SHA
100101

101-
let should_error = std::env::var("NEXT_TURBOPACK_SYSTEM_ENV_ERROR")
102-
.ok()
103-
.is_some_and(|v| !v.is_empty());
102+
let entries = defines
103+
.0
104+
.into_iter()
105+
.map(|(k, value)| (k, FreeVarReference::Value(value)));
106+
107+
let entries = if has_next_support {
108+
let should_error = std::env::var("NEXT_TURBOPACK_SYSTEM_ENV_ERROR")
109+
.ok()
110+
.is_some_and(|v| !v.is_empty());
111+
112+
fn wrap_report_next_public_usage(
113+
public_env_var: &str,
114+
inner: Option<Box<FreeVarReference>>,
115+
should_error: bool,
116+
) -> FreeVarReference {
117+
let message = match public_env_var {
118+
"NEXT_DEPLOYMENT_ID" | "VERCEL_DEPLOYMENT_ID" => {
119+
rcstr!(
120+
"The deployment id is being inlined. Use process.env.NEXT_DEPLOYMENT_ID \
121+
instead to access the same value without inlining, for faster deploy \
122+
times and better browser client-side caching."
123+
)
124+
}
125+
_ => format!(
126+
"A system environment variable is being inlined. This variable changes on \
127+
every deployment, causing slower deploy times and worse browser client-side \
128+
caching. For server-side code, replace with process.env.{} and for browser \
129+
code, try to remove it.",
130+
public_env_var.strip_prefix("NEXT_PUBLIC_").unwrap(),
131+
)
132+
.into(),
133+
};
134+
FreeVarReference::ReportUsage {
135+
message,
136+
severity: if should_error {
137+
IssueSeverity::Error
138+
} else {
139+
IssueSeverity::Warning
140+
},
141+
inner,
142+
}
143+
}
104144

105-
FreeVarReferences(
106-
defines
107-
.0
108-
.into_iter()
145+
let mut list = fxindexset!(
146+
"NEXT_PUBLIC_NEXT_DEPLOYMENT_ID",
147+
"NEXT_PUBLIC_VERCEL_BRANCH_URL",
148+
"NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID",
149+
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN",
150+
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME",
151+
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE",
152+
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF",
153+
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA",
154+
"NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA",
155+
"NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID",
156+
"NEXT_PUBLIC_VERCEL_OIDC_TOKEN",
157+
"NEXT_PUBLIC_VERCEL_URL",
158+
);
159+
160+
let mut entries: FxIndexMap<_, _> = entries
109161
.map(|(k, value)| {
110-
const LIST: [&str; 12] = [
111-
"NEXT_DEPLOYMENT_ID",
112-
"VERCEL_BRANCH_URL",
113-
"VERCEL_DEPLOYMENT_ID",
114-
"VERCEL_GIT_COMMIT_AUTHOR_LOGIN",
115-
"VERCEL_GIT_COMMIT_AUTHOR_NAME",
116-
"VERCEL_GIT_COMMIT_MESSAGE",
117-
"VERCEL_GIT_COMMIT_REF",
118-
"VERCEL_GIT_COMMIT_SHA",
119-
"VERCEL_GIT_PREVIOUS_SHA",
120-
"VERCEL_GIT_PULL_REQUEST_ID",
121-
"VERCEL_OIDC_TOKEN",
122-
"VERCEL_URL",
123-
];
124-
125162
let value = if let &[
126163
DefinableNameSegment::Name(a),
127164
DefinableNameSegment::Name(b),
128-
DefinableNameSegment::Name(c),
165+
DefinableNameSegment::Name(public_env_var),
129166
] = &&*k
130167
&& a == "process"
131168
&& b == "env"
132-
&& let Some(env_var) = c.strip_prefix("NEXT_PUBLIC_")
133-
&& LIST.binary_search(&env_var).is_ok()
169+
&& list.swap_remove(&**public_env_var)
134170
{
135-
let message = match &**c {
136-
"NEXT_PUBLIC_NEXT_DEPLOYMENT_ID" | "NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID" => {
137-
rcstr!(
138-
"The deployment id is being inlined. Use \
139-
process.env.NEXT_DEPLOYMENT_ID instead to access the same value \
140-
without inlining, for faster deploy times and better browser \
141-
client-side caching."
142-
)
143-
}
144-
_ => format!(
145-
"A system environment variable is being inlined. This variable \
146-
changes on every deployment, causing slower deploy times and worse \
147-
browser client-side caching. For server-side code, replace with \
148-
process.env.{} and for browser code, try to remove it.",
149-
env_var,
150-
)
151-
.into(),
152-
};
153-
FreeVarReference::ReportUsage {
154-
message,
155-
severity: if should_error {
156-
IssueSeverity::Error
157-
} else {
158-
IssueSeverity::Warning
159-
},
160-
inner: Some(Box::new(FreeVarReference::Value(value))),
161-
}
171+
wrap_report_next_public_usage(
172+
public_env_var,
173+
Some(Box::new(value)),
174+
should_error,
175+
)
162176
} else {
163-
FreeVarReference::Value(value)
177+
value
164178
};
165179
(k, value)
166180
})
167-
.collect(),
168-
)
181+
.collect();
182+
183+
// For the remaining ones, still add a warning, but without replacement
184+
for public_env_var in list {
185+
entries.insert(
186+
vec![
187+
rcstr!("process").into(),
188+
rcstr!("env").into(),
189+
DefinableNameSegment::Name(public_env_var.into()),
190+
],
191+
wrap_report_next_public_usage(public_env_var, None, should_error),
192+
);
193+
}
194+
entries
195+
} else {
196+
entries.collect()
197+
};
198+
199+
FreeVarReferences(entries)
169200
}
170201

171202
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TaskInput, TraceRawVcs, Encode, Decode)]

packages/next/src/lib/static-env.ts

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -22,52 +22,6 @@ function errorIfEnvConflicted(
2222
*/
2323
export function getNextPublicEnvironmentVariables() {
2424
const defineEnv: [string, string | undefined][] = []
25-
26-
process.env.NEXT_PUBLIC_VERCEL = process.env.NEXT_PUBLIC_VERCEL || ''
27-
process.env.NEXT_PUBLIC_CI = process.env.NEXT_PUBLIC_CI || ''
28-
process.env.NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL =
29-
process.env.NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL || ''
30-
process.env.NEXT_PUBLIC_VERCEL_REGION =
31-
process.env.NEXT_PUBLIC_VERCEL_REGION || ''
32-
process.env.NEXT_PUBLIC_VERCEL_SKEW_PROTECTION_ENABLED =
33-
process.env.NEXT_PUBLIC_VERCEL_SKEW_PROTECTION_ENABLED || ''
34-
process.env.NEXT_PUBLIC_VERCEL_AUTOMATION_BYPASS_SECRET =
35-
process.env.NEXT_PUBLIC_VERCEL_AUTOMATION_BYPASS_SECRET || ''
36-
process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID =
37-
process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID || ''
38-
process.env.NEXT_PUBLIC_VERCEL_GIT_PROVIDER =
39-
process.env.NEXT_PUBLIC_VERCEL_GIT_PROVIDER || ''
40-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG =
41-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG || ''
42-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER =
43-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER || ''
44-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_ID =
45-
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_ID || ''
46-
process.env.NEXT_PUBLIC_VERCEL_ENV = process.env.NEXT_PUBLIC_VERCEL_ENV || ''
47-
process.env.NEXT_PUBLIC_VERCEL_TARGET_ENV =
48-
process.env.NEXT_PUBLIC_VERCEL_TARGET_ENV || ''
49-
process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL =
50-
process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL || ''
51-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF =
52-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF || ''
53-
process.env.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID =
54-
process.env.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID || ''
55-
process.env.NEXT_PUBLIC_VERCEL_URL = process.env.NEXT_PUBLIC_VERCEL_URL || ''
56-
process.env.NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID =
57-
process.env.NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID || ''
58-
process.env.NEXT_PUBLIC_VERCEL_OIDC_TOKEN =
59-
process.env.NEXT_PUBLIC_VERCEL_OIDC_TOKEN || ''
60-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA =
61-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA || ''
62-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE =
63-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE || ''
64-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN =
65-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN || ''
66-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME =
67-
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME || ''
68-
process.env.NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA =
69-
process.env.NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA || ''
70-
7125
for (const key in process.env) {
7226
if (key.startsWith('NEXT_PUBLIC_')) {
7327
const value = process.env[key]

0 commit comments

Comments
 (0)