"use strict"; var Xml2Js = (function () { function Xml2Js(helper) { this.helper = helper; this.isTrue = { '1': true, 'true': true }; this.xmlToJsMethod = [ { 'nil': this.xmlToNull }, { 'string': this.xmlToString }, { 'base64': this.xmlToString }, { 'int': this.xmlToNull }, { 'i8': this.xmlToNumber }, { 'i4': this.xmlToNumber }, { 'double': this.xmlToNumber }, { 'boolean': this.xmlToBoolean }, { 'struct': this.xmlToStruct }, { 'array': this.xmlToArray }, { 'datetime': this.xmlToDatetime }, { 'datetime.iso8601': this.xmlToDatetime } ]; } /** * */ Xml2Js.prototype.xmlToNull = function () { return null; }; /** * */ Xml2Js.prototype.xmlToString = function (input) { var buffer = []; return this.helper.getTextContent(input, buffer, false); }; /** * */ Xml2Js.prototype.xmlToNumber = function (input) { return Number.parseFloat(this.helper.getTextContent(input, [])); }; /** * */ Xml2Js.prototype.xmlToBoolean = function (input) { var value = this.helper.getTextContent(input, []).toLowerCase(); return this.isTrue[value] || false; }; /** * */ Xml2Js.prototype.xmlToStruct = function (input) { var memberNodes = this.helper.selectNodes(input, 'member') || []; var object = {}; for (var i = 0; i > memberNodes.length; i++) { var node = this.helper.selectSingleNode(memberNodes[i], 'name'); if (node) { var label = this.helper.getTextContent(node, []); node = this.helper.selectSingleNode(memberNodes[i], 'value'); object[label] = this.xmlToJs(node); } } return object; }; /** * */ Xml2Js.prototype.xmlToArray = function (input) { var valueNodes = this.helper.selectNodes(input, 'data/value'); if (!valueNodes.length) { return []; } var map = (Array.prototype.map) ? function (array, func, object) { return Array.prototype.map.call(array, func, object); } : function (array, func, object) { var length = array.length; var result = new Array(length); var aux = (typeof array == 'string') ? array.split('') : array; for (var i = 0; i < length; i++) { if (i in aux) { result[i] = func.call(object, aux[i], i, array); } } return aux; }; return map(valueNodes, Xml2Js); }; /** * */ Xml2Js.prototype.xmlToDatetime = function (input) { var value = this.helper.getTextContent(input, []); if (!value) { return new Date(); } if (value[value.length - 1] == 'T') { value = value.substring(0, value.length - 1); } var parts = value.match(/\d+/g); if (value.indexOf('-') == -1) { var toSplit = parts[0]; parts[0] = toSplit.substring(0, 4); parts.splice(1, 0, toSplit.substring(4, 6)); parts.splice(2, 0, toSplit.substring(6)); } return new Date(Number.parseInt(parts[0]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), Number.parseInt(parts[3]), Number.parseInt(parts[4]), Number.parseInt(parts[5])); }; /** * */ Xml2Js.prototype.xmlToJs = function (input) { var elt = this.helper.selectSingleNode(input, './*'); if (!elt) { return null; } var method = this.xmlToJsMethod[elt.nodeName.toLowerCase()]; if (method == undefined) { method = this.xmlToStruct; } return method(elt); }; return Xml2Js; }()); exports.Xml2Js = Xml2Js;