Skip to content

Commit fb55c70

Browse files
authored
Remove instanceof Response checks in favor of isResponse (#9690)
* Remove instanceof Response checks in favor of duck typing * add changeset * Update .changeset/curvy-hairs-deliver.md
1 parent bd58142 commit fb55c70

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

.changeset/curvy-hairs-deliver.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@remix-run/router": patch
3+
---
4+
5+
Remove `instanceof Response` checks in favor of `isResponse`

packages/router/router.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,7 +1988,7 @@ export function unstable_createStaticHandler(
19881988
}
19891989

19901990
let result = await queryImpl(request, location, matches);
1991-
if (result instanceof Response) {
1991+
if (isResponse(result)) {
19921992
return result;
19931993
}
19941994

@@ -2046,7 +2046,7 @@ export function unstable_createStaticHandler(
20462046
}
20472047

20482048
let result = await queryImpl(request, location, matches, match);
2049-
if (result instanceof Response) {
2049+
if (isResponse(result)) {
20502050
return result;
20512051
}
20522052

@@ -2087,7 +2087,7 @@ export function unstable_createStaticHandler(
20872087
}
20882088

20892089
let result = await loadRouteData(request, matches, routeMatch);
2090-
return result instanceof Response
2090+
return isResponse(result)
20912091
? result
20922092
: {
20932093
...result,
@@ -2616,7 +2616,7 @@ async function callLoaderOrAction(
26162616
request.signal.removeEventListener("abort", onReject);
26172617
}
26182618

2619-
if (result instanceof Response) {
2619+
if (isResponse(result)) {
26202620
let status = result.status;
26212621

26222622
// Process redirects
@@ -3048,8 +3048,18 @@ function isRedirectResult(result?: DataResult): result is RedirectResult {
30483048
return (result && result.type) === ResultType.redirect;
30493049
}
30503050

3051+
function isResponse(value: any): value is Response {
3052+
return (
3053+
value != null &&
3054+
typeof value.status === "number" &&
3055+
typeof value.statusText === "string" &&
3056+
typeof value.headers === "object" &&
3057+
typeof value.body !== "undefined"
3058+
);
3059+
}
3060+
30513061
function isRedirectResponse(result: any): result is Response {
3052-
if (!(result instanceof Response)) {
3062+
if (!isResponse(result)) {
30533063
return false;
30543064
}
30553065

@@ -3061,7 +3071,7 @@ function isRedirectResponse(result: any): result is Response {
30613071
function isQueryRouteResponse(obj: any): obj is QueryRouteResponse {
30623072
return (
30633073
obj &&
3064-
obj.response instanceof Response &&
3074+
isResponse(obj.response) &&
30653075
(obj.type === ResultType.data || ResultType.error)
30663076
);
30673077
}

0 commit comments

Comments
 (0)