diff --git a/e2e/react-start/basic-react-query/package.json b/e2e/react-start/basic-react-query/package.json index 804d9e261b2..10af95fc4a0 100644 --- a/e2e/react-start/basic-react-query/package.json +++ b/e2e/react-start/basic-react-query/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/react-start/basic-tsr-config/package.json b/e2e/react-start/basic-tsr-config/package.json index 8b44f2e8aa4..cbecfb27f8b 100644 --- a/e2e/react-start/basic-tsr-config/package.json +++ b/e2e/react-start/basic-tsr-config/package.json @@ -22,7 +22,7 @@ "@types/node": "^22.10.2", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "typescript": "^5.7.2" } } diff --git a/e2e/react-start/basic/package.json b/e2e/react-start/basic/package.json index df7f459ed26..7af52776272 100644 --- a/e2e/react-start/basic/package.json +++ b/e2e/react-start/basic/package.json @@ -35,7 +35,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^7.1.7", diff --git a/e2e/react-start/custom-basepath/package.json b/e2e/react-start/custom-basepath/package.json index c360992d953..70e82bee050 100644 --- a/e2e/react-start/custom-basepath/package.json +++ b/e2e/react-start/custom-basepath/package.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.4.20", "cross-env": "^10.0.0", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "tsx": "^4.20.3", "typescript": "^5.7.2", diff --git a/e2e/react-start/scroll-restoration/package.json b/e2e/react-start/scroll-restoration/package.json index d5e08af19f9..28c8be9661e 100644 --- a/e2e/react-start/scroll-restoration/package.json +++ b/e2e/react-start/scroll-restoration/package.json @@ -32,7 +32,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/react-start/selective-ssr/package.json b/e2e/react-start/selective-ssr/package.json index dd908a12463..6b5b4f0840c 100644 --- a/e2e/react-start/selective-ssr/package.json +++ b/e2e/react-start/selective-ssr/package.json @@ -27,7 +27,7 @@ "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2" } diff --git a/e2e/react-start/serialization-adapters/package.json b/e2e/react-start/serialization-adapters/package.json index 897ca774b8d..a9ac7943074 100644 --- a/e2e/react-start/serialization-adapters/package.json +++ b/e2e/react-start/serialization-adapters/package.json @@ -27,7 +27,7 @@ "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2" } diff --git a/e2e/react-start/server-functions/package.json b/e2e/react-start/server-functions/package.json index e3453f32bf8..8bb866d7cd9 100644 --- a/e2e/react-start/server-functions/package.json +++ b/e2e/react-start/server-functions/package.json @@ -33,7 +33,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/react-start/server-functions/src/routes/abort-signal.tsx b/e2e/react-start/server-functions/src/routes/abort-signal.tsx index 7de90f3143a..b46a8c0b7bf 100644 --- a/e2e/react-start/server-functions/src/routes/abort-signal.tsx +++ b/e2e/react-start/server-functions/src/routes/abort-signal.tsx @@ -1,33 +1,51 @@ import { createFileRoute } from '@tanstack/react-router' -import { createServerFn } from '@tanstack/react-start' +import { createServerFn, createServerOnlyFn } from '@tanstack/react-start' +import { getRequest } from '@tanstack/react-start/server' import React from 'react' export const Route = createFileRoute('/abort-signal')({ - component: RouteComponent, + component: () => { + return ( +
+ +
+ +
+ ) + }, }) -const abortableServerFn = createServerFn().handler( - async ({ context, signal }) => { - console.log('server function started', { context, signal }) - return new Promise((resolve, reject) => { - if (signal.aborted) { - return reject(new Error('Aborted before start')) - } - const timerId = setTimeout(() => { - console.log('server function finished') - resolve('server function result') - }, 1000) - const onAbort = () => { - clearTimeout(timerId) - console.log('server function aborted') - reject(new Error('Aborted')) - } - signal.addEventListener('abort', onAbort, { once: true }) - }) - }, -) +const fn = createServerOnlyFn(async () => { + const request = getRequest() + const signal = request.signal + console.log('server function started', { signal }) + return new Promise((resolve, reject) => { + if (signal.aborted) { + return reject(new Error('Aborted before start')) + } + const timerId = setTimeout(() => { + console.log('server function finished') + resolve('server function result') + }, 1000) + const onAbort = () => { + clearTimeout(timerId) + console.log('server function aborted') + reject(new Error('Aborted')) + } + signal.addEventListener('abort', onAbort, { once: true }) + }) +}) + +const abortableServerFnPost = createServerFn({ method: 'POST' }).handler(fn) -function RouteComponent() { +const abortableServerFnGet = createServerFn({ method: 'GET' }).handler(fn) +function Test({ + method, + fn, +}: { + method: string + fn: typeof abortableServerFnPost | typeof abortableServerFnGet +}) { const [errorMessage, setErrorMessage] = React.useState( undefined, ) @@ -39,12 +57,13 @@ function RouteComponent() { } return (
+

Test {method}


- result:

{result ?? '$undefined'}

+ result:

{result ?? '$undefined'}

message:{' '} -

{errorMessage ?? '$undefined'}

+

+ {errorMessage ?? '$undefined'} +

) diff --git a/e2e/react-start/server-functions/tests/server-functions.spec.ts b/e2e/react-start/server-functions/tests/server-functions.spec.ts index 08f48524cb8..ebb763427cb 100644 --- a/e2e/react-start/server-functions/tests/server-functions.spec.ts +++ b/e2e/react-start/server-functions/tests/server-functions.spec.ts @@ -270,46 +270,52 @@ test.describe('server function sets cookies', () => { }) test.describe('aborting a server function call', () => { - test('without aborting', async ({ page }) => { - await page.goto('/abort-signal') + ;['get', 'post'].forEach((method) => { + test(`without aborting ${method}`, async ({ page }) => { + await page.goto('/abort-signal') - await page.waitForLoadState('networkidle') + await page.waitForLoadState('networkidle') - await page.getByTestId('run-without-abort-btn').click() - await page.waitForLoadState('networkidle') - await page.waitForSelector( - '[data-testid="result"]:has-text("server function result")', - ) - await page.waitForSelector( - '[data-testid="errorMessage"]:has-text("$undefined")', - ) + await page.getByTestId(`run-without-abort-btn-${method}`).click() + await page.waitForLoadState('networkidle') + await page.waitForSelector( + `[data-testid="result-${method}"]:has-text("server function result")`, + ) + await page.waitForSelector( + `[data-testid="errorMessage-${method}"]:has-text("$undefined")`, + ) - const result = (await page.getByTestId('result').textContent()) || '' - expect(result).toBe('server function result') + const result = + (await page.getByTestId(`result-${method}`).textContent()) || '' + expect(result).toBe('server function result') - const errorMessage = - (await page.getByTestId('errorMessage').textContent()) || '' - expect(errorMessage).toBe('$undefined') - }) + const errorMessage = + (await page.getByTestId(`errorMessage-${method}`).textContent()) || '' + expect(errorMessage).toBe('$undefined') + }) - test('aborting', async ({ page }) => { - await page.goto('/abort-signal') + test(`aborting ${method}`, async ({ page }) => { + await page.goto('/abort-signal') - await page.waitForLoadState('networkidle') + await page.waitForLoadState('networkidle') - await page.getByTestId('run-with-abort-btn').click() - await page.waitForLoadState('networkidle') - await page.waitForSelector('[data-testid="result"]:has-text("$undefined")') - await page.waitForSelector( - '[data-testid="errorMessage"]:has-text("aborted")', - ) + await page.getByTestId(`run-with-abort-btn-${method}`).click() + await page.waitForLoadState('networkidle') + await page.waitForSelector( + `[data-testid="result-${method}"]:has-text("$undefined")`, + ) + await page.waitForSelector( + `[data-testid="errorMessage-${method}"]:has-text("aborted")`, + ) - const result = (await page.getByTestId('result').textContent()) || '' - expect(result).toBe('$undefined') + const result = + (await page.getByTestId(`result-${method}`).textContent()) || '' + expect(result).toBe('$undefined') - const errorMessage = - (await page.getByTestId('errorMessage').textContent()) || '' - expect(errorMessage).toContain('abort') + const errorMessage = + (await page.getByTestId(`errorMessage-${method}`).textContent()) || '' + expect(errorMessage).toContain('abort') + }) }) }) diff --git a/e2e/react-start/server-routes/package.json b/e2e/react-start/server-routes/package.json index f639e907a43..d169564e26e 100644 --- a/e2e/react-start/server-routes/package.json +++ b/e2e/react-start/server-routes/package.json @@ -33,7 +33,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/react-start/virtual-routes/package.json b/e2e/react-start/virtual-routes/package.json index a9ef66b88c3..55a2cead917 100644 --- a/e2e/react-start/virtual-routes/package.json +++ b/e2e/react-start/virtual-routes/package.json @@ -32,7 +32,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/react-start/website/package.json b/e2e/react-start/website/package.json index c431fbcb8f9..8c910ddcea7 100644 --- a/e2e/react-start/website/package.json +++ b/e2e/react-start/website/package.json @@ -29,7 +29,7 @@ "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^7.1.7", diff --git a/e2e/solid-start/basic-tsr-config/package.json b/e2e/solid-start/basic-tsr-config/package.json index 4edc7c69639..3441164ca78 100644 --- a/e2e/solid-start/basic-tsr-config/package.json +++ b/e2e/solid-start/basic-tsr-config/package.json @@ -20,7 +20,7 @@ "devDependencies": { "@tanstack/router-e2e-utils": "workspace:^", "@types/node": "^22.10.2", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", "vite-tsconfig-paths": "^5.1.4" diff --git a/e2e/solid-start/basic/package.json b/e2e/solid-start/basic/package.json index 5d81c201165..4cde559f337 100644 --- a/e2e/solid-start/basic/package.json +++ b/e2e/solid-start/basic/package.json @@ -33,7 +33,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", diff --git a/e2e/solid-start/custom-basepath/package.json b/e2e/solid-start/custom-basepath/package.json index 4b7eba3861e..4ab746d0b20 100644 --- a/e2e/solid-start/custom-basepath/package.json +++ b/e2e/solid-start/custom-basepath/package.json @@ -25,7 +25,7 @@ "autoprefixer": "^10.4.20", "cross-env": "^10.0.0", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "tsx": "^4.20.3", "typescript": "^5.7.2", diff --git a/e2e/solid-start/scroll-restoration/package.json b/e2e/solid-start/scroll-restoration/package.json index e52934718a9..2a9001be5f2 100644 --- a/e2e/solid-start/scroll-restoration/package.json +++ b/e2e/solid-start/scroll-restoration/package.json @@ -28,7 +28,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", diff --git a/e2e/solid-start/selective-ssr/package.json b/e2e/solid-start/selective-ssr/package.json index b40fb309a75..93aa19bb8b8 100644 --- a/e2e/solid-start/selective-ssr/package.json +++ b/e2e/solid-start/selective-ssr/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@tanstack/router-e2e-utils": "workspace:^", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^7.1.7", diff --git a/e2e/solid-start/server-functions/package.json b/e2e/solid-start/server-functions/package.json index e33f61a89cc..23bfbf70b3e 100644 --- a/e2e/solid-start/server-functions/package.json +++ b/e2e/solid-start/server-functions/package.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", diff --git a/e2e/solid-start/server-routes/package.json b/e2e/solid-start/server-routes/package.json index eb551e7f70c..1e03b0dfcbd 100644 --- a/e2e/solid-start/server-routes/package.json +++ b/e2e/solid-start/server-routes/package.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.4.20", "combinate": "^1.1.11", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", diff --git a/e2e/solid-start/website/package.json b/e2e/solid-start/website/package.json index 3ef34721ff5..8b9420aa113 100644 --- a/e2e/solid-start/website/package.json +++ b/e2e/solid-start/website/package.json @@ -26,7 +26,7 @@ "@types/node": "^22.10.2", "autoprefixer": "^10.4.20", "postcss": "^8.5.1", - "srvx": "^0.8.6", + "srvx": "^0.8.16", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite-plugin-solid": "^2.11.8", diff --git a/examples/react/start-basic/wrangler.jsonc b/examples/react/start-basic/wrangler.jsonc new file mode 100644 index 00000000000..52946ad17df --- /dev/null +++ b/examples/react/start-basic/wrangler.jsonc @@ -0,0 +1,44 @@ +/** + * For more details on how to configure Wrangler, refer to: + * https://developers.cloudflare.com/workers/wrangler/configuration/ + */ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "start-basic-cloudflare", + "compatibility_flags": ["nodejs_compat"], + "compatibility_date": "2025-04-04", + "main": "./workers/app.ts", + "observability": { + "enabled": true, + }, + /** + * Smart Placement + * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement + */ + // "placement": { "mode": "smart" } + /** + * Bindings + * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including + * databases, object storage, AI inference, real-time communication and more. + * https://developers.cloudflare.com/workers/runtime-apis/bindings/ + */ + /** + * Environment Variables + * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables + */ + // "vars": { "MY_VARIABLE": "production_value" } + /** + * Note: Use secrets to store sensitive data. + * https://developers.cloudflare.com/workers/configuration/secrets/ + */ + /** + * Static Assets + * https://developers.cloudflare.com/workers/static-assets/binding/ + */ + // "assets": { "directory": "./public/", "binding": "ASSETS" } + /** + * Service Bindings (communicate between multiple Workers) + * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings + */ + // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] +} diff --git a/packages/start-client-core/src/createServerFn.ts b/packages/start-client-core/src/createServerFn.ts index bc95a6b5b9a..db2e245ae53 100644 --- a/packages/start-client-core/src/createServerFn.ts +++ b/packages/start-client-core/src/createServerFn.ts @@ -129,7 +129,7 @@ export const createServerFn: CreateServerFn = (options, __opts) => { ...extractedFn, // The extracted function on the server-side calls // this function - __executeServer: async (opts: any, signal: AbortSignal) => { + __executeServer: async (opts: any) => { const startContext = getStartContextServerOnly() const serverContextAfterGlobalMiddlewares = startContext.contextAfterGlobalMiddlewares @@ -140,7 +140,6 @@ export const createServerFn: CreateServerFn = (options, __opts) => { ...serverContextAfterGlobalMiddlewares, ...opts.context, }, - signal, request: startContext.request, } @@ -324,7 +323,6 @@ export interface ServerFnCtx< method: TMethod data: Expand> context: Expand> - signal: AbortSignal } export type CompiledFetcherFn = { diff --git a/packages/start-client-core/src/tests/createServerFn.test-d.ts b/packages/start-client-core/src/tests/createServerFn.test-d.ts index 15367e4dbe0..728e7751977 100644 --- a/packages/start-client-core/src/tests/createServerFn.test-d.ts +++ b/packages/start-client-core/src/tests/createServerFn.test-d.ts @@ -26,7 +26,6 @@ test('createServerFn without middleware', () => { method: 'GET' context: undefined data: undefined - signal: AbortSignal }>() }) }) @@ -49,7 +48,6 @@ test('createServerFn with validator', () => { data: { a: string } - signal: AbortSignal }>() }) @@ -112,7 +110,6 @@ test('createServerFn with middleware and context', () => { readonly d: 'd' } data: undefined - signal: AbortSignal }>() }) }) @@ -155,7 +152,6 @@ describe('createServerFn with middleware and validator', () => { readonly outputB: 'outputB' readonly outputC: 'outputC' } - signal: AbortSignal }>() return 'some-data' as const @@ -252,7 +248,6 @@ test('createServerFn where validator is a primitive', () => { method: 'GET' context: undefined data: 'c' - signal: AbortSignal }>() }) }) @@ -265,7 +260,6 @@ test('createServerFn where validator is optional if object is optional', () => { method: 'GET' context: undefined data: 'c' | undefined - signal: AbortSignal }>() }) @@ -287,7 +281,6 @@ test('createServerFn where data is optional if there is no validator', () => { method: 'GET' context: undefined data: undefined - signal: AbortSignal }>() }) @@ -459,7 +452,6 @@ test('incrementally building createServerFn with multiple middleware calls', () readonly a: 'a' } data: undefined - signal: AbortSignal }>() }) @@ -480,7 +472,6 @@ test('incrementally building createServerFn with multiple middleware calls', () readonly b: 'b' } data: undefined - signal: AbortSignal }>() }) @@ -502,7 +493,6 @@ test('incrementally building createServerFn with multiple middleware calls', () readonly c: 'c' } data: undefined - signal: AbortSignal }>() }) }) @@ -535,7 +525,6 @@ test('compose middlewares and server function factories', () => { readonly b: 'b' } data: undefined - signal: AbortSignal }>() }) }) diff --git a/packages/start-plugin-core/package.json b/packages/start-plugin-core/package.json index fba35a10239..be533c53b56 100644 --- a/packages/start-plugin-core/package.json +++ b/packages/start-plugin-core/package.json @@ -26,7 +26,7 @@ ], "scripts": { "clean": "rimraf ./dist && rimraf ./coverage", - "clean:snapshots": "rimraf **/*snapshot* --glob", + "clean:snapshots": "rimraf **/*snapshots* --glob", "test": "pnpm test:eslint && pnpm test:types && pnpm test:build && pnpm test:unit", "test:unit": "vitest", "test:eslint": "eslint ./src", @@ -76,7 +76,7 @@ "cheerio": "^1.0.0", "exsolve": "^1.0.7", "pathe": "^2.0.3", - "srvx": "^0.8.2", + "srvx": "^0.8.16", "tinyglobby": "^0.2.15", "ufo": "^1.5.4", "vitefu": "^1.1.1", diff --git a/packages/start-plugin-core/src/create-server-fn-plugin/handleCreateServerFn.ts b/packages/start-plugin-core/src/create-server-fn-plugin/handleCreateServerFn.ts index 75ebfecdbff..b46bb8416c8 100644 --- a/packages/start-plugin-core/src/create-server-fn-plugin/handleCreateServerFn.ts +++ b/packages/start-plugin-core/src/create-server-fn-plugin/handleCreateServerFn.ts @@ -133,7 +133,7 @@ export function handleCreateServerFn( handlerFnPath.replaceWith( t.arrowFunctionExpression( - [t.identifier('opts'), t.identifier('signal')], + [t.identifier('opts')], t.blockStatement( // Everything in here is server-only, since the client // will strip out anything in the 'use server' directive. @@ -141,7 +141,7 @@ export function handleCreateServerFn( t.returnStatement( t.callExpression( t.identifier(`${existingVariableName}.__executeServer`), - [t.identifier('opts'), t.identifier('signal')], + [t.identifier('opts')], ), ), ], diff --git a/packages/start-plugin-core/tests/createServerFn/createServerFn.test.ts b/packages/start-plugin-core/tests/createServerFn/createServerFn.test.ts index 325459b694f..2218babf201 100644 --- a/packages/start-plugin-core/tests/createServerFn/createServerFn.test.ts +++ b/packages/start-plugin-core/tests/createServerFn/createServerFn.test.ts @@ -75,10 +75,10 @@ describe('createServerFn compiles correctly', async () => { expect(compiledResultClient!.code).toMatchInlineSnapshot(` "import { createServerFn } from '@tanstack/react-start'; - const myServerFn = createServerFn().handler((opts, signal) => { + const myServerFn = createServerFn().handler(opts => { "use server"; - return myServerFn.__executeServer(opts, signal); + return myServerFn.__executeServer(opts); });" `) @@ -87,10 +87,10 @@ describe('createServerFn compiles correctly', async () => { const myFunc = () => { return 'hello from the server'; }; - const myServerFn = createServerFn().handler((opts, signal) => { + const myServerFn = createServerFn().handler(opts => { "use server"; - return myServerFn.__executeServer(opts, signal); + return myServerFn.__executeServer(opts); }, myFunc);" `) }) @@ -116,15 +116,15 @@ describe('createServerFn compiles correctly', async () => { expect(compiledResult!.code).toMatchInlineSnapshot(` "import { createServerFn } from '@tanstack/react-start'; - export const exportedFn = createServerFn().handler((opts, signal) => { + export const exportedFn = createServerFn().handler(opts => { "use server"; - return exportedFn.__executeServer(opts, signal); + return exportedFn.__executeServer(opts); }); - const nonExportedFn = createServerFn().handler((opts, signal) => { + const nonExportedFn = createServerFn().handler(opts => { "use server"; - return nonExportedFn.__executeServer(opts, signal); + return nonExportedFn.__executeServer(opts); });" `) @@ -138,18 +138,18 @@ describe('createServerFn compiles correctly', async () => { expect(compiledResultServer!.code).toMatchInlineSnapshot(` "import { createServerFn } from '@tanstack/react-start'; const exportedVar = 'exported'; - export const exportedFn = createServerFn().handler((opts, signal) => { + export const exportedFn = createServerFn().handler(opts => { "use server"; - return exportedFn.__executeServer(opts, signal); + return exportedFn.__executeServer(opts); }, async () => { return exportedVar; }); const nonExportedVar = 'non-exported'; - const nonExportedFn = createServerFn().handler((opts, signal) => { + const nonExportedFn = createServerFn().handler(opts => { "use server"; - return nonExportedFn.__executeServer(opts, signal); + return nonExportedFn.__executeServer(opts); }, async () => { return nonExportedVar; });" diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructured.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructured.tsx index c308ef05127..f1f253384f9 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructured.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructured.tsx @@ -1,50 +1,50 @@ import { createServerFn } from '@tanstack/react-start'; export const withUseServer = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }); export const withArrowFunction = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withArrowFunction.__executeServer(opts, signal); + return withArrowFunction.__executeServer(opts); }); export const withArrowFunctionAndFunction = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withArrowFunctionAndFunction.__executeServer(opts, signal); + return withArrowFunctionAndFunction.__executeServer(opts); }); export const withoutUseServer = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }); export const withVariable = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }); export const withZodValidator = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }); export const withValidatorFn = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withValidatorFn.__executeServer(opts, signal); + return withValidatorFn.__executeServer(opts); }); \ No newline at end of file diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructuredRename.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructuredRename.tsx index 2419360ce2a..c75c891df9b 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructuredRename.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnDestructuredRename.tsx @@ -1,29 +1,29 @@ import { createServerFn as serverFn } from '@tanstack/react-start'; export const withUseServer = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }); export const withoutUseServer = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }); export const withVariable = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }); export const withZodValidator = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }); \ No newline at end of file diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnStarImport.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnStarImport.tsx index b308d505f25..b1dfc504618 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnStarImport.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnStarImport.tsx @@ -1,29 +1,29 @@ import * as TanStackStart from '@tanstack/react-start'; export const withUseServer = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }); export const withoutUseServer = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }); export const withVariable = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }); export const withZodValidator = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }); \ No newline at end of file diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnValidator.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnValidator.tsx index 5896ad8c1df..53a5152573d 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnValidator.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/createServerFnValidator.tsx @@ -1,8 +1,8 @@ import { createServerFn } from '@tanstack/react-start'; export const withUseServer = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }); \ No newline at end of file diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/factory.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/factory.tsx index fe95c7e47ee..9d15f341e03 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/factory.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/factory.tsx @@ -23,15 +23,15 @@ const adminMiddleware = createMiddleware({ }); export const createAuthServerFn = createServerFn().middleware([authMiddleware]); const createAdminServerFn = createAuthServerFn().middleware([adminMiddleware]); -export const myAuthedFn = createAuthServerFn().handler((opts, signal) => { +export const myAuthedFn = createAuthServerFn().handler(opts => { "use server"; - return myAuthedFn.__executeServer(opts, signal); + return myAuthedFn.__executeServer(opts); }); -export const deleteUserFn = createAdminServerFn().handler((opts, signal) => { +export const deleteUserFn = createAdminServerFn().handler(opts => { "use server"; - return deleteUserFn.__executeServer(opts, signal); + return deleteUserFn.__executeServer(opts); }); function createFakeFn() { return { diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/client/isomorphic-fns.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/client/isomorphic-fns.tsx index 1de861275b8..30f005e74ba 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/client/isomorphic-fns.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/client/isomorphic-fns.tsx @@ -2,16 +2,16 @@ import { createFileRoute } from '@tanstack/react-router'; import { createIsomorphicFn, createServerFn } from '@tanstack/react-start'; import { useState } from 'react'; const getEnv = createIsomorphicFn().server(() => 'server').client(() => 'client'); -const getServerEnv = createServerFn().handler((opts, signal) => { +const getServerEnv = createServerFn().handler(opts => { "use server"; - return getServerEnv.__executeServer(opts, signal); + return getServerEnv.__executeServer(opts); }); const getEcho = createIsomorphicFn().server((input: string) => 'server received ' + input).client(input => 'client received ' + input); -const getServerEcho = createServerFn().handler((opts, signal) => { +const getServerEcho = createServerFn().handler(opts => { "use server"; - return getServerEcho.__executeServer(opts, signal); + return getServerEcho.__executeServer(opts); }); export const Route = createFileRoute('/isomorphic-fns')({ component: RouteComponent, diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructured.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructured.tsx index 0f0c5f651dd..f9209aa7382 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructured.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructured.tsx @@ -2,10 +2,10 @@ import { createServerFn } from '@tanstack/react-start'; import { z } from 'zod'; export const withUseServer = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }, async function () { console.info('Fetching posts...'); await new Promise(r => setTimeout(r, 500)); @@ -13,24 +13,24 @@ export const withUseServer = createServerFn({ }); export const withArrowFunction = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withArrowFunction.__executeServer(opts, signal); + return withArrowFunction.__executeServer(opts); }, async () => null); export const withArrowFunctionAndFunction = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withArrowFunctionAndFunction.__executeServer(opts, signal); + return withArrowFunctionAndFunction.__executeServer(opts); }, async () => test()); export const withoutUseServer = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }, async () => { console.info('Fetching posts...'); await new Promise(r => setTimeout(r, 500)); @@ -38,10 +38,10 @@ export const withoutUseServer = createServerFn({ }); export const withVariable = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }, abstractedFunction); async function abstractedFunction() { console.info('Fetching posts...'); @@ -55,10 +55,10 @@ function zodValidator(schema: TSchema, fn: } export const withZodValidator = createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }, zodValidator(z.number(), input => { return { 'you gave': input @@ -66,10 +66,10 @@ export const withZodValidator = createServerFn({ })); export const withValidatorFn = createServerFn({ method: 'GET' -}).inputValidator(z.number()).handler((opts, signal) => { +}).inputValidator(z.number()).handler(opts => { "use server"; - return withValidatorFn.__executeServer(opts, signal); + return withValidatorFn.__executeServer(opts); }, async ({ input }) => { diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructuredRename.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructuredRename.tsx index 358c28448d0..9f81860ecc6 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructuredRename.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnDestructuredRename.tsx @@ -2,10 +2,10 @@ import { createServerFn as serverFn } from '@tanstack/react-start'; import { z } from 'zod'; export const withUseServer = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }, async function () { console.info('Fetching posts...'); await new Promise(r => setTimeout(r, 500)); @@ -13,10 +13,10 @@ export const withUseServer = serverFn({ }); export const withoutUseServer = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }, async () => { console.info('Fetching posts...'); await new Promise(r => setTimeout(r, 500)); @@ -24,10 +24,10 @@ export const withoutUseServer = serverFn({ }); export const withVariable = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }, abstractedFunction); async function abstractedFunction() { console.info('Fetching posts...'); @@ -41,10 +41,10 @@ function zodValidator(schema: TSchema, fn: } export const withZodValidator = serverFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }, zodValidator(z.number(), input => { return { 'you gave': input diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnStarImport.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnStarImport.tsx index 44f67330725..9032395518d 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnStarImport.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnStarImport.tsx @@ -2,10 +2,10 @@ import * as TanStackStart from '@tanstack/react-start'; import { z } from 'zod'; export const withUseServer = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }, async function () { 'use server'; @@ -15,10 +15,10 @@ export const withUseServer = TanStackStart.createServerFn({ }); export const withoutUseServer = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withoutUseServer.__executeServer(opts, signal); + return withoutUseServer.__executeServer(opts); }, async () => { console.info('Fetching posts...'); await new Promise(r => setTimeout(r, 500)); @@ -26,10 +26,10 @@ export const withoutUseServer = TanStackStart.createServerFn({ }); export const withVariable = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withVariable.__executeServer(opts, signal); + return withVariable.__executeServer(opts); }, abstractedFunction); async function abstractedFunction() { console.info('Fetching posts...'); @@ -43,10 +43,10 @@ function zodValidator(schema: TSchema, fn: } export const withZodValidator = TanStackStart.createServerFn({ method: 'GET' -}).handler((opts, signal) => { +}).handler(opts => { "use server"; - return withZodValidator.__executeServer(opts, signal); + return withZodValidator.__executeServer(opts); }, zodValidator(z.number(), input => { return { 'you gave': input diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnValidator.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnValidator.tsx index 1ca81b02603..e33554d9c78 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnValidator.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/createServerFnValidator.tsx @@ -2,10 +2,10 @@ import { createServerFn } from '@tanstack/react-start'; import { z } from 'zod'; export const withUseServer = createServerFn({ method: 'GET' -}).inputValidator(z.number()).handler((opts, signal) => { +}).inputValidator(z.number()).handler(opts => { "use server"; - return withUseServer.__executeServer(opts, signal); + return withUseServer.__executeServer(opts); }, ({ input }) => input + 1); \ No newline at end of file diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/factory.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/factory.tsx index 388e9761c3b..47e37e0c4e0 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/factory.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/factory.tsx @@ -23,17 +23,17 @@ const adminMiddleware = createMiddleware({ }); export const createAuthServerFn = createServerFn().middleware([authMiddleware]); const createAdminServerFn = createAuthServerFn().middleware([adminMiddleware]); -export const myAuthedFn = createAuthServerFn().handler((opts, signal) => { +export const myAuthedFn = createAuthServerFn().handler(opts => { "use server"; - return myAuthedFn.__executeServer(opts, signal); + return myAuthedFn.__executeServer(opts); }, () => { return 'myAuthedFn'; }); -export const deleteUserFn = createAdminServerFn().handler((opts, signal) => { +export const deleteUserFn = createAdminServerFn().handler(opts => { "use server"; - return deleteUserFn.__executeServer(opts, signal); + return deleteUserFn.__executeServer(opts); }, () => { return 'deleteUserFn'; }); diff --git a/packages/start-plugin-core/tests/createServerFn/snapshots/server/isomorphic-fns.tsx b/packages/start-plugin-core/tests/createServerFn/snapshots/server/isomorphic-fns.tsx index 08e55500c90..264ee4440b4 100644 --- a/packages/start-plugin-core/tests/createServerFn/snapshots/server/isomorphic-fns.tsx +++ b/packages/start-plugin-core/tests/createServerFn/snapshots/server/isomorphic-fns.tsx @@ -2,16 +2,16 @@ import { createFileRoute } from '@tanstack/react-router'; import { createIsomorphicFn, createServerFn } from '@tanstack/react-start'; import { useState } from 'react'; const getEnv = createIsomorphicFn().server(() => 'server').client(() => 'client'); -const getServerEnv = createServerFn().handler((opts, signal) => { +const getServerEnv = createServerFn().handler(opts => { "use server"; - return getServerEnv.__executeServer(opts, signal); + return getServerEnv.__executeServer(opts); }, () => getEnv()); const getEcho = createIsomorphicFn().server((input: string) => 'server received ' + input).client(input => 'client received ' + input); -const getServerEcho = createServerFn().inputValidator((input: string) => input).handler((opts, signal) => { +const getServerEcho = createServerFn().inputValidator((input: string) => input).handler(opts => { "use server"; - return getServerEcho.__executeServer(opts, signal); + return getServerEcho.__executeServer(opts); }, ({ data }) => getEcho(data)); diff --git a/packages/start-server-core/src/server-functions-handler.ts b/packages/start-server-core/src/server-functions-handler.ts index fa0aa995b88..f0148238a68 100644 --- a/packages/start-server-core/src/server-functions-handler.ts +++ b/packages/start-server-core/src/server-functions-handler.ts @@ -19,11 +19,6 @@ export const handleServerAction = async ({ request: Request context: any }) => { - const controller = new AbortController() - const signal = controller.signal - const abort = () => controller.abort() - request.signal.addEventListener('abort', abort) - if (regex === undefined) { regex = new RegExp(`${process.env.TSS_SERVER_FN_BASE}([^/?#]+)`) } @@ -94,7 +89,7 @@ export const handleServerAction = async ({ } catch {} } - return await action(params, signal) + return await action(params) } // Get requests use the query string @@ -109,7 +104,7 @@ export const handleServerAction = async ({ payload = payload ? parsePayload(JSON.parse(payload)) : payload payload.context = { ...context, ...payload.context } // Send it through! - return await action(payload, signal) + return await action(payload) } if (method.toLowerCase() !== 'post') { @@ -127,7 +122,7 @@ export const handleServerAction = async ({ if (isCreateServerFn) { const payload = parsePayload(jsonPayload) payload.context = { ...payload.context, ...context } - return await action(payload, signal) + return await action(payload) } // Otherwise, we'll spread the payload. Need to @@ -306,8 +301,6 @@ export const handleServerAction = async ({ } })() - request.signal.removeEventListener('abort', abort) - return response } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad8e1808efd..db905c619cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1037,8 +1037,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1244,8 +1244,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1287,8 +1287,8 @@ importers: specifier: ^19.0.3 version: 19.0.3(@types/react@19.0.8) srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 typescript: specifier: ^5.7.2 version: 5.8.2 @@ -1348,8 +1348,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1497,8 +1497,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1555,8 +1555,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1610,8 +1610,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1683,8 +1683,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1759,8 +1759,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1878,8 +1878,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -1942,8 +1942,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2537,8 +2537,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2577,8 +2577,8 @@ importers: specifier: 22.10.2 version: 22.10.2 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 typescript: specifier: ^5.7.2 version: 5.8.2 @@ -2632,8 +2632,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2702,8 +2702,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2739,8 +2739,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2809,8 +2809,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2876,8 +2876,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -2974,8 +2974,8 @@ importers: specifier: ^8.5.1 version: 8.5.3 srvx: - specifier: ^0.8.6 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -5346,7 +5346,7 @@ importers: version: 7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6(@types/node@22.10.2)(playwright@1.52.0)(typescript@5.9.2)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))(vitest@3.2.4))(@vitest/ui@3.0.6(vitest@3.2.4))(jiti@2.6.0)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) + version: 3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6)(@vitest/ui@3.0.6)(jiti@2.6.0)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) web-vitals: specifier: ^5.1.0 version: 5.1.0 @@ -7505,8 +7505,8 @@ importers: specifier: ^2.0.3 version: 2.0.3 srvx: - specifier: ^0.8.2 - version: 0.8.7 + specifier: ^0.8.16 + version: 0.8.16 tinyglobby: specifier: ^0.2.15 version: 0.2.15 @@ -16026,8 +16026,8 @@ packages: peerDependencies: kysely: '*' - srvx@0.8.7: - resolution: {integrity: sha512-g3+15LlwVOGL2QpoTPZlvRjg+9a5Tx/69CatXjFP6txvhIaW2FmGyzJfb8yft5wyfGddvJmP/Yx+e/uNDMRSLQ==} + srvx@0.8.16: + resolution: {integrity: sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==} engines: {node: '>=20.16.0'} hasBin: true @@ -24182,7 +24182,7 @@ snapshots: cookie-es: 2.0.0 fetchdts: 0.1.7 rou3: 0.7.5 - srvx: 0.8.7 + srvx: 0.8.16 handle-thing@2.0.1: {} @@ -26519,9 +26519,7 @@ snapshots: '@sqlite.org/sqlite-wasm': 3.48.0-build4 kysely: 0.27.6 - srvx@0.8.7: - dependencies: - cookie-es: 2.0.0 + srvx@0.8.16: {} stable-hash-x@0.2.0: {} @@ -27349,7 +27347,7 @@ snapshots: optionalDependencies: vite: 7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) - vitest@3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6(@types/node@22.10.2)(playwright@1.52.0)(typescript@5.9.2)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))(vitest@3.2.4))(@vitest/ui@3.0.6(vitest@3.2.4))(jiti@2.6.0)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0): + vitest@3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6)(@vitest/ui@3.0.6)(jiti@2.6.0)(jsdom@25.0.1)(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -27378,7 +27376,7 @@ snapshots: '@types/node': 22.10.2 '@vitest/browser': 3.0.6(@types/node@22.10.2)(playwright@1.52.0)(typescript@5.9.2)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))(vitest@3.2.4) '@vitest/ui': 3.0.6(vitest@3.2.4) - jsdom: 27.0.0(postcss@8.5.6) + jsdom: 25.0.1 transitivePeerDependencies: - jiti - less @@ -27393,7 +27391,7 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6)(@vitest/ui@3.0.6)(jiti@2.6.0)(jsdom@25.0.1)(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0): + vitest@3.2.4(@types/node@22.10.2)(@vitest/browser@3.0.6)(@vitest/ui@3.0.6)(jiti@2.6.0)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(msw@2.7.0(@types/node@22.10.2)(typescript@5.9.2))(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -27422,7 +27420,7 @@ snapshots: '@types/node': 22.10.2 '@vitest/browser': 3.0.6(@types/node@22.10.2)(playwright@1.52.0)(typescript@5.9.2)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))(vitest@3.2.4) '@vitest/ui': 3.0.6(vitest@3.2.4) - jsdom: 25.0.1 + jsdom: 27.0.0(postcss@8.5.6) transitivePeerDependencies: - jiti - less