vike
Version:
(Replaces Next.js/Nuxt) 🔨 Composable framework to build advanced applications with flexibility and stability.
59 lines (58 loc) • 2.31 kB
JavaScript
export { getDeployConfig };
import { fromVike } from 'convert-route/vike';
import { assert, assertUsage, assertWarning } from '../../../../utils/assert.js';
import { isObject } from '../../../../utils/isObject.js';
import '../../assertEnvVite.js';
import { isCallable } from '../../../../utils/isCallable.js';
import { pageContextJsonFileExtension } from '../../../../shared-server-client/getPageContextRequestUrl.js';
function getDeployConfig(pageId, page) {
const { route } = page;
if (!route)
return null;
// Vercel setting: +edge
const { edge } = page.config?.vercel ?? {};
if (edge) {
assertUsage(typeof edge === 'boolean', '+edge must be a boolean');
}
// Vercel setting: +isr
let { isr } = page.config?.vercel ?? {};
if (isr) {
assertUsage(isObject(isr), '+isr must be an object');
assertUsage(typeof isr.expiration === 'number' && isr.expiration > 0, '+isr.expiration must be a positive number');
}
if (edge) {
assertWarning(!isr, `Page ${pageId} — ISR isn't supported for edge functions — remove +isr or +edge`, {
onlyOnce: true,
});
isr = undefined;
}
if (!edge && !isr)
return null;
if (isCallable(route)) {
const errMsg = (configName) => `The route of the page ${pageId} is defined via a Route Function — ${configName} isn't supported. Remove ${configName} or define the page's route using a Route String (or Filesystem Routing) instead of a Route Function.`;
assertWarning(!isr, errMsg('+isr'), { onlyOnce: true });
assertWarning(!edge, errMsg('+edge'), { onlyOnce: true });
return null;
}
const routeIr = fromVike(route);
return {
route: [routeIr, getRouteIrPageContextJson(routeIr)].filter((r) => r !== undefined),
// Supported by vite-plugin-vercel@11
vercel: { isr, edge },
};
}
function getRouteIrPageContextJson(routeIr) {
const lastSegment = routeIr.pathname.at(-1);
assert(lastSegment);
if (lastSegment.catchAll)
return;
return {
pathname: [
...routeIr.pathname.slice(0, -1),
{
...lastSegment,
value: lastSegment.value + pageContextJsonFileExtension,
},
],
};
}