diff --git a/bun.lock b/bun.lock index 71af0dad..2c18cf96 100644 --- a/bun.lock +++ b/bun.lock @@ -268,7 +268,7 @@ }, "packages/cli": { "name": "@wrnexus/cli", - "version": "0.8.19", + "version": "0.8.20", "bin": { "wrnexus": "src/index.ts", }, @@ -317,7 +317,7 @@ }, "packages/csr": { "name": "@wrnexus/csr", - "version": "0.8.16", + "version": "0.8.17", "dependencies": { "@wrnexus/core": "workspace:*", }, @@ -332,7 +332,7 @@ }, "packages/dev-server": { "name": "@wrnexus/dev-server", - "version": "0.8.18", + "version": "0.8.19", "dependencies": { "@wrnexus/authz": "workspace:*", "@wrnexus/cache": "workspace:*", diff --git a/packages/cli/package.json b/packages/cli/package.json index 3fa4355e..e097fd2b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/cli", - "version": "0.8.19", + "version": "0.8.20", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/csr/package.json b/packages/csr/package.json index b08302d7..dc3a1f38 100644 --- a/packages/csr/package.json +++ b/packages/csr/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/csr", - "version": "0.8.16", + "version": "0.8.17", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/csr/src/reactive-runtime.ts b/packages/csr/src/reactive-runtime.ts index 19b03af0..3c98818e 100644 --- a/packages/csr/src/reactive-runtime.ts +++ b/packages/csr/src/reactive-runtime.ts @@ -1062,7 +1062,12 @@ export const REACTIVE_RUNTIME = String.raw` }; }, }); - var componentRpcName = componentEventTarget.getAttribute("data-wrn-component") || componentEventTarget.getAttribute("data-wrn-hydration") || "component"; + var componentHydrationTarget = componentEventTarget.closest("[data-wrn-hydration]"); + var componentRpcIdentity = componentEventTarget.getAttribute("data-wrn-component") || + (componentHydrationTarget && componentHydrationTarget.getAttribute("data-wrn-hydration")) || + el.getAttribute("data-wrn-hydration") || + "component"; + var componentRpcName = String(componentRpcIdentity).split(":", 1)[0] || "component"; var serverProxy = new Proxy({}, { get: function (_target, property) { return function () { diff --git a/packages/csr/test/reactive.test.ts b/packages/csr/test/reactive.test.ts index 8f282d33..a066ca05 100644 --- a/packages/csr/test/reactive.test.ts +++ b/packages/csr/test/reactive.test.ts @@ -828,6 +828,29 @@ test("component server calls send the CSRF cookie in the RPC header", async () = expect(new Headers(request?.headers).get("x-csrf-token")).toBe("rpc token"); }); +test("component server calls use the nearest hydration component identity", async () => { + const win = mount( + `