From 04c71b20ab3904339d252e98a2e2061204bb40b8 Mon Sep 17 00:00:00 2001
From: daishi <daishi@axlight.com>
Date: Fri, 14 Mar 2025 13:36:08 +0900
Subject: [PATCH] expose unstable enhancers from router

---
 packages/waku/src/router/client.ts | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/packages/waku/src/router/client.ts b/packages/waku/src/router/client.ts
index d180f7d08..8bbbf9195 100644
--- a/packages/waku/src/router/client.ts
+++ b/packages/waku/src/router/client.ts
@@ -563,6 +563,12 @@ const InnerRouter = ({
   );
 };
 
+type Elements = Record<string, unknown>;
+type EnhanceFetch = (fetchFn: typeof fetch) => typeof fetch;
+type EnhanceCreateData = (
+  createData: (responsePromise: Promise<Response>) => Promise<Elements>,
+) => (responsePromise: Promise<Response>) => Promise<Elements>;
+
 // Note: The router data must be a stable mutable object (array).
 type RouterData = [
   locationListeners?: Set<(path: string, query: string) => void>,
@@ -576,12 +582,19 @@ const DEFAULT_ROUTER_DATA: RouterData = [];
 export function Router({
   routerData = DEFAULT_ROUTER_DATA,
   initialRoute = parseRouteFromLocation(),
+  unstable_enhanceFetch,
+  unstable_enhanceCreateData,
+}: {
+  routerData?: RouterData;
+  initialRoute?: RouteProps;
+  unstable_enhanceFetch?: EnhanceFetch;
+  unstable_enhanceCreateData?: EnhanceCreateData;
 }) {
   const initialRscPath = encodeRoutePath(initialRoute.path);
   const locationListeners = (routerData[0] ||= new Set());
   const staticPathSet = (routerData[1] ||= new Set());
   const cachedIdSet = (routerData[2] ||= new Set());
-  const unstable_enhanceFetch =
+  const enhanceFetch =
     (fetchFn: typeof fetch) =>
     (input: RequestInfo | URL, init: RequestInit = {}) => {
       const skipStr = JSON.stringify(Array.from(cachedIdSet));
@@ -593,7 +606,7 @@ export function Router({
       }
       return fetchFn(input, init);
     };
-  const unstable_enhanceCreateData =
+  const enhanceCreateData =
     (
       createData: (
         responsePromise: Promise<Response>,
@@ -641,8 +654,12 @@ export function Router({
     {
       initialRscPath,
       initialRscParams,
-      unstable_enhanceFetch,
-      unstable_enhanceCreateData,
+      unstable_enhanceFetch: unstable_enhanceFetch
+        ? (fn) => unstable_enhanceFetch(enhanceFetch(fn))
+        : enhanceFetch,
+      unstable_enhanceCreateData: unstable_enhanceCreateData
+        ? (fn) => unstable_enhanceCreateData(enhanceCreateData(fn))
+        : enhanceCreateData,
     },
     createElement(InnerRouter, {
       routerData: routerData as Required<RouterData>,