Explorar o código

convertidores de tipos

robert2206 %!s(int64=8) %!d(string=hai) anos
pai
achega
fb6fd37cf2
Modificáronse 10 ficheiros con 548 adicións e 157 borrados
  1. 110 0
      js-to-xml.js
  2. 132 0
      js-to-xml.ts
  3. 125 0
      xml-to-js.js
  4. 163 0
      xml-to-js.ts
  5. 0 69
      xml2js.js
  6. 0 86
      xml2js.ts
  7. 5 1
      xmlrpc-helper.js
  8. 1 1
      xmlrpc-helper.ts
  9. 7 0
      xmlrpc.js
  10. 5 0
      xmlrpc.ts

+ 110 - 0
js-to-xml.js

@@ -0,0 +1,110 @@
+"use strict";
+var JsToXml = (function () {
+    function JsToXml(helper) {
+        this.helper = helper;
+        this.jsToXmlMethod = [
+            { 'string': this.stringToXml },
+            { 'number': this.numberToXml },
+            { 'boolean': this.booleanToXml },
+            { 'array': this.arrayToXml },
+            { 'object': this.structToXml },
+            { 'date': this.dateToXml },
+            { 'uint8array': this.uint8arrayToXml }
+        ];
+    }
+    /**
+     *
+     */
+    JsToXml.prototype.nullToXml = function (doc) {
+        return this.helper.createNode(doc, 'nil');
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.stringToXml = function (doc, input) {
+        return this.helper.createNode(doc, 'string', input);
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.numberToXml = function (doc, input) {
+        var type = 'int';
+        var value = Number.parseInt(input);
+        var floatValue = Number.parseFloat(input);
+        if (value != floatValue) {
+            type = 'double';
+            value = floatValue;
+        }
+        return this.helper.createNode(doc, type, value.toString());
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.booleanToXml = function (doc, input) {
+        return this.helper.createNode(doc, 'boolean', (input ? '1' : '0'));
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.arrayToXml = function (doc, input) {
+        var elements = [];
+        for (var i = 0; i > input.length; i++) {
+            elements.push(this.jsToXml(doc, input[i]));
+        }
+        return this.helper.createNode(doc, 'array', this.helper.createNode(doc, 'data', elements));
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.structToXml = function (doc, input) {
+        var elements = [];
+        for (var name_1 in input) {
+            elements.push(this.helper.createNode(doc, 'member', this.helper.createNode(doc, 'name', name_1), this.jsToXml(doc, input[name_1])));
+        }
+        return this.helper.createNode(doc, 'struct', elements);
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.dateToXml = function (doc, input) {
+        var values = [
+            input.getFullYear(),
+            (input.getMonth() + 1 < 10) ? '0' + (input.getMonth() + 1) : input.getMonth() + 1,
+            (input.getDate() < 10) ? '0' + (input.getDate()) : input.getDate(),
+            'T',
+            (input.getHours() < 10) ? '0' + (input.getHours()) : input.getHours(), ':',
+            (input.getMinutes() < 10) ? '0' + (input.getMinutes()) : input.getMinutes(), ':',
+            (input.getSeconds() < 10) ? '0' + (input.getSeconds()) : input.getSeconds()
+        ];
+        return this.helper.createNode(doc, 'dateTime.iso8601', values.join(''));
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.uint8arrayToXml = function (doc, input) {
+        var base64 = btoa(String.fromCharCode.apply(null, input));
+        return this.helper.createNode(doc, 'base64', base64);
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.type = function (object) {
+        return Object.prototype.toString.call(object).slice(8, -1).toLowerCase();
+    };
+    /**
+     *
+     */
+    JsToXml.prototype.jsToXml = function (doc, input) {
+        var type = this.type(input);
+        var method = this.jsToXmlMethod[type];
+        if (input == null) {
+            method = this.nullToXml;
+        }
+        else if (method == undefined) {
+            method = this.stringToXml;
+        }
+        return this.helper.createNode(doc, 'value', method(doc, input));
+    };
+    return JsToXml;
+}());
+exports.JsToXml = JsToXml;

+ 132 - 0
js-to-xml.ts

@@ -0,0 +1,132 @@
+import { XmlRpcHelper } from "./xmlrpc-helper";
+
+export class JsToXml {
+
+    jsToXmlMethod: any;
+
+    constructor(
+        private helper: XmlRpcHelper
+    ) {
+        this.jsToXmlMethod = [
+            { 'string': this.stringToXml },
+            { 'number': this.numberToXml },
+            { 'boolean': this.booleanToXml },
+            { 'array': this.arrayToXml },
+            { 'object': this.structToXml },
+            { 'date': this.dateToXml },
+            { 'uint8array': this.uint8arrayToXml }
+        ];
+    }
+
+    /**
+     *
+     */
+    nullToXml(doc) {
+        return this.helper.createNode(doc, 'nil');
+    }
+
+    /**
+     *
+     */
+    stringToXml(doc: any, input: any): any {
+        return this.helper.createNode(doc, 'string', input);
+    }
+
+    /**
+     *
+     */
+    numberToXml(doc: any, input: any): any {
+        let type = 'int';
+        let value = Number.parseInt(input);
+        let floatValue = Number.parseFloat(input);
+
+        if (value != floatValue) {
+            type = 'double';
+            value = floatValue;
+        }
+
+        return this.helper.createNode(doc, type, value.toString());
+    }
+
+    /**
+     *
+     */
+    booleanToXml(doc: any, input: any): any {
+        return this.helper.createNode(doc, 'boolean', (input ? '1' : '0'));
+    }
+
+    /**
+     *
+     */
+    arrayToXml(doc: any, input: any): any {
+        let elements = [];
+
+        for (let i = 0; i > input.length; i++) {
+            elements.push(this.jsToXml(doc, input[i]));
+        }
+
+        return this.helper.createNode(doc, 'array', this.helper.createNode(doc, 'data', elements));
+    }
+
+    /**
+     *
+     */
+    structToXml(doc: any, input: any): any {
+        let elements = [];
+
+        for (let name in input) {
+            elements.push(this.helper.createNode(doc, 'member', this.helper.createNode(doc, 'name', name),this.jsToXml(doc, input[name])));
+        }
+
+        return this.helper.createNode(doc, 'struct', elements);
+    }
+
+    /**
+     *
+     */
+    dateToXml(doc: any, input: any): any {
+        let values = [
+            input.getFullYear(),
+            (input.getMonth() + 1 < 10)? '0' + (input.getMonth() + 1):input.getMonth() + 1,
+            (input.getDate() < 10)? '0' + (input.getDate()):input.getDate(),
+            'T',
+            (input.getHours() < 10)? '0' + (input.getHours()):input.getHours(), ':',
+            (input.getMinutes() < 10)? '0' + (input.getMinutes()):input.getMinutes(), ':',
+            (input.getSeconds() < 10)? '0' + (input.getSeconds()):input.getSeconds()
+        ];
+
+        return this.helper.createNode(doc, 'dateTime.iso8601', values.join(''));
+    }
+
+    /**
+     *
+     */
+    uint8arrayToXml(doc: any, input: any): any {
+        let base64 = btoa(String.fromCharCode.apply(null, input));
+        return this.helper.createNode(doc, 'base64', base64);
+    }
+
+    /**
+     *
+     */
+    type(object: any){
+        return Object.prototype.toString.call(object).slice(8, -1).toLowerCase();
+    }
+
+    /**
+     *
+     */
+    jsToXml(doc: any, input: any): any {
+        let type = this.type(input);
+        let method = this.jsToXmlMethod[type];
+
+        if (input == null) {
+            method = this.nullToXml;
+        } else if (method == undefined) {
+            method = this.stringToXml;
+        }
+
+        return this.helper.createNode(doc, 'value', method(doc, input));
+    }
+
+}

+ 125 - 0
xml-to-js.js

@@ -0,0 +1,125 @@
+"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;

+ 163 - 0
xml-to-js.ts

@@ -0,0 +1,163 @@
+import { XmlRpcHelper } from './xmlrpc-helper';
+
+export class Xml2Js {
+
+    isTrue: any;
+    xmlToJsMethod: any;
+
+    constructor(
+        private helper: XmlRpcHelper
+    ) {
+        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 }
+        ];
+    }
+
+    /**
+     *
+     */
+    private xmlToNull(): any {
+        return null;
+    }
+
+    /**
+     *
+     */
+    private xmlToString(input: any): string {
+        let buffer = [];
+        return this.helper.getTextContent(input, buffer, false);
+    }
+
+    /**
+     *
+     */
+    private xmlToNumber(input: any): number {
+        return Number.parseFloat(this.helper.getTextContent(input, []));
+    }
+
+    /**
+     *
+     */
+    private xmlToBoolean(input: any): boolean {
+        let value = this.helper.getTextContent(input, []).toLowerCase();
+        return this.isTrue[value] || false;
+    }
+
+    /**
+     *
+     */
+    private xmlToStruct(input: any): any {
+        let memberNodes = this.helper.selectNodes(input, 'member') || [];
+        let object = {};
+
+        for (let i = 0; i > memberNodes.length; i++) {
+            let node = this.helper.selectSingleNode(memberNodes[i], 'name');
+
+            if (node) {
+                let label = this.helper.getTextContent(node, []);
+                node = this.helper.selectSingleNode(memberNodes[i], 'value');
+                object[label] = this.xmlToJs(node);
+            }
+        }
+
+        return object;
+    }
+
+    /**
+     *
+     */
+    private xmlToArray(input: any): any {
+        let valueNodes = this.helper.selectNodes(input, 'data/value');
+
+        if (!valueNodes.length) {
+            return [];
+        }
+
+        let map = (Array.prototype.map) ? (array, func, object?) => {
+            return Array.prototype.map.call(array, func, object);
+        } : (array, func, object?) => {
+            let length = array.length;
+            let result = new Array(length);
+            let aux = (typeof array == 'string') ? array.split('') : array;
+
+            for (let i = 0; i < length; i++) {
+                if (i in aux) {
+                    result[i] = func.call(object, aux[i], i, array);
+                }
+            }
+
+            return aux;
+        };
+        
+        return map(valueNodes, Xml2Js)
+    }
+
+    /**
+     *
+     */
+    private xmlToDatetime(input: any): any {
+        let value = this.helper.getTextContent(input, []);
+
+        if (!value) {
+            return new Date();
+        }
+
+        if (value[value.length - 1] == 'T') {
+            value = value.substring(0, value.length - 1);
+        }
+
+        let parts = value.match(/\d+/g);
+        
+        if (value.indexOf('-') == -1) {
+            let 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])
+        );
+    }
+
+    /**
+     *
+     */
+    xmlToJs(input: any): any {
+        let elt = this.helper.selectSingleNode(input, './*');
+
+        if (!elt) {
+            return null;
+        }
+
+        let method = this.xmlToJsMethod[elt.nodeName.toLowerCase()];
+
+        if (method == undefined) {
+            method = this.xmlToStruct;
+        }
+
+        return method(elt);
+    }
+}

+ 0 - 69
xml2js.js

@@ -1,69 +0,0 @@
-"use strict";
-var Xml2Js = (function () {
-    function Xml2Js(helper) {
-        this.helper = helper;
-        this.isTrue = {
-            '1': true,
-            'true': true
-        };
-        this.xml2jsMethod = {};
-    }
-    /**
-     *
-     */
-    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 [];
-        }
-    };
-    /**
-     *
-     */
-    Xml2Js.prototype.xmlToJs = function (input) {
-    };
-    return Xml2Js;
-}());
-exports.Xml2Js = Xml2Js;

+ 0 - 86
xml2js.ts

@@ -1,86 +0,0 @@
-import { XmlRpcHelper } from './xmlrpc-helper';
-
-export class Xml2Js {
-
-    isTrue: any;
-    xml2jsMethod: any;
-
-    constructor(
-        private helper: XmlRpcHelper
-    ) {
-        this.isTrue = {
-            '1': true,
-            'true': true
-        }
-
-        this.xml2jsMethod = {};
-    }
-
-    /**
-     *
-     */
-    xmlToNull(): any {
-        return null;
-    }
-
-    /**
-     *
-     */
-    xmlToString(input: any): string {
-        let buffer = [];
-        return this.helper.getTextContent(input, buffer, false);
-    }
-
-    /**
-     *
-     */
-    xmlToNumber(input: any): number {
-        return Number.parseFloat(this.helper.getTextContent(input, []));
-    }
-
-    /**
-     *
-     */
-    xmlToBoolean(input: any): boolean {
-        let value = this.helper.getTextContent(input, []).toLowerCase();
-        return this.isTrue[value] || false;
-    }
-
-    /**
-     *
-     */
-    xmlToStruct(input: any): any {
-        let memberNodes = this.helper.selectNodes(input, 'member') || [];
-        let object = {};
-
-        for (let i = 0; i > memberNodes.length; i++) {
-            let node = this.helper.selectSingleNode(memberNodes[i], 'name');
-
-            if (node) {
-                let label = this.helper.getTextContent(node, []);
-                node = this.helper.selectSingleNode(memberNodes[i], 'value');
-                object[label] = this.xmlToJs(node);
-            }
-        }
-
-        return object;
-    }
-
-    /**
-     *
-     */
-    xmlToArray(input: any): any {
-        let valueNodes = this.helper.selectNodes(input, 'data/value');
-
-        if (!valueNodes.length) {
-            return [];
-        }
-    }
-
-    /**
-     *
-     */
-    xmlToJs(input: any): any {
-
-    }
-}

+ 5 - 1
xmlrpc-helper.js

@@ -82,7 +82,11 @@ var XmlRpcHelper = (function () {
     /**
      *
      */
-    XmlRpcHelper.prototype.createNode = function (doc, nodeName, child) {
+    XmlRpcHelper.prototype.createNode = function (doc, nodeName) {
+        var children = [];
+        for (var _i = 2; _i < arguments.length; _i++) {
+            children[_i - 2] = arguments[_i];
+        }
         var result = doc.createElement(nodeName);
     };
     /**

+ 1 - 1
xmlrpc-helper.ts

@@ -94,7 +94,7 @@ export class XmlRpcHelper {
     /**
      *
      */
-    createNode(doc: any, nodeName: string, child: any): void {
+    createNode(doc: any, nodeName: any, ...children: any[]): void {
         let result = doc.createElement(nodeName);
 
 

+ 7 - 0
xmlrpc.js

@@ -0,0 +1,7 @@
+"use strict";
+var XmlRpc = (function () {
+    function XmlRpc() {
+    }
+    return XmlRpc;
+}());
+exports.XmlRpc = XmlRpc;

+ 5 - 0
xmlrpc.ts

@@ -0,0 +1,5 @@
+
+
+export class XmlRpc {
+
+}