Repository: sveltejs/kit
Pull request #5012 (2022-05-21 12:00:03)

Root devdeps
Moves shared `devDependencies` into the workspace root

### Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
- [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it solves.
- [ ] Ideally, include a test that fails without this PR but passes with it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check`

### Changesets
- [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. All changesets should be `patch` until SvelteKit 1.0


changeset-bot[bot]: ###  ⚠️  No Changeset found

Latest commit: 66f062889526a206b56089821c832053df935311

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/master/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/sveltejs/kit/new/root-devdeps?filename=.changeset/three-cows-relax.md&value=---%0A%22%40sveltejs%2Fadapter-auto%22%3A%20patch%0A%22%40sveltejs%2Fadapter-cloudflare-workers%22%3A%20patch%0A%22%40sveltejs%2Fadapter-cloudflare%22%3A%20patch%0A%22%40sveltejs%2Fadapter-netlify%22%3A%20patch%0A%22%40sveltejs%2Fadapter-node%22%3A%20patch%0A%22%40sveltejs%2Fadapter-static%22%3A%20patch%0A%22%40sveltejs%2Fadapter-vercel%22%3A%20patch%0A%22create-svelte%22%3A%20patch%0A%22%40sveltejs%2Fkit%22%3A%20patch%0A%22kit.svelte.dev%22%3A%20patch%0A%22test-amp%22%3A%20patch%0A%22test-basics%22%3A%20patch%0A%22test-options-2%22%3A%20patch%0A%22test-options%22%3A%20patch%0A%22prerendering-test-basics%22%3A%20patch%0A%22prerendering-test-basics%22%3A%20patch%0A%22prerendering-test-options%22%3A%20patch%0A%22prerendering-test-paths-base%22%3A%20patch%0A%22prerendering-test-trailing-slash%22%3A%20patch%0A---%0A%0ARoot%20devdeps%0A)


Rich-Harris: an alternative is to put _all_ devDeps in the workspace root (except e.g. the ones shiki-twoslash needs to have in the site dir for building the docs)

Patch:
diff --git a/.changeset/forty-lions-give.md b/.changeset/forty-lions-give.md
new file mode 100644
index 000000000..1c0228231
--- /dev/null
+++ b/.changeset/forty-lions-give.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[breaking] resolve relative urls from the target page when using load's fetch
diff --git a/.changeset/forty-worms-deliver.md b/.changeset/forty-worms-deliver.md
new file mode 100644
index 000000000..d9a8a30eb
--- /dev/null
+++ b/.changeset/forty-worms-deliver.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] `svelte-kit sync` gracefully handles a nonexistent routes folder
diff --git a/package.json b/package.json
index 86af6277f..2b2d5971e 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
 		"check": "turbo run check",
 		"lint": "turbo run lint",
 		"format": "turbo run format",
+		"precommit": "turbo run precommit",
 		"release": "changeset publish"
 	},
 	"repository": {
@@ -23,22 +24,35 @@
 	"homepage": "https://github.com/sveltejs/kit#readme",
 	"devDependencies": {
 		"@changesets/cli": "^2.18.1",
+		"@playwright/test": "^1.21.0",
 		"@rollup/plugin-commonjs": "^21.0.1",
 		"@rollup/plugin-json": "^4.1.0",
 		"@rollup/plugin-node-resolve": "^13.0.6",
+		"@rollup/plugin-replace": "^4.0.0",
 		"@sveltejs/eslint-config": "github:sveltejs/eslint-config#v5.8.0",
 		"@svitejs/changesets-changelog-github-compact": "^0.1.1",
+		"@types/node": "^16.11.36",
 		"@typescript-eslint/eslint-plugin": "^5.5.0",
 		"@typescript-eslint/parser": "^5.5.0",
+		"cross-env": "^7.0.3",
 		"eslint": "^8.3.0",
 		"eslint-plugin-import": "^2.25.3",
 		"eslint-plugin-node": "^11.1.0",
 		"eslint-plugin-svelte3": "^4.0.0",
+		"port-authority": "^1.1.2",
 		"prettier": "^2.5.0",
+		"prettier-plugin-svelte": "^2.5.0",
+		"rimraf": "^3.0.2",
 		"rollup": "^2.60.2",
+		"sirv": "^2.0.0",
 		"svelte": "^3.48.0",
+		"svelte-check": "^2.5.0",
+		"svelte-preprocess": "^4.9.8",
+		"svelte2tsx": "~0.5.0",
+		"tiny-glob": "^0.2.9",
 		"turbo": "^1.2.6",
-		"typescript": "~4.6.2"
+		"typescript": "~4.6.2",
+		"uvu": "^0.5.2"
 	},
 	"packageManager": "pnpm@7.1.3",
 	"engines": {
diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json
index 5e573160f..d0fd4e0de 100644
--- a/packages/adapter-auto/package.json
+++ b/packages/adapter-auto/package.json
@@ -33,9 +33,5 @@
 		"@sveltejs/adapter-cloudflare": "workspace:*",
 		"@sveltejs/adapter-netlify": "workspace:*",
 		"@sveltejs/adapter-vercel": "workspace:*"
-	},
-	"devDependencies": {
-		"@types/node": "^14.14.20",
-		"typescript": "^4.6.2"
 	}
 }
diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json
index ca61278b4..e217326d1 100644
--- a/packages/adapter-cloudflare-workers/package.json
+++ b/packages/adapter-cloudflare-workers/package.json
@@ -32,8 +32,6 @@
 		"esbuild": "^0.14.29"
 	},
 	"devDependencies": {
-		"@cloudflare/kv-asset-handler": "^0.2.0",
-		"@types/node": "^14.14.20",
-		"typescript": "^4.6.2"
+		"@cloudflare/kv-asset-handler": "^0.2.0"
 	}
 }
diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json
index 2802cae47..957905f62 100644
--- a/packages/adapter-cloudflare/package.json
+++ b/packages/adapter-cloudflare/package.json
@@ -35,9 +35,7 @@
 		"worktop": "0.8.0-next.14"
 	},
 	"devDependencies": {
-		"@types/node": "^14.14.20",
-		"@types/ws": "^8.5.3",
-		"typescript": "^4.6.2"
+		"@types/ws": "^8.5.3"
 	},
 	"publishConfig": {
 		"access": "public"
diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json
index cd5409990..c9e8568a9 100644
--- a/packages/adapter-netlify/package.json
+++ b/packages/adapter-netlify/package.json
@@ -38,14 +38,6 @@
 	},
 	"devDependencies": {
 		"@netlify/functions": "^1.0.0",
-		"@rollup/plugin-commonjs": "^21.0.0",
-		"@rollup/plugin-json": "^4.1.0",
-		"@rollup/plugin-node-resolve": "^13.0.5",
-		"@sveltejs/kit": "workspace:*",
-		"@types/node": "^14.14.20",
-		"rimraf": "^3.0.2",
-		"rollup": "^2.58.0",
-		"typescript": "^4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	}
 }
diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json
index aede1af21..b1fc09ccd 100644
--- a/packages/adapter-node/package.json
+++ b/packages/adapter-node/package.json
@@ -35,18 +35,10 @@
 		"tiny-glob": "^0.2.9"
 	},
 	"devDependencies": {
-		"@rollup/plugin-json": "^4.1.0",
 		"@sveltejs/kit": "workspace:*",
 		"@types/compression": "^1.7.2",
-		"@types/node": "^14.14.20",
 		"c8": "^7.10.0",
 		"compression": "^1.7.4",
-		"node-fetch": "^3.1.0",
-		"polka": "^1.0.0-next.22",
-		"rimraf": "^3.0.2",
-		"rollup": "^2.60.2",
-		"sirv": "^2.0.0",
-		"typescript": "^4.6.2",
-		"uvu": "^0.5.2"
+		"polka": "^1.0.0-next.22"
 	}
 }
diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json
index cd2da4594..30e4f71c0 100644
--- a/packages/adapter-static/package.json
+++ b/packages/adapter-static/package.json
@@ -28,13 +28,6 @@
 		"tiny-glob": "^0.2.9"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"@types/node": "^14.14.20",
-		"playwright-chromium": "^1.21.0",
-		"port-authority": "^1.1.2",
-		"sirv": "^2.0.0",
-		"svelte": "^3.44.2",
-		"typescript": "^4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	}
 }
diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json
index d0b9e8cfb..668fd599c 100644
--- a/packages/adapter-vercel/package.json
+++ b/packages/adapter-vercel/package.json
@@ -31,8 +31,6 @@
 		"esbuild": "^0.14.29"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"@types/node": "^14.14.20",
-		"typescript": "^4.6.2"
+		"@sveltejs/kit": "workspace:*"
 	}
 }
diff --git a/packages/create-svelte/package.json b/packages/create-svelte/package.json
index f46f316d1..ef13725be 100644
--- a/packages/create-svelte/package.json
+++ b/packages/create-svelte/package.json
@@ -15,18 +15,12 @@
 		"prompts": "^2.4.2"
 	},
 	"devDependencies": {
-		"@playwright/test": "^1.21.0",
 		"@sveltejs/kit": "workspace:*",
 		"@types/gitignore-parser": "^0.0.0",
 		"@types/prettier": "^2.4.2",
 		"@types/prompts": "^2.0.14",
 		"gitignore-parser": "^0.0.2",
-		"prettier": "^2.5.0",
-		"prettier-plugin-svelte": "^2.5.0",
-		"sucrase": "^3.20.3",
-		"svelte": "^3.44.2",
-		"svelte-preprocess": "^4.9.8",
-		"tiny-glob": "^0.2.9"
+		"sucrase": "^3.20.3"
 	},
 	"scripts": {
 		"build": "node scripts/build-templates",
diff --git a/packages/kit/package.json b/packages/kit/package.json
index 392395f3d..52eae1f7e 100644
--- a/packages/kit/package.json
+++ b/packages/kit/package.json
@@ -16,36 +16,21 @@
 		"vite": "^2.9.9"
 	},
 	"devDependencies": {
-		"@playwright/test": "^1.21.0",
-		"@rollup/plugin-replace": "^4.0.0",
 		"@types/connect": "^3.4.35",
 		"@types/cookie": "^0.5.0",
 		"@types/marked": "^4.0.1",
 		"@types/mime": "^2.0.3",
-		"@types/node": "^16.11.11",
 		"@types/sade": "^1.7.3",
 		"@types/set-cookie-parser": "^2.4.2",
 		"cookie": "^0.5.0",
-		"cross-env": "^7.0.3",
 		"devalue": "^2.0.1",
-		"eslint": "^8.3.0",
 		"kleur": "^4.1.4",
 		"locate-character": "^2.0.5",
-		"marked": "^4.0.5",
 		"mime": "^3.0.0",
 		"node-fetch": "^3.1.0",
-		"port-authority": "^1.1.2",
-		"rollup": "^2.60.2",
 		"selfsigned": "^2.0.0",
 		"set-cookie-parser": "^2.4.8",
-		"sirv": "^2.0.0",
-		"svelte": "^3.44.2",
-		"svelte-check": "^2.5.0",
-		"svelte-preprocess": "^4.9.8",
-		"svelte2tsx": "~0.5.0",
-		"tiny-glob": "^0.2.9",
-		"typescript": "^4.6.4",
-		"uvu": "^0.5.2"
+		"svelte": "^3.48.0"
 	},
 	"peerDependencies": {
 		"svelte": "^3.44.0"
diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js
index c55dce642..bd4f3c296 100644
--- a/packages/kit/src/core/sync/create_manifest_data/index.js
+++ b/packages/kit/src/core/sync/create_manifest_data/index.js
@@ -84,118 +84,120 @@ export default function create_manifest_data({
 	const routes_base = posixify(path.relative(cwd, config.kit.files.routes));
 	const valid_extensions = [...config.extensions, ...config.kit.endpointExtensions];
 
-	list_files(config.kit.files.routes).forEach((file) => {
-		const extension = valid_extensions.find((ext) => file.endsWith(ext));
-		if (!extension) return;
-
-		const id = file
-			.slice(0, -extension.length)
-			.replace(/(?:^|\/)index((?:@[a-zA-Z0-9_-]+)?(?:\.[a-z]+)?)?$/, '$1');
-		const project_relative = `${routes_base}/${file}`;
-
-		const segments = id.split('/');
-		const name = /** @type {string} */ (segments.pop());
-
-		if (name === '__layout.reset') {
-			throw new Error(
-				'__layout.reset has been removed in favour of named layouts: https://kit.svelte.dev/docs/layouts#named-layouts'
-			);
-		}
+	if (fs.existsSync(config.kit.files.routes)) {
+		list_files(config.kit.files.routes).forEach((file) => {
+			const extension = valid_extensions.find((ext) => file.endsWith(ext));
+			if (!extension) return;
 
-		if (name === '__error' || layout_pattern.test(name)) {
-			const dir = segments.join('/');
+			const id = file
+				.slice(0, -extension.length)
+				.replace(/(?:^|\/)index((?:@[a-zA-Z0-9_-]+)?(?:\.[a-z]+)?)?$/, '$1');
+			const project_relative = `${routes_base}/${file}`;
 
-			if (!tree.has(dir)) {
-				tree.set(dir, {
-					error: undefined,
-					layouts: {}
-				});
-			}
+			const segments = id.split('/');
+			const name = /** @type {string} */ (segments.pop());
 
-			const group = /** @type {Node} */ (tree.get(dir));
+			if (name === '__layout.reset') {
+				throw new Error(
+					'__layout.reset has been removed in favour of named layouts: https://kit.svelte.dev/docs/layouts#named-layouts'
+				);
+			}
 
-			if (name === '__error') {
-				group.error = project_relative;
-			} else {
-				const match = /** @type {RegExpMatchArray} */ (layout_pattern.exec(name));
+			if (name === '__error' || layout_pattern.test(name)) {
+				const dir = segments.join('/');
 
-				if (match[1] === DEFAULT) {
-					throw new Error(`${project_relative} cannot use reserved "${DEFAULT}" name`);
+				if (!tree.has(dir)) {
+					tree.set(dir, {
+						error: undefined,
+						layouts: {}
+					});
 				}
 
-				const layout_id = match[1] || DEFAULT;
+				const group = /** @type {Node} */ (tree.get(dir));
+
+				if (name === '__error') {
+					group.error = project_relative;
+				} else {
+					const match = /** @type {RegExpMatchArray} */ (layout_pattern.exec(name));
 
-				const defined = group.layouts[layout_id];
-				if (defined && defined !== default_layout) {
-					throw new Error(
-						`Duplicate layout ${project_relative} already defined at ${defined.file}`
-					);
+					if (match[1] === DEFAULT) {
+						throw new Error(`${project_relative} cannot use reserved "${DEFAULT}" name`);
+					}
+
+					const layout_id = match[1] || DEFAULT;
+
+					const defined = group.layouts[layout_id];
+					if (defined && defined !== default_layout) {
+						throw new Error(
+							`Duplicate layout ${project_relative} already defined at ${defined.file}`
+						);
+					}
+
+					group.layouts[layout_id] = {
+						file: project_relative,
+						name
+					};
 				}
 
-				group.layouts[layout_id] = {
-					file: project_relative,
-					name
-				};
+				return;
+			} else if (dunder_pattern.test(file)) {
+				throw new Error(
+					`Files and directories prefixed with __ are reserved (saw ${project_relative})`
+				);
 			}
 
-			return;
-		} else if (dunder_pattern.test(file)) {
-			throw new Error(
-				`Files and directories prefixed with __ are reserved (saw ${project_relative})`
-			);
-		}
-
-		if (!config.kit.routes(file)) return;
+			if (!config.kit.routes(file)) return;
 
-		if (/\]\[/.test(id)) {
-			throw new Error(`Invalid route ${project_relative} — parameters must be separated`);
-		}
+			if (/\]\[/.test(id)) {
+				throw new Error(`Invalid route ${project_relative} — parameters must be separated`);
+			}
 
-		if (count_occurrences('[', id) !== count_occurrences(']', id)) {
-			throw new Error(`Invalid route ${project_relative} — brackets are unbalanced`);
-		}
+			if (count_occurrences('[', id) !== count_occurrences(']', id)) {
+				throw new Error(`Invalid route ${project_relative} — brackets are unbalanced`);
+			}
 
-		if (!units.has(id)) {
-			units.set(id, {
-				id,
-				pattern: parse_route_id(id).pattern,
-				segments: id
-					.split('/')
-					.filter(Boolean)
-					.map((segment) => {
-						/** @type {Part[]} */
-						const parts = [];
-						segment.split(/\[(.+?)\]/).map((content, i) => {
-							const dynamic = !!(i % 2);
-
-							if (!content) return;
-
-							parts.push({
-								content,
-								dynamic,
-								rest: dynamic && content.startsWith('...'),
-								type: (dynamic && content.split('=')[1]) || null
+			if (!units.has(id)) {
+				units.set(id, {
+					id,
+					pattern: parse_route_id(id).pattern,
+					segments: id
+						.split('/')
+						.filter(Boolean)
+						.map((segment) => {
+							/** @type {Part[]} */
+							const parts = [];
+							segment.split(/\[(.+?)\]/).map((content, i) => {
+								const dynamic = !!(i % 2);
+
+								if (!content) return;
+
+								parts.push({
+									content,
+									dynamic,
+									rest: dynamic && content.startsWith('...'),
+									type: (dynamic && content.split('=')[1]) || null
+								});
 							});
-						});
-						return parts;
-					}),
-				page: undefined,
-				endpoint: undefined
-			});
-		}
+							return parts;
+						}),
+					page: undefined,
+					endpoint: undefined
+				});
+			}
 
-		const unit = /** @type {Unit} */ (units.get(id));
+			const unit = /** @type {Unit} */ (units.get(id));
 
-		if (config.extensions.find((ext) => file.endsWith(ext))) {
-			const { layouts, errors } = trace(project_relative, file, tree, config.extensions);
-			unit.page = {
-				a: layouts.concat(project_relative),
-				b: errors
-			};
-		} else {
-			unit.endpoint = project_relative;
-		}
-	});
+			if (config.extensions.find((ext) => file.endsWith(ext))) {
+				const { layouts, errors } = trace(project_relative, file, tree, config.extensions);
+				unit.page = {
+					a: layouts.concat(project_relative),
+					b: errors
+				};
+			} else {
+				unit.endpoint = project_relative;
+			}
+		});
+	}
 
 	/** @type {string[]} */
 	const components = [];
diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js
index 022b7e4e7..ac197bee9 100644
--- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js
+++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js
@@ -128,6 +128,12 @@ test('creates routes with layout', () => {
 	]);
 });
 
+test('succeeds when routes does not exist', () => {
+	const { components, routes } = create('samples/basic/routes');
+	assert.equal(components, ['layout.svelte', 'error.svelte']);
+	assert.equal(routes, []);
+});
+
 // TODO some characters will need to be URL-encoded in the filename
 test('encodes invalid characters', () => {
 	const { components, routes } = create('samples/encoding');
diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js
index fc28a2310..3962f7d92 100644
--- a/packages/kit/src/runtime/client/client.js
+++ b/packages/kit/src/runtime/client/client.js
@@ -578,11 +578,44 @@ export function create_client({ target, session, base, trailing_slash }) {
 					node.uses.stuff = true;
 					return { ...stuff };
 				},
-				fetch(resource, info) {
-					const requested = typeof resource === 'string' ? resource : resource.url;
-					add_dependency(requested);
+				async fetch(resource, init) {
+					let requested;
+
+					if (typeof resource === 'string') {
+						requested = resource;
+					} else {
+						requested = resource.url;
+
+						// we're not allowed to modify the received `Request` object, so in order
+						// to fixup relative urls we create a new equivalent `init` object instead
+						init = {
+							// the request body must be consumed in memory until browsers
+							// implement streaming request bodies and/or the body getter
+							body:
+								resource.method === 'GET' || resource.method === 'HEAD'
+									? undefined
+									: await resource.blob(),
+							cache: resource.cache,
+							credentials: resource.credentials,
+							headers: resource.headers,
+							integrity: resource.integrity,
+							keepalive: resource.keepalive,
+							method: resource.method,
+							mode: resource.mode,
+							redirect: resource.redirect,
+							referrer: resource.referrer,
+							referrerPolicy: resource.referrerPolicy,
+							signal: resource.signal,
+							...init
+						};
+					}
+
+					// we must fixup relative urls so they are resolved from the target page
+					const normalized = new URL(requested, url).href;
+					add_dependency(normalized);
 
-					return started ? fetch(resource, info) : initial_fetch(resource, info);
+					// prerendered pages may be served from any origin, so `initial_fetch` urls shouldn't be normalized
+					return started ? fetch(normalized, init) : initial_fetch(requested, init);
 				},
 				status: status ?? null,
 				error: error ?? null
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8753ec783..9b5ce8b43 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,221 +5,172 @@ importers:
   .:
     specifiers:
       '@changesets/cli': ^2.18.1
+      '@playwright/test': ^1.21.0
       '@rollup/plugin-commonjs': ^21.0.1
       '@rollup/plugin-json': ^4.1.0
       '@rollup/plugin-node-resolve': ^13.0.6
+      '@rollup/plugin-replace': ^4.0.0
       '@sveltejs/eslint-config': github:sveltejs/eslint-config#v5.8.0
       '@svitejs/changesets-changelog-github-compact': ^0.1.1
+      '@types/node': ^16.11.36
       '@typescript-eslint/eslint-plugin': ^5.5.0
       '@typescript-eslint/parser': ^5.5.0
+      cross-env: ^7.0.3
       eslint: ^8.3.0
       eslint-plugin-import: ^2.25.3
       eslint-plugin-node: ^11.1.0
       eslint-plugin-svelte3: ^4.0.0
+      port-authority: ^1.1.2
       prettier: ^2.5.0
+      prettier-plugin-svelte: ^2.5.0
+      rimraf: ^3.0.2
       rollup: ^2.60.2
+      sirv: ^2.0.0
       svelte: ^3.48.0
+      svelte-check: ^2.5.0
+      svelte-preprocess: ^4.9.8
+      svelte2tsx: ~0.5.0
+      tiny-glob: ^0.2.9
       turbo: ^1.2.6
       typescript: ~4.6.2
+      uvu: ^0.5.2
     devDependencies:
       '@changesets/cli': 2.18.1
+      '@playwright/test': 1.21.0
       '@rollup/plugin-commonjs': 21.0.1_rollup@2.60.2
       '@rollup/plugin-json': 4.1.0_rollup@2.60.2
       '@rollup/plugin-node-resolve': 13.0.6_rollup@2.60.2
+      '@rollup/plugin-replace': 4.0.0_rollup@2.60.2
       '@sveltejs/eslint-config': github.com/sveltejs/eslint-config/9a7d728e03ac433e5856a6e06775c17ee986d641_joccrsvn3w5bf3zq72tg6cmv5a
       '@svitejs/changesets-changelog-github-compact': 0.1.1
+      '@types/node': 16.11.36
       '@typescript-eslint/eslint-plugin': 5.5.0_hgifpugu3iz4vjez2nvxzb2flm
       '@typescript-eslint/parser': 5.5.0_wxzcy32mnlkffm57qz2iyynkxq
+      cross-env: 7.0.3
       eslint: 8.3.0
       eslint-plugin-import: 2.25.3_iplecdnqcsfvmje2lfr4noy2lm
       eslint-plugin-node: 11.1.0_eslint@8.3.0
       eslint-plugin-svelte3: 4.0.0_eslint@8.3.0+svelte@3.48.0
+      port-authority: 1.1.2
       prettier: 2.5.0
+      prettier-plugin-svelte: 2.5.0_gmp72aw2ck6cujyisndesbgjw4
+      rimraf: 3.0.2
       rollup: 2.60.2
+      sirv: 2.0.0
       svelte: 3.48.0
+      svelte-check: 2.5.0_svelte@3.48.0
+      svelte-preprocess: 4.9.8_c64miirrcucob5yjzfkddrmila
+      svelte2tsx: 0.5.0_c64miirrcucob5yjzfkddrmila
+      tiny-glob: 0.2.9
       turbo: 1.2.6
       typescript: 4.6.2
+      uvu: 0.5.2
 
   packages/adapter-auto:
     specifiers:
       '@sveltejs/adapter-cloudflare': workspace:*
       '@sveltejs/adapter-netlify': workspace:*
       '@sveltejs/adapter-vercel': workspace:*
-      '@types/node': ^14.14.20
-      typescript: ^4.6.2
     dependencies:
       '@sveltejs/adapter-cloudflare': link:../adapter-cloudflare
       '@sveltejs/adapter-netlify': link:../adapter-netlify
       '@sveltejs/adapter-vercel': link:../adapter-vercel
-    devDependencies:
-      '@types/node': 14.18.17
-      typescript: 4.6.2
 
   packages/adapter-cloudflare:
     specifiers:
-      '@types/node': ^14.14.20
       '@types/ws': ^8.5.3
       esbuild: ^0.14.29
-      typescript: ^4.6.2
       worktop: 0.8.0-next.14
     dependencies:
       esbuild: 0.14.29
       worktop: 0.8.0-next.14
     devDependencies:
-      '@types/node': 14.18.17
       '@types/ws': 8.5.3
-      typescript: 4.6.2
 
   packages/adapter-cloudflare-workers:
     specifiers:
       '@cloudflare/kv-asset-handler': ^0.2.0
       '@iarna/toml': ^2.2.5
-      '@types/node': ^14.14.20
       esbuild: ^0.14.29
-      typescript: ^4.6.2
     dependencies:
       '@iarna/toml': 2.2.5
       esbuild: 0.14.29
     devDependencies:
       '@cloudflare/kv-asset-handler': 0.2.0
-      '@types/node': 14.18.17
-      typescript: 4.6.2
 
   packages/adapter-netlify:
     specifiers:
       '@iarna/toml': ^2.2.5
       '@netlify/functions': ^1.0.0
-      '@rollup/plugin-commonjs': ^21.0.0
-      '@rollup/plugin-json': ^4.1.0
-      '@rollup/plugin-node-resolve': ^13.0.5
       '@sveltejs/kit': workspace:*
-      '@types/node': ^14.14.20
       esbuild: ^0.14.29
-      rimraf: ^3.0.2
-      rollup: ^2.58.0
       tiny-glob: ^0.2.9
-      typescript: ^4.6.2
-      uvu: ^0.5.2
     dependencies:
       '@iarna/toml': 2.2.5
       esbuild: 0.14.29
       tiny-glob: 0.2.9
     devDependencies:
       '@netlify/functions': 1.0.0
-      '@rollup/plugin-commonjs': 21.0.1_rollup@2.60.2
-      '@rollup/plugin-json': 4.1.0_rollup@2.60.2
-      '@rollup/plugin-node-resolve': 13.0.6_rollup@2.60.2
       '@sveltejs/kit': link:../kit
-      '@types/node': 14.18.17
-      rimraf: 3.0.2
-      rollup: 2.60.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/adapter-node:
     specifiers:
-      '@rollup/plugin-json': ^4.1.0
       '@sveltejs/kit': workspace:*
       '@types/compression': ^1.7.2
-      '@types/node': ^14.14.20
       c8: ^7.10.0
       compression: ^1.7.4
-      node-fetch: ^3.1.0
       polka: ^1.0.0-next.22
-      rimraf: ^3.0.2
-      rollup: ^2.60.2
-      sirv: ^2.0.0
       tiny-glob: ^0.2.9
-      typescript: ^4.6.2
-      uvu: ^0.5.2
     dependencies:
       tiny-glob: 0.2.9
     devDependencies:
-      '@rollup/plugin-json': 4.1.0_rollup@2.60.2
       '@sveltejs/kit': link:../kit
       '@types/compression': 1.7.2
-      '@types/node': 14.18.17
       c8: 7.10.0
       compression: 1.7.4
-      node-fetch: 3.1.0
       polka: 1.0.0-next.22
-      rimraf: 3.0.2
-      rollup: 2.60.2
-      sirv: 2.0.0
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/adapter-static:
     specifiers:
       '@sveltejs/kit': workspace:*
-      '@types/node': ^14.14.20
-      playwright-chromium: ^1.21.0
-      port-authority: ^1.1.2
-      sirv: ^2.0.0
-      svelte: ^3.44.2
       tiny-glob: ^0.2.9
-      typescript: ^4.6.2
-      uvu: ^0.5.2
     dependencies:
       tiny-glob: 0.2.9
     devDependencies:
       '@sveltejs/kit': link:../kit
-      '@types/node': 14.18.17
-      playwright-chromium: 1.21.0
-      port-authority: 1.1.2
-      sirv: 2.0.0
-      svelte: 3.44.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/adapter-vercel:
     specifiers:
       '@sveltejs/kit': workspace:*
-      '@types/node': ^14.14.20
       esbuild: ^0.14.29
-      typescript: ^4.6.2
     dependencies:
       esbuild: 0.14.29
     devDependencies:
       '@sveltejs/kit': link:../kit
-      '@types/node': 14.18.17
-      typescript: 4.6.2
 
   packages/amp:
     specifiers: {}
 
   packages/create-svelte:
     specifiers:
-      '@playwright/test': ^1.21.0
       '@sveltejs/kit': workspace:*
       '@types/gitignore-parser': ^0.0.0
       '@types/prettier': ^2.4.2
       '@types/prompts': ^2.0.14
       gitignore-parser: ^0.0.2
       kleur: ^4.1.4
-      prettier: ^2.5.0
-      prettier-plugin-svelte: ^2.5.0
       prompts: ^2.4.2
       sucrase: ^3.20.3
-      svelte: ^3.44.2
-      svelte-preprocess: ^4.9.8
-      tiny-glob: ^0.2.9
     dependencies:
       kleur: 4.1.4
       prompts: 2.4.2
     devDependencies:
-      '@playwright/test': 1.21.0
       '@sveltejs/kit': link:../kit
       '@types/gitignore-parser': 0.0.0
       '@types/prettier': 2.4.2
       '@types/prompts': 2.0.14
       gitignore-parser: 0.0.2
-      prettier: 2.5.0
-      prettier-plugin-svelte: 2.5.0_ipq4i6n5wimwn3hym4ufkeqklu
       sucrase: 3.20.3
-      svelte: 3.44.2
-      svelte-preprocess: 4.9.8_svelte@3.44.2
-      tiny-glob: 0.2.9
 
   packages/create-svelte/templates/default:
     specifiers:
@@ -238,214 +189,114 @@ importers:
     devDependencies:
       '@sveltejs/adapter-auto': link:../../../adapter-auto
       '@sveltejs/kit': link:../../../kit
-      svelte: 3.44.2
-      svelte-preprocess: 4.9.8_uydhuxrsxpjnlqukdpt4rb2fam
+      svelte: 3.48.0
+      svelte-preprocess: 4.9.8_c64miirrcucob5yjzfkddrmila
       typescript: 4.6.2
 
   packages/kit:
     specifiers:
-      '@playwright/test': ^1.21.0
-      '@rollup/plugin-replace': ^4.0.0
       '@sveltejs/vite-plugin-svelte': ^1.0.0-next.44
       '@types/connect': ^3.4.35
       '@types/cookie': ^0.5.0
       '@types/marked': ^4.0.1
       '@types/mime': ^2.0.3
-      '@types/node': ^16.11.11
       '@types/sade': ^1.7.3
       '@types/set-cookie-parser': ^2.4.2
       chokidar: ^3.5.3
       cookie: ^0.5.0
-      cross-env: ^7.0.3
       devalue: ^2.0.1
-      eslint: ^8.3.0
       kleur: ^4.1.4
       locate-character: ^2.0.5
-      marked: ^4.0.5
       mime: ^3.0.0
       node-fetch: ^3.1.0
-      port-authority: ^1.1.2
-      rollup: ^2.60.2
       sade: ^1.7.4
       selfsigned: ^2.0.0
       set-cookie-parser: ^2.4.8
-      sirv: ^2.0.0
-      svelte: ^3.44.2
-      svelte-check: ^2.5.0
-      svelte-preprocess: ^4.9.8
-      svelte2tsx: ~0.5.0
-      tiny-glob: ^0.2.9
-      typescript: ^4.6.4
-      uvu: ^0.5.2
+      svelte: ^3.48.0
       vite: ^2.9.9
     dependencies:
-      '@sveltejs/vite-plugin-svelte': 1.0.0-next.44_svelte@3.44.2+vite@2.9.9
+      '@sveltejs/vite-plugin-svelte': 1.0.0-next.44_svelte@3.48.0+vite@2.9.9
       chokidar: 3.5.3
       sade: 1.7.4
       vite: 2.9.9
     devDependencies:
-      '@playwright/test': 1.21.0
-      '@rollup/plugin-replace': 4.0.0_rollup@2.60.2
       '@types/connect': 3.4.35
       '@types/cookie': 0.5.0
       '@types/marked': 4.0.1
       '@types/mime': 2.0.3
-      '@types/node': 16.11.11
       '@types/sade': 1.7.3
       '@types/set-cookie-parser': 2.4.2
       cookie: 0.5.0
-      cross-env: 7.0.3
       devalue: 2.0.1
-      eslint: 8.3.0
       kleur: 4.1.4
       locate-character: 2.0.5
-      marked: 4.0.5
       mime: 3.0.0
       node-fetch: 3.1.0
-      port-authority: 1.1.2
-      rollup: 2.60.2
       selfsigned: 2.0.0
       set-cookie-parser: 2.4.8
-      sirv: 2.0.0
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      svelte-preprocess: 4.9.8_wgapq35fvzy6mzjhiipmcyqsqu
-      svelte2tsx: 0.5.0_wgapq35fvzy6mzjhiipmcyqsqu
-      tiny-glob: 0.2.9
-      typescript: 4.6.4
-      uvu: 0.5.2
+      svelte: 3.48.0
 
   packages/kit/test/apps/amp:
     specifiers:
       '@sveltejs/amp': workspace:*
       '@sveltejs/kit': workspace:*
-      cross-env: ^7.0.3
       purify-css: ^1.2.5
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
     devDependencies:
       '@sveltejs/amp': link:../../../../amp
       '@sveltejs/kit': link:../../..
-      cross-env: 7.0.3
       purify-css: 1.2.5
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
 
   packages/kit/test/apps/basics:
     specifiers:
       '@sveltejs/kit': workspace:*
-      cross-env: ^7.0.3
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
+      marked: ^4.0.5
     devDependencies:
       '@sveltejs/kit': link:../../..
-      cross-env: 7.0.3
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
+      marked: 4.0.5
 
   packages/kit/test/apps/options:
     specifiers:
       '@sveltejs/kit': workspace:*
-      cross-env: ^7.0.3
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      cross-env: 7.0.3
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
 
   packages/kit/test/apps/options-2:
     specifiers:
       '@sveltejs/adapter-node': workspace:*
       '@sveltejs/kit': workspace:*
-      cross-env: ^7.0.3
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
     devDependencies:
       '@sveltejs/adapter-node': link:../../../../adapter-node
       '@sveltejs/kit': link:../../..
-      cross-env: 7.0.3
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
 
   packages/kit/test/prerendering/basics:
     specifiers:
       '@sveltejs/kit': workspace:*
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
-      uvu: ^0.5.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/kit/test/prerendering/disabled:
     specifiers:
       '@sveltejs/kit': workspace:*
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
-      uvu: ^0.5.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/kit/test/prerendering/options:
     specifiers:
       '@sveltejs/kit': workspace:*
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
-      uvu: ^0.5.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/kit/test/prerendering/paths-base:
     specifiers:
       '@sveltejs/kit': workspace:*
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
-      uvu: ^0.5.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      svelte: 3.48.0
-      svelte-check: 2.5.0_svelte@3.48.0
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   packages/kit/test/prerendering/trailing-slash:
     specifiers:
       '@sveltejs/kit': workspace:*
-      svelte: ^3.43.0
-      svelte-check: ^2.5.0
-      typescript: ~4.6.2
-      uvu: ^0.5.2
     devDependencies:
       '@sveltejs/kit': link:../../..
-      svelte: 3.44.2
-      svelte-check: 2.5.0_svelte@3.44.2
-      typescript: 4.6.2
-      uvu: 0.5.2
 
   sites/kit.svelte.dev:
     specifiers:
@@ -454,7 +305,7 @@ importers:
       '@sveltejs/amp': workspace:*
       '@sveltejs/kit': workspace:*
       '@sveltejs/site-kit': ^2.1.0
-      '@types/node': ^16.11.11
+      '@types/node': ^16.11.36
       flexsearch: ^0.7.21
       marked: ^4.0.5
       prism-svelte: ^0.5.0
@@ -470,26 +321,19 @@ importers:
       '@sveltejs/amp': link:../../packages/amp
       '@sveltejs/kit': link:../../packages/kit
       '@sveltejs/site-kit': 2.1.0
-      '@types/node': 16.11.11
+      '@types/node': 16.11.36
       flexsearch: 0.7.21
       marked: 4.0.5
       prism-svelte: 0.5.0
       prismjs: 1.26.0
       shiki-twoslash: 3.0.2
-      svelte: 3.44.2
+      svelte: 3.48.0
       typescript: 4.6.2
       vite: 2.9.9
       vite-imagetools: 4.0.3
 
 packages:
 
-  /@babel/code-frame/7.16.0:
-    resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/highlight': 7.16.0
-    dev: true
-
   /@babel/code-frame/7.16.7:
     resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==}
     engines: {node: '>=6.9.0'}
@@ -678,11 +522,6 @@ packages:
       '@babel/types': 7.17.0
     dev: true
 
-  /@babel/helper-validator-identifier/7.15.7:
-    resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
   /@babel/helper-validator-identifier/7.16.7:
     resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
     engines: {node: '>=6.9.0'}
@@ -704,15 +543,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/highlight/7.16.0:
-    resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-validator-identifier': 7.15.7
-      chalk: 2.4.2
-      js-tokens: 4.0.0
-    dev: true
-
   /@babel/highlight/7.16.10:
     resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==}
     engines: {node: '>=6.9.0'}
@@ -1227,7 +1057,7 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
       ajv: 6.12.6
-      debug: 4.3.3
+      debug: 4.3.4
       espree: 9.1.0
       globals: 13.12.0
       ignore: 4.0.6
@@ -1248,7 +1078,7 @@ packages:
     engines: {node: '>=10.10.0'}
     dependencies:
       '@humanwhocodes/object-schema': 1.2.1
-      debug: 4.3.3
+      debug: 4.3.4
       minimatch: 3.0.4
     transitivePeerDependencies:
       - supports-color
@@ -1471,7 +1301,7 @@ packages:
       golden-fleece: 1.0.9
     dev: true
 
-  /@sveltejs/vite-plugin-svelte/1.0.0-next.44_svelte@3.44.2+vite@2.9.9:
+  /@sveltejs/vite-plugin-svelte/1.0.0-next.44_svelte@3.48.0+vite@2.9.9:
     resolution: {integrity: sha512-n+sssEWbzykPS447FmnNyU5GxEhrBPDVd0lxNZnxRGz9P6651LjjwAnISKr3CKgT9v8IybP8VD0n2i5XzbqExg==}
     engines: {node: ^14.13.1 || >= 16}
     peerDependencies:
@@ -1487,8 +1317,8 @@ packages:
       deepmerge: 4.2.2
       kleur: 4.1.4
       magic-string: 0.26.2
-      svelte: 3.44.2
-      svelte-hmr: 0.14.11_svelte@3.44.2
+      svelte: 3.48.0
+      svelte-hmr: 0.14.11_svelte@3.48.0
       vite: 2.9.9
     transitivePeerDependencies:
       - supports-color
@@ -1608,14 +1438,14 @@ packages:
     resolution: {integrity: sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==}
     dev: true
 
-  /@types/node/14.18.17:
-    resolution: {integrity: sha512-oajWz4kOajqpKJMPgnCvBajPq8QAvl2xIWoFjlAJPKGu6n7pjov5SxGE45a+0RxHDoo4ycOMoZw1SCOWtDERbw==}
-    dev: true
-
   /@types/node/16.11.11:
     resolution: {integrity: sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==}
     dev: true
 
+  /@types/node/16.11.36:
+    resolution: {integrity: sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA==}
+    dev: true
+
   /@types/node/17.0.21:
     resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==}
     dev: true
@@ -1701,8 +1531,8 @@ packages:
       '@types/yargs-parser': 21.0.0
     dev: true
 
-  /@types/yauzl/2.9.2:
-    resolution: {integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==}
+  /@types/yauzl/2.10.0:
+    resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
     requiresBuild: true
     dependencies:
       '@types/node': 17.0.21
@@ -1797,7 +1627,7 @@ packages:
     dependencies:
       '@typescript-eslint/types': 5.5.0
       '@typescript-eslint/visitor-keys': 5.5.0
-      debug: 4.3.3
+      debug: 4.3.4
       globby: 11.0.4
       is-glob: 4.0.3
       semver: 7.3.5
@@ -2072,7 +1902,7 @@ packages:
     dev: true
 
   /buffer-crc32/0.2.13:
-    resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=}
+    resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
     dev: true
 
   /buffer/5.7.1:
@@ -3154,7 +2984,7 @@ packages:
       get-stream: 5.2.0
       yauzl: 2.10.0
     optionalDependencies:
-      '@types/yauzl': 2.9.2
+      '@types/yauzl': 2.10.0
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -3456,10 +3286,6 @@ packages:
     resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==}
     dev: true
 
-  /graceful-fs/4.2.9:
-    resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==}
-    dev: true
-
   /grapheme-splitter/1.0.4:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
     dev: true
@@ -4502,7 +4328,7 @@ packages:
     resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
     engines: {node: '>=8'}
     dependencies:
-      '@babel/code-frame': 7.16.0
+      '@babel/code-frame': 7.16.7
       error-ex: 1.3.2
       json-parse-even-better-errors: 2.3.1
       lines-and-columns: 1.2.4
@@ -4614,19 +4440,6 @@ packages:
       find-up: 4.1.0
     dev: true
 
-  /playwright-chromium/1.21.0:
-    resolution: {integrity: sha512-btps5gqqc4GUESv+H3/rTPMv5S6zUSsgEcpvM3HX08bqaHnpyy+cPK6XLJq9L8kGjm3SdzlmG8tkhSPP4iuWhA==}
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      playwright-core: 1.21.0
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-    dev: true
-
   /playwright-core/1.21.0:
     resolution: {integrity: sha512-yDGVs9qaaW6WiefgR7wH1CGt9D6D/X4U3jNpIzH0FjjrrWLCOYQo78Tu3SkW8X+/kWlBpj49iWf3QNSxhYc12Q==}
     engines: {node: '>=12'}
@@ -4721,14 +4534,14 @@ packages:
     engines: {node: '>= 0.8.0'}
     dev: true
 
-  /prettier-plugin-svelte/2.5.0_ipq4i6n5wimwn3hym4ufkeqklu:
+  /prettier-plugin-svelte/2.5.0_gmp72aw2ck6cujyisndesbgjw4:
     resolution: {integrity: sha512-+iHY2uGChOngrgKielJUnqo74gIL/EO5oeWm8MftFWjEi213lq9QYTOwm1pv4lI1nA61tdgf80CF2i5zMcu1kw==}
     peerDependencies:
       prettier: ^1.16.4 || ^2.0.0
       svelte: ^3.2.0
     dependencies:
       prettier: 2.5.0
-      svelte: 3.44.2
+      svelte: 3.48.0
     dev: true
 
   /prettier/1.19.1:
@@ -5049,7 +4862,7 @@ packages:
     resolution: {integrity: sha1-dB4kXiMfB8r7b98PEzrfohalAq0=}
     dependencies:
       es6-promise: 3.3.1
-      graceful-fs: 4.2.9
+      graceful-fs: 4.2.10
       mkdirp: 0.5.5
       rimraf: 2.7.1
     dev: true
@@ -5464,34 +5277,6 @@ packages:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
-  /svelte-check/2.5.0_svelte@3.44.2:
-    resolution: {integrity: sha512-/laO032JQ1TpmYHgaaLndHNPeWW3VSL3liMB97sA9fYTEzlIy3jIo4Rgr7EzjNvieiNWG73C5voOAeNHlrwbpg==}
-    hasBin: true
-    peerDependencies:
-      svelte: ^3.24.0
-    dependencies:
-      chokidar: 3.5.3
-      fast-glob: 3.2.7
-      import-fresh: 3.3.0
-      picocolors: 1.0.0
-      sade: 1.7.4
-      source-map: 0.7.3
-      svelte: 3.44.2
-      svelte-preprocess: 4.9.8_wgapq35fvzy6mzjhiipmcyqsqu
-      typescript: 4.6.4
-    transitivePeerDependencies:
-      - '@babel/core'
-      - coffeescript
-      - less
-      - node-sass
-      - postcss
-      - postcss-load-config
-      - pug
-      - sass
-      - stylus
-      - sugarss
-    dev: true
-
   /svelte-check/2.5.0_svelte@3.48.0:
     resolution: {integrity: sha512-/laO032JQ1TpmYHgaaLndHNPeWW3VSL3liMB97sA9fYTEzlIy3jIo4Rgr7EzjNvieiNWG73C5voOAeNHlrwbpg==}
     hasBin: true
@@ -5520,66 +5305,16 @@ packages:
       - sugarss
     dev: true
 
-  /svelte-hmr/0.14.11_svelte@3.44.2:
+  /svelte-hmr/0.14.11_svelte@3.48.0:
     resolution: {integrity: sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==}
     engines: {node: ^12.20 || ^14.13.1 || >= 16}
     peerDependencies:
       svelte: '>=3.19.0'
     dependencies:
-      svelte: 3.44.2
+      svelte: 3.48.0
     dev: false
 
-  /svelte-preprocess/4.9.8_svelte@3.44.2:
-    resolution: {integrity: sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==}
-    engines: {node: '>= 9.11.2'}
-    requiresBuild: true
-    peerDependencies:
-      '@babel/core': ^7.10.2
-      coffeescript: ^2.5.1
-      less: ^3.11.3
-      node-sass: '*'
-      postcss: ^7 || ^8
-      postcss-load-config: ^2.1.0 || ^3.0.0
-      pug: ^3.0.0
-      sass: ^1.26.8
-      stylus: ^0.54.7
-      sugarss: ^2.0.0
-      svelte: ^3.23.0
-      typescript: ^3.9.5 || ^4.0.0
-    peerDependenciesMeta:
-      '@babel/core':
-        optional: true
-      coffeescript:
-        optional: true
-      less:
-        optional: true
-      node-sass:
-        optional: true
-      postcss:
-        optional: true
-      postcss-load-config:
-        optional: true
-      pug:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      typescript:
-        optional: true
-    dependencies:
-      '@types/pug': 2.0.5
-      '@types/sass': 1.43.1
-      detect-indent: 6.1.0
-      magic-string: 0.25.7
-      sorcery: 0.10.0
-      strip-indent: 3.0.0
-      svelte: 3.44.2
-    dev: true
-
-  /svelte-preprocess/4.9.8_uydhuxrsxpjnlqukdpt4rb2fam:
+  /svelte-preprocess/4.9.8_c64miirrcucob5yjzfkddrmila:
     resolution: {integrity: sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==}
     engines: {node: '>= 9.11.2'}
     requiresBuild: true
@@ -5626,61 +5361,10 @@ packages:
       magic-string: 0.25.7
       sorcery: 0.10.0
       strip-indent: 3.0.0
-      svelte: 3.44.2
+      svelte: 3.48.0
       typescript: 4.6.2
     dev: true
 
-  /svelte-preprocess/4.9.8_wgapq35fvzy6mzjhiipmcyqsqu:
-    resolution: {integrity: sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==}
-    engines: {node: '>= 9.11.2'}
-    requiresBuild: true
-    peerDependencies:
-      '@babel/core': ^7.10.2
-      coffeescript: ^2.5.1
-      less: ^3.11.3
-      node-sass: '*'
-      postcss: ^7 || ^8
-      postcss-load-config: ^2.1.0 || ^3.0.0
-      pug: ^3.0.0
-      sass: ^1.26.8
-      stylus: ^0.54.7
-      sugarss: ^2.0.0
-      svelte: ^3.23.0
-      typescript: ^3.9.5 || ^4.0.0
-    peerDependenciesMeta:
-      '@babel/core':
-        optional: true
-      coffeescript:
-        optional: true
-      less:
-        optional: true
-      node-sass:
-        optional: true
-      postcss:
-        optional: true
-      postcss-load-config:
-        optional: true
-      pug:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      typescript:
-        optional: true
-    dependencies:
-      '@types/pug': 2.0.5
-      '@types/sass': 1.43.1
-      detect-indent: 6.1.0
-      magic-string: 0.25.7
-      sorcery: 0.10.0
-      strip-indent: 3.0.0
-      svelte: 3.44.2
-      typescript: 4.6.4
-    dev: true
-
   /svelte-preprocess/4.9.8_wwvk7nlptlrqo2czohjtk6eiqm:
     resolution: {integrity: sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==}
     engines: {node: '>= 9.11.2'}
@@ -5732,16 +5416,12 @@ packages:
       typescript: 4.6.4
     dev: true
 
-  /svelte/3.44.2:
-    resolution: {integrity: sha512-jrZhZtmH3ZMweXg1Q15onb8QlWD+a5T5Oca4C1jYvSURp2oD35h4A5TV6t6MEa93K4LlX6BkafZPdQoFjw/ylA==}
-    engines: {node: '>= 8'}
-
   /svelte/3.48.0:
     resolution: {integrity: sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==}
     engines: {node: '>= 8'}
     dev: true
 
-  /svelte2tsx/0.5.0_wgapq35fvzy6mzjhiipmcyqsqu:
+  /svelte2tsx/0.5.0_c64miirrcucob5yjzfkddrmila:
     resolution: {integrity: sha512-pgMMPzPylwzb/XTLXZQ0y6LUlYzVTep4537NJzHNyTbML864pfVS27iVFOgUK7XmKLyuIdG7tgweUZTsIwgKHw==}
     peerDependencies:
       svelte: ^3.24
@@ -5749,8 +5429,8 @@ packages:
     dependencies:
       dedent-js: 1.0.1
       pascal-case: 3.1.2
-      svelte: 3.44.2
-      typescript: 4.6.4
+      svelte: 3.48.0
+      typescript: 4.6.2
     dev: true
 
   /tar-fs/2.1.1:
diff --git a/sites/kit.svelte.dev/package.json b/sites/kit.svelte.dev/package.json
index 3e280f174..74d4e4ee3 100644
--- a/sites/kit.svelte.dev/package.json
+++ b/sites/kit.svelte.dev/package.json
@@ -13,7 +13,7 @@
 		"@sveltejs/amp": "workspace:*",
 		"@sveltejs/kit": "workspace:*",
 		"@sveltejs/site-kit": "^2.1.0",
-		"@types/node": "^16.11.11",
+		"@types/node": "^16.11.36",
 		"flexsearch": "^0.7.21",
 		"marked": "^4.0.5",
 		"prism-svelte": "^0.5.0",
diff --git a/turbo.json b/turbo.json
index a26407fa7..fac4762b5 100644
--- a/turbo.json
+++ b/turbo.json
@@ -7,12 +7,12 @@
 			"outputs": ["dist/**", "docs/**", "assets/**"]
 		},
 		"kit.svelte.dev#build": {
-			"dependsOn": ["^build", "$VERCEL"],
+			"dependsOn": ["^build", "$VERCEL", "$ENABLE_VC_BUILD"],
 			"inputs": ["src/**", "../../packages/kit/docs/**", "../../documentation/**"],
 			"outputs": [".vercel_build_output/**"]
 		},
 		"build": {
-			"dependsOn": ["^build", "$VERCEL"],
+			"dependsOn": ["^build", "$VERCEL", "$ENABLE_VC_BUILD"],
 			"inputs": ["src/**", "scripts/**", "shared/**", "templates/**"],
 			"outputs": ["files/**", "dist/**", ".svelte-kit/**", ".vercel_build_output/**"]
 		},
@@ -25,7 +25,10 @@
 			"outputs": []
 		},
 		"lint": {
-			"dependsOn": ["format"],
+			"outputs": []
+		},
+		"precommit": {
+			"dependsOn": ["format", "lint"],
 			"outputs": []
 		},
 		"dev": {


Test patch:
diff --git a/packages/adapter-static/test/apps/prerendered/package.json b/packages/adapter-static/test/apps/prerendered/package.json
index 364ccc8cd..d903bc452 100644
--- a/packages/adapter-static/test/apps/prerendered/package.json
+++ b/packages/adapter-static/test/apps/prerendered/package.json
@@ -8,8 +8,7 @@
 		"start": "../../../../kit/svelte-kit.js start"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "next",
-		"svelte": "^3.43.0"
+		"@sveltejs/kit": "next"
 	},
 	"type": "module"
 }
diff --git a/packages/adapter-static/test/apps/spa/package.json b/packages/adapter-static/test/apps/spa/package.json
index 66b175297..f27948583 100644
--- a/packages/adapter-static/test/apps/spa/package.json
+++ b/packages/adapter-static/test/apps/spa/package.json
@@ -10,8 +10,7 @@
 	"devDependencies": {
 		"@sveltejs/adapter-node": "next",
 		"@sveltejs/kit": "next",
-		"sirv-cli": "^2.0.2",
-		"svelte": "^3.43.0"
+		"sirv-cli": "^2.0.2"
 	},
 	"type": "module"
 }
diff --git a/packages/adapter-static/test/utils.js b/packages/adapter-static/test/utils.js
index eeba60c43..7c6d0095c 100644
--- a/packages/adapter-static/test/utils.js
+++ b/packages/adapter-static/test/utils.js
@@ -4,7 +4,7 @@ import http from 'http';
 import { fileURLToPath } from 'url';
 import * as ports from 'port-authority';
 import sirv from 'sirv';
-import { chromium } from 'playwright-chromium';
+import { chromium } from '@playwright/test';
 import * as uvu from 'uvu';
 
 /**
diff --git a/packages/kit/test/apps/amp/package.json b/packages/kit/test/apps/amp/package.json
index a66b74094..2c7227f2c 100644
--- a/packages/kit/test/apps/amp/package.json
+++ b/packages/kit/test/apps/amp/package.json
@@ -14,11 +14,7 @@
 	"devDependencies": {
 		"@sveltejs/amp": "workspace:*",
 		"@sveltejs/kit": "workspace:*",
-		"cross-env": "^7.0.3",
-		"purify-css": "^1.2.5",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2"
+		"purify-css": "^1.2.5"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json
index f49e00c6f..066d8c4dc 100644
--- a/packages/kit/test/apps/basics/package.json
+++ b/packages/kit/test/apps/basics/package.json
@@ -13,10 +13,7 @@
 	},
 	"devDependencies": {
 		"@sveltejs/kit": "workspace:*",
-		"cross-env": "^7.0.3",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2"
+		"marked": "^4.0.5"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/apps/basics/src/routes/load/fetch-relative.json.js b/packages/kit/test/apps/basics/src/routes/load/fetch-relative.json.js
new file mode 100644
index 000000000..6cabf0982
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/load/fetch-relative.json.js
@@ -0,0 +1,16 @@
+export function get() {
+	return {
+		body: {
+			answer: 42
+		}
+	};
+}
+
+/** @type {import('@sveltejs/kit').RequestHandler} */
+export async function post({ request }) {
+	return {
+		body: {
+			question: await request.text()
+		}
+	};
+}
diff --git a/packages/kit/test/apps/basics/src/routes/load/fetch-relative.svelte b/packages/kit/test/apps/basics/src/routes/load/fetch-relative.svelte
new file mode 100644
index 000000000..441822668
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/load/fetch-relative.svelte
@@ -0,0 +1,19 @@
+<script context="module">
+	/** @type {import('@sveltejs/kit').Load} */
+	export async function load({ fetch }) {
+		const get = await fetch('fetch-relative.json');
+		const post = await fetch('fetch-relative.json', { method: 'post', body: '?' });
+
+		return {
+			props: { ...(await get.json()), ...(await post.json()) }
+		};
+	}
+</script>
+
+<script>
+	export let answer;
+	export let question;
+</script>
+
+<h1>the answer is {answer}</h1>
+<h2>the question was {question}</h2>
diff --git a/packages/kit/test/apps/basics/src/routes/load/index.svelte b/packages/kit/test/apps/basics/src/routes/load/index.svelte
index 5cffb7e2a..181c11684 100644
--- a/packages/kit/test/apps/basics/src/routes/load/index.svelte
+++ b/packages/kit/test/apps/basics/src/routes/load/index.svelte
@@ -21,6 +21,7 @@
 <h1>bar == {foo}?</h1>
 
 <a href="/load/fetch-request">fetch request</a>
+<a href="/load/fetch-relative">fetch relative</a>
 <a href="/load/fetch-credentialed">fetch credentialed</a>
 <a href="/load/fetch-headers">fetch headers</a>
 <a href="/load/large-response">large response</a>
diff --git a/packages/kit/test/apps/basics/src/routes/load/window-fetch/data.json.js b/packages/kit/test/apps/basics/src/routes/load/window-fetch/data.json.js
index 31bc26ce0..81113d1f2 100644
--- a/packages/kit/test/apps/basics/src/routes/load/window-fetch/data.json.js
+++ b/packages/kit/test/apps/basics/src/routes/load/window-fetch/data.json.js
@@ -5,4 +5,4 @@ export function get() {
 			answer: 42
 		}
 	};
-}
\ No newline at end of file
+}
diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js
index faae28cd8..1ca8f1457 100644
--- a/packages/kit/test/apps/basics/test/test.js
+++ b/packages/kit/test/apps/basics/test/test.js
@@ -1311,6 +1311,13 @@ test.describe.parallel('Load', () => {
 		expect(await page.textContent('h1')).toBe('the answer is 42');
 	});
 
+	test('fetch resolves urls relatively to the target page', async ({ page, clicknav }) => {
+		await page.goto('/load');
+		await clicknav('[href="/load/fetch-relative"]');
+		expect(await page.textContent('h1')).toBe('the answer is 42');
+		expect(await page.textContent('h2')).toBe('the question was ?');
+	});
+
 	test('handles large responses', async ({ page }) => {
 		await page.goto('/load');
 
diff --git a/packages/kit/test/apps/options-2/package.json b/packages/kit/test/apps/options-2/package.json
index 23b013781..106f5ce1f 100644
--- a/packages/kit/test/apps/options-2/package.json
+++ b/packages/kit/test/apps/options-2/package.json
@@ -13,11 +13,7 @@
 	},
 	"devDependencies": {
 		"@sveltejs/adapter-node": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
-		"cross-env": "^7.0.3",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/apps/options/package.json b/packages/kit/test/apps/options/package.json
index a037be551..e4846319c 100644
--- a/packages/kit/test/apps/options/package.json
+++ b/packages/kit/test/apps/options/package.json
@@ -12,11 +12,7 @@
 		"test:build": "playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"cross-env": "^7.0.3",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/prerendering/basics/package.json b/packages/kit/test/prerendering/basics/package.json
index cd1649a50..4e125e8b6 100644
--- a/packages/kit/test/prerendering/basics/package.json
+++ b/packages/kit/test/prerendering/basics/package.json
@@ -10,11 +10,7 @@
 		"test": "npm run build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/prerendering/disabled/package.json b/packages/kit/test/prerendering/disabled/package.json
index d671863dd..08c1b47ea 100644
--- a/packages/kit/test/prerendering/disabled/package.json
+++ b/packages/kit/test/prerendering/disabled/package.json
@@ -10,11 +10,7 @@
 		"test": "npm run build"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/prerendering/options/package.json b/packages/kit/test/prerendering/options/package.json
index 1d6d1d056..7b766659d 100644
--- a/packages/kit/test/prerendering/options/package.json
+++ b/packages/kit/test/prerendering/options/package.json
@@ -10,11 +10,7 @@
 		"test": "npm run build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/prerendering/paths-base/package.json b/packages/kit/test/prerendering/paths-base/package.json
index 7f1fac8a5..8d3ae109f 100644
--- a/packages/kit/test/prerendering/paths-base/package.json
+++ b/packages/kit/test/prerendering/paths-base/package.json
@@ -10,11 +10,7 @@
 		"test": "npm run build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }
diff --git a/packages/kit/test/prerendering/paths-base/svelte.config.js b/packages/kit/test/prerendering/paths-base/svelte.config.js
index 416a7be5e..4e1535a76 100644
--- a/packages/kit/test/prerendering/paths-base/svelte.config.js
+++ b/packages/kit/test/prerendering/paths-base/svelte.config.js
@@ -7,7 +7,7 @@ const config = {
 		adapter: adapter(),
 
 		paths: {
-			base: '/path-base',
+			base: '/path-base'
 		},
 
 		prerender: {
diff --git a/packages/kit/test/prerendering/trailing-slash/package.json b/packages/kit/test/prerendering/trailing-slash/package.json
index 1b20f31f9..38bf6084b 100644
--- a/packages/kit/test/prerendering/trailing-slash/package.json
+++ b/packages/kit/test/prerendering/trailing-slash/package.json
@@ -9,11 +9,7 @@
 		"check": "tsc && svelte-check"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
-		"svelte": "^3.43.0",
-		"svelte-check": "^2.5.0",
-		"typescript": "~4.6.2",
-		"uvu": "^0.5.2"
+		"@sveltejs/kit": "workspace:*"
 	},
 	"type": "module"
 }