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

View file

@ -42,11 +42,11 @@ swc_core = { version = "0.76.6" }
testing = { version = "0.33.10" } testing = { version = "0.33.10" }
# Turbo crates # 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.. # [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 # [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 # General Deps

View file

@ -10,8 +10,8 @@
"check": "tsc --noEmit" "check": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@vercel/turbopack-dev": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/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-230516.1", "@vercel/turbopack-node": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230517.2",
"anser": "^2.1.1", "anser": "^2.1.1",
"css.escape": "^1.5.1", "css.escape": "^1.5.1",
"next": "*", "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 = { window.next = {
version: version || '', version: version || '',
// @ts-expect-error
get router() { get router() {
return 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 { declare global {
type ChunkData = type ChunkData =
| string | string
@ -20,7 +23,9 @@ declare global {
)[] )[]
var next: { var next: {
version: string version: string
appDir: boolean appDir?: boolean
router?: Router
emitter?: MittEmitter<string>
} }
function __turbopack_load_page_chunks__( function __turbopack_load_page_chunks__(

View file

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

View file

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

View file

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

View file

@ -83,6 +83,9 @@ impl Transition for NextClientTransition {
use_define_for_class_fields: false, use_define_for_class_fields: false,
}, },
EcmascriptInputTransform::React { 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, refresh: false,
import_source: OptionStringVc::cell(None), import_source: OptionStringVc::cell(None),
runtime: OptionStringVc::cell(None), runtime: OptionStringVc::cell(None),

View file

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

View file

@ -60,6 +60,9 @@ impl Transition for NextServerToClientTransition {
use_define_for_class_fields: false, use_define_for_class_fields: false,
}, },
EcmascriptInputTransform::React { 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, refresh: false,
import_source: OptionStringVc::cell(None), import_source: OptionStringVc::cell(None),
runtime: 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_exact_alias("styled-jsx", ImportMapping::External(None).into());
import_map.insert_wildcard_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_asset = config_file.map(SourceAssetVc::new);
let config_changed = config_asset.map_or_else(CompletionVc::immutable, |config_asset| { let config_changed = config_asset.map_or_else(CompletionVc::immutable, |config_asset| {

View file

@ -38,12 +38,12 @@ fn defines() -> CompileTimeDefines {
} }
#[turbo_tasks::function] #[turbo_tasks::function]
pub fn next_edge_defines() -> CompileTimeDefinesVc { fn next_edge_defines() -> CompileTimeDefinesVc {
defines().cell() defines().cell()
} }
#[turbo_tasks::function] #[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!( free_var_references!(
..defines().into_iter(), ..defines().into_iter(),
Buffer = FreeVarReference::EcmaScriptModule { Buffer = FreeVarReference::EcmaScriptModule {

View file

@ -438,7 +438,7 @@ async fn get_mock_stylesheet(
project_path, project_path,
chunking_context, chunking_context,
} = *execution_context.await?; } = *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 loader_path = mock_fs.root().join("loader.js");
let mocked_response_asset = EcmascriptModuleAssetVc::new( let mocked_response_asset = EcmascriptModuleAssetVc::new(
VirtualAssetVc::new( VirtualAssetVc::new(

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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