UNPKG

@shopify/react-server

Version:
46 lines (45 loc) 1.86 kB
"use strict"; 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]);