diff --git a/.changeset/clever-ends-wink.md b/.changeset/clever-ends-wink.md new file mode 100644 index 0000000..cd74a16 --- /dev/null +++ b/.changeset/clever-ends-wink.md @@ -0,0 +1,5 @@ +--- +"next-ws": patch +--- + +Await default property of route module diff --git a/src/server/helpers/route.ts b/src/server/helpers/route.ts index 65c727c..bc05e6e 100644 --- a/src/server/helpers/route.ts +++ b/src/server/helpers/route.ts @@ -123,7 +123,10 @@ async function importModule(modulePath: string): Promise { } } -export function getSocketHandler(routeModule: RouteModule) { +export async function getSocketHandler(routeModule: RouteModule) { + if (routeModule.default instanceof Promise) + return getSocketHandler(await routeModule.default); + return ( routeModule?.default?.routeModule?.userland?.SOCKET ?? routeModule?.routeModule?.userland?.SOCKET ?? @@ -133,7 +136,7 @@ export function getSocketHandler(routeModule: RouteModule) { } export interface RouteModule { - default?: RouteModule; + default?: Promise | RouteModule; routeModule?: { userland?: RouteModule['handlers'] }; handlers?: { SOCKET?: SocketHandler }; } diff --git a/src/server/setup.ts b/src/server/setup.ts index 1e6ee02..4a69130 100644 --- a/src/server/setup.ts +++ b/src/server/setup.ts @@ -41,7 +41,7 @@ export function setupWebSocketServer(nextServer: NextNodeServer) { return socket.destroy(); } - const socketHandler = getSocketHandler(routeModule); + const socketHandler = await getSocketHandler(routeModule); if (!socketHandler || typeof socketHandler !== 'function') { logger.error(`[next-ws] ${pathname} does not export a SOCKET handler`); return socket.destroy();