From 4bb5b7309de15dd14c5c6fbde3cdb95b30c9f158 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 6 Dec 2022 10:25:59 -0500 Subject: [PATCH 1/3] Remove instanceof Response checks in favor of duck typing --- packages/router/router.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/router/router.ts b/packages/router/router.ts index 8bd5ae9f55..0979cf35f3 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -1988,7 +1988,7 @@ export function unstable_createStaticHandler( } let result = await queryImpl(request, location, matches); - if (result instanceof Response) { + if (isResponse(result)) { return result; } @@ -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; } @@ -2087,7 +2087,7 @@ export function unstable_createStaticHandler( } let result = await loadRouteData(request, matches, routeMatch); - return result instanceof Response + return isResponse(result) ? result : { ...result, @@ -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 @@ -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; } @@ -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) ); } From b60ed62d75768a602c98c11d650a0769baebecee Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 6 Dec 2022 10:26:39 -0500 Subject: [PATCH 2/3] add changeset --- .changeset/curvy-hairs-deliver.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/curvy-hairs-deliver.md diff --git a/.changeset/curvy-hairs-deliver.md b/.changeset/curvy-hairs-deliver.md new file mode 100644 index 0000000000..bdb1ceaeba --- /dev/null +++ b/.changeset/curvy-hairs-deliver.md @@ -0,0 +1,5 @@ +--- +"@remix-run/router": patch +--- + +Remove `instaanceof Response` checks in favor of duck typing From 9fbf6463bf827456ca6de284e1d17edfa2ac23ad Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 6 Dec 2022 11:35:43 -0500 Subject: [PATCH 3/3] Update .changeset/curvy-hairs-deliver.md --- .changeset/curvy-hairs-deliver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/curvy-hairs-deliver.md b/.changeset/curvy-hairs-deliver.md index bdb1ceaeba..5c017a0d16 100644 --- a/.changeset/curvy-hairs-deliver.md +++ b/.changeset/curvy-hairs-deliver.md @@ -2,4 +2,4 @@ "@remix-run/router": patch --- -Remove `instaanceof Response` checks in favor of duck typing +Remove `instanceof Response` checks in favor of `isResponse`