|
import fs from 'node:fs'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function static_vercel_config(builder) { |
|
|
|
const prerendered_redirects = []; |
|
|
|
|
|
const overrides = {}; |
|
|
|
for (const [src, redirect] of builder.prerendered.redirects) { |
|
prerendered_redirects.push({ |
|
src, |
|
headers: { |
|
Location: redirect.location |
|
}, |
|
status: redirect.status |
|
}); |
|
} |
|
|
|
for (const [path, page] of builder.prerendered.pages) { |
|
if (path.endsWith('/') && path !== '/') { |
|
prerendered_redirects.push( |
|
{ src: path, dest: path.slice(0, -1) }, |
|
{ src: path.slice(0, -1), status: 308, headers: { Location: path } } |
|
); |
|
|
|
overrides[page.file] = { path: path.slice(1, -1) }; |
|
} else { |
|
overrides[page.file] = { path: path.slice(1) }; |
|
} |
|
} |
|
|
|
return { |
|
version: 3, |
|
routes: [ |
|
...prerendered_redirects, |
|
{ |
|
src: `/${builder.getAppPath()}/immutable/.+`, |
|
headers: { |
|
'cache-control': 'public, immutable, max-age=31536000' |
|
} |
|
}, |
|
{ |
|
handle: 'filesystem' |
|
} |
|
], |
|
overrides |
|
}; |
|
} |
|
|
|
|
|
export const platforms = [ |
|
{ |
|
name: 'Vercel', |
|
test: () => !!process.env.VERCEL, |
|
defaults: { |
|
pages: '.vercel/output/static' |
|
}, |
|
done: (builder) => { |
|
const config = static_vercel_config(builder); |
|
fs.writeFileSync('.vercel/output/config.json', JSON.stringify(config, null, ' ')); |
|
} |
|
} |
|
]; |
|
|