UNPKG

next-actuator

Version:

A fully composable actuator implementation for Next.js projects

32 lines 1.38 kB
import { sum } from 'es-toolkit'; import { notFound } from 'next/navigation'; import { isDimensionalMetric } from '../types/metric'; const createMetric = (name, description, baseUnit, value, availableDimensions) => ({ name, description, baseUnit, measurements: [{ statistic: 'VALUE', value }], availableDimensions }); const evaluateMetric = async (name, metric, dimension) => { if (!isDimensionalMetric(metric)) { return createMetric(name, metric.description, metric.baseUnit, await metric.value(), []); } if (!dimension) { const aggregatePromises = Object.values(metric.dimensions).map(dimension => dimension.value()); const aggregateValue = sum(await Promise.all(aggregatePromises)); return createMetric(name, metric.description, metric.baseUnit, aggregateValue, Object.keys(metric.dimensions)); } const foundDimension = metric.dimensions[dimension]; if (foundDimension) { return createMetric(name, foundDimension.description, metric.baseUnit, await foundDimension.value(), []); } notFound(); }; export const handleMetric = (name, metric) => { return async (req) => { const dimension = req.nextUrl.searchParams.get('dimension'); return Response.json(await evaluateMetric(name, metric, dimension), { status: 200 }); }; }; //# sourceMappingURL=handle-metric.js.map