polen
Version:
A framework for delightful GraphQL developer portals
28 lines • 1.31 kB
JavaScript
import { createHtmlTransformer } from '#lib/html-utils/html-transformer';
import { injectGlobalDataIntoHTML } from '#lib/html-utils/inject-global-data';
import * as Theme from '#lib/theme/theme';
/**
* HTML transformer that injects Polen global data based on request context
* This runs in both dev and production modes to ensure consistent behavior
*/
export const createPolenDataInjector = () => {
return createHtmlTransformer((html, ctx) => {
// Create theme manager to read cookies
const themeManager = Theme.createThemeManager({
cookieName: `polen-theme-preference`,
});
// Get theme from request cookies
const cookies = ctx.req.header(`cookie`) || ``;
const cookieTheme = themeManager.readCookie(cookies);
// Use existing Polen global data if available, otherwise create new
const polenData = globalThis.__POLEN__ || {
serverContext: {
theme: cookieTheme || 'system', // No cookie means system preference
isDev: !__BUILDING__, // true in dev, false in production
},
};
// Just inject the Polen data, no additional code
return injectGlobalDataIntoHTML(html, '__POLEN__', polenData);
});
};
//# sourceMappingURL=inject-polen-data.js.map