@showbridge/lib
Version:
Main library for showbridge protocol router
33 lines (32 loc) • 1.51 kB
JavaScript
import { get, has, set } from 'lodash-es';
import { logger } from '../utils/index.js';
import Transform from './transform.js';
class ScaleTransform extends Transform {
_transform(msg, vars) {
logger.trace(`transform: before ${this.type} = ${msg}`);
try {
const resolvedParams = this.resolveTemplatedParams({ msg, vars });
const propertyValue = get(msg, resolvedParams.property);
if (propertyValue === undefined) {
logger.error(`transform: scale transform could not find msg property = ${resolvedParams.property}`);
return;
}
if (typeof propertyValue !== 'number') {
logger.error('transform: scale only works on number values');
return;
}
if (!has(resolvedParams, 'inRange') || !has(resolvedParams, 'outRange')) {
logger.error('transform: scale must have both an inRange and an outRange property');
return;
}
const { inRange, outRange } = resolvedParams;
const scaledValue = ((propertyValue - inRange[0]) * (outRange[1] - outRange[0])) / (inRange[1] - inRange[0]) + outRange[0];
set(msg, resolvedParams.property, scaledValue);
logger.trace(`transform: after ${this.type} = ${msg}`);
}
catch (error) {
logger.error(`transform: problem executing scale transform - ${error}`);
}
}
}
export default ScaleTransform;