source map fixes (#61723)

### What?

* show guessed original file for generate code
* avoid internal cast
* add get_source_map method
* hide turbopack runtime stack lines
* hide unmapped stack lines


Closes PACK-2400

Before:


![image](https://github.com/vercel/next.js/assets/1365881/29f24f59-7c77-4496-92de-efcc72d28ad5)

After:


![image](https://github.com/vercel/next.js/assets/1365881/ca07e9f9-71ea-440d-97a2-c2c731ab3899)

and expanded:


![image](https://github.com/vercel/next.js/assets/1365881/1f73e632-890d-4681-8f21-ef502c676aae)

### Other Turbopack changes


* https://github.com/vercel/turbo/pull/4235 <!-- Leah -
chore(turborepo-lib): use compile error for feature validation -->
* https://github.com/vercel/turbo/pull/7285 <!-- Tobias Koppers -
resolve source maps that are attached in source code -->
* https://github.com/vercel/turbo/pull/7301 <!-- Donny/강동윤 -
fix(turbopack): Reverse order of css chunks to fix css module issues -->
* https://github.com/vercel/turbo/pull/7286 <!-- Tobias Koppers - guess
original source for generated code -->
This commit is contained in:
Tobias Koppers 2024-02-07 08:58:08 +01:00 committed by GitHub
parent b77373e283
commit 86c46edce7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 141 additions and 104 deletions

69
Cargo.lock generated
View file

@ -321,7 +321,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"serde", "serde",
"smallvec", "smallvec",
@ -3513,7 +3513,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"serde", "serde",
@ -7557,7 +7557,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@ -7589,7 +7589,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cargo-lock", "cargo-lock",
@ -7601,7 +7601,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
@ -7616,7 +7616,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dotenvs", "dotenvs",
@ -7630,7 +7630,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 1.9.3", "indexmap 1.9.3",
@ -7647,7 +7647,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"auto-hash-map", "auto-hash-map",
@ -7678,7 +7678,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"base16", "base16",
"hex", "hex",
@ -7690,7 +7690,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"convert_case 0.6.0", "convert_case 0.6.0",
@ -7704,7 +7704,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -7714,7 +7714,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"mimalloc", "mimalloc",
] ]
@ -7722,7 +7722,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"auto-hash-map", "auto-hash-map",
@ -7747,7 +7747,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-recursion", "async-recursion",
@ -7779,7 +7779,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"auto-hash-map", "auto-hash-map",
"mdxjs", "mdxjs",
@ -7820,7 +7820,7 @@ dependencies = [
[[package]] [[package]]
name = "turbopack-build" name = "turbopack-build"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 1.9.3", "indexmap 1.9.3",
@ -7845,7 +7845,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap 4.4.2", "clap 4.4.2",
@ -7863,7 +7863,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-recursion", "async-recursion",
@ -7876,6 +7876,7 @@ dependencies = [
"once_cell", "once_cell",
"patricia_tree", "patricia_tree",
"qstring", "qstring",
"ref-cast",
"regex", "regex",
"serde", "serde",
"serde_json", "serde_json",
@ -7893,7 +7894,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@ -7921,7 +7922,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 1.9.3", "indexmap 1.9.3",
@ -7946,7 +7947,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-compression", "async-compression",
@ -7983,7 +7984,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@ -8018,7 +8019,7 @@ dependencies = [
[[package]] [[package]]
name = "turbopack-ecmascript-hmr-protocol" name = "turbopack-ecmascript-hmr-protocol"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
@ -8029,7 +8030,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@ -8054,7 +8055,7 @@ dependencies = [
[[package]] [[package]]
name = "turbopack-ecmascript-runtime" name = "turbopack-ecmascript-runtime"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indoc", "indoc",
@ -8071,7 +8072,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 1.9.3", "indexmap 1.9.3",
@ -8087,7 +8088,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"base64 0.21.4", "base64 0.21.4",
@ -8107,7 +8108,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"serde", "serde",
@ -8122,7 +8123,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"mdxjs", "mdxjs",
@ -8137,7 +8138,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-stream", "async-stream",
@ -8172,7 +8173,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"serde", "serde",
@ -8188,7 +8189,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-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"swc_core", "swc_core",
"turbo-tasks", "turbo-tasks",
@ -8199,7 +8200,7 @@ dependencies = [
[[package]] [[package]]
name = "turbopack-trace-utils" name = "turbopack-trace-utils"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"crossbeam-channel", "crossbeam-channel",
@ -8215,7 +8216,7 @@ dependencies = [
[[package]] [[package]]
name = "turbopack-wasm" name = "turbopack-wasm"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240205.2#1796f1c950e4eef3cd6f73f93d72906d69f56617" source = "git+https://github.com/vercel/turbo.git?tag=turbopack-240207.1#ea7eea84c72222af8986dd0e802ffa5754b7e357"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 1.9.3", "indexmap 1.9.3",

View file

@ -37,11 +37,11 @@ swc_core = { version = "0.89.6", features = [
testing = { version = "0.35.16" } testing = { version = "0.35.16" }
# Turbo crates # Turbo crates
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240205.2" } turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240207.1" }
# [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-240205.2" } turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240207.1" }
# [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-240205.2" } turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240207.1" }
# General Deps # General Deps

View file

@ -30,14 +30,12 @@ use turbopack_binding::{
}, },
turbopack::{ turbopack::{
core::{ core::{
chunk::ModuleId,
diagnostics::PlainDiagnostic, diagnostics::PlainDiagnostic,
error::PrettyPrintError, error::PrettyPrintError,
issue::PlainIssue, issue::PlainIssue,
source_map::{GenerateSourceMap, Token}, source_map::Token,
version::{PartialUpdate, TotalUpdate, Update, VersionState}, version::{PartialUpdate, TotalUpdate, Update, VersionState},
}, },
dev::ecmascript::EcmascriptDevChunkContent,
ecmascript_hmr_protocol::{ClientUpdateInstruction, ResourceIdentifier}, ecmascript_hmr_protocol::{ClientUpdateInstruction, ResourceIdentifier},
trace_utils::{ trace_utils::{
exit::ExitGuard, exit::ExitGuard,
@ -791,12 +789,13 @@ pub fn project_update_info_subscribe(
#[derive(Debug)] #[derive(Debug)]
#[napi(object)] #[napi(object)]
pub struct StackFrame { pub struct StackFrame {
pub is_server: bool,
pub is_internal: Option<bool>,
pub file: String,
// 1-indexed, unlike source map tokens
pub line: Option<u32>,
// 1-indexed, unlike source map tokens // 1-indexed, unlike source map tokens
pub column: Option<u32>, pub column: Option<u32>,
// 1-indexed, unlike source map tokens
pub file: String,
pub is_server: bool,
pub line: u32,
pub method_name: Option<String>, pub method_name: Option<String>,
} }
@ -845,62 +844,57 @@ pub async fn project_trace_source(
.join(chunk_base.to_owned()) .join(chunk_base.to_owned())
}; };
let content_vc = project.container.get_versioned_content(path); let map = project
let map = match module { .container
Some(module) => { .get_source_map(path, module)
let Some(content) = .await?
Vc::try_resolve_downcast_type::<EcmascriptDevChunkContent>(content_vc) .context("chunk/module is missing a sourcemap")?;
.await?
else {
bail!("Was not EcmascriptDevChunkContent")
};
let entries = content.entries().await?; let Some(line) = frame.line else {
let entry = entries.get(&ModuleId::String(module).cell().await?); return Ok(None);
let map = match entry {
Some(entry) => *entry.code.generate_source_map().await?,
None => None,
};
map.context("Entry is missing sourcemap")?
}
None => {
let Some(versioned) =
Vc::try_resolve_sidecast::<Box<dyn GenerateSourceMap>>(content_vc).await?
else {
bail!("Could not GenerateSourceMap")
};
versioned
.generate_source_map()
.await?
.context("Chunk is missing a sourcemap")?
}
}; };
let token = map let token = map
.lookup_token( .lookup_token(
(frame.line as usize).saturating_sub(1), (line as usize).saturating_sub(1),
(frame.column.unwrap_or(1) as usize).saturating_sub(1), (frame.column.unwrap_or(1) as usize).saturating_sub(1),
) )
.await? .await?;
.clone_value()
.context("Unable to trace token from sourcemap")?;
let Token::Original(token) = token else { let (original_file, line, column, name) = match &*token {
return Ok(None); Token::Original(token) => (
&token.original_file,
// JS stack frames are 1-indexed, source map tokens are 0-indexed
Some(token.original_line as u32 + 1),
Some(token.original_column as u32 + 1),
token.name.clone(),
),
Token::Synthetic(token) => {
let Some(file) = &token.guessed_original_file else {
return Ok(None);
};
(file, None, None, None)
}
}; };
let Some(source_file) = token.original_file.strip_prefix("/turbopack/[project]/") let Some(source_file) = original_file.strip_prefix("/turbopack/") else {
else { bail!("Original file ({}) outside project", original_file)
bail!("Original file outside project")
}; };
let (source_file, is_internal) =
if let Some(source_file) = source_file.strip_prefix("[project]/") {
(source_file, false)
} else {
(source_file, true)
};
Ok(Some(StackFrame { Ok(Some(StackFrame {
file: source_file.to_string(), file: source_file.to_string(),
method_name: token.name, method_name: name,
line: token.original_line as u32 + 1, line,
column: Some(token.original_column as u32 + 1), column,
is_server: frame.is_server, is_server: frame.is_server,
is_internal: Some(is_internal),
})) }))
}) })
.await .await

View file

@ -44,6 +44,7 @@ use turbopack_binding::{
output::{OutputAsset, OutputAssets}, output::{OutputAsset, OutputAssets},
resolve::{find_context_file, FindContextFileResult}, resolve::{find_context_file, FindContextFileResult},
source::Source, source::Source,
source_map::OptionSourceMap,
version::{Update, Version, VersionState, VersionedContent}, version::{Update, Version, VersionState, VersionedContent},
PROJECT_FILESYSTEM_NAME, PROJECT_FILESYSTEM_NAME,
}, },
@ -271,6 +272,18 @@ impl ProjectContainer {
let this = self.await?; let this = self.await?;
Ok(this.versioned_content_map.get(file_path)) Ok(this.versioned_content_map.get(file_path))
} }
#[turbo_tasks::function]
pub async fn get_source_map(
self: Vc<Self>,
file_path: Vc<FileSystemPath>,
section: Option<String>,
) -> Result<Vc<OptionSourceMap>> {
let this = self.await?;
Ok(this
.versioned_content_map
.get_source_map(file_path, section))
}
} }
#[turbo_tasks::value] #[turbo_tasks::value]

View file

@ -12,6 +12,7 @@ use turbopack_binding::{
turbopack::core::{ turbopack::core::{
asset::Asset, asset::Asset,
output::{OutputAsset, OutputAssets}, output::{OutputAsset, OutputAssets},
source_map::{GenerateSourceMap, OptionSourceMap},
version::VersionedContent, version::VersionedContent,
}, },
}; };
@ -92,10 +93,35 @@ impl VersionedContentMap {
} }
#[turbo_tasks::function] #[turbo_tasks::function]
pub async fn get( pub fn get(self: Vc<Self>, path: Vc<FileSystemPath>) -> Vc<Box<dyn VersionedContent>> {
self.get_asset(path).versioned_content()
}
#[turbo_tasks::function]
pub async fn get_source_map(
self: Vc<Self>, self: Vc<Self>,
path: Vc<FileSystemPath>, path: Vc<FileSystemPath>,
) -> Result<Vc<Box<dyn VersionedContent>>> { section: Option<String>,
) -> Result<Vc<OptionSourceMap>> {
if let Some(generate_source_map) =
Vc::try_resolve_sidecast::<Box<dyn GenerateSourceMap>>(self.get_asset(path)).await?
{
Ok(if let Some(section) = section {
generate_source_map.by_section(section)
} else {
generate_source_map.generate_source_map()
})
} else {
let path = path.to_string().await?;
bail!("no source map for path {}", path);
}
}
#[turbo_tasks::function]
pub async fn get_asset(
self: Vc<Self>,
path: Vc<FileSystemPath>,
) -> Result<Vc<Box<dyn OutputAsset>>> {
let result = self.raw_get(path).await?; let result = self.raw_get(path).await?;
if let Some(MapEntry { if let Some(MapEntry {
assets_operation, assets_operation,
@ -106,15 +132,14 @@ impl VersionedContentMap {
Vc::connect(assets_operation); Vc::connect(assets_operation);
Vc::connect(emit_operation); Vc::connect(emit_operation);
for asset in assets_operation.await?.iter() { for &asset in assets_operation.await?.iter() {
if asset.ident().path().resolve().await? == path { if asset.ident().path().resolve().await? == path {
let content = asset.versioned_content(); return Ok(asset);
return Ok(content);
} }
} }
} }
let path = path.to_string().await?; let path = path.to_string().await?;
bail!("could not find versioned content for path {}", path); bail!("could not find asset for path {}", path);
} }
#[turbo_tasks::function] #[turbo_tasks::function]

View file

@ -196,7 +196,7 @@
"@types/ws": "8.2.0", "@types/ws": "8.2.0",
"@vercel/ncc": "0.34.0", "@vercel/ncc": "0.34.0",
"@vercel/nft": "0.26.3", "@vercel/nft": "0.26.3",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2", "@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1",
"acorn": "8.5.0", "acorn": "8.5.0",
"amphtml-validator": "1.0.35", "amphtml-validator": "1.0.35",
"anser": "1.4.9", "anser": "1.4.9",

View file

@ -71,7 +71,8 @@ function getOriginalStackFrame(
expanded: !Boolean( expanded: !Boolean(
/* collapsed */ /* collapsed */
(source.file?.includes('node_modules') || (source.file?.includes('node_modules') ||
body.originalStackFrame?.file?.includes('node_modules')) ?? body.originalStackFrame?.file?.includes('node_modules') ||
body.originalStackFrame?.file?.startsWith('[turbopack]/')) ??
true true
), ),
sourceStackFrame: source, sourceStackFrame: source,

View file

@ -21,8 +21,9 @@ interface TurbopackStackFrame {
// 1-based // 1-based
file: string file: string
isServer: boolean isServer: boolean
line: number line: number | null
methodName: string | null methodName: string | null
isInternal?: boolean
} }
const currentSourcesByFile: Map<string, Promise<string | null>> = new Map() const currentSourcesByFile: Map<string, Promise<string | null>> = new Map()
@ -43,7 +44,7 @@ async function batchedTraceSource(
let source let source
// Don't show code frames for node_modules. These can also often be large bundled files. // Don't show code frames for node_modules. These can also often be large bundled files.
if (!sourceFrame.file.includes('node_modules')) { if (!sourceFrame.file.includes('node_modules') && !sourceFrame.isInternal) {
let sourcePromise = currentSourcesByFile.get(sourceFrame.file) let sourcePromise = currentSourcesByFile.get(sourceFrame.file)
if (!sourcePromise) { if (!sourcePromise) {
sourcePromise = project.getSourceForAsset(sourceFrame.file) sourcePromise = project.getSourceForAsset(sourceFrame.file)
@ -82,14 +83,16 @@ export async function createOriginalStackFrame(
return { return {
originalStackFrame: traced.frame, originalStackFrame: traced.frame,
originalCodeFrame: originalCodeFrame:
traced.source === null || traced.frame.file.includes('node_modules') traced.source === null
? null ? null
: codeFrameColumns( : codeFrameColumns(
traced.source, traced.source,
{ {
start: { start: {
line: traced.frame.lineNumber, // 1-based, but -1 means start line without highlighting
column: traced.frame.column ?? 1, line: traced.frame.lineNumber ?? -1,
// 1-based, but 0 means whole line without column highlighting
column: traced.frame.column ?? 0,
}, },
}, },
{ forceColor: true } { forceColor: true }
@ -159,7 +162,7 @@ export function getOverlayMiddleware(project: Project) {
} }
try { try {
launchEditor(filePath, frame.line, frame.column ?? 1) launchEditor(filePath, frame.line ?? 1, frame.column ?? 1)
} catch (err) { } catch (err) {
console.log('Failed to launch editor:', err) console.log('Failed to launch editor:', err)
res.statusCode = 500 res.statusCode = 500

View file

@ -1078,8 +1078,8 @@ importers:
specifier: 0.26.3 specifier: 0.26.3
version: 0.26.3 version: 0.26.3
'@vercel/turbopack-ecmascript-runtime': '@vercel/turbopack-ecmascript-runtime':
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2 specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2(react-refresh@0.12.0)(webpack@5.90.0)' version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1(react-refresh@0.12.0)(webpack@5.90.0)'
acorn: acorn:
specifier: 8.5.0 specifier: 8.5.0
version: 8.5.0 version: 8.5.0
@ -25871,9 +25871,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-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2(react-refresh@0.12.0)(webpack@5.90.0)': '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1(react-refresh@0.12.0)(webpack@5.90.0)':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2} resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240205.2' id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240207.1'
name: '@vercel/turbopack-ecmascript-runtime' name: '@vercel/turbopack-ecmascript-runtime'
version: 0.0.0 version: 0.0.0
dependencies: dependencies: