normalify
Version:
Normalize different variable value types - e.g. `"1"` becomes `1`
58 lines (57 loc) • 1.54 kB
JavaScript
/* eslint no-use-before-define:0 */
/**
* Convert the input from its source type into its actual type
* @param input
*/
export default function normalify(input) {
const result = normalifyObject(input);
if (result !== input)
return result;
return normalifyString(input);
}
/**
* Convert the input object and its nested values into their actual types
* @param input
*/
export function normalifyObject(input) {
if (typeof input === 'object') {
for (const key in input) {
if (input.hasOwnProperty(key)) {
const value = input[key];
const result = normalify(value);
// http://jsperf.com/pre-check
if (result !== value) {
input[key] = result;
}
}
}
}
return input;
}
/**
* Convert the input from its source type into its actual type
* @param input
*/
export function normalifyString(input) {
if (typeof input === 'string') {
if (input === 'NaN' || input === '"NaN"' || input === "'NaN'") {
return NaN;
}
try {
if (input.startsWith("'") && input.endsWith("'")) {
input = '"' + input.slice(1, -1) + '"';
}
const result = JSON.parse(input);
if (result !== input) {
return normalify(result);
}
return result;
}
catch (err) {
return input;
}
}
else {
return input;
}
}