UNPKG

@js-primer/local-server

Version:
80 lines 2.96 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.responseLog = void 0; const http = __importStar(require("http")); const chalk_1 = __importDefault(require("chalk")); const SPACE = " "; const responseLog = () => { return (req, res, next) => { // items shared between the request and response of just one cycle const cycle = { log: getLogger(), time: process.hrtime(), }; const handleClose = () => logClose(req, res, cycle); res.on("finish", () => { logRes(req, res, cycle); res.removeListener("close", handleClose); }); res.on("close", handleClose); next(); }; }; exports.responseLog = responseLog; function getLogger() { return (str) => { process.stdout.write(str + "\n"); }; } function logRes(req, res, cycle) { const status = res.statusCode; const meaning = http.STATUS_CODES[status]; const type = res.getHeader("content-type"); const statusColor = colorForStatus(status); let resLine = `${chalk_1.default.bold.underline(req.method || "GET")} ${req.url} `; resLine += `${chalk_1.default.dim("——>")} `; resLine += chalk_1.default[statusColor](`${status} ${meaning}`) + SPACE; if (type) resLine += chalk_1.default.blue.dim(String(type)) + SPACE; cycle.log(resLine); } function logClose(req, _res, cycle) { let closeLine = `${chalk_1.default.dim("—X—")} `; closeLine += `${chalk_1.default.bold.underline(req.method || "GET")} ${req.url} `; closeLine += chalk_1.default.red("connection closed before res end/flush"); cycle.log(closeLine); } function colorForStatus(status) { if (status >= 500) return "red"; if (status >= 400) return "yellow"; if (status >= 300) return "cyan"; if (status >= 200) return "green"; return "reset"; } //# sourceMappingURL=response-log.js.map