Skip to content

Commit e1beb92

Browse files
authored
[fix] only prerender a given dependency once (#8376)
closes #3784
1 parent e379a5d commit e1beb92

File tree

5 files changed

+40
-1
lines changed

5 files changed

+40
-1
lines changed

.changeset/breezy-walls-provide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
only prerender a given dependency once

packages/kit/src/core/prerender/prerender.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,20 @@ export async function prerender() {
102102
/** @type {import('types').SSRManifest} */
103103
const manifest = (await import(pathToFileURL(manifest_path).href)).manifest;
104104

105+
/** @type {Map<string, string>} */
106+
const saved = new Map();
107+
105108
override({
106109
building: true,
107110
paths: config.paths,
108-
read: (file) => readFileSync(join(config.files.assets, file))
111+
read: (file) => {
112+
// stuff we just wrote
113+
const filepath = saved.get(file);
114+
if (filepath) return readFileSync(filepath);
115+
116+
// stuff in `static`
117+
return readFileSync(join(config.files.assets, file));
118+
}
109119
});
110120

111121
const server = new Server(manifest);
@@ -222,6 +232,7 @@ export async function prerender() {
222232
}
223233

224234
const body = result.body ?? new Uint8Array(await result.response.arrayBuffer());
235+
225236
save(
226237
'dependencies',
227238
result.response,
@@ -351,6 +362,9 @@ export async function prerender() {
351362
} else if (response_type !== OK) {
352363
handle_http_error({ status: response.status, path: decoded, referrer, referenceType });
353364
}
365+
366+
manifest.assets.add(file);
367+
saved.set(file, dest);
354368
}
355369

356370
for (const route of manifest._.routes) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/** @type {import('@sveltejs/kit').Load} */
2+
export async function load({ fetch }) {
3+
const url = '/fetch-endpoint/not-buffered.json';
4+
const res = await fetch(url);
5+
6+
return {
7+
headers: res.headers
8+
};
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
/** @type {import('./$types').PageData} */
3+
export let data;
4+
</script>
5+
6+
<h1>content-type: {data.headers.get('content-type')}</h1>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { json } from '@sveltejs/kit';
22

3+
let called = false;
4+
35
export async function GET() {
6+
if (called) throw new Error('should only be called once');
7+
called = true;
8+
49
return json({ answer: 42 });
510
}

0 commit comments

Comments
 (0)