@shopify/react-server
Version:
Utilities for React server-side rendering.
96 lines (95 loc) • 3.59 kB
JavaScript
;
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;