fix: preserve parent RPC scope identity
This commit is contained in:
@@ -268,7 +268,7 @@
|
|||||||
},
|
},
|
||||||
"packages/cli": {
|
"packages/cli": {
|
||||||
"name": "@wrnexus/cli",
|
"name": "@wrnexus/cli",
|
||||||
"version": "0.8.20",
|
"version": "0.8.21",
|
||||||
"bin": {
|
"bin": {
|
||||||
"wrnexus": "src/index.ts",
|
"wrnexus": "src/index.ts",
|
||||||
},
|
},
|
||||||
@@ -317,7 +317,7 @@
|
|||||||
},
|
},
|
||||||
"packages/csr": {
|
"packages/csr": {
|
||||||
"name": "@wrnexus/csr",
|
"name": "@wrnexus/csr",
|
||||||
"version": "0.8.17",
|
"version": "0.8.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@wrnexus/core": "workspace:*",
|
"@wrnexus/core": "workspace:*",
|
||||||
},
|
},
|
||||||
@@ -332,7 +332,7 @@
|
|||||||
},
|
},
|
||||||
"packages/dev-server": {
|
"packages/dev-server": {
|
||||||
"name": "@wrnexus/dev-server",
|
"name": "@wrnexus/dev-server",
|
||||||
"version": "0.8.19",
|
"version": "0.8.20",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@wrnexus/authz": "workspace:*",
|
"@wrnexus/authz": "workspace:*",
|
||||||
"@wrnexus/cache": "workspace:*",
|
"@wrnexus/cache": "workspace:*",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/cli",
|
"name": "@wrnexus/cli",
|
||||||
"version": "0.8.20",
|
"version": "0.8.21",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/csr",
|
"name": "@wrnexus/csr",
|
||||||
"version": "0.8.17",
|
"version": "0.8.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1062,10 +1062,10 @@ export const REACTIVE_RUNTIME = String.raw`
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
var componentHydrationTarget = componentEventTarget.closest("[data-wrn-hydration]");
|
var componentRpcIdentity = el.getAttribute("data-wrn-component") ||
|
||||||
var componentRpcIdentity = componentEventTarget.getAttribute("data-wrn-component") ||
|
|
||||||
(componentHydrationTarget && componentHydrationTarget.getAttribute("data-wrn-hydration")) ||
|
|
||||||
el.getAttribute("data-wrn-hydration") ||
|
el.getAttribute("data-wrn-hydration") ||
|
||||||
|
componentEventTarget.getAttribute("data-wrn-component") ||
|
||||||
|
componentEventTarget.getAttribute("data-wrn-hydration") ||
|
||||||
"component";
|
"component";
|
||||||
var componentRpcName = String(componentRpcIdentity).split(":", 1)[0] || "component";
|
var componentRpcName = String(componentRpcIdentity).split(":", 1)[0] || "component";
|
||||||
var serverProxy = new Proxy({}, {
|
var serverProxy = new Proxy({}, {
|
||||||
|
|||||||
@@ -851,6 +851,31 @@ test("component server calls use the nearest hydration component identity", asyn
|
|||||||
expect(payload?.component).toBe("CButton");
|
expect(payload?.component).toBe("CButton");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("a parent scope does not inherit a child component RPC identity", async () => {
|
||||||
|
const win = mount(
|
||||||
|
`<div data-scope="" data-wrn-hydration="Home:page123">` +
|
||||||
|
`<div data-scope="" data-wrn-hydration="CButton:button123">` +
|
||||||
|
`<div data-wrn-events="click"></div></div>` +
|
||||||
|
`<button id="parent-action" data-on-click="server.handleClick()">go</button>` +
|
||||||
|
`</div>`,
|
||||||
|
);
|
||||||
|
let payload: { component?: string } | undefined;
|
||||||
|
const globals = globalThis as Record<string, unknown>;
|
||||||
|
const originalFetch = globals.fetch;
|
||||||
|
globals.fetch = async (_input: RequestInfo | URL, init?: RequestInit) => {
|
||||||
|
payload = JSON.parse(String(init?.body));
|
||||||
|
return Response.json({ ok: true });
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
(win.document.querySelector("#parent-action") as unknown as HTMLElement).click();
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||||
|
} finally {
|
||||||
|
globals.fetch = originalFetch;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(payload?.component).toBe("Home");
|
||||||
|
});
|
||||||
|
|
||||||
test("component server calls prefer the rendered CSRF token over stale cookies", async () => {
|
test("component server calls prefer the rendered CSRF token over stale cookies", async () => {
|
||||||
const win = mount(
|
const win = mount(
|
||||||
`<meta name="wrnexus-csrf" content="current-token">` +
|
`<meta name="wrnexus-csrf" content="current-token">` +
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/dev-server",
|
"name": "@wrnexus/dev-server",
|
||||||
"version": "0.8.19",
|
"version": "0.8.20",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
Reference in New Issue
Block a user