Skip to content

Commit 18ce99d

Browse files
committed
feat: use config.kit.paths.base for static assets
fixes sveltejs#4442, fixes sveltejs#2843 - add manifest.prefix and builder.getAppPrefixDirectory() - adapter-cloudflare*: use manifest.prefix instead of manifest.appDir - adapter-netlify: use prefixed appDir for cache headers - adapter-vercel: use prefixed appDir for routes.json - adapter-cloudflare, adapter-cloudflare-workers, adapter-netlify: write static assets to "$dest/$base"
1 parent 69913e9 commit 18ce99d

File tree

13 files changed

+39
-14
lines changed

13 files changed

+39
-14
lines changed

.changeset/smooth-waves-accept.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@sveltejs/adapter-cloudflare': patch
3+
'@sveltejs/adapter-cloudflare-workers': patch
4+
'@sveltejs/adapter-netlify': patch
5+
'@sveltejs/adapter-vercel': patch
6+
'@sveltejs/kit': patch
7+
---
8+
9+
Use config.kit.paths.base prefix for static assets

packages/adapter-cloudflare-workers/files/entry.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { getAssetFromKV } from '@cloudflare/kv-asset-handler';
44

55
const server = new Server(manifest);
66

7-
const prefix = `/${manifest.appDir}/`;
7+
const { prefix } = manifest;
88

99
addEventListener('fetch', (/** @type {FetchEvent} */ event) => {
1010
event.respondWith(handle(event));

packages/adapter-cloudflare-workers/index.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ export default function () {
6060
writeFileSync(`${entrypoint}/package.json`, JSON.stringify({ main: 'index.js' }));
6161

6262
builder.log.minor('Copying assets...');
63-
builder.writeClient(bucket);
64-
builder.writeStatic(bucket);
65-
builder.writePrerendered(bucket);
63+
64+
const prefixedBucket = `${bucket}${builder.config.kit.paths.base}`;
65+
builder.writeClient(prefixedBucket);
66+
builder.writeStatic(prefixedBucket);
67+
builder.writePrerendered(prefixedBucket);
6668
}
6769
};
6870
}

packages/adapter-cloudflare/files/worker.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { manifest, prerendered } from 'MANIFEST';
33

44
const server = new Server(manifest);
55

6-
const prefix = `/${manifest.appDir}/`;
6+
const { prefix } = manifest;
77

88
export default {
99
/**

packages/adapter-cloudflare/index.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ export default function (options = {}) {
1616
builder.rimraf(tmp);
1717
builder.mkdirp(tmp);
1818

19-
builder.writeStatic(dest);
20-
builder.writeClient(dest);
21-
builder.writePrerendered(dest);
19+
const prefixedDest = `${dest}${builder.config.kit.paths.base}`;
20+
builder.writeStatic(prefixedDest);
21+
builder.writeClient(prefixedDest);
22+
builder.writePrerendered(prefixedDest);
2223

2324
const relativePath = posix.relative(tmp, builder.getServerDirectory());
2425

packages/adapter-netlify/index.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,11 @@ export default function ({ split = false } = {}) {
122122
}
123123

124124
builder.log.minor('Copying assets...');
125-
builder.writeStatic(publish);
126-
builder.writeClient(publish);
127-
builder.writePrerendered(publish);
125+
126+
const prefixedPublish = `${publish}${builder.config.kit.paths.base}`;
127+
builder.writeStatic(prefixedPublish);
128+
builder.writeClient(prefixedPublish);
129+
builder.writePrerendered(prefixedPublish);
128130

129131
builder.log.minor('Writing redirects...');
130132
const redirect_file = join(publish, '_redirects');
@@ -136,7 +138,7 @@ export default function ({ split = false } = {}) {
136138
builder.copy('_headers', headers_file);
137139
appendFileSync(
138140
headers_file,
139-
`\n\n/${builder.config.kit.appDir}/*\n cache-control: public\n cache-control: immutable\n cache-control: max-age=31536000\n`
141+
`\n\n${builder.getPrefixedAppDirectory()}*\n cache-control: public\n cache-control: immutable\n cache-control: max-age=31536000\n`
140142
);
141143
}
142144
};

packages/adapter-vercel/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export default function ({ external = [] } = {}) {
162162
...prerendered_pages,
163163
...prerendered_redirects,
164164
{
165-
src: `/${builder.config.kit.appDir}/.+`,
165+
src: `/${builder.getPrefixedAppDirectory()}/.+`,
166166
headers: {
167167
'cache-control': 'public, immutable, max-age=31536000'
168168
}

packages/kit/src/core/adapt/builder.js

+4
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ export function create_builder({ config, build_data, prerendered, log }) {
119119
return config.kit.files.assets;
120120
},
121121

122+
getPrefixedAppDirectory() {
123+
return build_data.prefix;
124+
},
125+
122126
writeClient(dest) {
123127
return copy(`${config.kit.outDir}/output/client`, dest, {
124128
filter: (file) => file[0] !== '.'

packages/kit/src/core/build/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export async function build(config, { log }) {
2626

2727
const { manifest_data } = sync.all(config);
2828

29+
const assets_prefix = `${config.kit.paths.assets || config.kit.paths.base}/${config.kit.appDir}/`;
2930
const options = {
3031
cwd,
3132
config,
@@ -34,7 +35,7 @@ export async function build(config, { log }) {
3435
// during `svelte-kit preview`, because we use a local asset path. If Vite
3536
// used relative paths, I _think_ this could get fixed. Issue here:
3637
// https://github.com./vitejs/vite/issues/2009
37-
assets_base: `${config.kit.paths.assets || config.kit.paths.base}/${config.kit.appDir}/`,
38+
assets_base: assets_prefix,
3839
manifest_data,
3940
output_dir,
4041
client_entry_file: path.relative(cwd, `${get_runtime_path(config)}/client/start.js`),
@@ -48,6 +49,7 @@ export async function build(config, { log }) {
4849
/** @type {import('types').BuildData} */
4950
const build_data = {
5051
app_dir: config.kit.appDir,
52+
prefix: assets_prefix,
5153
manifest_data: options.manifest_data,
5254
service_worker: options.service_worker_entry_file ? 'service-worker.js' : null, // TODO make file configurable?
5355
client,

packages/kit/src/core/dev/plugin.js

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export async function create_plugin(config, cwd) {
4949

5050
manifest = {
5151
appDir: config.kit.appDir,
52+
prefix: config.kit.appDir,
5253
assets: new Set(manifest_data.assets.map((asset) => asset.file)),
5354
mimeTypes: get_mime_lookup(manifest_data),
5455
_: {

packages/kit/src/core/generate_manifest/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export function generate_manifest({ build_data, relative_path, routes, format =
6363
// prettier-ignore
6464
return `{
6565
appDir: ${s(build_data.app_dir)},
66+
prefix: ${s(build_data.prefix)},
6667
assets: new Set(${s(assets)}),
6768
mimeTypes: ${s(get_mime_lookup(build_data.manifest_data))},
6869
_: {

packages/kit/types/index.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export interface Builder {
4949
getClientDirectory(): string;
5050
getServerDirectory(): string;
5151
getStaticDirectory(): string;
52+
getPrefixedAppDirectory(): string;
5253

5354
/**
5455
* @param dest the destination folder to which files should be copied
@@ -245,6 +246,7 @@ export class Server {
245246

246247
export interface SSRManifest {
247248
appDir: string;
249+
prefix: string;
248250
assets: Set<string>;
249251
mimeTypes: Record<string, string>;
250252

packages/kit/types/internal.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export interface Asset {
4343

4444
export interface BuildData {
4545
app_dir: string;
46+
prefix: string;
4647
manifest_data: ManifestData;
4748
service_worker: string | null;
4849
client: {

0 commit comments

Comments
 (0)