@rest-hooks/ssr
Version:
Server Side Rendering helpers for Rest Hooks
34 lines (32 loc) • 5.66 kB
JavaScript
import _jsx from "@babel/runtime/helpers/jsx";
import React from "react";
import Document from 'next/document.js';
import createPersistedStore from '../createPersistedStore.js';
import createServerDataComponent from '../createServerDataComponent.js';
// nextjs oddly breaks their exports here
// we conditionally check this just in case they fix it
const Doc = Object.hasOwn(Document, 'default') ? Document.default : Document;
export default class RestHooksDocument extends Doc {
static async getInitialProps(ctx) {
const originalRenderPage = ctx.renderPage;
const [ServerCacheProvider, useReadyCacheState] = createPersistedStore();
const ServerDataComponent = createServerDataComponent(useReadyCacheState);
// Run the React rendering logic synchronously
ctx.renderPage = () => {
return originalRenderPage({
// Useful for wrapping the whole react tree
enhanceApp: App => props => /*#__PURE__*/_jsx(ServerCacheProvider, {}, void 0, /*#__PURE__*/React.createElement(App, Object.assign({}, props)))
});
};
// Run the parent `getInitialProps`, it now includes the custom `renderPage`
const initialProps = await super.getInitialProps(ctx);
initialProps.head = [...initialProps.head, /*#__PURE__*/_jsx(ServerDataComponent, {
nonce: this.getNonce(ctx)
}, "rest-hooks")];
return initialProps;
}
static getNonce(ctx) {
return undefined;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImNyZWF0ZVBlcnNpc3RlZFN0b3JlIiwiY3JlYXRlU2VydmVyRGF0YUNvbXBvbmVudCIsIkRvYyIsIk9iamVjdCIsImhhc093biIsImRlZmF1bHQiLCJSZXN0SG9va3NEb2N1bWVudCIsImdldEluaXRpYWxQcm9wcyIsImN0eCIsIm9yaWdpbmFsUmVuZGVyUGFnZSIsInJlbmRlclBhZ2UiLCJTZXJ2ZXJDYWNoZVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiU2VydmVyRGF0YUNvbXBvbmVudCIsImVuaGFuY2VBcHAiLCJBcHAiLCJwcm9wcyIsIl9qc3giLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJhc3NpZ24iLCJpbml0aWFsUHJvcHMiLCJoZWFkIiwibm9uY2UiLCJnZXROb25jZSIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZXh0anMvUmVzdEhvb2tzRG9jdW1lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICduZXh0L2FwcC5qcyc7XG5pbXBvcnQgRG9jdW1lbnQsIHtcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbn0gZnJvbSAnbmV4dC9kb2N1bWVudC5qcyc7XG5cbmltcG9ydCB7IERUeXBlIH0gZnJvbSAnLi9kb2NUeXBlLmNqcyc7XG5pbXBvcnQgY3JlYXRlUGVyc2lzdGVkU3RvcmUgZnJvbSAnLi4vY3JlYXRlUGVyc2lzdGVkU3RvcmUuanMnO1xuaW1wb3J0IGNyZWF0ZVNlcnZlckRhdGFDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlU2VydmVyRGF0YUNvbXBvbmVudC5qcyc7XG5cbi8vIG5leHRqcyBvZGRseSBicmVha3MgdGhlaXIgZXhwb3J0cyBoZXJlXG4vLyB3ZSBjb25kaXRpb25hbGx5IGNoZWNrIHRoaXMganVzdCBpbiBjYXNlIHRoZXkgZml4IGl0XG5jb25zdCBEb2M6IHR5cGVvZiBEVHlwZSA9IE9iamVjdC5oYXNPd24oRG9jdW1lbnQsICdkZWZhdWx0JylcbiAgPyAoKERvY3VtZW50IGFzIGFueSkuZGVmYXVsdCBhcyBhbnkpXG4gIDogRG9jdW1lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc3RIb29rc0RvY3VtZW50IGV4dGVuZHMgRG9jIHtcbiAgc3RhdGljIGFzeW5jIGdldEluaXRpYWxQcm9wcyhcbiAgICBjdHg6IERvY3VtZW50Q29udGV4dCxcbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyUGFnZSA9IGN0eC5yZW5kZXJQYWdlO1xuXG4gICAgY29uc3QgW1NlcnZlckNhY2hlUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZV0gPSBjcmVhdGVQZXJzaXN0ZWRTdG9yZSgpO1xuICAgIGNvbnN0IFNlcnZlckRhdGFDb21wb25lbnQgPSBjcmVhdGVTZXJ2ZXJEYXRhQ29tcG9uZW50KHVzZVJlYWR5Q2FjaGVTdGF0ZSk7XG5cbiAgICAvLyBSdW4gdGhlIFJlYWN0IHJlbmRlcmluZyBsb2dpYyBzeW5jaHJvbm91c2x5XG4gICAgY3R4LnJlbmRlclBhZ2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXJQYWdlKHtcbiAgICAgICAgLy8gVXNlZnVsIGZvciB3cmFwcGluZyB0aGUgd2hvbGUgcmVhY3QgdHJlZVxuICAgICAgICBlbmhhbmNlQXBwOiAoQXBwOiBBcHBUeXBlKSA9PiAocHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAoXG4gICAgICAgICAgICA8U2VydmVyQ2FjaGVQcm92aWRlcj5cbiAgICAgICAgICAgICAgPEFwcCB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICA8L1NlcnZlckNhY2hlUHJvdmlkZXI+XG4gICAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gUnVuIHRoZSBwYXJlbnQgYGdldEluaXRpYWxQcm9wc2AsIGl0IG5vdyBpbmNsdWRlcyB0aGUgY3VzdG9tIGByZW5kZXJQYWdlYFxuICAgIGNvbnN0IGluaXRpYWxQcm9wcyA9IGF3YWl0IHN1cGVyLmdldEluaXRpYWxQcm9wcyhjdHgpO1xuXG4gICAgaW5pdGlhbFByb3BzLmhlYWQgPSBbXG4gICAgICAuLi4oaW5pdGlhbFByb3BzLmhlYWQgYXMgYW55KSxcbiAgICAgIDxTZXJ2ZXJEYXRhQ29tcG9uZW50IGtleT1cInJlc3QtaG9va3NcIiBub25jZT17dGhpcy5nZXROb25jZShjdHgpfSAvPixcbiAgICBdO1xuXG4gICAgcmV0dXJuIGluaXRpYWxQcm9wcztcbiAgfVxuXG4gIHN0YXRpYyBnZXROb25jZShjdHg6IERvY3VtZW50Q29udGV4dCk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU9BLFFBQVEsTUFHUixrQkFBa0I7QUFHekIsT0FBT0Msb0JBQW9CLE1BQU0sNEJBQTRCO0FBQzdELE9BQU9DLHlCQUF5QixNQUFNLGlDQUFpQzs7QUFFdkU7QUFDQTtBQUNBLE1BQU1DLEdBQWlCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQ3REQSxRQUFRLENBQVNNLE9BQU8sR0FDMUJOLFFBQVE7QUFFWixlQUFlLE1BQU1PLGlCQUFpQixTQUFTSixHQUFHLENBQUM7RUFDakQsYUFBYUssZUFBZUEsQ0FDMUJDLEdBQW9CLEVBQ1c7SUFDL0IsTUFBTUMsa0JBQWtCLEdBQUdELEdBQUcsQ0FBQ0UsVUFBVTtJQUV6QyxNQUFNLENBQUNDLG1CQUFtQixFQUFFQyxrQkFBa0IsQ0FBQyxHQUFHWixvQkFBb0IsRUFBRTtJQUN4RSxNQUFNYSxtQkFBbUIsR0FBR1oseUJBQXlCLENBQUNXLGtCQUFrQixDQUFDOztJQUV6RTtJQUNBSixHQUFHLENBQUNFLFVBQVUsR0FBRyxNQUFNO01BQ3JCLE9BQU9ELGtCQUFrQixDQUFDO1FBQ3hCO1FBQ0FLLFVBQVUsRUFBR0MsR0FBWSxJQUFNQyxLQUFVLGlCQUVyQ0MsSUFBQSxDQUFDTixtQkFBbUIsMkJBQ2xCTyxLQUFBLENBQUFDLGFBQUEsQ0FBQ0osR0FBRyxFQUFBWixNQUFBLENBQUFpQixNQUFBLEtBQUtKLEtBQUssRUFBSTtNQUcxQixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0Q7SUFDQSxNQUFNSyxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUNkLGVBQWUsQ0FBQ0MsR0FBRyxDQUFDO0lBRXJEYSxZQUFZLENBQUNDLElBQUksR0FBRyxDQUNsQixHQUFJRCxZQUFZLENBQUNDLElBQVksZUFDN0JMLElBQUEsQ0FBQ0osbUJBQW1CO01BQWtCVSxLQUFLLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUNoQixHQUFHO0lBQUUsR0FBdkMsWUFBWSxDQUE4QixDQUNwRTtJQUVELE9BQU9hLFlBQVk7RUFDckI7RUFFQSxPQUFPRyxRQUFRQSxDQUFDaEIsR0FBb0IsRUFBc0I7SUFDeEQsT0FBT2lCLFNBQVM7RUFDbEI7QUFDRiJ9