UNPKG

@rest-hooks/ssr

Version:

Server Side Rendering helpers for Rest Hooks

36 lines (34 loc) 5.63 kB
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, { ...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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImNyZWF0ZVBlcnNpc3RlZFN0b3JlIiwiY3JlYXRlU2VydmVyRGF0YUNvbXBvbmVudCIsIkRvYyIsIk9iamVjdCIsImhhc093biIsImRlZmF1bHQiLCJSZXN0SG9va3NEb2N1bWVudCIsImdldEluaXRpYWxQcm9wcyIsImN0eCIsIm9yaWdpbmFsUmVuZGVyUGFnZSIsInJlbmRlclBhZ2UiLCJTZXJ2ZXJDYWNoZVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiU2VydmVyRGF0YUNvbXBvbmVudCIsImVuaGFuY2VBcHAiLCJBcHAiLCJwcm9wcyIsIl9qc3giLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJpbml0aWFsUHJvcHMiLCJoZWFkIiwibm9uY2UiLCJnZXROb25jZSIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZXh0anMvUmVzdEhvb2tzRG9jdW1lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICduZXh0L2FwcC5qcyc7XG5pbXBvcnQgRG9jdW1lbnQsIHtcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbn0gZnJvbSAnbmV4dC9kb2N1bWVudC5qcyc7XG5cbmltcG9ydCB7IERUeXBlIH0gZnJvbSAnLi9kb2NUeXBlLmNqcyc7XG5pbXBvcnQgY3JlYXRlUGVyc2lzdGVkU3RvcmUgZnJvbSAnLi4vY3JlYXRlUGVyc2lzdGVkU3RvcmUuanMnO1xuaW1wb3J0IGNyZWF0ZVNlcnZlckRhdGFDb21wb25lbnQgZnJvbSAnLi4vY3JlYXRlU2VydmVyRGF0YUNvbXBvbmVudC5qcyc7XG5cbi8vIG5leHRqcyBvZGRseSBicmVha3MgdGhlaXIgZXhwb3J0cyBoZXJlXG4vLyB3ZSBjb25kaXRpb25hbGx5IGNoZWNrIHRoaXMganVzdCBpbiBjYXNlIHRoZXkgZml4IGl0XG5jb25zdCBEb2M6IHR5cGVvZiBEVHlwZSA9IE9iamVjdC5oYXNPd24oRG9jdW1lbnQsICdkZWZhdWx0JylcbiAgPyAoKERvY3VtZW50IGFzIGFueSkuZGVmYXVsdCBhcyBhbnkpXG4gIDogRG9jdW1lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc3RIb29rc0RvY3VtZW50IGV4dGVuZHMgRG9jIHtcbiAgc3RhdGljIGFzeW5jIGdldEluaXRpYWxQcm9wcyhcbiAgICBjdHg6IERvY3VtZW50Q29udGV4dCxcbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyUGFnZSA9IGN0eC5yZW5kZXJQYWdlO1xuXG4gICAgY29uc3QgW1NlcnZlckNhY2hlUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZV0gPSBjcmVhdGVQZXJzaXN0ZWRTdG9yZSgpO1xuICAgIGNvbnN0IFNlcnZlckRhdGFDb21wb25lbnQgPSBjcmVhdGVTZXJ2ZXJEYXRhQ29tcG9uZW50KHVzZVJlYWR5Q2FjaGVTdGF0ZSk7XG5cbiAgICAvLyBSdW4gdGhlIFJlYWN0IHJlbmRlcmluZyBsb2dpYyBzeW5jaHJvbm91c2x5XG4gICAgY3R4LnJlbmRlclBhZ2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXJQYWdlKHtcbiAgICAgICAgLy8gVXNlZnVsIGZvciB3cmFwcGluZyB0aGUgd2hvbGUgcmVhY3QgdHJlZVxuICAgICAgICBlbmhhbmNlQXBwOiAoQXBwOiBBcHBUeXBlKSA9PiAocHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAoXG4gICAgICAgICAgICA8U2VydmVyQ2FjaGVQcm92aWRlcj5cbiAgICAgICAgICAgICAgPEFwcCB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICA8L1NlcnZlckNhY2hlUHJvdmlkZXI+XG4gICAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gUnVuIHRoZSBwYXJlbnQgYGdldEluaXRpYWxQcm9wc2AsIGl0IG5vdyBpbmNsdWRlcyB0aGUgY3VzdG9tIGByZW5kZXJQYWdlYFxuICAgIGNvbnN0IGluaXRpYWxQcm9wcyA9IGF3YWl0IHN1cGVyLmdldEluaXRpYWxQcm9wcyhjdHgpO1xuXG4gICAgaW5pdGlhbFByb3BzLmhlYWQgPSBbXG4gICAgICAuLi4oaW5pdGlhbFByb3BzLmhlYWQgYXMgYW55KSxcbiAgICAgIDxTZXJ2ZXJEYXRhQ29tcG9uZW50IGtleT1cInJlc3QtaG9va3NcIiBub25jZT17dGhpcy5nZXROb25jZShjdHgpfSAvPixcbiAgICBdO1xuXG4gICAgcmV0dXJuIGluaXRpYWxQcm9wcztcbiAgfVxuXG4gIHN0YXRpYyBnZXROb25jZShjdHg6IERvY3VtZW50Q29udGV4dCk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU9BLFFBQVEsTUFHUixrQkFBa0I7QUFHekIsT0FBT0Msb0JBQW9CLE1BQU0sNEJBQTRCO0FBQzdELE9BQU9DLHlCQUF5QixNQUFNLGlDQUFpQzs7QUFFdkU7QUFDQTtBQUNBLE1BQU1DLEdBQWlCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQ3REQSxRQUFRLENBQVNNLE9BQU8sR0FDMUJOLFFBQVE7QUFFWixlQUFlLE1BQU1PLGlCQUFpQixTQUFTSixHQUFHLENBQUM7RUFDakQsYUFBYUssZUFBZUEsQ0FDMUJDLEdBQW9CLEVBQ1c7SUFDL0IsTUFBTUMsa0JBQWtCLEdBQUdELEdBQUcsQ0FBQ0UsVUFBVTtJQUV6QyxNQUFNLENBQUNDLG1CQUFtQixFQUFFQyxrQkFBa0IsQ0FBQyxHQUFHWixvQkFBb0IsRUFBRTtJQUN4RSxNQUFNYSxtQkFBbUIsR0FBR1oseUJBQXlCLENBQUNXLGtCQUFrQixDQUFDOztJQUV6RTtJQUNBSixHQUFHLENBQUNFLFVBQVUsR0FBRyxNQUFNO01BQ3JCLE9BQU9ELGtCQUFrQixDQUFDO1FBQ3hCO1FBQ0FLLFVBQVUsRUFBR0MsR0FBWSxJQUFNQyxLQUFVLGlCQUVyQ0MsSUFBQSxDQUFDTixtQkFBbUIsMkJBQ2xCTyxLQUFBLENBQUFDLGFBQUEsQ0FBQ0osR0FBRztVQUFBLEdBQUtDO1FBQUssRUFBSTtNQUcxQixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0Q7SUFDQSxNQUFNSSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUNiLGVBQWUsQ0FBQ0MsR0FBRyxDQUFDO0lBRXJEWSxZQUFZLENBQUNDLElBQUksR0FBRyxDQUNsQixHQUFJRCxZQUFZLENBQUNDLElBQVksZUFDN0JKLElBQUEsQ0FBQ0osbUJBQW1CO01BQWtCUyxLQUFLLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUNmLEdBQUc7SUFBRSxHQUF2QyxZQUFZLENBQThCLENBQ3BFO0lBRUQsT0FBT1ksWUFBWTtFQUNyQjtFQUVBLE9BQU9HLFFBQVFBLENBQUNmLEdBQW9CLEVBQXNCO0lBQ3hELE9BQU9nQixTQUFTO0VBQ2xCO0FBQ0YifQ==