From 6ba5a71cab24e734589eefb1329a59159a1fcfdb Mon Sep 17 00:00:00 2001 From: JBR-0100 Date: Mon, 1 Dec 2025 20:03:53 +0530 Subject: [PATCH 1/4] fix(start): allow request middleware to return Response --- .../start-client-core/src/createMiddleware.ts | 3 +- .../tests/createServerMiddleware.test-d.ts | 52 ++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/packages/start-client-core/src/createMiddleware.ts b/packages/start-client-core/src/createMiddleware.ts index d204b37c84..ff77b60362 100644 --- a/packages/start-client-core/src/createMiddleware.ts +++ b/packages/start-client-core/src/createMiddleware.ts @@ -771,8 +771,9 @@ export type RequestMiddlewareServerFnResult< TMiddlewares, TServerContext, > = - | Promise> + | Promise | Response> | RequestServerResult + | Response export interface RequestServerResult { request: Request diff --git a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts index 6e4fb8e27f..54aa4b55ce 100644 --- a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts +++ b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts @@ -17,7 +17,7 @@ test('createServeMiddleware removes middleware after middleware,', () => { expectTypeOf(middlewareAfterMiddleware).toHaveProperty('server') expectTypeOf(middlewareAfterMiddleware).not.toHaveProperty('middleware') - const middlewareAfterInput = middleware.inputValidator(() => {}) + const middlewareAfterInput = middleware.inputValidator(() => { }) expectTypeOf(middlewareAfterInput).toHaveProperty('server') expectTypeOf(middlewareAfterInput).not.toHaveProperty('middleware') @@ -741,3 +741,53 @@ test('createMiddleware with type request, middleware and context', () => { return result }) }) + +test('createMiddleware with type request can return Response directly', () => { + createMiddleware({ type: 'request' }).server(async (options) => { + expectTypeOf(options).toEqualTypeOf<{ + request: Request + next: RequestServerNextFn<{}, undefined> + pathname: string + context: undefined + }>() + + // Should be able to return a Response directly + if (Math.random() > 0.5) { + return new Response('Unauthorized', { status: 401 }) + } + + // Or return the result from next() + return options.next() + }) +}) + +test('createMiddleware with type request can return Promise', () => { + createMiddleware({ type: 'request' }).server(async (options) => { + expectTypeOf(options).toEqualTypeOf<{ + request: Request + next: RequestServerNextFn<{}, undefined> + pathname: string + context: undefined + }>() + + // Should be able to return a Promise + return Promise.resolve(new Response('OK', { status: 200 })) + }) +}) + +test('createMiddleware with type request can return sync Response', () => { + createMiddleware({ type: 'request' }).server((options) => { + expectTypeOf(options).toEqualTypeOf<{ + request: Request + next: RequestServerNextFn<{}, undefined> + pathname: string + context: undefined + }>() + + // Should be able to return a synchronous Response + return new Response(JSON.stringify({ error: 'Not Found' }), { + status: 404, + headers: { 'Content-Type': 'application/json' }, + }) + }) +}) From f4d0921d9571ded41cd51dc3c3c3da65ddc96074 Mon Sep 17 00:00:00 2001 From: JBR-0100 Date: Mon, 1 Dec 2025 20:47:45 +0530 Subject: [PATCH 2/4] test(start): update types for request middleware response --- .../src/tests/createServerMiddleware.test-d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts index 54aa4b55ce..4994fb38e9 100644 --- a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts +++ b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts @@ -668,7 +668,7 @@ test('createMiddleware with type request, no middleware or context', () => { pathname: string request: Request response: Response - }>() + } | Response>() return result }) @@ -690,7 +690,7 @@ test('createMiddleware with type request, no middleware with context', () => { pathname: string request: Request response: Response - }>() + } | Response>() return result }) @@ -713,7 +713,7 @@ test('createMiddleware with type request, middleware and context', () => { pathname: string request: Request response: Response - }>() + } | Response>() return result }, @@ -736,7 +736,7 @@ test('createMiddleware with type request, middleware and context', () => { pathname: string request: Request response: Response - }>() + } | Response>() return result }) From 947fa21083c54aadbe63b0a49ae79c0c93dbe6b6 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 21:10:52 +0000 Subject: [PATCH 3/4] ci: apply automated fixes --- .../start-client-core/src/createMiddleware.ts | 4 +- .../tests/createServerMiddleware.test-d.ts | 62 +++++++++++-------- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/packages/start-client-core/src/createMiddleware.ts b/packages/start-client-core/src/createMiddleware.ts index ff77b60362..cb9d895d41 100644 --- a/packages/start-client-core/src/createMiddleware.ts +++ b/packages/start-client-core/src/createMiddleware.ts @@ -771,7 +771,9 @@ export type RequestMiddlewareServerFnResult< TMiddlewares, TServerContext, > = - | Promise | Response> + | Promise< + RequestServerResult | Response + > | RequestServerResult | Response diff --git a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts index 4994fb38e9..f157392b08 100644 --- a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts +++ b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts @@ -17,7 +17,7 @@ test('createServeMiddleware removes middleware after middleware,', () => { expectTypeOf(middlewareAfterMiddleware).toHaveProperty('server') expectTypeOf(middlewareAfterMiddleware).not.toHaveProperty('middleware') - const middlewareAfterInput = middleware.inputValidator(() => { }) + const middlewareAfterInput = middleware.inputValidator(() => {}) expectTypeOf(middlewareAfterInput).toHaveProperty('server') expectTypeOf(middlewareAfterInput).not.toHaveProperty('middleware') @@ -663,12 +663,15 @@ test('createMiddleware with type request, no middleware or context', () => { const result = await options.next() - expectTypeOf(result).toEqualTypeOf<{ - context: undefined - pathname: string - request: Request - response: Response - } | Response>() + expectTypeOf(result).toEqualTypeOf< + | { + context: undefined + pathname: string + request: Request + response: Response + } + | Response + >() return result }) @@ -685,12 +688,15 @@ test('createMiddleware with type request, no middleware with context', () => { const result = await options.next({ context: { a: 'a' } }) - expectTypeOf(result).toEqualTypeOf<{ - context: { a: string } - pathname: string - request: Request - response: Response - } | Response>() + expectTypeOf(result).toEqualTypeOf< + | { + context: { a: string } + pathname: string + request: Request + response: Response + } + | Response + >() return result }) @@ -708,12 +714,15 @@ test('createMiddleware with type request, middleware and context', () => { const result = await options.next({ context: { a: 'a' } }) - expectTypeOf(result).toEqualTypeOf<{ - context: { a: string } - pathname: string - request: Request - response: Response - } | Response>() + expectTypeOf(result).toEqualTypeOf< + | { + context: { a: string } + pathname: string + request: Request + response: Response + } + | Response + >() return result }, @@ -731,12 +740,15 @@ test('createMiddleware with type request, middleware and context', () => { const result = await options.next({ context: { b: 'b' } }) - expectTypeOf(result).toEqualTypeOf<{ - context: { a: string; b: string } - pathname: string - request: Request - response: Response - } | Response>() + expectTypeOf(result).toEqualTypeOf< + | { + context: { a: string; b: string } + pathname: string + request: Request + response: Response + } + | Response + >() return result }) From f65270b4a9b97bb13226de53076bde5851218518 Mon Sep 17 00:00:00 2001 From: Manuel Schiller Date: Tue, 9 Dec 2025 23:59:42 +0100 Subject: [PATCH 4/4] fix types --- .../start-client-core/src/createMiddleware.ts | 7 ++- .../tests/createServerMiddleware.test-d.ts | 60 ++++++++----------- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/packages/start-client-core/src/createMiddleware.ts b/packages/start-client-core/src/createMiddleware.ts index cb9d895d41..a637c2dbb2 100644 --- a/packages/start-client-core/src/createMiddleware.ts +++ b/packages/start-client-core/src/createMiddleware.ts @@ -760,12 +760,17 @@ export type RequestServerNextFn = < TServerContext = undefined, >( options?: RequestServerNextFnOptions, -) => RequestMiddlewareServerFnResult +) => RequestServerNextFnResult export interface RequestServerNextFnOptions { context?: TServerContext } +export type RequestServerNextFnResult = + + | Promise> + | RequestServerResult + export type RequestMiddlewareServerFnResult< TRegister, TMiddlewares, diff --git a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts index f157392b08..9759e39d06 100644 --- a/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts +++ b/packages/start-client-core/src/tests/createServerMiddleware.test-d.ts @@ -663,15 +663,12 @@ test('createMiddleware with type request, no middleware or context', () => { const result = await options.next() - expectTypeOf(result).toEqualTypeOf< - | { - context: undefined - pathname: string - request: Request - response: Response - } - | Response - >() + expectTypeOf(result).toEqualTypeOf<{ + context: undefined + pathname: string + request: Request + response: Response + }>() return result }) @@ -688,15 +685,12 @@ test('createMiddleware with type request, no middleware with context', () => { const result = await options.next({ context: { a: 'a' } }) - expectTypeOf(result).toEqualTypeOf< - | { - context: { a: string } - pathname: string - request: Request - response: Response - } - | Response - >() + expectTypeOf(result).toEqualTypeOf<{ + context: { a: string } + pathname: string + request: Request + response: Response + }>() return result }) @@ -714,15 +708,12 @@ test('createMiddleware with type request, middleware and context', () => { const result = await options.next({ context: { a: 'a' } }) - expectTypeOf(result).toEqualTypeOf< - | { - context: { a: string } - pathname: string - request: Request - response: Response - } - | Response - >() + expectTypeOf(result).toEqualTypeOf<{ + context: { a: string } + pathname: string + request: Request + response: Response + }>() return result }, @@ -740,15 +731,12 @@ test('createMiddleware with type request, middleware and context', () => { const result = await options.next({ context: { b: 'b' } }) - expectTypeOf(result).toEqualTypeOf< - | { - context: { a: string; b: string } - pathname: string - request: Request - response: Response - } - | Response - >() + expectTypeOf(result).toEqualTypeOf<{ + context: { a: string; b: string } + pathname: string + request: Request + response: Response + }>() return result })