Skip to content

Commit e79fcc8

Browse files
authored
♻️ Tighten debugger capture return types (#4755)
1 parent 39882c8 commit e79fcc8

3 files changed

Lines changed: 55 additions & 24 deletions

File tree

packages/browser-debugger/src/domain/activeEntries.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,42 @@ import type { StackFrame } from './stacktrace'
22
import type { EvaluationError } from './condition'
33
import type { Throwable } from './error'
44

5+
type CapturedFields = Record<string, any>
6+
7+
interface ActiveEntryThrowable {
8+
throwable?: Throwable
9+
}
10+
11+
type ActiveEntryEntry =
12+
| { arguments: CapturedFields; captureExpressions?: never }
13+
| { arguments?: never; captureExpressions: CapturedFields }
14+
15+
type ActiveEntryReturn =
16+
| (ActiveEntryThrowable & {
17+
arguments: CapturedFields
18+
locals?: CapturedFields
19+
captureExpressions?: never
20+
})
21+
| (ActiveEntryThrowable & {
22+
arguments?: never
23+
locals?: never
24+
captureExpressions: CapturedFields
25+
})
26+
| (ActiveEntryThrowable & {
27+
arguments?: never
28+
locals?: never
29+
captureExpressions?: never
30+
throwable: NonNullable<ActiveEntryThrowable['throwable']>
31+
})
32+
533
export interface ActiveEntry {
634
start: number
735
timestamp?: number
836
message?: string
937
evaluationErrors?: EvaluationError[]
10-
entry?: { arguments: Record<string, any> } | { captureExpressions: Record<string, any> }
38+
entry?: ActiveEntryEntry
1139
stack?: StackFrame[]
1240
duration?: number
13-
return?: {
14-
arguments?: Record<string, any>
15-
locals?: Record<string, any>
16-
captureExpressions?: Record<string, any>
17-
throwable?: Throwable
18-
}
41+
return?: ActiveEntryReturn
1942
exception?: unknown
2043
}

packages/browser-debugger/src/domain/api.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,6 @@ describe('api', () => {
747747
expect(snapshot.captures).toEqual({
748748
entry: undefined,
749749
return: {
750-
arguments: undefined,
751750
captureExpressions: {
752751
exceptionMessage: { type: 'string', value: 'Test error' },
753752
},

packages/browser-debugger/src/domain/api.ts

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Batch, Context } from '@datadog/browser-core'
1+
import type { Batch, Context, ContextValue } from '@datadog/browser-core'
22
import { timeStampNow } from '@datadog/js-core/time'
33
import { buildTag, generateUUID, globalObject, mergeArrays } from '@datadog/browser-core'
44
import type { BrowserWindow, DebuggerInitConfiguration } from '../entries/main'
@@ -205,8 +205,10 @@ export function onReturn(
205205
if (!probe.captureSnapshot) {
206206
const captureExpressionsResult = evaluateCaptureExpressions(probe, context, captureCtx)
207207
if (captureExpressionsResult) {
208-
result.return = {
209-
captureExpressions: captureExpressionsResult.values,
208+
if (captureExpressionsResult.values) {
209+
result.return = {
210+
captureExpressions: captureExpressionsResult.values,
211+
}
210212
}
211213
result.evaluationErrors = mergeArrays(result.evaluationErrors, captureExpressionsResult.evaluationErrors)
212214
if (captureCtx.timedOut) {
@@ -288,8 +290,10 @@ export function onThrow(probes: InitializedProbe[], error: unknown, self: any, a
288290
if (!probe.captureSnapshot) {
289291
const captureExpressionsResult = evaluateCaptureExpressions(probe, context, captureCtx)
290292
if (captureExpressionsResult) {
291-
result.return = {
292-
captureExpressions: captureExpressionsResult.values,
293+
if (captureExpressionsResult.values) {
294+
result.return = {
295+
captureExpressions: captureExpressionsResult.values,
296+
}
293297
}
294298
result.evaluationErrors = mergeArrays(result.evaluationErrors, captureExpressionsResult.evaluationErrors)
295299
if (captureCtx.timedOut) {
@@ -307,10 +311,13 @@ export function onThrow(probes: InitializedProbe[], error: unknown, self: any, a
307311
}
308312
}
309313

310-
result.return = {
311-
...result.return,
312-
arguments: throwArguments,
313-
throwable: formatThrowable(error),
314+
const throwable = formatThrowable(error)
315+
if (throwArguments) {
316+
result.return = { arguments: throwArguments, throwable }
317+
} else if (result.return?.captureExpressions) {
318+
result.return = { captureExpressions: result.return.captureExpressions, throwable }
319+
} else {
320+
result.return = { throwable }
314321
}
315322

316323
queueDebuggerSnapshot(probe, result)
@@ -330,6 +337,14 @@ function queueDebuggerSnapshot(probe: InitializedProbe, result: ActiveEntry): vo
330337
}
331338

332339
const version = globalObj.DD_DEBUGGER!.version
340+
const captures = (
341+
result.entry || result.return
342+
? {
343+
entry: result.entry,
344+
return: result.return,
345+
}
346+
: undefined
347+
) as ContextValue
333348

334349
const payload: Context = {
335350
message: result.message,
@@ -360,13 +375,7 @@ function queueDebuggerSnapshot(probe: InitializedProbe, result: ActiveEntry): vo
360375
stack: result.stack,
361376
language: 'javascript',
362377
duration: result.duration === undefined ? undefined : result.duration * 1e6, // to nanoseconds (might be undefined in case of eval errors)
363-
captures:
364-
result.entry || result.return
365-
? {
366-
entry: result.entry,
367-
return: result.return,
368-
}
369-
: undefined,
378+
captures,
370379
},
371380
},
372381
}

0 commit comments

Comments
 (0)