UNPKG

next-page-tester

Version:
92 lines (91 loc) 4.15 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable prefer-const */ const react_1 = __importDefault(require("react")); const fs_1 = require("fs"); const page_1 = require("./page"); const makeRenderMethods_1 = require("./makeRenderMethods"); const router_1 = require("./router"); const _document_1 = require("./_document"); const _app_1 = require("./_app"); const head_manager_1 = __importDefault(require("next/dist/client/head-manager")); const head_manager_context_1 = require("next/dist/shared/lib/head-manager-context"); const nextConfig_1 = require("./nextConfig"); const setNextRuntimeConfig_1 = __importDefault(require("./setNextRuntimeConfig")); const setEnvVars_1 = require("./setEnvVars"); const utils_1 = require("./utils"); const _error_1 = require("./_error"); const constants_1 = require("./constants"); function validateOptions({ nextRoot, route, useDocument, }) { if (!route.startsWith('/')) { throw new _error_1.InternalError('"route" option should start with "/"'); } if (!(0, fs_1.existsSync)(nextRoot)) { throw new _error_1.InternalError('Cannot find "nextRoot" directory under: ${nextRoot}'); } if (useDocument) { throw new _error_1.InternalError('useDocument option was temporarily disabled since v0.29.0 due to issue #263'); } } async function getPage({ route, nextRoot = utils_1.defaultNextRoot, req = (req) => req, res = (res) => res, router = (router) => router, useApp = true, useDocument = false, dotenvFile, wrappers, sharedModules = [], }) { const optionsWithDefaults = { route, nextRoot, req, res, router, useApp, useDocument, dotenvFile, wrappers, sharedModules, }; validateOptions(optionsWithDefaults); (0, setEnvVars_1.loadBaseEnvironment)({ nextRoot, dotenvFile }); await (0, nextConfig_1.loadNextConfig)({ nextRoot }); (0, setNextRuntimeConfig_1.default)({ runtimeEnv: constants_1.RuntimeEnvironment.CLIENT }); (0, utils_1.setNextImageConfiguration)(); (0, setEnvVars_1.setEnvVars)({ runtimeEnv: constants_1.RuntimeEnvironment.CLIENT }); const options = { ...optionsWithDefaults, pagesDirectory: (0, utils_1.findPagesDirectory)({ nextRoot }), pageExtensions: (0, utils_1.getPageExtensions)(), env: constants_1.RuntimeEnvironment.SERVER, }; // @TODO: Consider printing extended options value behind a debug flag const headManager = useDocument && (0, head_manager_1.default)(); const makePage = async (options) => { let { pageElement, pageObject } = await (0, page_1.makePageElement)({ options }); if (useDocument && options.env === constants_1.RuntimeEnvironment.CLIENT && headManager) { pageElement = (react_1.default.createElement(head_manager_context_1.HeadManagerContext.Provider, { value: headManager }, pageElement)); } return { pageObject, pageElement }; }; const { pageData, pageObject } = await (0, page_1.getPageInfo)({ options }); const wrapWithRouter = (children) => { return (react_1.default.createElement(router_1.RouterProvider, { options: options, pageObject: pageObject, makePage: (optionsOverrides) => makePage({ ...options, ...optionsOverrides }) }, children)); }; const serverPageElement = await (0, _document_1.serverRenderDocument)({ options, pageObject, wrapWithRouter, pageProps: pageData.props, appProps: pageData.appProps, }); const clientPageElement = wrapWithRouter((0, _app_1.renderApp)({ options: { ...options, env: constants_1.RuntimeEnvironment.CLIENT }, pageObject, pageProps: pageData.props, appProps: pageData.appProps, })); return { page: clientPageElement, ...(0, makeRenderMethods_1.makeRenderMethods)({ serverPageElement, clientPageElement }), }; } exports.default = getPage;