Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
5 changes: 5 additions & 0 deletions .changeset/good-jars-relax.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

fix: Prerender optional parameters without value
8 changes: 6 additions & 2 deletions packages/kit/src/core/postbuild/prerender.js
Original file line number Diff line number Diff line change
Expand Up @@ -429,8 +429,12 @@ async function prerender({ out, manifest_path, metadata, verbose, env }) {
if (entry === '*') {
for (const [id, prerender] of prerender_map) {
if (prerender) {
if (id.includes('[')) continue;
const path = `/${get_route_segments(id).join('/')}`;
//Remove optional parameters from the route
const segments = get_route_segments(id).filter((segment) => !segment.startsWith('[['));
const processed_id = '/' + segments.join('/');

if (processed_id.includes('[')) continue;
const path = `/${get_route_segments(processed_id).join('/')}`;
enqueue(null, config.paths.base + path);
}
}
Expand Down
21 changes: 21 additions & 0 deletions packages/kit/test/prerendering/optional-params/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "prerendering-test-optional-params",
"private": true,
"version": "0.0.1",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && tsc && svelte-check",
"test": "svelte-kit sync && pnpm build && vitest run"
},
"devDependencies": {
"@sveltejs/kit": "workspace:^",
"svelte": "^4.2.2",
"svelte-check": "^3.4.4",
"typescript": "^4.9.4",
"vite": "^4.4.9",
"vitest": "^0.34.5"
},
"type": "module"
}
12 changes: 12 additions & 0 deletions packages/kit/test/prerendering/optional-params/src/app.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
%sveltekit.head%
</head>
<body>
%sveltekit.body%
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const prerender = true;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<a href="/en">English</a>
10 changes: 10 additions & 0 deletions packages/kit/test/prerendering/optional-params/svelte.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import adapter from '../../../../adapter-static/index.js';

/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter()
}
};

export default config;
19 changes: 19 additions & 0 deletions packages/kit/test/prerendering/optional-params/test/tests.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { expect, test } from 'vitest';
import { replace_hydration_attrs } from '../../test-utils';

const build = fileURLToPath(new URL('../build', import.meta.url));

/** @param {string} file */
const read = (file) => fs.readFileSync(`${build}/${file}`, 'utf-8');

test('prerenders /', () => {
const content = replace_hydration_attrs(read('index.html'));
expect(content).toContain('<a href="/en">English</a>');
});

test('prerenders nested /en', () => {
const content = replace_hydration_attrs(read('en.html'));
expect(content).toContain('<a href="/en">English</a>');
});
16 changes: 16 additions & 0 deletions packages/kit/test/prerendering/optional-params/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"noEmit": true,
"module": "esnext",
"moduleResolution": "node",
"paths": {
"@sveltejs/kit": ["../../../types"],
"$lib": ["./src/lib"],
"$lib/*": ["./src/lib/*"],
"types": ["../../../types/internal"]
}
},
"extends": "./.svelte-kit/tsconfig.json"
}
23 changes: 23 additions & 0 deletions packages/kit/test/prerendering/optional-params/vite.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import * as path from 'node:path';
import { sveltekit } from '@sveltejs/kit/vite';

/** @type {import('vite').UserConfig} */
const config = {
build: {
minify: false
},

clearScreen: false,

logLevel: 'silent',

plugins: [sveltekit()],

server: {
fs: {
allow: [path.resolve('../../../src')]
}
}
};

export default config;
109 changes: 98 additions & 11 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.