diff --git a/.changeset/busy-clouds-walk.md b/.changeset/busy-clouds-walk.md new file mode 100644 index 00000000..3a306b94 --- /dev/null +++ b/.changeset/busy-clouds-walk.md @@ -0,0 +1,5 @@ +--- +'@hono/prometheus': patch +--- + +Add explicit return types diff --git a/packages/prometheus/src/index.ts b/packages/prometheus/src/index.ts index 578431b9..c6941346 100644 --- a/packages/prometheus/src/index.ts +++ b/packages/prometheus/src/index.ts @@ -1,5 +1,6 @@ -import type { Context } from 'hono' +import type { Context, MiddlewareHandler, TypedResponse } from 'hono' import { createMiddleware } from 'hono/factory' +import type { ContentfulStatusCode } from 'hono/utils/http-status' import type { DefaultMetricsCollectorConfiguration, RegistryContentType } from 'prom-client' import { Registry, collectDefaultMetrics as promCollectDefaultMetrics } from 'prom-client' import { createStandardMetrics } from './standardMetrics' @@ -22,7 +23,14 @@ const evaluateCustomLabels = (customLabels: MetricOptions['customLabels'], conte return labels } -export const prometheus = (options?: PrometheusOptions) => { +export const prometheus = ( + options?: PrometheusOptions +): { + printMetrics: ( + c: Context + ) => Promise> + registerMetrics: MiddlewareHandler +} => { const { registry = new Registry(), collectDefaultMetrics = false, diff --git a/packages/prometheus/src/standardMetrics.ts b/packages/prometheus/src/standardMetrics.ts index 97b392c7..8c035118 100644 --- a/packages/prometheus/src/standardMetrics.ts +++ b/packages/prometheus/src/standardMetrics.ts @@ -2,15 +2,24 @@ import type { Context } from 'hono' import { Counter, Histogram } from 'prom-client' import type { CounterConfiguration, HistogramConfiguration, Metric, Registry } from 'prom-client' -export type MetricOptions = { +interface CounterOptions extends CounterConfiguration { + type: 'counter' disabled?: boolean customLabels?: Record string> -} & ( - | ({ type: 'counter' } & CounterConfiguration) - | ({ type: 'histogram' } & HistogramConfiguration) -) +} -const standardMetrics = { +interface HistogramOptions extends HistogramConfiguration { + type: 'histogram' + disabled?: boolean + customLabels?: Record string> +} + +export type MetricOptions = CounterOptions | HistogramOptions + +const standardMetrics: { + requestDuration: HistogramOptions + requestsTotal: CounterOptions +} = { requestDuration: { type: 'histogram', name: 'http_request_duration_seconds', @@ -26,7 +35,7 @@ const standardMetrics = { help: 'Total number of HTTP requests', labelNames: ['method', 'status', 'ok', 'route'], }, -} satisfies Record +} export type MetricName = keyof typeof standardMetrics diff --git a/packages/prometheus/tsconfig.build.json b/packages/prometheus/tsconfig.build.json index ccc2f65a..a82a1266 100644 --- a/packages/prometheus/tsconfig.build.json +++ b/packages/prometheus/tsconfig.build.json @@ -4,7 +4,8 @@ "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo", - "emitDeclarationOnly": false + "emitDeclarationOnly": false, + "isolatedDeclarations": true }, "include": ["src/**/*.ts"], "exclude": ["**/*.test.ts"],