From 44e9b3a670d9808a4a6cc96d94a3b923dbefa04c Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:11:56 +0800 Subject: [PATCH 1/6] add split test app --- .github/workflows/platform-tests-all.yml | 5 ++-- .github/workflows/platform-tests-vercel.yml | 23 +++++++++++++++++++ .../test/apps/basic/tsconfig.json | 3 ++- .../test/apps/split/package.json | 20 ++++++++++++++++ .../test/apps/split/playwright.config.js | 1 + .../test/apps/split/src/app.d.ts | 13 +++++++++++ .../test/apps/split/src/app.html | 11 +++++++++ .../test/apps/split/src/hooks.ts | 7 ++++++ .../test/apps/split/src/routes/+layout.svelte | 5 ++++ .../test/apps/split/src/routes/+page.svelte | 5 ++++ .../split/src/routes/reroute/+page.svelte | 5 ++++ .../test/apps/split/test/test.ts | 13 +++++++++++ .../test/apps/split/tsconfig.json | 15 ++++++++++++ .../test/apps/split/vite.config.ts | 13 +++++++++++ pnpm-lock.yaml | 18 +++++++++++++++ 15 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 packages/adapter-vercel/test/apps/split/package.json create mode 100644 packages/adapter-vercel/test/apps/split/playwright.config.js create mode 100644 packages/adapter-vercel/test/apps/split/src/app.d.ts create mode 100644 packages/adapter-vercel/test/apps/split/src/app.html create mode 100644 packages/adapter-vercel/test/apps/split/src/hooks.ts create mode 100644 packages/adapter-vercel/test/apps/split/src/routes/+layout.svelte create mode 100644 packages/adapter-vercel/test/apps/split/src/routes/+page.svelte create mode 100644 packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte create mode 100644 packages/adapter-vercel/test/apps/split/test/test.ts create mode 100644 packages/adapter-vercel/test/apps/split/tsconfig.json create mode 100644 packages/adapter-vercel/test/apps/split/vite.config.ts diff --git a/.github/workflows/platform-tests-all.yml b/.github/workflows/platform-tests-all.yml index ce9f494cc2a2..3b54b30aac21 100644 --- a/.github/workflows/platform-tests-all.yml +++ b/.github/workflows/platform-tests-all.yml @@ -9,7 +9,7 @@ on: default: '' permissions: - contents: read # to fetch code (actions/checkout); `{}` would strip it from the called workflows too + contents: write jobs: vercel: @@ -28,12 +28,11 @@ jobs: uses: ./.github/workflows/platform-tests-node.yml with: sha: ${{ inputs.sha }} + secrets: inherit report-status: if: always() needs: [vercel, netlify, node] - permissions: - contents: write # to create the repository_dispatch event runs-on: ubuntu-latest steps: - name: Determine outcome diff --git a/.github/workflows/platform-tests-vercel.yml b/.github/workflows/platform-tests-vercel.yml index c17c9be6b9d1..13411077f5d0 100644 --- a/.github/workflows/platform-tests-vercel.yml +++ b/.github/workflows/platform-tests-vercel.yml @@ -44,3 +44,26 @@ jobs: with: test-app-dir: packages/adapter-vercel/test/apps/basic deployment-url: ${{ steps.deploy.outputs.deployment-url }} + + test-split: + if: github.repository == 'sveltejs/kit' + runs-on: ubuntu-latest + timeout-minutes: 15 + environment: '@sveltejs/adapter-vercel platform tests' + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + ref: ${{ inputs.sha || github.sha }} + persist-credentials: false + + - uses: ./.github/actions/vercel-deploy + id: deploy + with: + vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID_SPLIT }} + vercel-token: ${{ secrets.VERCEL_TOKEN }} + vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} + + - uses: ./.github/actions/platform-test + with: + test-app-dir: packages/adapter-vercel/test/apps/split + deployment-url: ${{ steps.deploy.outputs.deployment-url }} diff --git a/packages/adapter-vercel/test/apps/basic/tsconfig.json b/packages/adapter-vercel/test/apps/basic/tsconfig.json index ca10a5d09eba..619fe2dd9d72 100644 --- a/packages/adapter-vercel/test/apps/basic/tsconfig.json +++ b/packages/adapter-vercel/test/apps/basic/tsconfig.json @@ -10,5 +10,6 @@ "skipLibCheck": true, "sourceMap": true, "moduleResolution": "bundler" - } + }, + "include": ["src", "test", "playwright.config.js", "vite.config.ts"] } diff --git a/packages/adapter-vercel/test/apps/split/package.json b/packages/adapter-vercel/test/apps/split/package.json new file mode 100644 index 000000000000..cfba7e84a17c --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/package.json @@ -0,0 +1,20 @@ +{ + "name": "test-vercel-basic", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev", + "preview": "vite preview", + "build": "vite build", + "prepare": "svelte-kit sync || echo ''", + "test:platform": "playwright test" + }, + "devDependencies": { + "@sveltejs/kit": "workspace:*", + "@sveltejs/vite-plugin-svelte": "catalog:", + "svelte": "catalog:", + "typescript": "catalog:", + "vite": "catalog:" + }, + "type": "module" +} diff --git a/packages/adapter-vercel/test/apps/split/playwright.config.js b/packages/adapter-vercel/test/apps/split/playwright.config.js new file mode 100644 index 000000000000..33d36b651014 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/playwright.config.js @@ -0,0 +1 @@ +export { config as default } from '../../utils.js'; diff --git a/packages/adapter-vercel/test/apps/split/src/app.d.ts b/packages/adapter-vercel/test/apps/split/src/app.d.ts new file mode 100644 index 000000000000..da08e6da592d --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/packages/adapter-vercel/test/apps/split/src/app.html b/packages/adapter-vercel/test/apps/split/src/app.html new file mode 100644 index 000000000000..f273cc58f7eb --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/packages/adapter-vercel/test/apps/split/src/hooks.ts b/packages/adapter-vercel/test/apps/split/src/hooks.ts new file mode 100644 index 000000000000..6ec0054c5f18 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/hooks.ts @@ -0,0 +1,7 @@ +import type { Reroute } from '@sveltejs/kit'; + +export const reroute: Reroute = ({ url }) => { + if (url.pathname.endsWith('/reroute')) { + return '/reroute'; + } +}; diff --git a/packages/adapter-vercel/test/apps/split/src/routes/+layout.svelte b/packages/adapter-vercel/test/apps/split/src/routes/+layout.svelte new file mode 100644 index 000000000000..a54cfdcb7efa --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + +{@render children()} diff --git a/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte new file mode 100644 index 000000000000..6c1d0b8e3a52 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte @@ -0,0 +1,5 @@ +

Hello from SvelteKit on Vercel

+ + diff --git a/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte new file mode 100644 index 000000000000..a728c1562500 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte @@ -0,0 +1,5 @@ + + +

{page.url.pathname + page.url.search}

diff --git a/packages/adapter-vercel/test/apps/split/test/test.ts b/packages/adapter-vercel/test/apps/split/test/test.ts new file mode 100644 index 000000000000..6705a0c0765f --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/test/test.ts @@ -0,0 +1,13 @@ +import { expect, test } from '@playwright/test'; + +test('basic page renders', async ({ page }) => { + await page.goto('/'); + await expect(page.locator('h1')).toContainText('Hello from SvelteKit on Vercel'); +}); + +test('edge middleware runs reroute before split function', async ({ page }) => { + await page.goto('/reroute'); + await expect(page.locator('p')).toContainText('/reroute'); + await page.goto('/en/reroute'); + await expect(page.locator('p')).toContainText('/en/reroute'); +}); diff --git a/packages/adapter-vercel/test/apps/split/tsconfig.json b/packages/adapter-vercel/test/apps/split/tsconfig.json new file mode 100644 index 000000000000..619fe2dd9d72 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "$app/tsconfig", + "compilerOptions": { + "rewriteRelativeImportExtensions": true, + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "moduleResolution": "bundler" + }, + "include": ["src", "test", "playwright.config.js", "vite.config.ts"] +} diff --git a/packages/adapter-vercel/test/apps/split/vite.config.ts b/packages/adapter-vercel/test/apps/split/vite.config.ts new file mode 100644 index 000000000000..0b40b6378475 --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/vite.config.ts @@ -0,0 +1,13 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; +import adapter from '../../../index.js'; + +export default defineConfig({ + plugins: [ + sveltekit({ + adapter: adapter({ + split: true + }) + }) + ] +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef91f2258c1b..7a26948907df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -451,6 +451,24 @@ importers: specifier: 'catalog:' version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + packages/adapter-vercel/test/apps/split: + devDependencies: + '@sveltejs/kit': + specifier: workspace:* + version: link:../../../../kit + '@sveltejs/vite-plugin-svelte': + specifier: 'catalog:' + version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + svelte: + specifier: 'catalog:' + version: 5.56.3(@typescript-eslint/types@8.61.1) + typescript: + specifier: 'catalog:' + version: 6.0.3 + vite: + specifier: 'catalog:' + version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + packages/amp: devDependencies: '@sveltejs/kit': From 98a197b8e10cd3f31e71ba087384c0940ea3999b Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:16:25 +0800 Subject: [PATCH 2/6] make basic test specific to split app --- .../adapter-vercel/test/apps/split/src/routes/+page.svelte | 1 + .../adapter-vercel/test/apps/split/src/routes/a/+page.svelte | 1 + packages/adapter-vercel/test/apps/split/test/test.ts | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 packages/adapter-vercel/test/apps/split/src/routes/a/+page.svelte diff --git a/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte index 6c1d0b8e3a52..c43069bd9c6d 100644 --- a/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte +++ b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte @@ -1,5 +1,6 @@

Hello from SvelteKit on Vercel

diff --git a/packages/adapter-vercel/test/apps/split/src/routes/a/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/a/+page.svelte new file mode 100644 index 000000000000..445d9a0d621b --- /dev/null +++ b/packages/adapter-vercel/test/apps/split/src/routes/a/+page.svelte @@ -0,0 +1 @@ +

This route will be served by a different function because we use the split config

diff --git a/packages/adapter-vercel/test/apps/split/test/test.ts b/packages/adapter-vercel/test/apps/split/test/test.ts index 6705a0c0765f..666136fbf792 100644 --- a/packages/adapter-vercel/test/apps/split/test/test.ts +++ b/packages/adapter-vercel/test/apps/split/test/test.ts @@ -1,8 +1,10 @@ import { expect, test } from '@playwright/test'; -test('basic page renders', async ({ page }) => { +test('split functions work', async ({ page }) => { await page.goto('/'); await expect(page.locator('h1')).toContainText('Hello from SvelteKit on Vercel'); + await page.goto('/a'); + await expect(page.locator('p')).toContainText(/split config/); }); test('edge middleware runs reroute before split function', async ({ page }) => { From 0110bc51b54e30dd75c7f9651c472db91171ca40 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:20:49 +0800 Subject: [PATCH 3/6] revert --- .github/workflows/platform-tests-all.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/platform-tests-all.yml b/.github/workflows/platform-tests-all.yml index 3b54b30aac21..ce9f494cc2a2 100644 --- a/.github/workflows/platform-tests-all.yml +++ b/.github/workflows/platform-tests-all.yml @@ -9,7 +9,7 @@ on: default: '' permissions: - contents: write + contents: read # to fetch code (actions/checkout); `{}` would strip it from the called workflows too jobs: vercel: @@ -28,11 +28,12 @@ jobs: uses: ./.github/workflows/platform-tests-node.yml with: sha: ${{ inputs.sha }} - secrets: inherit report-status: if: always() needs: [vercel, netlify, node] + permissions: + contents: write # to create the repository_dispatch event runs-on: ubuntu-latest steps: - name: Determine outcome From 9cadb34a894bfdb0b3700ec3be98b6e88c151400 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:25:06 +0800 Subject: [PATCH 4/6] Update package.json --- packages/adapter-vercel/test/apps/split/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-vercel/test/apps/split/package.json b/packages/adapter-vercel/test/apps/split/package.json index cfba7e84a17c..130925759762 100644 --- a/packages/adapter-vercel/test/apps/split/package.json +++ b/packages/adapter-vercel/test/apps/split/package.json @@ -1,5 +1,5 @@ { - "name": "test-vercel-basic", + "name": "test-vercel-split", "version": "0.0.1", "private": true, "scripts": { From c6c2796db425be7c1a6a2ac277cb6f23edbc45d8 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:37:03 +0800 Subject: [PATCH 5/6] move into different branch --- packages/adapter-vercel/test/apps/split/test/test.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/adapter-vercel/test/apps/split/test/test.ts b/packages/adapter-vercel/test/apps/split/test/test.ts index 666136fbf792..95250e9e1d71 100644 --- a/packages/adapter-vercel/test/apps/split/test/test.ts +++ b/packages/adapter-vercel/test/apps/split/test/test.ts @@ -6,10 +6,3 @@ test('split functions work', async ({ page }) => { await page.goto('/a'); await expect(page.locator('p')).toContainText(/split config/); }); - -test('edge middleware runs reroute before split function', async ({ page }) => { - await page.goto('/reroute'); - await expect(page.locator('p')).toContainText('/reroute'); - await page.goto('/en/reroute'); - await expect(page.locator('p')).toContainText('/en/reroute'); -}); From 67c938f1b62a8ad67ccca93ac88b69e09b81c8d3 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 31 Jul 2026 22:38:03 +0800 Subject: [PATCH 6/6] move --- packages/adapter-vercel/test/apps/split/src/hooks.ts | 7 ------- .../adapter-vercel/test/apps/split/src/routes/+page.svelte | 1 - .../test/apps/split/src/routes/reroute/+page.svelte | 5 ----- 3 files changed, 13 deletions(-) delete mode 100644 packages/adapter-vercel/test/apps/split/src/hooks.ts delete mode 100644 packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte diff --git a/packages/adapter-vercel/test/apps/split/src/hooks.ts b/packages/adapter-vercel/test/apps/split/src/hooks.ts deleted file mode 100644 index 6ec0054c5f18..000000000000 --- a/packages/adapter-vercel/test/apps/split/src/hooks.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Reroute } from '@sveltejs/kit'; - -export const reroute: Reroute = ({ url }) => { - if (url.pathname.endsWith('/reroute')) { - return '/reroute'; - } -}; diff --git a/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte index c43069bd9c6d..57d50b6f11b3 100644 --- a/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte +++ b/packages/adapter-vercel/test/apps/split/src/routes/+page.svelte @@ -2,5 +2,4 @@ diff --git a/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte b/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte deleted file mode 100644 index a728c1562500..000000000000 --- a/packages/adapter-vercel/test/apps/split/src/routes/reroute/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -

{page.url.pathname + page.url.search}