From 9a397f1976bb90042fce441d53b246e854ca7e32 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Wed, 22 Mar 2023 11:11:06 -0400 Subject: [PATCH 1/2] Remove instanceof check for DeferredData --- .changeset/rotten-waves-fold.md | 5 +++++ packages/router/router.ts | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .changeset/rotten-waves-fold.md diff --git a/.changeset/rotten-waves-fold.md b/.changeset/rotten-waves-fold.md new file mode 100644 index 0000000000..f2107e9271 --- /dev/null +++ b/.changeset/rotten-waves-fold.md @@ -0,0 +1,5 @@ +--- +"@remix-run/router": patch +--- + +Remove `instanceof` check for `DeferredData` to be resiliant to ESM/CJS boundaries in SSR bundling scenarios diff --git a/packages/router/router.ts b/packages/router/router.ts index 575b8e2a85..e2e55fe1d2 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -3486,7 +3486,7 @@ async function callLoaderOrAction( return { type: resultType, error: result }; } - if (result instanceof DeferredData) { + if (isDeferredData(result)) { return { type: ResultType.deferred, deferredData: result, @@ -3856,6 +3856,18 @@ function isRedirectResult(result?: DataResult): result is RedirectResult { return (result && result.type) === ResultType.redirect; } +export function isDeferredData(value: any): value is DeferredData { + let deferred: DeferredData = value; + return ( + deferred && + typeof deferred === "object" && + typeof deferred.data === "object" && + typeof deferred.subscribe === "function" && + typeof deferred.cancel === "function" && + typeof deferred.resolveData === "function" + ); +} + function isResponse(value: any): value is Response { return ( value != null && From 31e3c39fea107fb1325458751029661a91eda171 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Wed, 22 Mar 2023 11:15:02 -0400 Subject: [PATCH 2/2] Bump bundle --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de947bd2eb..c930322687 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ }, "filesize": { "packages/router/dist/router.umd.min.js": { - "none": "43.1 kB" + "none": "43.3 kB" }, "packages/react-router/dist/react-router.production.min.js": { "none": "13 kB"