tachi
Version:
Node.js MVC framework for seriously rapid application development.
52 lines (43 loc) • 1.65 kB
JavaScript
var FormValueParser = require('./formValueParser');
module.exports = (function () {
var parseComplexObjectPart = function (name, value, addTo) {
var parts = name.split('[').join('.').split(']').join('').split('.');
var current = addTo;
for (var j = 0, l = parts.length - 1; j < l; j++) {
var segment = parts[j];
var intValue = parseInt(segment, 10);
if (!isNaN(intValue)) {
segment = intValue;
}
if (!current[segment]) {
var next = parts[j + 1];
var nextInt = parseInt(next, 10);
if (!isNaN(nextInt)) {
current[segment] = [];
} else {
current[segment] = {};
}
}
current = current[segment];
}
// parseFloat is fairly greedy, so parse for a date first.
var dateValue = formValueParser.parseDate(value);
if (dateValue != 'Invalid Date') {
value = dateValue;
} else {
var possibleInt = parseFloat(value);
if (!isNaN(possibleInt) && /^-{0,1}\d*\.{0,1}\d+$/.test(value)) {
value = possibleInt
}
}
current[parts[parts.length - 1]] = value;
};
var formValueParser = new FormValueParser();
return function FormDataParser(toParse) {
var output = {};
for (var segment in toParse) {
parseComplexObjectPart(segment, toParse[segment], output);
}
return output;
};
})();