html-render-webpack-plugin
Version:
webpack plugin for rendering static HTML in a multi-config webpack build
71 lines • 3.54 kB
JavaScript
;
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