Introduce NextMode (#49852)

This introduces a `NextMode` enum that controls which mode Next.js Turbo
is currently running in:
* `NextMode::Development`: `next dev`
* `NextMode::Build`: `next build`

Requires https://github.com/vercel/turbo/pull/4972

This also update Turbopack to `turbopack-230517.2` with the following
changes:

* https://github.com/vercel/turbo/pull/4972 <!-- Alex Kirszenberg -
Configure React development flag, inherit NODE_ENV from execution
context -->

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Alex Kirszenberg 2023-05-17 16:22:50 +02:00 committed by GitHub
parent 7641278f82
commit 051c90d43c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 296 additions and 151 deletions

67
Cargo.lock generated
View file

@ -400,7 +400,7 @@ dependencies = [
[[package]]
name = "auto-hash-map"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"serde",
]
@ -3413,7 +3413,7 @@ dependencies = [
[[package]]
name = "node-file-trace"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"serde",
@ -6991,7 +6991,7 @@ dependencies = [
[[package]]
name = "turbo-tasks"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7021,7 +7021,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"cargo-lock",
@ -7033,7 +7033,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-bytes"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"bytes",
@ -7048,7 +7048,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"dotenvy",
@ -7062,7 +7062,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fetch"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"indexmap",
@ -7079,7 +7079,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7108,7 +7108,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-hash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"base16",
"hex",
@ -7120,7 +7120,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"convert_case 0.6.0",
@ -7134,7 +7134,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros-shared"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"proc-macro2",
"quote",
@ -7144,7 +7144,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-malloc"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"mimalloc",
]
@ -7152,7 +7152,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-memory"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7174,7 +7174,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-testing"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7186,7 +7186,7 @@ dependencies = [
[[package]]
name = "turbopack"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-recursion",
@ -7199,6 +7199,7 @@ dependencies = [
"tokio",
"turbo-tasks",
"turbo-tasks-build",
"turbo-tasks-env",
"turbo-tasks-fs",
"turbopack-core",
"turbopack-css",
@ -7215,7 +7216,7 @@ dependencies = [
[[package]]
name = "turbopack-bench"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"chromiumoxide",
@ -7245,7 +7246,7 @@ dependencies = [
[[package]]
name = "turbopack-binding"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"auto-hash-map",
"mdxjs",
@ -7285,7 +7286,7 @@ dependencies = [
[[package]]
name = "turbopack-cli-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"clap 4.1.11",
@ -7302,7 +7303,7 @@ dependencies = [
[[package]]
name = "turbopack-core"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-trait",
@ -7329,7 +7330,7 @@ dependencies = [
[[package]]
name = "turbopack-create-test-app"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"clap 4.1.11",
@ -7342,7 +7343,7 @@ dependencies = [
[[package]]
name = "turbopack-css"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-trait",
@ -7364,7 +7365,7 @@ dependencies = [
[[package]]
name = "turbopack-dev"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"indexmap",
@ -7385,7 +7386,7 @@ dependencies = [
[[package]]
name = "turbopack-dev-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-compression",
@ -7420,7 +7421,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-trait",
@ -7456,7 +7457,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-plugins"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-trait",
@ -7477,7 +7478,7 @@ dependencies = [
[[package]]
name = "turbopack-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"indexmap",
@ -7493,7 +7494,7 @@ dependencies = [
[[package]]
name = "turbopack-image"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"base64 0.21.0",
@ -7513,7 +7514,7 @@ dependencies = [
[[package]]
name = "turbopack-json"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"serde",
@ -7528,7 +7529,7 @@ dependencies = [
[[package]]
name = "turbopack-mdx"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"mdxjs",
@ -7543,7 +7544,7 @@ dependencies = [
[[package]]
name = "turbopack-node"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"async-stream",
@ -7577,7 +7578,7 @@ dependencies = [
[[package]]
name = "turbopack-static"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"serde",
@ -7593,7 +7594,7 @@ dependencies = [
[[package]]
name = "turbopack-swc-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"swc_core",
"turbo-tasks",
@ -7604,7 +7605,7 @@ dependencies = [
[[package]]
name = "turbopack-test-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230516.1#7869188e5925ffb3c7a5723dc26c96bd53d3f9b7"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230517.2#4d39f01a5f06e7e9b670cc55bd544c64088b77e7"
dependencies = [
"anyhow",
"once_cell",

View file

@ -42,11 +42,11 @@ swc_core = { version = "0.76.6" }
testing = { version = "0.33.10" }
# Turbo crates
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230516.1" }
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230517.2" }
# [TODO]: need to refactor embed_directory! macro usages, as well as resolving turbo_tasks::function, macros..
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230516.1" }
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230517.2" }
# [TODO]: need to refactor embed_directory! macro usage in next-core
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230516.1" }
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230517.2" }
# General Deps

View file

@ -10,8 +10,8 @@
"check": "tsc --noEmit"
},
"dependencies": {
"@vercel/turbopack-dev": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1",
"@vercel/turbopack-node": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230516.1",
"@vercel/turbopack-dev": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2",
"@vercel/turbopack-node": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2",
"anser": "^2.1.1",
"css.escape": "^1.5.1",
"next": "*",

View file

@ -0,0 +1,6 @@
/**
* This is the runtime entry point for Next.js client-side bundles.
*/
import './shims'
import 'next/dist/client/next'

View file

@ -0,0 +1,11 @@
import '../shims'
// Next uses __webpack_require__ extensively.
globalThis.__webpack_require__ = (name) => {
console.error(
`__webpack_require__ is not implemented (when requiring ${name})`
)
}
// initialize() needs `__webpack_public_path__` to be defined.
globalThis.__webpack_public_path__ = undefined

View file

@ -0,0 +1,3 @@
// This ensures Next.js uses React 18's APIs (hydrateRoot) instead of React 17's
// (hydrate).
process.env.__NEXT_REACT_ROOT = 'true'

View file

@ -33,7 +33,6 @@ async function loadPageChunk(assetPrefix: string, chunkData: ChunkData) {
window.next = {
version: version || '',
// @ts-expect-error
get router() {
return router
},

View file

@ -1,3 +1,6 @@
import type { Router } from 'next/dist/client/router'
import type { MittEmitter } from 'next/dist/shared/lib/mitt'
declare global {
type ChunkData =
| string
@ -20,7 +23,9 @@ declare global {
)[]
var next: {
version: string
appDir: boolean
appDir?: boolean
router?: Router
emitter?: MittEmitter<string>
}
function __turbopack_load_page_chunks__(

View file

@ -74,6 +74,7 @@ use crate::{
embed_js::{next_asset, next_js_file, next_js_file_path},
env::env_for_js,
fallback::get_fallback_page,
mode::NextMode,
next_client::{
context::{
get_client_assets_path, get_client_chunking_context, get_client_compile_time_info,
@ -139,6 +140,7 @@ async fn next_client_transition(
next_config: NextConfigVc,
) -> Result<TransitionVc> {
let ty = Value::new(ClientContextType::App { app_dir });
let mode = NextMode::Development;
let client_chunking_context = get_client_chunking_context(
project_path,
server_root,
@ -150,12 +152,13 @@ async fn next_client_transition(
execution_context,
client_compile_time_info.environment(),
ty,
mode,
next_config,
);
let client_runtime_entries =
get_client_runtime_entries(project_path, env, ty, next_config, execution_context);
get_client_runtime_entries(project_path, env, ty, mode, next_config, execution_context);
let client_resolve_options_context =
get_client_resolve_options_context(project_path, ty, next_config, execution_context);
get_client_resolve_options_context(project_path, ty, mode, next_config, execution_context);
Ok(NextClientTransition {
is_app: true,
@ -179,20 +182,23 @@ fn next_ssr_client_module_transition(
server_addr: ServerAddrVc,
) -> TransitionVc {
let ty = Value::new(ServerContextType::AppSSR { app_dir });
let mode = NextMode::Development;
NextSSRClientModuleTransition {
ssr_module_options_context: get_server_module_options_context(
project_path,
execution_context,
ty,
mode,
next_config,
),
ssr_resolve_options_context: get_server_resolve_options_context(
project_path,
ty,
mode,
next_config,
execution_context,
),
ssr_environment: get_server_compile_time_info(ty, process_env, server_addr),
ssr_environment: get_server_compile_time_info(ty, mode, process_env, server_addr),
}
.cell()
.into()
@ -209,11 +215,12 @@ fn next_layout_entry_transition(
server_addr: ServerAddrVc,
) -> TransitionVc {
let ty = Value::new(ServerContextType::AppRSC { app_dir });
let rsc_compile_time_info = get_server_compile_time_info(ty, process_env, server_addr);
let mode = NextMode::Development;
let rsc_compile_time_info = get_server_compile_time_info(ty, mode, process_env, server_addr);
let rsc_resolve_options_context =
get_server_resolve_options_context(project_path, ty, next_config, execution_context);
get_server_resolve_options_context(project_path, ty, mode, next_config, execution_context);
let rsc_module_options_context =
get_server_module_options_context(project_path, execution_context, ty, next_config);
get_server_module_options_context(project_path, execution_context, ty, mode, next_config);
NextServerComponentTransition {
rsc_compile_time_info,
@ -284,6 +291,7 @@ fn app_context(
output_path: FileSystemPathVc,
) -> AssetContextVc {
let next_server_to_client_transition = NextServerToClientTransition { ssr }.cell().into();
let mode = NextMode::Development;
let mut transitions = HashMap::new();
transitions.insert(
@ -333,6 +341,7 @@ fn app_context(
project_path,
execution_context,
client_ty,
mode,
server_root,
client_compile_time_info,
next_config,
@ -354,9 +363,21 @@ fn app_context(
let ssr_ty = Value::new(ServerContextType::AppSSR { app_dir });
ModuleAssetContextVc::new(
TransitionsByNameVc::cell(transitions),
get_server_compile_time_info(ssr_ty, env, server_addr),
get_server_module_options_context(project_path, execution_context, ssr_ty, next_config),
get_server_resolve_options_context(project_path, ssr_ty, next_config, execution_context),
get_server_compile_time_info(ssr_ty, mode, env, server_addr),
get_server_module_options_context(
project_path,
execution_context,
ssr_ty,
mode,
next_config,
),
get_server_resolve_options_context(
project_path,
ssr_ty,
mode,
next_config,
execution_context,
),
)
.into()
}
@ -381,7 +402,8 @@ pub async fn create_app_source(
let entrypoints = get_entrypoints(app_dir, next_config.page_extensions());
let metadata = get_global_metadata(app_dir, next_config.page_extensions());
let client_compile_time_info = get_client_compile_time_info(browserslist_query);
let client_compile_time_info =
get_client_compile_time_info(NextMode::Development, browserslist_query);
let context_ssr = app_context(
project_path,
@ -1017,6 +1039,8 @@ import {}, {{ chunks as {} }} from "COMPONENT_{}";
Value::new(EcmascriptModuleAssetType::Typescript),
EcmascriptInputTransformsVc::cell(vec![
EcmascriptInputTransform::React {
// The App source is currently only used in the development mode.
development: true,
refresh: false,
import_source: OptionStringVc::cell(None),
runtime: OptionStringVc::cell(None),

View file

@ -20,6 +20,7 @@ use turbopack_binding::{
};
use crate::{
mode::NextMode,
next_client::context::{
get_client_chunking_context, get_client_module_options_context,
get_client_resolve_options_context, get_client_runtime_entries, ClientContextType,
@ -39,13 +40,15 @@ pub async fn get_fallback_page(
next_config: NextConfigVc,
) -> Result<DevHtmlAssetVc> {
let ty = Value::new(ClientContextType::Fallback);
let mode = NextMode::Development;
let resolve_options_context =
get_client_resolve_options_context(project_path, ty, next_config, execution_context);
get_client_resolve_options_context(project_path, ty, mode, next_config, execution_context);
let module_options_context = get_client_module_options_context(
project_path,
execution_context,
client_compile_time_info.environment(),
ty,
mode,
next_config,
);
let chunking_context = get_client_chunking_context(
@ -54,7 +57,8 @@ pub async fn get_fallback_page(
client_compile_time_info.environment(),
ty,
);
let entries = get_client_runtime_entries(project_path, env, ty, next_config, execution_context);
let entries =
get_client_runtime_entries(project_path, env, ty, mode, next_config, execution_context);
let mut import_map = ImportMap::empty();
insert_next_shared_aliases(

View file

@ -13,6 +13,7 @@ mod embed_js;
pub mod env;
mod fallback;
pub mod manifest;
pub mod mode;
mod next_build;
pub mod next_client;
mod next_client_chunks;

View file

@ -0,0 +1,28 @@
use turbo_tasks::TaskInput;
/// The mode in which Next.js is running.
#[derive(Debug, Copy, Clone, TaskInput)]
pub enum NextMode {
/// `next dev`
Development,
/// `next build`
Build,
}
impl NextMode {
/// Returns the NODE_ENV value for the current mode.
pub fn node_env(&self) -> &'static str {
match self {
NextMode::Development => "development",
NextMode::Build => "production",
}
}
/// Returns true if the development React runtime should be used.
pub fn is_react_development(&self) -> bool {
match self {
NextMode::Development => true,
NextMode::Build => false,
}
}
}

View file

@ -19,6 +19,7 @@ use turbopack_binding::{
BrowserEnvironment, EnvironmentIntention, EnvironmentVc, ExecutionEnvironment,
},
free_var_references,
resolve::{parse::RequestVc, pattern::Pattern},
},
dev::{react_refresh::assert_can_resolve_react_refresh, DevChunkingContextVc},
ecmascript::TransformPluginVc,
@ -45,6 +46,7 @@ use crate::{
babel::maybe_add_babel_loader,
embed_js::next_js_fs,
env::env_for_js,
mode::NextMode,
next_build::{get_external_next_compiled_package_mapping, get_postcss_package_mapping},
next_client::runtime_entry::{RuntimeEntriesVc, RuntimeEntry},
next_config::NextConfigVc,
@ -67,10 +69,10 @@ use crate::{
util::foreign_code_context_condition,
};
fn defines() -> CompileTimeDefines {
fn defines(mode: NextMode) -> CompileTimeDefines {
compile_time_defines!(
process.turbopack = true,
process.env.NODE_ENV = "development",
process.env.NODE_ENV = mode.node_env(),
process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED = false,
process.env.__NEXT_HAS_REWRITES = true,
process.env.__NEXT_I18N_SUPPORT = false,
@ -80,14 +82,14 @@ fn defines() -> CompileTimeDefines {
}
#[turbo_tasks::function]
pub fn next_client_defines() -> CompileTimeDefinesVc {
defines().cell()
fn next_client_defines(mode: NextMode) -> CompileTimeDefinesVc {
defines(mode).cell()
}
#[turbo_tasks::function]
pub async fn next_client_free_vars() -> Result<FreeVarReferencesVc> {
async fn next_client_free_vars(mode: NextMode) -> Result<FreeVarReferencesVc> {
Ok(free_var_references!(
..defines().into_iter(),
..defines(mode).into_iter(),
Buffer = FreeVarReference::EcmaScriptModule {
request: "node:buffer".to_string(),
context: None,
@ -103,7 +105,7 @@ pub async fn next_client_free_vars() -> Result<FreeVarReferencesVc> {
}
#[turbo_tasks::function]
pub fn get_client_compile_time_info(browserslist_query: &str) -> CompileTimeInfoVc {
pub fn get_client_compile_time_info(mode: NextMode, browserslist_query: &str) -> CompileTimeInfoVc {
CompileTimeInfo::builder(EnvironmentVc::new(
Value::new(ExecutionEnvironment::Browser(
BrowserEnvironment {
@ -116,8 +118,8 @@ pub fn get_client_compile_time_info(browserslist_query: &str) -> CompileTimeInfo
)),
Value::new(EnvironmentIntention::Client),
))
.defines(next_client_defines())
.free_var_references(next_client_free_vars())
.defines(next_client_defines(mode))
.free_var_references(next_client_free_vars(mode))
.cell()
}
@ -134,6 +136,7 @@ pub enum ClientContextType {
pub async fn get_client_resolve_options_context(
project_path: FileSystemPathVc,
ty: Value<ClientContextType>,
mode: NextMode,
next_config: NextConfigVc,
execution_context: ExecutionContextVc,
) -> Result<ResolveOptionsContextVc> {
@ -143,7 +146,7 @@ pub async fn get_client_resolve_options_context(
let next_client_resolved_map = get_next_client_resolved_map(project_path, project_path);
let module_options_context = ResolveOptionsContext {
enable_node_modules: Some(project_path.root().resolve().await?),
custom_conditions: vec!["development".to_string()],
custom_conditions: vec![mode.node_env().to_string()],
import_map: Some(next_client_import_map),
fallback_import_map: Some(next_client_fallback_import_map),
resolved_map: Some(next_client_resolved_map),
@ -170,11 +173,12 @@ pub async fn get_client_module_options_context(
execution_context: ExecutionContextVc,
env: EnvironmentVc,
ty: Value<ClientContextType>,
mode: NextMode,
next_config: NextConfigVc,
) -> Result<ModuleOptionsContextVc> {
let custom_rules = get_next_client_transforms_rules(next_config, ty.into_value()).await?;
let resolve_options_context =
get_client_resolve_options_context(project_path, ty, next_config, execution_context);
get_client_resolve_options_context(project_path, ty, mode, next_config, execution_context);
let tsconfig = get_typescript_transform_options(project_path);
let decorators_options = get_decorators_transform_options(project_path);
@ -189,7 +193,7 @@ pub async fn get_client_module_options_context(
None
};
let jsx_runtime_options =
get_jsx_transform_options(project_path, Some(resolve_options_context));
get_jsx_transform_options(project_path, mode, Some(resolve_options_context));
let enable_webpack_loaders = {
let options = &*next_config.webpack_loaders_options().await?;
let loaders_options = WebpackLoadersOptions {
@ -285,15 +289,17 @@ pub fn get_client_asset_context(
execution_context: ExecutionContextVc,
compile_time_info: CompileTimeInfoVc,
ty: Value<ClientContextType>,
mode: NextMode,
next_config: NextConfigVc,
) -> AssetContextVc {
let resolve_options_context =
get_client_resolve_options_context(project_path, ty, next_config, execution_context);
get_client_resolve_options_context(project_path, ty, mode, next_config, execution_context);
let module_options_context = get_client_module_options_context(
project_path,
execution_context,
compile_time_info.environment(),
ty,
mode,
next_config,
);
@ -349,16 +355,10 @@ pub async fn get_client_runtime_entries(
project_root: FileSystemPathVc,
env: ProcessEnvVc,
ty: Value<ClientContextType>,
mode: NextMode,
next_config: NextConfigVc,
execution_context: ExecutionContextVc,
) -> Result<RuntimeEntriesVc> {
let resolve_options_context =
get_client_resolve_options_context(project_root, ty, next_config, execution_context);
let enable_react_refresh =
assert_can_resolve_react_refresh(project_root, resolve_options_context)
.await?
.as_request();
let mut runtime_entries = vec![];
if matches!(
@ -373,12 +373,39 @@ pub async fn get_client_runtime_entries(
);
}
// It's important that React Refresh come before the regular bootstrap file,
// because the bootstrap contains JSX which requires Refresh's global
// functions to be available.
if let Some(request) = enable_react_refresh {
runtime_entries.push(RuntimeEntry::Request(request, project_root.join("_")).cell())
};
match mode {
NextMode::Development => {
let resolve_options_context = get_client_resolve_options_context(
project_root,
ty,
mode,
next_config,
execution_context,
);
let enable_react_refresh =
assert_can_resolve_react_refresh(project_root, resolve_options_context)
.await?
.as_request();
// It's important that React Refresh come before the regular bootstrap file,
// because the bootstrap contains JSX which requires Refresh's global
// functions to be available.
if let Some(request) = enable_react_refresh {
runtime_entries.push(RuntimeEntry::Request(request, project_root.join("_")).cell())
};
}
NextMode::Build => {
runtime_entries.push(
RuntimeEntry::Request(
RequestVc::parse(Value::new(Pattern::Constant(
"./build/client/bootstrap.ts".to_string(),
))),
next_js_fs().root().join("_"),
)
.cell(),
);
}
}
Ok(RuntimeEntriesVc::cell(runtime_entries))
}

View file

@ -83,6 +83,9 @@ impl Transition for NextClientTransition {
use_define_for_class_fields: false,
},
EcmascriptInputTransform::React {
// The Next Client transition is currently only used from the App and Page
// sources, which are only used in the development mode.
development: true,
refresh: false,
import_source: OptionStringVc::cell(None),
runtime: OptionStringVc::cell(None),

View file

@ -17,6 +17,7 @@ use turbopack_binding::{
use super::with_chunks::WithChunksAsset;
use crate::{
mode::NextMode,
next_client::context::{
get_client_chunking_context, get_client_module_options_context,
get_client_resolve_options_context, ClientContextType,
@ -40,6 +41,7 @@ impl NextClientChunksTransitionVc {
project_path: FileSystemPathVc,
execution_context: ExecutionContextVc,
ty: Value<ClientContextType>,
mode: NextMode,
server_root: FileSystemPathVc,
client_compile_time_info: CompileTimeInfoVc,
next_config: NextConfigVc,
@ -56,6 +58,7 @@ impl NextClientChunksTransitionVc {
execution_context,
client_compile_time_info.environment(),
ty,
mode,
next_config,
);
NextClientChunksTransition {
@ -64,6 +67,7 @@ impl NextClientChunksTransitionVc {
client_resolve_options_context: get_client_resolve_options_context(
project_path,
ty,
mode,
next_config,
execution_context,
),

View file

@ -60,6 +60,9 @@ impl Transition for NextServerToClientTransition {
use_define_for_class_fields: false,
},
EcmascriptInputTransform::React {
// The server-to-client transition is currently only used from the App source,
// which are only used in the development mode.
development: true,
refresh: false,
import_source: OptionStringVc::cell(None),
runtime: OptionStringVc::cell(None),

View file

@ -611,7 +611,7 @@ pub async fn load_next_config_internal(
import_map.insert_exact_alias("styled-jsx", ImportMapping::External(None).into());
import_map.insert_wildcard_alias("styled-jsx/", ImportMapping::External(None).into());
let context = node_evaluate_asset_context(project_path, Some(import_map.cell()), None);
let context = node_evaluate_asset_context(execution_context, Some(import_map.cell()), None);
let config_asset = config_file.map(SourceAssetVc::new);
let config_changed = config_asset.map_or_else(CompletionVc::immutable, |config_asset| {

View file

@ -38,12 +38,12 @@ fn defines() -> CompileTimeDefines {
}
#[turbo_tasks::function]
pub fn next_edge_defines() -> CompileTimeDefinesVc {
fn next_edge_defines() -> CompileTimeDefinesVc {
defines().cell()
}
#[turbo_tasks::function]
pub fn next_edge_free_vars(project_path: FileSystemPathVc) -> FreeVarReferencesVc {
fn next_edge_free_vars(project_path: FileSystemPathVc) -> FreeVarReferencesVc {
free_var_references!(
..defines().into_iter(),
Buffer = FreeVarReference::EcmaScriptModule {

View file

@ -438,7 +438,7 @@ async fn get_mock_stylesheet(
project_path,
chunking_context,
} = *execution_context.await?;
let context = node_evaluate_asset_context(project_path, None, None);
let context = node_evaluate_asset_context(execution_context, None, None);
let loader_path = mock_fs.root().join("loader.js");
let mocked_response_asset = EcmascriptModuleAssetVc::new(
VirtualAssetVc::new(

View file

@ -40,6 +40,7 @@ use super::{
use crate::{
babel::maybe_add_babel_loader,
embed_js::next_js_fs,
mode::NextMode,
next_build::{get_external_next_compiled_package_mapping, get_postcss_package_mapping},
next_config::NextConfigVc,
next_import_map::{get_next_server_import_map, mdx_import_source_file},
@ -74,6 +75,7 @@ pub enum ServerContextType {
pub async fn get_server_resolve_options_context(
project_path: FileSystemPathVc,
ty: Value<ServerContextType>,
mode: NextMode,
next_config: NextConfigVc,
execution_context: ExecutionContextVc,
) -> Result<ResolveOptionsContextVc> {
@ -99,7 +101,7 @@ pub async fn get_server_resolve_options_context(
enable_node_externals: true,
enable_node_native_modules: true,
module: true,
custom_conditions: vec!["development".to_string()],
custom_conditions: vec![mode.node_env().to_string()],
import_map: Some(next_server_import_map),
plugins: vec![
external_cjs_modules_plugin.into(),
@ -123,7 +125,7 @@ pub async fn get_server_resolve_options_context(
enable_node_externals: true,
enable_node_native_modules: true,
module: true,
custom_conditions: vec!["development".to_string()],
custom_conditions: vec![mode.node_env().to_string()],
import_map: Some(next_server_import_map),
plugins: vec![
server_component_externals_plugin.into(),
@ -147,7 +149,7 @@ pub async fn get_server_resolve_options_context(
enable_node_externals: true,
enable_node_native_modules: true,
module: true,
custom_conditions: vec!["development".to_string(), "react-server".to_string()],
custom_conditions: vec![mode.node_env().to_string(), "react-server".to_string()],
import_map: Some(next_server_import_map),
plugins: vec![
server_component_externals_plugin.into(),
@ -169,7 +171,7 @@ pub async fn get_server_resolve_options_context(
let resolve_options_context = ResolveOptionsContext {
enable_node_modules: Some(root_dir),
module: true,
custom_conditions: vec!["development".to_string()],
custom_conditions: vec![mode.node_env().to_string()],
import_map: Some(next_server_import_map),
plugins: vec![
server_component_externals_plugin.into(),
@ -192,7 +194,7 @@ pub async fn get_server_resolve_options_context(
enable_node_modules: Some(root_dir),
enable_node_externals: true,
module: true,
custom_conditions: vec!["development".to_string()],
custom_conditions: vec![mode.node_env().to_string()],
plugins: vec![unsupported_modules_resolve_plugin.into()],
..Default::default()
};
@ -210,10 +212,10 @@ pub async fn get_server_resolve_options_context(
.cell())
}
fn defines() -> CompileTimeDefines {
fn defines(mode: NextMode) -> CompileTimeDefines {
compile_time_defines!(
process.turbopack = true,
process.env.NODE_ENV = "development",
process.env.NODE_ENV = mode.node_env(),
process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED = false,
process.env.NEXT_RUNTIME = "nodejs"
)
@ -222,18 +224,19 @@ fn defines() -> CompileTimeDefines {
}
#[turbo_tasks::function]
pub fn next_server_defines() -> CompileTimeDefinesVc {
defines().cell()
fn next_server_defines(mode: NextMode) -> CompileTimeDefinesVc {
defines(mode).cell()
}
#[turbo_tasks::function]
pub async fn next_server_free_vars() -> Result<FreeVarReferencesVc> {
Ok(free_var_references!(..defines().into_iter()).cell())
async fn next_server_free_vars(mode: NextMode) -> Result<FreeVarReferencesVc> {
Ok(free_var_references!(..defines(mode).into_iter()).cell())
}
#[turbo_tasks::function]
pub fn get_server_compile_time_info(
ty: Value<ServerContextType>,
mode: NextMode,
process_env: ProcessEnvVc,
server_addr: ServerAddrVc,
) -> CompileTimeInfoVc {
@ -251,8 +254,8 @@ pub fn get_server_compile_time_info(
ServerContextType::Middleware => Value::new(EnvironmentIntention::Middleware),
},
))
.defines(next_server_defines())
.free_var_references(next_server_free_vars())
.defines(next_server_defines(mode))
.free_var_references(next_server_free_vars(mode))
.cell()
}
@ -261,6 +264,7 @@ pub async fn get_server_module_options_context(
project_path: FileSystemPathVc,
execution_context: ExecutionContextVc,
ty: Value<ServerContextType>,
mode: NextMode,
next_config: NextConfigVc,
) -> Result<ModuleOptionsContextVc> {
let custom_rules = get_next_server_transforms_rules(next_config, ty.into_value()).await?;
@ -314,7 +318,7 @@ pub async fn get_server_module_options_context(
} else {
None
};
let jsx_runtime_options = get_jsx_transform_options(project_path, None);
let jsx_runtime_options = get_jsx_transform_options(project_path, mode, None);
let source_transforms: Vec<TransformPluginVc> = vec![
*get_relay_transform_plugin(next_config).await?,

View file

@ -52,6 +52,7 @@ use crate::{
embed_js::next_asset,
env::env_for_js,
fallback::get_fallback_page,
mode::NextMode,
next_client::{
context::{
get_client_assets_path, get_client_chunking_context, get_client_compile_time_info,
@ -105,20 +106,27 @@ pub async fn create_page_source(
(project_root.join("pages"), None)
};
let mode = NextMode::Development;
let client_ty = Value::new(ClientContextType::Pages { pages_dir });
let server_ty = Value::new(ServerContextType::Pages { pages_dir });
let server_data_ty = Value::new(ServerContextType::PagesData { pages_dir });
let client_compile_time_info = get_client_compile_time_info(browserslist_query);
let client_compile_time_info = get_client_compile_time_info(mode, browserslist_query);
let client_module_options_context = get_client_module_options_context(
project_root,
execution_context,
client_compile_time_info.environment(),
client_ty,
mode,
next_config,
);
let client_resolve_options_context =
get_client_resolve_options_context(project_root, client_ty, next_config, execution_context);
let client_resolve_options_context = get_client_resolve_options_context(
project_root,
client_ty,
mode,
next_config,
execution_context,
);
let client_chunking_context = get_client_chunking_context(
project_root,
@ -127,8 +135,14 @@ pub async fn create_page_source(
client_ty,
);
let client_runtime_entries =
get_client_runtime_entries(project_root, env, client_ty, next_config, execution_context);
let client_runtime_entries = get_client_runtime_entries(
project_root,
env,
client_ty,
mode,
next_config,
execution_context,
);
let next_client_transition = NextClientTransition {
is_app: false,
@ -175,17 +189,28 @@ pub async fn create_page_source(
.cell()
.into();
let server_compile_time_info = get_server_compile_time_info(server_ty, env, server_addr);
let server_resolve_options_context =
get_server_resolve_options_context(project_root, server_ty, next_config, execution_context);
let server_compile_time_info = get_server_compile_time_info(server_ty, mode, env, server_addr);
let server_resolve_options_context = get_server_resolve_options_context(
project_root,
server_ty,
mode,
next_config,
execution_context,
);
let server_module_options_context =
get_server_module_options_context(project_root, execution_context, server_ty, next_config);
let server_module_options_context = get_server_module_options_context(
project_root,
execution_context,
server_ty,
mode,
next_config,
);
let server_data_module_options_context = get_server_module_options_context(
project_root,
execution_context,
server_data_ty,
mode,
next_config,
);
@ -199,6 +224,7 @@ pub async fn create_page_source(
project_root,
execution_context,
client_ty,
mode,
client_root,
client_compile_time_info,
next_config,
@ -824,6 +850,8 @@ impl SsrEntryVc {
use_define_for_class_fields: false,
},
EcmascriptInputTransform::React {
// The Page source is currently only used in the development mode.
development: true,
refresh: false,
import_source: OptionStringVc::cell(None),
runtime: OptionStringVc::cell(None),

View file

@ -47,6 +47,7 @@ use turbopack_binding::{
use crate::{
asset_helpers::as_es_module_asset,
embed_js::next_asset,
mode::NextMode,
next_config::NextConfigVc,
next_edge::{
context::{get_edge_compile_time_info, get_edge_resolve_options_context},
@ -277,6 +278,7 @@ fn edge_transition_map(
project_path,
execution_context,
Value::new(ServerContextType::Middleware),
NextMode::Development,
next_config,
);
@ -353,7 +355,7 @@ async fn route_internal(
} = *execution_context.await?;
let context = node_evaluate_asset_context(
project_path,
execution_context,
Some(get_next_build_import_map()),
Some(edge_transition_map(
server_addr,

View file

@ -19,6 +19,8 @@ use turbopack_binding::{
},
};
use crate::mode::NextMode;
async fn get_typescript_options(
project_path: FileSystemPathVc,
) -> Option<Vec<(FileJsonContentVc, AssetVc)>> {
@ -123,6 +125,7 @@ pub async fn get_decorators_transform_options(
#[turbo_tasks::function]
pub async fn get_jsx_transform_options(
project_path: FileSystemPathVc,
mode: NextMode,
resolve_options_context: Option<ResolveOptionsContextVc>,
) -> Result<JsxTransformOptionsVc> {
let tsconfig = get_typescript_options(project_path).await;
@ -140,6 +143,7 @@ pub async fn get_jsx_transform_options(
// jsconfig, it forces overrides into automatic runtime instead.
// [TODO]: we need to emit / validate config message like next.js devserver does
let react_transform_options = JsxTransformOptions {
development: mode.is_react_development(),
import_source: None,
runtime: Some("automatic".to_string()),
react_refresh: enable_react_refresh,

View file

@ -32,6 +32,7 @@ use turbopack_binding::{
use crate::{
embed_js::next_js_file_path,
mode::NextMode,
next_client::{
context::{
get_client_asset_context, get_client_chunking_context,
@ -50,12 +51,12 @@ fn defines() -> CompileTimeDefines {
}
#[turbo_tasks::function]
pub fn web_defines() -> CompileTimeDefinesVc {
fn web_defines() -> CompileTimeDefinesVc {
defines().cell()
}
#[turbo_tasks::function]
pub async fn web_free_vars() -> Result<FreeVarReferencesVc> {
async fn web_free_vars() -> Result<FreeVarReferencesVc> {
Ok(free_var_references!(..defines().into_iter()).cell())
}
@ -79,24 +80,22 @@ pub fn get_compile_time_info(browserslist_query: &str) -> CompileTimeInfoVc {
}
#[turbo_tasks::function]
pub async fn get_web_runtime_entries(
async fn get_web_runtime_entries(
project_root: FileSystemPathVc,
ty: Value<ClientContextType>,
mode: NextMode,
next_config: NextConfigVc,
execution_context: ExecutionContextVc,
) -> Result<RuntimeEntriesVc> {
let resolve_options_context = get_client_resolve_options_context(
project_root,
Value::new(ClientContextType::Other),
next_config,
execution_context,
);
let mut runtime_entries = vec![];
let resolve_options_context =
get_client_resolve_options_context(project_root, ty, mode, next_config, execution_context);
let enable_react_refresh =
assert_can_resolve_react_refresh(project_root, resolve_options_context)
.await?
.as_request();
let mut runtime_entries = Vec::new();
// It's important that React Refresh come before the regular bootstrap file,
// because the bootstrap contains JSX which requires Refresh's global
// functions to be available.
@ -114,34 +113,36 @@ pub async fn get_web_runtime_entries(
#[turbo_tasks::function]
pub async fn create_web_entry_source(
project_path: FileSystemPathVc,
project_root: FileSystemPathVc,
execution_context: ExecutionContextVc,
entry_requests: Vec<RequestVc>,
server_root: FileSystemPathVc,
client_root: FileSystemPathVc,
eager_compile: bool,
browserslist_query: &str,
next_config: NextConfigVc,
) -> Result<ContentSourceVc> {
let ty = Value::new(ClientContextType::Other);
let mode = NextMode::Development;
let compile_time_info = get_compile_time_info(browserslist_query);
let context = get_client_asset_context(
project_path,
project_root,
execution_context,
compile_time_info,
ty,
mode,
next_config,
);
let chunking_context = get_client_chunking_context(
project_path,
server_root,
project_root,
client_root,
compile_time_info.environment(),
ty,
);
let entries = get_web_runtime_entries(project_path, next_config, execution_context);
let entries = get_web_runtime_entries(project_root, ty, mode, next_config, execution_context);
let runtime_entries = entries.resolve_entries(context);
let origin = PlainResolveOriginVc::new(context, project_path.join("_")).as_resolve_origin();
let origin = PlainResolveOriginVc::new(context, project_root.join("_")).as_resolve_origin();
let entries = entry_requests
.into_iter()
.map(|request| async move {
@ -181,12 +182,12 @@ pub async fn create_web_entry_source(
.try_join()
.await?;
let entry_asset = DevHtmlAssetVc::new(server_root.join("index.html"), entries).into();
let entry_asset = DevHtmlAssetVc::new(client_root.join("index.html"), entries).into();
let graph = if eager_compile {
AssetGraphContentSourceVc::new_eager(server_root, entry_asset)
AssetGraphContentSourceVc::new_eager(client_root, entry_asset)
} else {
AssetGraphContentSourceVc::new_lazy(server_root, entry_asset)
AssetGraphContentSourceVc::new_lazy(client_root, entry_asset)
}
.into();
Ok(graph)

View file

@ -1014,8 +1014,8 @@ importers:
'@types/react': 18.2.5
'@types/react-dom': 18.2.3
'@vercel/ncc': ^0.36.0
'@vercel/turbopack-dev': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1
'@vercel/turbopack-node': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230516.1
'@vercel/turbopack-dev': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2
'@vercel/turbopack-node': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2
anser: ^2.1.1
css.escape: ^1.5.1
find-up: ^6.3.0
@ -1027,8 +1027,8 @@ importers:
stacktrace-parser: ^0.1.10
strip-ansi: ^7.0.1
dependencies:
'@vercel/turbopack-dev': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1_react-refresh@0.12.0'
'@vercel/turbopack-node': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230516.1'
'@vercel/turbopack-dev': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2_react-refresh@0.12.0'
'@vercel/turbopack-node': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2'
anser: 2.1.1
css.escape: 1.5.1
next: link:../../../../next
@ -5998,7 +5998,7 @@ packages:
dependencies:
'@mdx-js/mdx': 2.2.1
source-map: 0.7.3
webpack: 5.74.0
webpack: 5.74.0_@swc+core@1.3.55
transitivePeerDependencies:
- supports-color
@ -6668,7 +6668,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-darwin-x64/1.3.55:
@ -6677,7 +6676,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf/1.3.55:
@ -6686,7 +6684,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-gnu/1.3.55:
@ -6695,7 +6692,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-musl/1.3.55:
@ -6704,7 +6700,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-gnu/1.3.55:
@ -6713,7 +6708,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-musl/1.3.55:
@ -6722,7 +6716,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-arm64-msvc/1.3.55:
@ -6731,7 +6724,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-ia32-msvc/1.3.55:
@ -6740,7 +6732,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-x64-msvc/1.3.55:
@ -6749,7 +6740,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core/1.3.55_@swc+helpers@0.5.1:
@ -6774,7 +6764,6 @@ packages:
'@swc/core-win32-arm64-msvc': 1.3.55
'@swc/core-win32-ia32-msvc': 1.3.55
'@swc/core-win32-x64-msvc': 1.3.55
dev: true
/@swc/helpers/0.4.14:
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
@ -23777,7 +23766,6 @@ packages:
source-map: 0.6.1
terser: 5.14.1
webpack: 5.74.0_@swc+core@1.3.55
dev: true
/terser-webpack-plugin/5.2.4_webpack@5.74.0:
resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==}
@ -25183,7 +25171,6 @@ packages:
- '@swc/core'
- esbuild
- uglify-js
dev: true
/websocket-driver/0.7.3:
resolution: {integrity: sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==}
@ -25589,9 +25576,9 @@ packages:
/zwitch/2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1_react-refresh@0.12.0':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1}
id: '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230516.1'
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2_react-refresh@0.12.0':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2}
id: '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230517.2'
name: '@vercel/turbopack-dev'
version: 0.0.0
dependencies:
@ -25601,8 +25588,8 @@ packages:
- webpack
dev: false
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230516.1':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230516.1}
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2}
name: '@vercel/turbopack-node'
version: 0.0.0
dependencies: