Files
zero-fucks-given/apps/web/web-runtime/api/render-data.ts
T

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
};
}