Repository: sveltejs/kit
Pull request #6775 (2022-09-13 16:48:09)

[chore] upgrade to @rollup/plugin-node-resolve 14.1.0
Closes https://github.com/sveltejs/kit/pull/6596

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

Latest commit: d90e29fe60dc5f1e1a52828fe0b564f77f1d36b1

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/benmccann/kit/new/node-resolve?filename=.changeset/mean-planes-decide.md&value=---%0A%22%40sveltejs%2Fadapter-netlify%22%3A%20patch%0A---%0A%0A%5Bchore%5D%20upgrade%20to%20%40rollup%2Fplugin-node-resolve%2014.1.0%0A)



Patch:
diff --git a/.changeset/five-jobs-drum.md b/.changeset/five-jobs-drum.md
new file mode 100644
index 000000000..03ddac9d4
--- /dev/null
+++ b/.changeset/five-jobs-drum.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] reuse server data while not reusing client load
diff --git a/.changeset/funny-cycles-travel.md b/.changeset/funny-cycles-travel.md
new file mode 100644
index 000000000..80f8a991c
--- /dev/null
+++ b/.changeset/funny-cycles-travel.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] update current.url on hashchange
diff --git a/.changeset/gorgeous-flowers-doubt.md b/.changeset/gorgeous-flowers-doubt.md
new file mode 100644
index 000000000..2bc67bc5d
--- /dev/null
+++ b/.changeset/gorgeous-flowers-doubt.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] silence prop warnings
diff --git a/.changeset/immaculate-error-handler.md b/.changeset/immaculate-error-handler.md
new file mode 100644
index 000000000..bc16312ba
--- /dev/null
+++ b/.changeset/immaculate-error-handler.md
@@ -0,0 +1,6 @@
+---
+'@sveltejs/adapter-vercel': patch
+---
+
+Ignore warnings when traced file fails to parse
+
diff --git a/.changeset/modern-books-confess.md b/.changeset/modern-books-confess.md
new file mode 100644
index 000000000..c46179a1f
--- /dev/null
+++ b/.changeset/modern-books-confess.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] error when using `paths.base` and `import` assets
diff --git a/documentation/docs/03-routing.md b/documentation/docs/03-routing.md
index 7c17d59a0..ac5598dd7 100644
--- a/documentation/docs/03-routing.md
+++ b/documentation/docs/03-routing.md
@@ -127,7 +127,7 @@ If an error occurs during `load`, SvelteKit will render a default error page. Yo
 <h1>{$page.status}: {$page.error.message}</h1>
 ```
 
-SvelteKit will 'walk up the tree' looking for the closest error boundary — if the file above didn't exist it would try `src/routes/blog/+error.svelte` and `src/routes/+error.svelte` before rendering the default error page. If _that_ fails, SvelteKit will bail out and render a static fallback error page, which you can customise by creating a `src/error.html` file.
+SvelteKit will 'walk up the tree' looking for the closest error boundary — if the file above didn't exist it would try `src/routes/blog/+error.svelte` and `src/routes/+error.svelte` before rendering the default error page. If _that_ fails (or if the error was thrown from the `load` function of the root `+layout`, which sits 'above' the root `+error`), SvelteKit will bail out and render a static fallback error page, which you can customise by creating a `src/error.html` file.
 
 ### +layout
 
diff --git a/documentation/docs/05-load.md b/documentation/docs/05-load.md
index d048a2f7a..08ae6cc9b 100644
--- a/documentation/docs/05-load.md
+++ b/documentation/docs/05-load.md
@@ -310,8 +310,6 @@ export function load({ locals }) {
 
 If an _unexpected_ error is thrown, SvelteKit will invoke [`handleError`](/docs/hooks#shared-hooks-handleerror) and treat it as a 500 Internal Error.
 
-> In development, stack traces for unexpected errors are visible as `$page.error.stack`. In production, stack traces are hidden.
-
 ### Redirects
 
 To redirect users, use the `redirect` helper from `@sveltejs/kit` to specify the location to which they should be redirected alongside a `3xx` status code.
diff --git a/documentation/docs/06-form-actions.md b/documentation/docs/06-form-actions.md
index 32eae3d11..d235852b4 100644
--- a/documentation/docs/06-form-actions.md
+++ b/documentation/docs/06-form-actions.md
@@ -255,6 +255,8 @@ Without an argument, `use:enhance` will emulate the browser-native behaviour, ju
 - call `goto` on a redirect response
 - render the nearest `+error` boundary if an error occurs
 
+> By default the `form` property is only updated for actions that are in a `+page.server.js` alongside the `+page.svelte` because in the native form submission case you would be redirected to the page the action is on
+
 To customise the behaviour, you can provide a function that runs immediately before the form is submitted, and (optionally) returns a callback that runs with the `ActionResult`.
 
 ```svelte
diff --git a/documentation/docs/07-hooks.md b/documentation/docs/07-hooks.md
index 810ac0ebe..3d494b29e 100644
--- a/documentation/docs/07-hooks.md
+++ b/documentation/docs/07-hooks.md
@@ -22,7 +22,7 @@ The following hooks can be added to `src/hooks.server.js`:
 This function runs every time the SvelteKit server receives a [request](/docs/web-standards#fetch-apis-request) — whether that happens while the app is running, or during [prerendering](/docs/page-options#prerender) — and determines the [response](/docs/web-standards#fetch-apis-response). It receives an `event` object representing the request and a function called `resolve`, which renders the route and generates a `Response`. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing routes programmatically, for example).
 
 ```js
-/// file: src/hooks.js
+/// file: src/hooks.server.js
 /** @type {import('@sveltejs/kit').Handle} */
 export async function handle({ event, resolve }) {
 	if (event.url.pathname.startsWith('/custom')) {
@@ -39,7 +39,7 @@ export async function handle({ event, resolve }) {
 If unimplemented, defaults to `({ event, resolve }) => resolve(event)`. To add custom data to the request, which is passed to handlers in `+server.js` and server-only `load` functions, populate the `event.locals` object, as shown below.
 
 ```js
-/// file: src/hooks.js
+/// file: src/hooks.server.js
 // @filename: ambient.d.ts
 type User = {
 	name: string;
@@ -78,7 +78,7 @@ You can add call multiple `handle` functions with [the `sequence` helper functio
 - `filterSerializedResponseHeaders(name: string, value: string): boolean` — determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. By default, none will be included.
 
 ```js
-/// file: src/hooks.js
+/// file: src/hooks.server.js
 /** @type {import('@sveltejs/kit').Handle} */
 export async function handle({ event, resolve }) {
 	const response = await resolve(event, {
diff --git a/package.json b/package.json
index b71961a9e..811b4bc04 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
 		"@changesets/cli": "^2.22.0",
 		"@rollup/plugin-commonjs": "^22.0.1",
 		"@rollup/plugin-json": "^4.1.0",
-		"@rollup/plugin-node-resolve": "^13.3.0",
+		"@rollup/plugin-node-resolve": "^14.1.0",
 		"@svitejs/changesets-changelog-github-compact": "^0.1.1",
 		"playwright": "^1.25.0",
 		"prettier": "^2.6.2",
@@ -36,7 +36,7 @@
 		"turbo": "^1.3.4",
 		"typescript": "^4.8.2"
 	},
-	"packageManager": "pnpm@7.9.5",
+	"packageManager": "pnpm@7.11.0",
 	"engines": {
 		"pnpm": "^7.0.0"
 	},
diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json
index 8f8c25119..94df9d96a 100644
--- a/packages/adapter-netlify/package.json
+++ b/packages/adapter-netlify/package.json
@@ -40,7 +40,7 @@
 		"@netlify/functions": "^1.0.0",
 		"@rollup/plugin-commonjs": "^22.0.1",
 		"@rollup/plugin-json": "^4.1.0",
-		"@rollup/plugin-node-resolve": "^13.3.0",
+		"@rollup/plugin-node-resolve": "^14.1.0",
 		"@sveltejs/kit": "workspace:*",
 		"@types/node": "^16.11.36",
 		"@types/set-cookie-parser": "^2.4.2",
diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js
index 37027c836..071d025e7 100644
--- a/packages/adapter-vercel/index.js
+++ b/packages/adapter-vercel/index.js
@@ -308,6 +308,11 @@ async function create_function_bundle(builder, entry, dir, runtime) {
 		// pending https://github.com/vercel/nft/issues/284
 		if (error.message.startsWith('Failed to resolve dependency node:')) return;
 
+		// parse errors are likely not js and can safely be ignored,
+		// such as this html file in "main" meant for nw instead of node:
+		// https://github.com/vercel/nft/issues/311
+		if (error.message.startsWith('Failed to parse')) return;
+
 		if (error.message.startsWith('Failed to resolve dependency')) {
 			const match = /Cannot find module '(.+?)' loaded from (.+)/;
 			const [, module, importer] = match.exec(error.message);
diff --git a/packages/kit/src/exports/vite/build/utils.js b/packages/kit/src/exports/vite/build/utils.js
index 5aef6af27..4a0e19e4a 100644
--- a/packages/kit/src/exports/vite/build/utils.js
+++ b/packages/kit/src/exports/vite/build/utils.js
@@ -147,7 +147,7 @@ export function get_default_build_config({ config, input, ssr, outDir }) {
  * @returns {string}
  */
 export function assets_base(config) {
-	return config.paths.assets + '/' || config.paths.base + '/' || './';
+	return (config.paths.assets || config.paths.base || '.') + '/';
 }
 
 const method_names = new Set(['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']);
diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js
index 09be6d707..106b0c918 100644
--- a/packages/kit/src/runtime/client/client.js
+++ b/packages/kit/src/runtime/client/client.js
@@ -43,6 +43,7 @@ function update_scroll_positions(index) {
 	scroll_positions[index] = scroll_state();
 }
 
+// TODO remove for 1.0
 /** @type {Record<string, true>} */
 let warned_about_attributes = {};
 
@@ -742,12 +743,11 @@ export function create_client({ target, base, trailing_slash }) {
 			/** @type {import('./types').BranchNode | undefined} */
 			const previous = current.branch[i];
 
-			const server_data_node = server_data_nodes?.[i] ?? null;
+			const server_data_node = server_data_nodes?.[i];
 
-			const can_reuse_server_data = !server_data_node || server_data_node.type === 'skip';
 			// re-use data from previous load if it's still valid
 			const valid =
-				can_reuse_server_data &&
+				(!server_data_node || server_data_node.type === 'skip') &&
 				loader[1] === previous?.loader &&
 				!has_changed(changed, parent_changed, previous.shared?.uses);
 			if (valid) return previous;
@@ -771,7 +771,12 @@ export function create_client({ target, base, trailing_slash }) {
 					}
 					return data;
 				},
-				server_data_node: create_data_node(server_data_node, previous?.server)
+				server_data_node: create_data_node(
+					// server_data_node is undefined if it wasn't reloaded from the server;
+					// and if current loader uses server data, we want to reuse previous data.
+					server_data_node === undefined && loader[0] ? { type: 'skip' } : server_data_node ?? null,
+					previous?.server
+				)
 			});
 		});
 
@@ -1321,10 +1326,12 @@ export function create_client({ target, base, trailing_slash }) {
 				if (hash !== undefined && base === location.href.split('#')[0]) {
 					// set this flag to distinguish between navigations triggered by
 					// clicking a hash link and those triggered by popstate
+					// TODO why not update history here directly?
 					hash_navigating = true;
 
 					update_scroll_positions(current_history_index);
 
+					current.url = url;
 					stores.page.set({ ...page, url });
 					stores.page.notify();
 
@@ -1545,25 +1552,26 @@ function add_url_properties(type, target) {
 
 function pre_update() {
 	if (__SVELTEKIT_DEV__) {
-		// Nasty hack to silence harmless warnings the user can do nothing about
-		const warn = console.warn;
-		console.warn = (...args) => {
-			if (
-				args.length === 1 &&
-				/<(Layout|Page)(_[\w$]+)?> was created (with unknown|without expected) prop '(data|form)'/.test(
-					args[0]
-				)
-			) {
-				return;
-			}
-			warn(...args);
-		};
-
 		return () => {
-			tick().then(() => (console.warn = warn));
 			check_for_removed_attributes();
 		};
 	}
 
 	return () => {};
 }
+
+if (__SVELTEKIT_DEV__) {
+	// Nasty hack to silence harmless warnings the user can do nothing about
+	const warn = console.warn;
+	console.warn = (...args) => {
+		if (
+			args.length === 1 &&
+			/<(Layout|Page)(_[\w$]+)?> was created (with unknown|without expected) prop '(data|form)'/.test(
+				args[0]
+			)
+		) {
+			return;
+		}
+		warn(...args);
+	};
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ba4fc6b0e..5c997580b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,7 +7,7 @@ importers:
       '@changesets/cli': ^2.22.0
       '@rollup/plugin-commonjs': ^22.0.1
       '@rollup/plugin-json': ^4.1.0
-      '@rollup/plugin-node-resolve': ^13.3.0
+      '@rollup/plugin-node-resolve': ^14.1.0
       '@svitejs/changesets-changelog-github-compact': ^0.1.1
       playwright: ^1.25.0
       prettier: ^2.6.2
@@ -20,7 +20,7 @@ importers:
       '@changesets/cli': 2.23.0
       '@rollup/plugin-commonjs': 22.0.1_rollup@2.78.1
       '@rollup/plugin-json': 4.1.0_rollup@2.78.1
-      '@rollup/plugin-node-resolve': 13.3.0_rollup@2.78.1
+      '@rollup/plugin-node-resolve': 14.1.0_rollup@2.78.1
       '@svitejs/changesets-changelog-github-compact': 0.1.1
       playwright: 1.25.0
       prettier: 2.7.1
@@ -85,7 +85,7 @@ importers:
       '@netlify/functions': ^1.0.0
       '@rollup/plugin-commonjs': ^22.0.1
       '@rollup/plugin-json': ^4.1.0
-      '@rollup/plugin-node-resolve': ^13.3.0
+      '@rollup/plugin-node-resolve': ^14.1.0
       '@sveltejs/kit': workspace:*
       '@types/node': ^16.11.36
       '@types/set-cookie-parser': ^2.4.2
@@ -103,7 +103,7 @@ importers:
       '@netlify/functions': 1.0.0
       '@rollup/plugin-commonjs': 22.0.1_rollup@2.78.1
       '@rollup/plugin-json': 4.1.0_rollup@2.78.1
-      '@rollup/plugin-node-resolve': 13.3.0_rollup@2.78.1
+      '@rollup/plugin-node-resolve': 14.1.0_rollup@2.78.1
       '@sveltejs/kit': link:../kit
       '@types/node': 16.11.42
       '@types/set-cookie-parser': 2.4.2
@@ -1098,18 +1098,18 @@ packages:
       rollup: 2.78.1
     dev: true
 
-  /@rollup/plugin-node-resolve/13.3.0_rollup@2.78.1:
-    resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==}
+  /@rollup/plugin-node-resolve/14.1.0_rollup@2.78.1:
+    resolution: {integrity: sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==}
     engines: {node: '>= 10.0.0'}
     peerDependencies:
-      rollup: ^2.42.0
+      rollup: ^2.78.0
     dependencies:
       '@rollup/pluginutils': 3.1.0_rollup@2.78.1
       '@types/resolve': 1.17.1
       deepmerge: 4.2.2
       is-builtin-module: 3.1.0
       is-module: 1.0.0
-      resolve: 1.22.0
+      resolve: 1.22.1
       rollup: 2.78.1
     dev: true
 
@@ -1252,7 +1252,7 @@ packages:
   /@types/resolve/1.17.1:
     resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
     dependencies:
-      '@types/node': 16.11.42
+      '@types/node': 18.0.0
     dev: true
 
   /@types/sade/1.7.4:


Test patch:
diff --git a/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.js b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.js
new file mode 100644
index 000000000..b81f22315
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.js
@@ -0,0 +1,3 @@
+export function load({ data, url }) {
+	return { ...data, currentClientState: url.searchParams.get('currentClientState') };
+}
diff --git a/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.server.js b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.server.js
new file mode 100644
index 000000000..a61c3b4aa
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.server.js
@@ -0,0 +1,5 @@
+export function load() {
+	return {
+		textFromTheServer: 'This text comes from the server load function'
+	};
+}
diff --git a/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.svelte b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.svelte
new file mode 100644
index 000000000..23f312e3b
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/load/url-query-param/+page.svelte
@@ -0,0 +1,12 @@
+<script>
+  import { page } from "$app/stores"
+</script>
+
+<h1>Hello {$page.data.currentClientState ?? ''}</h1>
+
+<p>{$page.data.textFromTheServer}</p>
+
+<a href="/load/url-query-param?currentClientState=ABC">ABC</a>
+<a href="/load/url-query-param?currentClientState=DEF">DEF</a>
+<hr />
+<a href="/load/url-query-param" data-sveltekit-reload>Reload site</a>
diff --git a/packages/kit/test/apps/basics/src/routes/routing/hashes/pagestore/+page.svelte b/packages/kit/test/apps/basics/src/routes/routing/hashes/pagestore/+page.svelte
index 4a20ec56a..630589a9d 100644
--- a/packages/kit/test/apps/basics/src/routes/routing/hashes/pagestore/+page.svelte
+++ b/packages/kit/test/apps/basics/src/routes/routing/hashes/pagestore/+page.svelte
@@ -17,5 +17,6 @@
 <h1 id="window-hash">{hash}</h1>
 <h1 id="page-url-hash">{$page.url.hash}</h1>
 
-<a href="#target">Nav to #ing with anchor tag</a>
+<a href="#target">Nav to hash</a>
+<a href="/routing/hashes/pagestore">Nav to page</a>
 <div id="target">Target</div>
diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js
index 1c1237820..cf12fdc98 100644
--- a/packages/kit/test/apps/basics/test/client.test.js
+++ b/packages/kit/test/apps/basics/test/client.test.js
@@ -377,6 +377,25 @@ test.describe('Load', () => {
 		expect(await page.textContent('pre')).toBe(JSON.stringify({ foo: { bar: 'Custom layout' } }));
 	});
 
+	test('keeps server data when valid while not reusing client load data', async ({ page }) => {
+		await page.goto('/load/url-query-param');
+
+		expect(await page.textContent('h1')).toBe('Hello ');
+		expect(await page.textContent('p')).toBe('This text comes from the server load function');
+
+		await page.click('a[href="/load/url-query-param?currentClientState=ABC"]');
+		expect(await page.textContent('h1')).toBe('Hello ABC');
+		expect(await page.textContent('p')).toBe('This text comes from the server load function');
+
+		await page.click('a[href="/load/url-query-param?currentClientState=DEF"]');
+		expect(await page.textContent('h1')).toBe('Hello DEF');
+		expect(await page.textContent('p')).toBe('This text comes from the server load function');
+
+		await page.click('a[href="/load/url-query-param"]');
+		expect(await page.textContent('h1')).toBe('Hello ');
+		expect(await page.textContent('p')).toBe('This text comes from the server load function');
+	});
+
 	test('load does not call fetch if max-age allows it', async ({ page, request }) => {
 		await request.get('/load/cache-control/reset');
 
@@ -551,6 +570,9 @@ test.describe('Routing', () => {
 		await page.click('[href="#target"]');
 		expect(await page.textContent('#window-hash')).toBe('#target');
 		expect(await page.textContent('#page-url-hash')).toBe('#target');
+		await page.click('[href="/routing/hashes/pagestore"]');
+		await expect(page.locator('#window-hash')).toHaveText('#target'); // hashchange doesn't fire for these
+		await expect(page.locator('#page-url-hash')).toHaveText('');
 	});
 
 	test('does not normalize external path', async ({ page }) => {
diff --git a/packages/kit/test/prerendering/paths-base/src/routes/assets/+page.svelte b/packages/kit/test/prerendering/paths-base/src/routes/assets/+page.svelte
new file mode 100644
index 000000000..2d15557a2
--- /dev/null
+++ b/packages/kit/test/prerendering/paths-base/src/routes/assets/+page.svelte
@@ -0,0 +1,5 @@
+<script>
+	import logo from './logo.svg';
+</script>
+
+<img src={logo} alt="Svelte logo" />
diff --git a/packages/kit/test/prerendering/paths-base/src/routes/assets/logo.svg b/packages/kit/test/prerendering/paths-base/src/routes/assets/logo.svg
new file mode 100644
index 000000000..49492a83c
--- /dev/null
+++ b/packages/kit/test/prerendering/paths-base/src/routes/assets/logo.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.1566,22.8189c-10.4-14.8851-30.94-19.2971-45.7914-9.8348L22.2825,29.6078A29.9234,29.9234,0,0,0,8.7639,49.6506a31.5136,31.5136,0,0,0,3.1076,20.2318A30.0061,30.0061,0,0,0,7.3953,81.0653a31.8886,31.8886,0,0,0,5.4473,24.1157c10.4022,14.8865,30.9423,19.2966,45.7914,9.8348L84.7167,98.3921A29.9177,29.9177,0,0,0,98.2353,78.3493,31.5263,31.5263,0,0,0,95.13,58.117a30,30,0,0,0,4.4743-11.1824,31.88,31.88,0,0,0-5.4473-24.1157" style="fill:#ff3e00"/><path d="M45.8171,106.5815A20.7182,20.7182,0,0,1,23.58,98.3389a19.1739,19.1739,0,0,1-3.2766-14.5025,18.1886,18.1886,0,0,1,.6233-2.4357l.4912-1.4978,1.3363.9815a33.6443,33.6443,0,0,0,10.203,5.0978l.9694.2941-.0893.9675a5.8474,5.8474,0,0,0,1.052,3.8781,6.2389,6.2389,0,0,0,6.6952,2.485,5.7449,5.7449,0,0,0,1.6021-.7041L69.27,76.281a5.4306,5.4306,0,0,0,2.4506-3.631,5.7948,5.7948,0,0,0-.9875-4.3712,6.2436,6.2436,0,0,0-6.6978-2.4864,5.7427,5.7427,0,0,0-1.6.7036l-9.9532,6.3449a19.0329,19.0329,0,0,1-5.2965,2.3259,20.7181,20.7181,0,0,1-22.2368-8.2427,19.1725,19.1725,0,0,1-3.2766-14.5024,17.9885,17.9885,0,0,1,8.13-12.0513L55.8833,23.7472a19.0038,19.0038,0,0,1,5.3-2.3287A20.7182,20.7182,0,0,1,83.42,29.6611a19.1739,19.1739,0,0,1,3.2766,14.5025,18.4,18.4,0,0,1-.6233,2.4357l-.4912,1.4978-1.3356-.98a33.6175,33.6175,0,0,0-10.2037-5.1l-.9694-.2942.0893-.9675a5.8588,5.8588,0,0,0-1.052-3.878,6.2389,6.2389,0,0,0-6.6952-2.485,5.7449,5.7449,0,0,0-1.6021.7041L37.73,51.719a5.4218,5.4218,0,0,0-2.4487,3.63,5.7862,5.7862,0,0,0,.9856,4.3717,6.2437,6.2437,0,0,0,6.6978,2.4864,5.7652,5.7652,0,0,0,1.602-.7041l9.9519-6.3425a18.978,18.978,0,0,1,5.2959-2.3278,20.7181,20.7181,0,0,1,22.2368,8.2427,19.1725,19.1725,0,0,1,3.2766,14.5024,17.9977,17.9977,0,0,1-8.13,12.0532L51.1167,104.2528a19.0038,19.0038,0,0,1-5.3,2.3287" style="fill:#fff"/></svg>
\ No newline at end of file
diff --git a/packages/kit/test/prerendering/paths-base/test/test.js b/packages/kit/test/prerendering/paths-base/test/test.js
index d2a47907a..36d7b79c0 100644
--- a/packages/kit/test/prerendering/paths-base/test/test.js
+++ b/packages/kit/test/prerendering/paths-base/test/test.js
@@ -18,4 +18,9 @@ test('prerenders /path-base/dynamic/foo', () => {
 	assert.ok(content.includes('<h1>foo</h1>'));
 });
 
+test('prerenders /path-base/assets', () => {
+	const content = read('assets.html');
+	assert.match(content, /<img[^>]+src="\/path-base\//u);
+});
+
 test.run();