UNPKG

@shopify/react-server

Version:
96 lines (95 loc) 3.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var chalk_1 = tslib_1.__importDefault(require("chalk")); exports.LOGGER = Symbol('logger'); var PREFIX = chalk_1.default.underline('[React Server] '); var Logger = /** @class */ (function () { function Logger() { this.buffer = ''; this.logger = console; } Logger.prototype.log = function (message) { if (process.env.NODE_ENV === 'development') { this.logger.log("" + PREFIX + message); } else { this.buffer = this.buffer + "\n" + message; } }; return Logger; }()); exports.Logger = Logger; function setLogger(ctx, logger) { ctx.state[exports.LOGGER] = logger; } exports.setLogger = setLogger; function getLogger(ctx) { return ctx.state[exports.LOGGER]; } exports.getLogger = getLogger; function initialRequestMessage(request) { var requestMethod = request.method.toUpperCase() + " \"" + request.url + "\""; return "Started " + requestMethod + " at " + new Date().toISOString(); } function endRequestMessage(ctx, requestDuration) { var httpStatus = ctx.status + " " + (ctx.message || ''); var duration = requestDuration.toFixed(0) + "ms"; return "Completed " + httpStatus + " at " + new Date().toISOString() + " in " + duration; } function endRequest(ctx, requestDuration) { var logger = getLogger(ctx); logger.log(endRequestMessage(ctx, requestDuration)); if (process.env.NODE_ENV === 'development') { return; } /* eslint-disable babel/camelcase */ var logObject = { datetime: new Date().toISOString(), http_method: ctx.method.toUpperCase(), http_response: ctx.message || '', http_status: ctx.status, uri: ctx.originalUrl, user_agent: ctx.header['User-Agent'], payload: logger.buffer, }; /* eslint-enable babel/camelcase */ // eslint-disable-next-line no-console console.log(JSON.stringify(logObject, undefined, process.env.NODE_ENV === 'production' ? undefined : 2)); } function requestDuration(requestStartTime) { var duration = process.hrtime(requestStartTime); var ms = duration[0] * 1000 + duration[1] / 1e6; return Math.round(ms); } function requestLogger(ctx, next) { return tslib_1.__awaiter(this, void 0, void 0, function () { var requestStartTime, logger, error_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: requestStartTime = process.hrtime(); setLogger(ctx, new Logger()); logger = getLogger(ctx); logger.log(initialRequestMessage(ctx.request)); _a.label = 1; case 1: _a.trys.push([1, 3, 4, 5]); return [4 /*yield*/, next()]; case 2: _a.sent(); return [3 /*break*/, 5]; case 3: error_1 = _a.sent(); logger.log('Error during server execution, see details below.'); logger.log("" + (error_1.stack || error_1.message || 'No stack trace was present')); return [3 /*break*/, 5]; case 4: endRequest(ctx, requestDuration(requestStartTime)); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); } exports.requestLogger = requestLogger;