const { MetricTypes } = require('../metrics/Metric'); // TODO: Object.values(...) does not exist in Node.js 6.x, switch after LTS period ends. // const metricTypeValues = Object.values(MetricTypes); const metricTypeValues = Object.keys(MetricTypes).map(key => MetricTypes[key]); /** * This module contains various validators to validate publicly exposed input. * * @module metricValidators */ module.exports = { /** * Validates that a metric implements the metric interface. * * @param {Metric} metric The object that is supposed to be a metric. */ validateMetric: metric => { if (!metric) { throw new TypeError('The metric was undefined, when it was required'); } if (typeof metric.toJSON !== 'function') { throw new TypeError('Metrics must implement toJSON(), see the Metric interface in the docs.'); } if (typeof metric.getType !== 'function') { throw new TypeError('Metrics must implement getType(), see the Metric interface in the docs.'); } const type = metric.getType(); if (!metricTypeValues.includes(type)) { throw new TypeError( `Metric#getType(), must return a type defined in MetricsTypes. Found: ${type}, Valid values: ${metricTypeValues.join( ', ' )}` ); } } };