Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/curvy-hairs-deliver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@remix-run/router": patch
---

Remove `instanceof Response` checks in favor of `isResponse`
22 changes: 16 additions & 6 deletions packages/router/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1988,7 +1988,7 @@ export function unstable_createStaticHandler(
}

let result = await queryImpl(request, location, matches);
if (result instanceof Response) {
if (isResponse(result)) {
return result;
}

Expand Down Expand Up @@ -2046,7 +2046,7 @@ export function unstable_createStaticHandler(
}

let result = await queryImpl(request, location, matches, match);
if (result instanceof Response) {
if (isResponse(result)) {
return result;
}

Expand Down Expand Up @@ -2087,7 +2087,7 @@ export function unstable_createStaticHandler(
}

let result = await loadRouteData(request, matches, routeMatch);
return result instanceof Response
return isResponse(result)
? result
: {
...result,
Expand Down Expand Up @@ -2616,7 +2616,7 @@ async function callLoaderOrAction(
request.signal.removeEventListener("abort", onReject);
}

if (result instanceof Response) {
if (isResponse(result)) {
let status = result.status;

// Process redirects
Expand Down Expand Up @@ -3052,8 +3052,18 @@ function isRedirectResult(result?: DataResult): result is RedirectResult {
return (result && result.type) === ResultType.redirect;
}

function isResponse(value: any): value is Response {
return (
value != null &&
typeof value.status === "number" &&
typeof value.statusText === "string" &&
typeof value.headers === "object" &&
typeof value.body !== "undefined"
);
}

function isRedirectResponse(result: any): result is Response {
if (!(result instanceof Response)) {
if (!isResponse(result)) {
return false;
}

Expand All @@ -3065,7 +3075,7 @@ function isRedirectResponse(result: any): result is Response {
function isQueryRouteResponse(obj: any): obj is QueryRouteResponse {
return (
obj &&
obj.response instanceof Response &&
isResponse(obj.response) &&
(obj.type === ResultType.data || ResultType.error)
);
}
Expand Down