47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import 'server-only';
|
|
import { cache } from 'react';
|
|
import { createEmptySiteSettings, normalizeRoutePath } from '../data/normalize';
|
|
import type { PageRenderData } from '../types';
|
|
import { getWebRuntimeAPI } from './web-runtime-api';
|
|
|
|
export const resolvePageRenderData = cache(
|
|
async (locale: string, requestedPath: string): Promise<PageRenderData | null> => {
|
|
const api = getWebRuntimeAPI();
|
|
const request = {
|
|
locale: locale.trim(),
|
|
path: normalizeRoutePath(requestedPath)
|
|
};
|
|
const resolution = await api.resolvePage(request);
|
|
|
|
if (!resolution || resolution.page.status !== 'published') {
|
|
return null;
|
|
}
|
|
|
|
const settings = resolution.settings ?? (await api.getSettings(request.locale));
|
|
|
|
return {
|
|
page: resolution.page,
|
|
settings: settings ?? createEmptySiteSettings(request.locale),
|
|
languageAlternatives: resolution.languageAlternatives
|
|
};
|
|
}
|
|
);
|
|
|
|
export async function resolvePreviewRenderData(token: string): Promise<PageRenderData | null> {
|
|
if (!token) {
|
|
return null;
|
|
}
|
|
|
|
const resolution = await getWebRuntimeAPI().getPreview(token);
|
|
|
|
if (!resolution) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
page: resolution.page,
|
|
settings: resolution.settings ?? createEmptySiteSettings(resolution.page.locale),
|
|
languageAlternatives: resolution.languageAlternatives
|
|
};
|
|
}
|