/** * Object containing options defined in `gatsby-config.js` * @typedef {object} pluginOptions */ /** * Replace the default server renderer. This is useful for integration with * Redux, css-in-js libraries, etc. that need custom setups for server * rendering. * @param {object} $0 * @param {string} $0.pathname The pathname of the page currently being rendered. * @param {ReactNode} $0.bodyComponent The React element to be rendered as the page body * @param {function} $0.replaceBodyHTMLString Call this with the HTML string * you render. **WARNING** if multiple plugins implement this API it's the * last plugin that "wins". TODO implement an automated warning against this. * @param {function} $0.setHeadComponents Takes an array of components as its * first argument which are added to the `headComponents` array which is passed * to the `html.js` component. * @param {function} $0.setHtmlAttributes Takes an object of props which will * spread into the `` component. * @param {function} $0.setBodyAttributes Takes an object of props which will * spread into the `` component. * @param {function} $0.setPreBodyComponents Takes an array of components as its * first argument which are added to the `preBodyComponents` array which is passed * to the `html.js` component. * @param {function} $0.setPostBodyComponents Takes an array of components as its * first argument which are added to the `postBodyComponents` array which is passed * to the `html.js` component. * @param {function} $0.setBodyProps Takes an object of data which * is merged with other body props and passed to `html.js` as `bodyProps`. * @param {pluginOptions} pluginOptions * @example * // From gatsby-plugin-glamor * const { renderToString } = require("react-dom/server") * const inline = require("glamor-inline") * * exports.replaceRenderer = ({ bodyComponent, replaceBodyHTMLString }) => { * const bodyHTML = renderToString(bodyComponent) * const inlinedHTML = inline(bodyHTML) * * replaceBodyHTMLString(inlinedHTML) * } */ exports.replaceRenderer = true /** * Called after every page Gatsby server renders while building HTML so you can * set head and body components to be rendered in your `html.js`. * * Gatsby does a two-pass render for HTML. It loops through your pages first * rendering only the body and then takes the result body HTML string and * passes it as the `body` prop to your `html.js` to complete the render. * * It's often handy to be able to send custom components to your `html.js`. * For example, it's a very common pattern for React.js libraries that * support server rendering to pull out data generated during the render to * add to your HTML. * * Using this API over [`replaceRenderer`](#replaceRenderer) is preferable as * multiple plugins can implement this API where only one plugin can take * over server rendering. However, if your plugin requires taking over server * rendering then that's the one to * use * @param {object} $0 * @param {string} $0.pathname The pathname of the page currently being rendered. * @param {function} $0.setHeadComponents Takes an array of components as its * first argument which are added to the `headComponents` array which is passed * to the `html.js` component. * @param {function} $0.setHtmlAttributes Takes an object of props which will * spread into the `` component. * @param {function} $0.setBodyAttributes Takes an object of props which will * spread into the `` component. * @param {function} $0.setPreBodyComponents Takes an array of components as its * first argument which are added to the `preBodyComponents` array which is passed * to the `html.js` component. * @param {function} $0.setPostBodyComponents Takes an array of components as its * first argument which are added to the `postBodyComponents` array which is passed * to the `html.js` component. * @param {function} $0.setBodyProps Takes an object of data which * is merged with other body props and passed to `html.js` as `bodyProps`. * @param {pluginOptions} pluginOptions * @example * // Import React so that you can use JSX in HeadComponents * const React = require("react") * * const HtmlAttributes = { * lang: "en" * } * * const HeadComponents = [ *