Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ async function runServerFunction(ev: RequestEvent) {
const isDev = getRequestMode(ev) === 'dev';
const data = await ev.parseBody();
if (Array.isArray(data)) {
const [qrl, ...args] = data;
const [qrl, args] = data;
if (isQrl(qrl) && qrl.getHash() === serverFnHash) {
let result: unknown;
try {
Expand Down
2 changes: 1 addition & 1 deletion packages/qwik-router/src/runtime/src/server-functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ export const serverQrl = <T extends ServerFunction>(
},
signal: abortSignal,
};
const body = await _serialize([qrl, ...filteredArgs]);
const body = await _serialize([qrl, filteredArgs]);
if (method === 'GET') {
query += `&${QDATA_KEY}=${encodeURIComponent(body)}`;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ const serverFunctionB = server$(async function b() {
return this.method;
});

const argsChecker = server$(async function (...args: any[]) {
return args.map(String).join(",");
});

export const MultipleServerFunctionsInvokedInTask = component$(() => {
const methodA = useSignal("");
const methodB = useSignal("");
Expand All @@ -61,6 +65,12 @@ export default component$(() => {
const userAgentEvent = useSignal("");
const loader = useGetUserAgent();
const streamingLogs = useSignal("");
const serverArgsReceived = useSignal("");
const clientArgsReceived = useSignal("");

useTask$(async () => {
serverArgsReceived.value = await argsChecker(1, 1, 1);
});

useTask$(async () => {
userAgent.value = await getUserAgent();
Expand Down Expand Up @@ -100,6 +110,14 @@ export default component$(() => {
</button>
</section>
<MultipleServerFunctionsInvokedInTask />
<button
id="args-checker-button"
onClick$={async () => {
clientArgsReceived.value = await argsChecker(10, 10);
}}
>
Count Args: {serverArgsReceived.value} / {clientArgsReceived.value}
</button>
</>
);
});
10 changes: 10 additions & 0 deletions starters/e2e/qwikrouter/server.e2e.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
import { expect, test } from "@playwright/test";

test.describe("server$", () => {
/** Checks that arguments weren't deduplicated or added */
test("receives exactly the args given", async ({ page }) => {
await page.goto("/qwikrouter-test/server-func/");
const button = page.locator("#args-checker-button");

await expect(button).toHaveText("Count Args: 1,1,1 / ");
await button.click();
await expect(button).toHaveText("Count Args: 1,1,1 / 10,10");
});

test("this is available", async ({ page }) => {
await page.goto("/qwikrouter-test/server-func/");
const host = page.locator(".server-host");
Expand Down