export default function createSSRPlugin()

in fusion-core/src/plugins/ssr.js [45:83]


export default function createSSRPlugin({
  element,
  ssrDecider,
  ssrBodyTemplate,
}: {
  element: any,
  ssrDecider: SSRDeciderService,
  ssrBodyTemplate?: SSRBodyTemplateService,
}) {
  return async function ssrPlugin(ctx: Context, next: () => Promise<void>) {
    if (!ssrDecider(ctx)) return next();

    const template = {
      htmlAttrs: {},
      bodyAttrs: {},
      title: '',
      head: [],
      body: [],
    };
    ctx.element = element;
    ctx.rendered = '';
    ctx.template = template;
    ctx.type = 'text/html';

    await next();

    // Allow someone to override the ssr by setting ctx.body
    // This is especially useful for things like ctx.redirect
    if (ctx.body && ctx.respond !== false) {
      return;
    }

    if (ssrBodyTemplate) {
      ctx.body = ssrBodyTemplate(ctx);
    } else {
      ctx.body = legacySSRBodyTemplate(ctx);
    }
  };
}