From 6477f446d1f4cde5ef8d0ca65d2a1d84d24346c0 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Fri, 10 Apr 2026 11:34:22 +0100 Subject: [PATCH] Update API routes function --- dist/functions/server/handle-routes.js | 19 +++++++++----- dist/types/index.d.ts | 12 +++++---- package.json | 2 +- src/functions/server/handle-routes.ts | 34 ++++++++++++++++++-------- src/types/index.ts | 17 ++++++++----- 5 files changed, 56 insertions(+), 28 deletions(-) diff --git a/dist/functions/server/handle-routes.js b/dist/functions/server/handle-routes.js index 55de3ac..7f66133 100644 --- a/dist/functions/server/handle-routes.js +++ b/dist/functions/server/handle-routes.js @@ -28,8 +28,8 @@ export default async function ({ req }) { const contentLength = req.headers.get("content-length"); if (contentLength) { const size = parseInt(contentLength, 10); - if ((config?.maxRequestBodyMB && - size > config.maxRequestBodyMB * MBInBytes) || + if ((config?.max_request_body_mb && + size > config.max_request_body_mb * MBInBytes) || size > ServerDefaultRequestBodyLimitBytes) { return Response.json({ success: false, @@ -42,11 +42,18 @@ export default async function ({ req }) { }); } } - const res = await module["default"]({ + const target_module = (module["default"] || + module["handler"]); + const res = await target_module?.({ ...routeParams, }); - if (is_dev) { - res.headers.set("Cache-Control", "no-cache, no-store, must-revalidate"); + if (res instanceof Response) { + if (is_dev) { + res.headers.set("Cache-Control", "no-cache, no-store, must-revalidate"); + } + return res; } - return res; + return Response.json(res, { + ...(res.bunext_api_route_res_options || undefined), + }); } diff --git a/dist/types/index.d.ts b/dist/types/index.d.ts index 33f3e44..4ec66ab 100644 --- a/dist/types/index.d.ts +++ b/dist/types/index.d.ts @@ -121,11 +121,7 @@ export type APIResponseObject = (params: BunxRouteParams) => Promise | Response | T; +export type BunextAPIRouteJSONRes = { + bunext_api_route_res_options?: ResponseInit; +}; diff --git a/package.json b/package.json index 5147396..7d5ee1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/bunext", - "version": "1.0.63", + "version": "1.0.64", "main": "dist/index.js", "module": "index.ts", "dependencies": { diff --git a/src/functions/server/handle-routes.ts b/src/functions/server/handle-routes.ts index f9d7b74..3d7592a 100644 --- a/src/functions/server/handle-routes.ts +++ b/src/functions/server/handle-routes.ts @@ -1,5 +1,8 @@ -import type { Server } from "bun"; -import type { BunextServerRouteConfig, BunxRouteParams } from "../../types"; +import type { + BunextAPIRouteHandler, + BunextServerRouteConfig, + BunxRouteParams, +} from "../../types"; import grabRouteParams from "../../utils/grab-route-params"; import grabConstants from "../../utils/grab-constants"; import grabRouter from "../../utils/grab-router"; @@ -50,8 +53,8 @@ export default async function ({ req }: Params): Promise { const size = parseInt(contentLength, 10); if ( - (config?.maxRequestBodyMB && - size > config.maxRequestBodyMB * MBInBytes) || + (config?.max_request_body_mb && + size > config.max_request_body_mb * MBInBytes) || size > ServerDefaultRequestBodyLimitBytes ) { return Response.json( @@ -69,13 +72,24 @@ export default async function ({ req }: Params): Promise { } } - const res: Response = await module["default"]({ - ...routeParams, - } as BunxRouteParams); + const target_module = (module["default"] || + module["handler"]) as BunextAPIRouteHandler; - if (is_dev) { - res.headers.set("Cache-Control", "no-cache, no-store, must-revalidate"); + const res = await target_module?.({ + ...routeParams, + }); + + if (res instanceof Response) { + if (is_dev) { + res.headers.set( + "Cache-Control", + "no-cache, no-store, must-revalidate", + ); + } + return res; } - return res; + return Response.json(res, { + ...(res.bunext_api_route_res_options || undefined), + }); } diff --git a/src/types/index.ts b/src/types/index.ts index 2da4b9d..55655ca 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -142,12 +142,7 @@ export type APIResponseObject< }; export type BunextServerRouteConfig = { - maxRequestBodyMB?: number; -}; - -export type PageDistGenParams = { - pageName: string; - page_file: string; + max_request_body_mb?: number; }; export type LivePageDistGenParams = { @@ -344,3 +339,13 @@ export type GrabTSXModuleBatchMap = { tsx: string; page_file_path: string; }; + +export type BunextAPIRouteHandler< + T extends BunextAPIRouteJSONRes = BunextAPIRouteJSONRes & { + [k: string]: any; + }, +> = (params: BunxRouteParams) => Promise | Response | T; + +export type BunextAPIRouteJSONRes = { + bunext_api_route_res_options?: ResponseInit; +};