@shopify/react-server
Version:
Utilities for React server-side rendering.
46 lines (45 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var koa_compose_1 = tslib_1.__importDefault(require("koa-compose"));
var MILLIS_PER_SECOND = 1000;
var NANOS_PER_MILLIS = 1e6;
var START_TIME_STATE_KEY = Symbol('startTime');
function startRequestTiming(ctx, next) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
ctx.state[START_TIME_STATE_KEY] = process.hrtime();
return [4 /*yield*/, next()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
}
function middleware(ctx, next) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, seconds, nanoseconds, ms, requestTime, uiMetrics;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, , 2, 3]);
return [4 /*yield*/, next()];
case 1:
_b.sent();
return [3 /*break*/, 3];
case 2:
_a = tslib_1.__read(process.hrtime(ctx.state[START_TIME_STATE_KEY]), 2), seconds = _a[0], nanoseconds = _a[1];
ms = seconds * MILLIS_PER_SECOND + nanoseconds / NANOS_PER_MILLIS;
requestTime = Math.round(ms);
uiMetrics = "ui;request_time=" + requestTime;
ctx.set('Server-Timing', uiMetrics);
return [7 /*endfinally*/];
case 3: return [2 /*return*/];
}
});
});
}
exports.metricsMiddleware = koa_compose_1.default([startRequestTiming, middleware]);