/** * Formatter Registry * ------------------ * Maps format names to formatter modules. * Each formatter exports: format(measurement, metadata) => string|object * * Usage: * const { getFormatter, registerFormatter } = require('./formatters'); * const fmt = getFormatter('json'); * const output = fmt.format('pump1', { fields: {...}, tags: {...} }); */ const influxdbFormatter = require('./influxdbFormatter'); const jsonFormatter = require('./jsonFormatter'); const csvFormatter = require('./csvFormatter'); const processFormatter = require('./processFormatter'); // Built-in registry const registry = { influxdb: influxdbFormatter, json: jsonFormatter, csv: csvFormatter, process: processFormatter, }; /** * Retrieve a formatter by name. * @param {string} name - Format name (e.g. 'influxdb', 'json', 'csv') * @returns {object} Formatter with a .format() method * @throws {Error} If the format name is not registered */ function getFormatter(name) { const formatter = registry[name]; if (!formatter) { throw new Error(`Unknown output format: "${name}". Registered formats: ${Object.keys(registry).join(', ')}`); } return formatter; } /** * Register a custom formatter at runtime. * @param {string} name - Format name * @param {object} formatter - Object with a .format(measurement, metadata) method */ function registerFormatter(name, formatter) { if (typeof formatter.format !== 'function') { throw new Error('Formatter must have a .format(measurement, metadata) method'); } registry[name] = formatter; } /** * List all registered format names. * @returns {string[]} */ function getRegisteredFormats() { return Object.keys(registry); } module.exports = { getFormatter, registerFormatter, getRegisteredFormats };