Skip to content

Commit bfda754

Browse files
committed
fix(middleware): set success to false for navigation events
1 parent e0fffc3 commit bfda754

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

packages/next-safe-action/src/__tests__/middleware.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,11 +342,11 @@ test("framework error result from middleware is correct", async () => {
342342
});
343343

344344
const expectedResult = {
345-
success: true,
345+
success: false,
346346
ctx: {
347347
foo: "bar",
348348
},
349-
data: undefined,
349+
navigationKind: "redirect",
350350
parsedInput: {
351351
username: "johndoe",
352352
},

packages/next-safe-action/src/action-builder.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,15 @@ export function actionBuilder<
120120
await executeMiddlewareStack(idx + 1);
121121
return middlewareResult;
122122
},
123-
}).catch((e) => frameworkErrorHandler.handleError(e));
123+
}).catch((e) => {
124+
frameworkErrorHandler.handleError(e);
125+
if (frameworkErrorHandler.error) {
126+
middlewareResult.success = false;
127+
middlewareResult.navigationKind = FrameworkErrorHandler.getNavigationKind(
128+
frameworkErrorHandler.error
129+
);
130+
}
131+
});
124132
// Action function.
125133
} else {
126134
// Validate the client inputs in parallel.
@@ -220,8 +228,16 @@ export function actionBuilder<
220228
}
221229
}
222230

223-
middlewareResult.success = true;
224-
middlewareResult.data = data;
231+
if (frameworkErrorHandler.error) {
232+
middlewareResult.success = false;
233+
middlewareResult.navigationKind = FrameworkErrorHandler.getNavigationKind(
234+
frameworkErrorHandler.error
235+
);
236+
} else {
237+
middlewareResult.success = true;
238+
middlewareResult.data = data;
239+
}
240+
225241
middlewareResult.parsedInput = parsedInputDatas.at(-1);
226242
middlewareResult.bindArgsParsedInputs = parsedInputDatas.slice(0, -1);
227243
}

packages/next-safe-action/src/index.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ export type MiddlewareResult<ServerError, NextCtx extends object> = SafeActionRe
131131
any,
132132
NextCtx
133133
> & {
134+
navigationKind?: NavigationKind;
134135
parsedInput?: unknown;
135136
bindArgsParsedInputs?: unknown[];
136137
ctx?: object;

0 commit comments

Comments
 (0)