UNPKG

html-render-webpack-plugin

Version:

webpack plugin for rendering static HTML in a multi-config webpack build

71 lines 3.54 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const express_1 = __importDefault(require("express")); const logging_1 = require("./logging"); const exception_formatter_1 = __importDefault(require("exception-formatter")); module.exports = ({ routes, getRouteFromRequest, onRendererReady, transformExpressPath, getClientStats, }) => { logging_1.log("Create dev server"); const formatErrorResponse = (error, webpackStats) => { let devServerScripts = []; if ("entrypoints" in webpackStats && webpackStats.entrypoints) { try { const devServerAssets = webpackStats.entrypoints.main.assets; devServerScripts = devServerAssets.map((asset) => `<script src="${webpackStats.publicPath}${asset}"></script>`); } catch (err) { console.error("Unable to load Dev Server Scripts. Error: ", err); } } return [error, ...devServerScripts].join("\n"); }; const devServerRouter = express_1.default.Router(); const routesByExpressPath = {}; // Deduplicate paths to avoid duplicated processing in Express routes.forEach((route) => { const expressPath = transformExpressPath(route); if (expressPath) { routesByExpressPath[expressPath] = route; } }); Object.entries(routesByExpressPath).forEach(([expressPath, defaultRoute]) => { devServerRouter.get(expressPath, (req, res, next) => __awaiter(void 0, void 0, void 0, function* () { onRendererReady((render) => __awaiter(void 0, void 0, void 0, function* () { const route = getRouteFromRequest ? getRouteFromRequest(req, routes) : defaultRoute; if (!route) { next(); } if (!routes.includes(route)) { const errorMessage = "Returned route was not an existing route. Ensure return value from getRouteFromRequest is route"; logging_1.logError(errorMessage); throw new Error(errorMessage); } logging_1.log(`Static render for ${route} from ${req.path}`); try { res.send(yield render(route)); } catch (error) { res.status(500).send(formatErrorResponse(exception_formatter_1.default(error, { format: "html", inlineStyle: true, basepath: "webpack://static/./", }), getClientStats().toJson())); } })); })); }); return devServerRouter; }; //# sourceMappingURL=createDevRouter.js.map