Skip to content

PassiDel/hono-timing

Repository files navigation

Server-Timing API for Hono

GitHub Workflow Status GitHub NPM npm type definitions npm

This module adds Server-Timing to response headers for Hono.

This middleware is based on the work of yosuke-furukawa, thank you!

Install

npm install @puazzi/hono-timing

Usage

import { serve } from '@hono/node-server';
import { Hono } from 'hono';
import { endTime, setMetric, startTime, timing } from "@puazzi/hono-timing";

const app = new Hono();

// add the middleware to your router
app.use('*', timing());

app.get('/', async (c) => {

  // add custom metrics
  setMetric(c, 'region', 'europe-west3')

  // add custom metrics with timing, must be in milliseconds
  setMetric(c, 'custom', 23.8, 'My custom Metric')

  // start a new timer
  startTime(c, 'db');
  const data = await db.findMany(...);

  // end the timer
  endTime(c, 'db');

  return c.json({ response: data });
});

serve(app);

Conditionally enabled

import { Hono } from 'hono';
import { timing } from '@puazzi/hono-timing';

const app = new Hono();

app.use(
  '*',
  timing({
    // c: Context of the request
    enabled: (c) => c.req.method === 'POST'
  })
);

API

Config

Name Type Default Description
total boolean true Show a total response time.
enabled boolean | (c: Context) => boolean true Whether timings should be added to the headers or not.
totalDescription string 'Total Response Time' Description for the total response time.
autoEnd boolean true If startTime() should end automatically at the end of the request. If disabled, not manually ended timers will not be shown.
crossOrigin boolean | string false The origin this timings header should be readable.
If false, only from current origin.
If true, from all origin.
If string, from this domain(s). Multiple domains must be separated with a comma.
See docs.

Result

Example Timings