Skip to content

Commit 76c535b

Browse files
committed
Handle NodeJS stacktraces
1 parent 439a96d commit 76c535b

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/commonMain/kotlin/spp.protocol/artifact/exception/LiveStackTrace.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,33 @@ class LiveStackTrace(
7777
private val pythonFrameRegex = Regex(
7878
" {2}File \"(.+)\", line ([0-9]+), in (.+)\\n {4}(.+)"
7979
)
80+
private val nodeFrameRegex = Regex(
81+
"at (.+) \\((.+):([0-9]+):([0-9]+)\\)"
82+
)
8083

8184
fun fromString(data: String): LiveStackTrace? {
8285
return when {
8386
frameRegex.containsMatchIn(data) -> extractJvmStackTrace(data)
8487
pythonFrameRegex.containsMatchIn(data) -> extractPythonStackTrace(data)
88+
nodeFrameRegex.containsMatchIn(data) -> extractNodeStackTrace(data)
8589
else -> null
8690
}
8791
}
8892

93+
private fun extractNodeStackTrace(data: String): LiveStackTrace {
94+
val elements = mutableListOf<LiveStackTraceElement>()
95+
for (el in nodeFrameRegex.findAll(data)) {
96+
val method = el.groupValues[1]
97+
98+
val file = el.groupValues[2]
99+
val line = el.groupValues[3].toInt()
100+
val column = el.groupValues[4].toInt()
101+
102+
elements.add(LiveStackTraceElement(method, "$file:$line"))
103+
}
104+
return LiveStackTrace("n/a", "n/a", elements)
105+
}
106+
89107
private fun extractPythonStackTrace(data: String): LiveStackTrace {
90108
val elements = mutableListOf<LiveStackTraceElement>()
91109
for (el in pythonFrameRegex.findAll(data).toList().reversed()) {

0 commit comments

Comments
 (0)