diff --git a/packages/plugins/live-debugger/src/transform/index.test.ts b/packages/plugins/live-debugger/src/transform/index.test.ts
index 13bf98558..8466e5ada 100644
--- a/packages/plugins/live-debugger/src/transform/index.test.ts
+++ b/packages/plugins/live-debugger/src/transform/index.test.ts
@@ -358,6 +358,34 @@ describe('transformCode', () => {
expectedInstrumentedCount: 1,
expectedTotalFunctions: 2,
},
+ {
+ description: 'block-body arrow returning an expression-body arrow',
+ code: 'export const make = (cond) => { return () => cond ? a() : b(); };',
+ namedOnly: false,
+ expectedInstrumentedCount: 2,
+ expectedTotalFunctions: 2,
+ },
+ {
+ description: 'function declaration returning an expression-body arrow',
+ code: 'export function build(x) { const y = x + 1; return () => y > 0 ? pos(y) : neg(y); }',
+ namedOnly: false,
+ expectedInstrumentedCount: 2,
+ expectedTotalFunctions: 2,
+ },
+ {
+ description: 'block-body arrow returning an expression-body arrow with JSX mapping',
+ code: 'type Row = { id: string }; export const C = (rows: Row[]) => { const n = rows.length; return () => rows.map((r) =>
{n}); };',
+ namedOnly: false,
+ expectedInstrumentedCount: 3,
+ expectedTotalFunctions: 3,
+ },
+ {
+ description: 'block-body arrow returning a block-body arrow',
+ code: 'export const make = (cond) => { return () => { return cond ? a() : b(); }; };',
+ namedOnly: false,
+ expectedInstrumentedCount: 2,
+ expectedTotalFunctions: 2,
+ },
];
test.each(nestedSyntaxCases)(
@@ -375,6 +403,7 @@ describe('transformCode', () => {
expect(result.instrumentedCount).toBe(expectedInstrumentedCount);
expect(result.totalFunctions).toBe(expectedTotalFunctions);
expect(probeMatches?.length).toBe(expectedInstrumentedCount);
+ expect(result.code).toContain('$dd_return');
expect(result.code).toContain('catch(e)');
},
);
diff --git a/packages/plugins/live-debugger/src/transform/index.ts b/packages/plugins/live-debugger/src/transform/index.ts
index 42d540728..df69f69ee 100644
--- a/packages/plugins/live-debugger/src/transform/index.ts
+++ b/packages/plugins/live-debugger/src/transform/index.ts
@@ -419,9 +419,8 @@ export function transformCode(options: TransformOptions): TransformResult {
superCallRangesHandledByExpressionBodies,
);
- // Process inner (deeper) functions before outer ones so that MagicString
- // appendLeft calls at shared positions (e.g. where an outer return wraps
- // an inner arrow function) stack in the correct order.
+ // Process inner (deeper) functions before outer ones so same-side
+ // MagicString insertions at shared positions stack in the correct order.
for (let i = targets.length - 1; i >= 0; i--) {
injectInstrumentation(s, code, targets[i]);
}
@@ -566,7 +565,7 @@ function injectInstrumentation(s: MagicStringType, code: string, target: Functio
const assignmentSuffix = ret.hasSequenceExpressionArgument ? ')' : '';
s.appendLeft(ret.argStart, assignmentPrefix);
- s.appendLeft(
+ s.appendRight(
ret.argEnd,
`${assignmentSuffix}, ${probeVarName} ? $dd_return(${probeVarName}, ${rvVarName}, ${receiverArg}${returnCaptureArgs}) : ${rvVarName})`,
);