Skip to content

Commit 4c3b054

Browse files
authored
Merge branch 'sveltejs:master' into method-overrides
2 parents f9d55b9 + 1c30945 commit 4c3b054

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+255
-64
lines changed

Diff for: .changeset/brave-weeks-allow.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Expose appDir to adapters

Diff for: .changeset/pre.json

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"brave-falcons-approve",
5353
"brave-seas-invent",
5454
"brave-turkeys-bathe",
55+
"brave-weeks-allow",
5556
"breezy-sheep-dress",
5657
"breezy-students-refuse",
5758
"bright-cherries-hug",
@@ -372,6 +373,7 @@
372373
"pretty-kids-watch",
373374
"pretty-mayflies-tickle",
374375
"pretty-snakes-burn",
376+
"proud-hairs-chew",
375377
"proud-needles-shake",
376378
"proud-numbers-promise",
377379
"proud-parrots-reflect",
@@ -528,6 +530,7 @@
528530
"tame-rings-cry",
529531
"tasty-cars-love",
530532
"tasty-donkeys-wait",
533+
"tasty-islands-drive",
531534
"ten-hairs-perform",
532535
"ten-mice-kneel",
533536
"ten-plants-sleep",
@@ -630,6 +633,7 @@
630633
"witty-eyes-relax",
631634
"witty-ligers-listen",
632635
"witty-maps-pull",
636+
"witty-meals-tie",
633637
"yellow-meals-agree",
634638
"yellow-steaks-doubt",
635639
"yellow-terms-accept",

Diff for: .changeset/proud-hairs-chew.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Replace %svelte.assets% with relative path

Diff for: .changeset/tasty-islands-drive.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'create-svelte': patch
3+
---
4+
5+
Update template files to include %svelte.assets%

Diff for: .changeset/tiny-humans-yawn.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@sveltejs/adapter-begin": patch
3+
"@sveltejs/adapter-node": patch
4+
"@sveltejs/adapter-static": patch
5+
"@sveltejs/kit": patch
6+
---
7+
8+
[chore] update dependency sirv to v2

Diff for: .changeset/witty-meals-tie.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@sveltejs/adapter-cloudflare': patch
3+
'@sveltejs/adapter-cloudflare-workers': patch
4+
'@sveltejs/adapter-netlify': patch
5+
'@sveltejs/adapter-vercel': patch
6+
---
7+
8+
Add immutable cache headers to generated assets

Diff for: packages/adapter-auto/CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# @sveltejs/adapter-auto
22

3+
## 1.0.0-next.10
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [[`e100b426`](https://github.com/sveltejs/kit/commit/e100b4269f159016d7235869d002b8a623d8066b)]:
8+
- @sveltejs/adapter-cloudflare@1.0.0-next.7
9+
- @sveltejs/adapter-netlify@1.0.0-next.38
10+
- @sveltejs/adapter-vercel@1.0.0-next.36
11+
312
## 1.0.0-next.9
413

514
### Patch Changes

Diff for: packages/adapter-auto/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sveltejs/adapter-auto",
3-
"version": "1.0.0-next.9",
3+
"version": "1.0.0-next.10",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/sveltejs/kit",

Diff for: packages/adapter-begin/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"devDependencies": {
2626
"@sveltejs/kit": "workspace:*",
2727
"rollup": "^2.58.0",
28-
"sirv": "^1.0.17"
28+
"sirv": "^2.0.0"
2929
},
3030
"exports": {
3131
".": {

Diff for: packages/adapter-cloudflare-workers/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# @sveltejs/adapter-cloudflare-workers
22

3+
## 1.0.0-next.29
4+
5+
### Patch Changes
6+
7+
- Add immutable cache headers to generated assets ([#3222](https://github.com/sveltejs/kit/pull/3222))
8+
39
## 1.0.0-next.28
410

511
### Patch Changes

Diff for: packages/adapter-cloudflare-workers/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Now you should get some details from Cloudflare. You should get your:
4747
1. Account ID
4848
2. And your Zone-ID (Optional)
4949

50-
Get them by visiting your Cloudflare-Dashboard and click on any domain. There, you can scroll down and on the left, you can see your details under **API**.
50+
Get them by visiting your [Cloudflare dashboard](https://dash.cloudflare.com) and click on any domain. There, you can scroll down and on the left, you can see your details under **API**.
5151

5252
Then configure your sites build directory and your account-details in the config file:
5353

Diff for: packages/adapter-cloudflare-workers/files/entry.js

+43-24
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,54 @@
11
import { App } from 'APP';
2-
import { manifest } from './manifest.js';
3-
import { getAssetFromKV, NotFoundError } from '@cloudflare/kv-asset-handler';
2+
import { manifest, prerendered } from './manifest.js';
3+
import { getAssetFromKV } from '@cloudflare/kv-asset-handler';
44

55
const app = new App(manifest);
66

7-
addEventListener('fetch', (event) => {
7+
const prefix = `/${manifest.appDir}/`;
8+
9+
addEventListener('fetch', (/** @type {FetchEvent} */ event) => {
810
event.respondWith(handle(event));
911
});
1012

13+
/**
14+
* @param {FetchEvent} event
15+
* @returns {Promise<Response>}
16+
*/
1117
async function handle(event) {
12-
// try static files first
13-
if (event.request.method == 'GET') {
14-
try {
15-
// TODO rather than attempting to get an asset,
16-
// use the asset manifest to see if it exists
17-
return await getAssetFromKV(event);
18-
} catch (e) {
19-
if (!(e instanceof NotFoundError)) {
20-
return new Response('Error loading static asset:' + (e.message || e.toString()), {
21-
status: 500
22-
});
18+
const { request } = event;
19+
20+
const url = new URL(request.url);
21+
22+
// generated assets
23+
if (url.pathname.startsWith(prefix)) {
24+
const res = await getAssetFromKV(event);
25+
return new Response(res.body, {
26+
headers: {
27+
'cache-control': 'public, immutable, max-age=31536000',
28+
'content-type': res.headers.get('content-type')
2329
}
24-
}
30+
});
2531
}
2632

27-
// fall back to an app route
28-
const request = event.request;
33+
// prerendered pages and index.html files
34+
const pathname = url.pathname.replace(/\/$/, '');
35+
let file = pathname.substring(1);
2936

37+
try {
38+
file = decodeURIComponent(file);
39+
} catch (err) {
40+
// ignore
41+
}
42+
43+
if (
44+
manifest.assets.has(file) ||
45+
manifest.assets.has(file + '/index.html') ||
46+
prerendered.has(pathname || '/')
47+
) {
48+
return await getAssetFromKV(event);
49+
}
50+
51+
// dynamically-generated pages
3052
try {
3153
const rendered = await app.render({
3254
url: request.url,
@@ -38,14 +60,14 @@ async function handle(event) {
3860
if (rendered) {
3961
return new Response(rendered.body, {
4062
status: rendered.status,
41-
headers: makeHeaders(rendered.headers)
63+
headers: make_headers(rendered.headers)
4264
});
4365
}
4466
} catch (e) {
4567
return new Response('Error rendering route:' + (e.message || e.toString()), { status: 500 });
4668
}
4769

48-
return new Response({
70+
return new Response('Not Found', {
4971
status: 404,
5072
statusText: 'Not Found'
5173
});
@@ -56,11 +78,8 @@ async function read(request) {
5678
return new Uint8Array(await request.arrayBuffer());
5779
}
5880

59-
/**
60-
* @param {Record<string, string | string[]>} headers
61-
* @returns {Request}
62-
*/
63-
function makeHeaders(headers) {
81+
/** @param {Record<string, string | string[]>} headers */
82+
function make_headers(headers) {
6483
const result = new Headers();
6584
for (const header in headers) {
6685
const value = headers[header];

Diff for: packages/adapter-cloudflare-workers/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default function () {
2323
builder.rimraf(entrypoint);
2424

2525
builder.log.info('Prerendering static pages...');
26-
await builder.prerender({
26+
const { paths } = await builder.prerender({
2727
dest: bucket
2828
});
2929

@@ -47,7 +47,7 @@ export default function () {
4747
`${tmp}/manifest.js`,
4848
`export const manifest = ${builder.generateManifest({
4949
relativePath
50-
})};\n`
50+
})};\n\nexport const prerendered = new Set(${JSON.stringify(paths)});\n`
5151
);
5252

5353
await esbuild.build({
@@ -67,6 +67,7 @@ export default function () {
6767
};
6868
}
6969

70+
/** @param {import('@sveltejs/kit').Builder} builder */
7071
function validate_config(builder) {
7172
if (existsSync('wrangler.toml')) {
7273
let wrangler_config;

Diff for: packages/adapter-cloudflare-workers/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sveltejs/adapter-cloudflare-workers",
3-
"version": "1.0.0-next.28",
3+
"version": "1.0.0-next.29",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/sveltejs/kit",
@@ -31,6 +31,8 @@
3131
"esbuild": "^0.13.15"
3232
},
3333
"devDependencies": {
34+
"@cloudflare/kv-asset-handler": "^0.2.0",
35+
"@cloudflare/workers-types": "^3.3.0",
3436
"@sveltejs/kit": "workspace:*"
3537
}
3638
}

Diff for: packages/adapter-cloudflare-workers/tsconfig.json

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"compilerOptions": {
3+
"allowJs": true,
4+
"checkJs": true,
5+
"noEmit": true,
6+
"noImplicitAny": true,
7+
"target": "es2020",
8+
"module": "es2020",
9+
"moduleResolution": "node",
10+
"allowSyntheticDefaultImports": true,
11+
"types": ["@cloudflare/workers-types"]
12+
},
13+
"include": ["./index.js", "files"]
14+
}

Diff for: packages/adapter-cloudflare/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# @sveltejs/adapter-cloudflare
22

3+
## 1.0.0-next.7
4+
5+
### Patch Changes
6+
7+
- Add immutable cache headers to generated assets ([#3222](https://github.com/sveltejs/kit/pull/3222))
8+
39
## 1.0.0-next.6
410

511
### Patch Changes

Diff for: packages/adapter-cloudflare/files/worker.js

+14-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,20 @@ export default {
1010
const url = new URL(req.url);
1111

1212
// static assets
13-
if (url.pathname.startsWith(prefix)) return env.ASSETS.fetch(req);
13+
if (url.pathname.startsWith(prefix)) {
14+
/** @type {Response} */
15+
const res = await env.ASSETS.fetch(req);
16+
17+
return new Response(res.body, {
18+
headers: {
19+
// include original cache headers, minus cache-control which
20+
// is overridden, and etag which is no longer useful
21+
'cache-control': 'public, immutable, max-age=31536000',
22+
'content-type': res.headers.get('content-type'),
23+
'x-robots-tag': 'noindex'
24+
}
25+
});
26+
}
1427

1528
// prerendered pages and index.html files
1629
const pathname = url.pathname.replace(/\/$/, '');

Diff for: packages/adapter-cloudflare/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sveltejs/adapter-cloudflare",
3-
"version": "1.0.0-next.6",
3+
"version": "1.0.0-next.7",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/sveltejs/kit",

Diff for: packages/adapter-netlify/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# @sveltejs/adapter-netlify
22

3+
## 1.0.0-next.38
4+
5+
### Patch Changes
6+
7+
- Add immutable cache headers to generated assets ([#3222](https://github.com/sveltejs/kit/pull/3222))
8+
39
## 1.0.0-next.37
410

511
### Patch Changes

Diff for: packages/adapter-netlify/index.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,13 @@ export default function ({ split = false } = {}) {
129129
builder.copy('_redirects', redirect_file);
130130
appendFileSync(redirect_file, `\n\n${redirects.join('\n')}`);
131131

132-
// TODO write a _headers file that makes client-side assets immutable
132+
builder.log.minor('Writing custom headers...');
133+
const headers_file = join(publish, '_headers');
134+
builder.copy('_headers', headers_file);
135+
appendFileSync(
136+
headers_file,
137+
`\n\n/${builder.appDir}/*\n cache-control: public\n cache-control: immutable\n cache-control: max-age=31536000\n`
138+
);
133139
}
134140
};
135141
}

Diff for: packages/adapter-netlify/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sveltejs/adapter-netlify",
3-
"version": "1.0.0-next.37",
3+
"version": "1.0.0-next.38",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/sveltejs/kit",

Diff for: packages/adapter-node/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"polka": "^1.0.0-next.22",
4444
"rimraf": "^3.0.2",
4545
"rollup": "^2.60.2",
46-
"sirv": "^1.0.19",
46+
"sirv": "^2.0.0",
4747
"uvu": "^0.5.2"
4848
}
4949
}

Diff for: packages/adapter-static/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"@sveltejs/kit": "workspace:*",
3232
"playwright-chromium": "^1.17.0",
3333
"port-authority": "^1.1.2",
34-
"sirv": "^1.0.19",
34+
"sirv": "^2.0.0",
3535
"svelte": "^3.44.2",
3636
"uvu": "^0.5.2"
3737
}

Diff for: packages/adapter-vercel/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# @sveltejs/adapter-vercel
22

3+
## 1.0.0-next.36
4+
5+
### Patch Changes
6+
7+
- Add immutable cache headers to generated assets ([#3222](https://github.com/sveltejs/kit/pull/3222))
8+
39
## 1.0.0-next.35
410

511
### Patch Changes

0 commit comments

Comments
 (0)