-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconvert.js
32 lines (22 loc) · 1.02 KB
/
convert.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { all, create } from 'mathjs';
import { mapping } from '../constants/units.js';
const math = create(all, {});
export const getSanitizedInput = (req) => {
const { value, unit } = req.query.input;
return { value, unit };
};
export const convertUnits = (value, unit) => {
const { singular: initSingular, plural: initPlural, convertTo } = mapping[unit.toLowerCase()];
const { singular: returnSingular, plural: returnPlural } = mapping[convertTo.toLowerCase()];
value = math.round(value, 5);
const unconvertedUnits = math.unit(value, unit);
const returnNum = math.round(math.number(unconvertedUnits, convertTo), 5);
const string = `${value} ${value === 1 ? initSingular : initPlural} converts to ${math.round(returnNum, 5)} ${
returnNum === 1 ? returnSingular : returnPlural
}`;
return { initNum: value, initUnit: unit, returnNum, returnUnit: convertTo, string };
};
export const getConvertedUnits = (req, res) => {
const { value, unit } = getSanitizedInput(req);
return res.status(200).json(convertUnits(value, unit));
};