@ima/react-page-renderer
Version:
IMA.js React page renderer.
33 lines (32 loc) • 1.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
const _emitter = require("@ima/server/lib/emitter");
module.exports = function createReactRenderer({ emitter }) {
emitter.prependListener(_emitter.Event.BeforeError, (event)=>{
const context = event.context;
if (context?.response?.viewAdapter) {
delete context.response.viewAdapter;
}
});
emitter.prependListener(_emitter.Event.BeforeResponse, (event)=>{
// Skip rendering for SPA prefetch
if (event.context.response.spaPrefetch) {
return;
}
const { documentView, documentViewProps, react, reactDOM, viewAdapter } = event.context.response;
if (!viewAdapter) {
return;
}
// Render current page to string
const page = reactDOM.renderToString(viewAdapter);
// Render document view (base HTML) to string
const appMarkup = reactDOM.renderToStaticMarkup(react.createElement(documentView, {
...documentViewProps,
page
}));
event.context.response.content = '<!doctype html>\n' + appMarkup;
});
};
//# sourceMappingURL=server.js.map