Skip to content

Commit b76adc2

Browse files
authored
Merge pull request #7724 from QwikDev/fix-qc-dev-ServerError
fix(qwik-city): duplicate ServerError class during dev
2 parents d758b2a + d16097d commit b76adc2

File tree

13 files changed

+56
-62
lines changed

13 files changed

+56
-62
lines changed

.changeset/tired-spies-call.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@builder.io/qwik-city': patch
3+
---
4+
5+
FIX: Duplicate ServerError class during dev mode

packages/docs/src/routes/api/qwik-city-middleware-request-handler/api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@
443443
],
444444
"kind": "Class",
445445
"content": "```typescript\nexport declare class ServerError<T = any> extends Error \n```\n**Extends:** Error\n\n\n<table><thead><tr><th>\n\nConstructor\n\n\n</th><th>\n\nModifiers\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\n[(constructor)(status, data)](#)\n\n\n</td><td>\n\n\n</td><td>\n\nConstructs a new instance of the `ServerError` class\n\n\n</td></tr>\n</tbody></table>\n\n\n<table><thead><tr><th>\n\nProperty\n\n\n</th><th>\n\nModifiers\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\n[data](#servererror-data)\n\n\n</td><td>\n\n\n</td><td>\n\nT\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\n[status](#servererror-status)\n\n\n</td><td>\n\n\n</td><td>\n\nnumber\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>",
446-
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik-city/src/middleware/request-handler/error-handler.ts",
446+
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik-city/src/middleware/request-handler/server-error.ts",
447447
"mdFile": "qwik-city.servererror.md"
448448
},
449449
{

packages/docs/src/routes/api/qwik-city-middleware-request-handler/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1659,7 +1659,7 @@ number
16591659
</td></tr>
16601660
</tbody></table>
16611661
1662-
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik-city/src/middleware/request-handler/error-handler.ts)
1662+
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik-city/src/middleware/request-handler/server-error.ts)
16631663
16641664
## ServerRenderOptions
16651665

packages/docs/src/routes/docs/(qwikcity)/error-handling/index.mdx

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,20 @@ Intercepting errors with middleware has a few usecases: you might want to hide e
6666
```tsx
6767
// src/routes/[email protected]
6868
import { type RequestHandler } from '@builder.io/qwik-city'
69-
import { RedirectMessage } from '@builder.io/qwik-city/middleware/request-handler'
69+
import { RedirectMessage, ServerError } from '@builder.io/qwik-city/middleware/request-handler'
7070
import { isDev } from '@builder.io/qwik/build'
7171

7272
export const onRequest: RequestHandler = async ({ next }) => {
7373
try {
7474
return await next();
7575
} catch (err) {
7676
// Pass through 3xx redirects
77-
if (isRedirectMessage(err)) {
77+
if (err instanceof RedirectMessage) {
7878
throw err
7979
}
8080

8181
// Pass through ServerErrors
82-
if (isServerError(err)) {
82+
if (err instanceof ServerError) {
8383
throw err
8484
}
8585

@@ -94,19 +94,6 @@ export const onRequest: RequestHandler = async ({ next }) => {
9494
}
9595
};
9696

97-
function isServerError(err: unknown): err is ServerError {
98-
return (
99-
err instanceof ServerError ||
100-
// This is required for dev environments due to an issue with vite: https://github.com/vitejs/vite/issues/3910
101-
(isDev && err instanceof Error && err.constructor.name === "ServerError")
102-
);
103-
}
104-
105-
function isRedirectMessage(err: unknown): err is RedirectMessage {
106-
return (
107-
err instanceof RedirectMessage ||
108-
// This is required for dev environments due to an issue with vite: https://github.com/vitejs/vite/issues/3910
109-
(isDev && err instanceof Error && err.constructor.name === "RedirectMessage")
110-
);
111-
}
97+
98+
11299
```

packages/qwik-city/src/middleware/request-handler/error-handler.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,3 @@
1-
/** @public */
2-
export class ServerError<T = any> extends Error {
3-
constructor(
4-
public status: number,
5-
public data: T
6-
) {
7-
super(typeof data === 'string' ? data : undefined);
8-
}
9-
}
10-
11-
/** @deprecated */
12-
export class ErrorResponse extends ServerError {
13-
constructor(
14-
public status: number,
15-
message?: string
16-
) {
17-
super(status, message);
18-
}
19-
}
20-
211
/** @public */
222
export function getErrorHtml(status: number, e: any) {
233
let message = 'Server Error';

packages/qwik-city/src/middleware/request-handler/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
export { getErrorHtml, ServerError } from './error-handler';
1+
export { getErrorHtml } from './error-handler';
22
export { mergeHeadersCookies } from './cookie';
3+
export { ServerError } from './server-error';
34
export { AbortMessage, RedirectMessage } from './redirect-handler';
45
export { RewriteMessage } from './rewrite-handler';
56
export { requestHandler } from './request-handler';

packages/qwik-city/src/middleware/request-handler/request-event.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@ import type {
1010
import { isPromise } from './../../runtime/src/utils';
1111
import { createCacheControl } from './cache-control';
1212
import { Cookie } from './cookie';
13-
import { ServerError } from './error-handler';
14-
import { AbortMessage, RedirectMessage } from './redirect-handler';
15-
import { RewriteMessage } from './rewrite-handler';
13+
// Import separately to avoid duplicate imports in the vite dev server
14+
import {
15+
AbortMessage,
16+
RedirectMessage,
17+
ServerError,
18+
RewriteMessage,
19+
} from '@builder.io/qwik-city/middleware/request-handler';
1620
import { encoder } from './resolve-request-handlers';
1721
import type {
1822
CacheControl,

packages/qwik-city/src/middleware/request-handler/resolve-request-handlers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import type {
1313
ValidatorReturn,
1414
} from '../../runtime/src/types';
1515
import { HttpStatus } from './http-status-codes';
16-
import { RedirectMessage } from './redirect-handler';
1716
import {
1817
RequestEvQwikSerializer,
1918
RequestEvIsRewrite,
@@ -33,7 +32,8 @@ import type {
3332
RequestHandler,
3433
} from './types';
3534
import { IsQData, QDATA_JSON } from './user-response';
36-
import { ServerError } from './error-handler';
35+
// Import separately to avoid duplicate imports in the vite dev server
36+
import { RedirectMessage, ServerError } from '@builder.io/qwik-city/middleware/request-handler';
3737

3838
export const resolveRequestHandlers = (
3939
serverPlugins: RouteModule[] | undefined,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/** @public */
2+
export class ServerError<T = any> extends Error {
3+
constructor(
4+
public status: number,
5+
public data: T
6+
) {
7+
super(typeof data === 'string' ? data : undefined);
8+
}
9+
}
10+
/** @deprecated */
11+
12+
export class ErrorResponse extends ServerError {
13+
constructor(
14+
public status: number,
15+
message?: string
16+
) {
17+
super(status, message);
18+
}
19+
}

packages/qwik-city/src/middleware/request-handler/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { _deserializeData, _serializeData, _verifySerializable } from '@builder.io/qwik';
22
import type { Action, FailReturn, Loader, QwikCityPlan } from '@builder.io/qwik-city';
33
import type { Render, RenderOptions } from '@builder.io/qwik/server';
4-
import type { ServerError } from './error-handler';
4+
import type { ServerError } from './server-error';
55
import type { AbortMessage, RedirectMessage } from './redirect-handler';
66
import type { RequestEventInternal } from './request-event';
77
import type { RewriteMessage } from './rewrite-handler';

0 commit comments

Comments
 (0)