/*-------------------------------------------------------------------------------------------------------------- * Copyright (c) insite-gmbh. All rights reserved. * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------------------------*/ import { } from 'buffer'; export class Converter { public static enc_btoa(str: string): string { return new Buffer(str).toString('base64'); }; public static enc_atob(b64Encoded: string): string { return new Buffer(b64Encoded, 'base64').toString(); }; //converts a indexed variable to an array -> varname from t[1], t[2] to t[] public static objectToArray(obj: any, varname: string): Array { var result = []; var length = varname.length; for (var prop in obj) { if (typeof obj[prop] != 'function') { if (prop.length > length && prop.substring(0, length) == varname) { var index = prop.replace(varname, "").replace(varname, "[").replace(varname, "]"); result[index] = obj[prop]; } } } return result; } //converts a base64 string to an byte array -> this is because json converts the byte[] to a base64 string, //and you have to convert it back public static base64ToArray(data: string):  Uint8Array { var decoded = Converter.enc_atob(data); var i, il = decoded.length; var array = new Uint8Array(il); for (i = 0; i < il; ++i) { array[i] = decoded.charCodeAt(i); } return array; } /*DEPRECATED because of getValue //Extract an index form an array, public static extractValue(obj:any, varname:string, index: number): any{ var indexedName = varname + "[" + index + "]"; for (var prop in obj) { if (typeof obj[prop] != 'function') { //if (indexedName === prop) return obj[prop]; if (varname === prop) { var arr = obj[prop]; return arr[index]; } } } return null; } */ //get any element from an object; example: varname = 'prop1[3].prop9.prop3[0]' public static getValue(obj: any, varname: string, defaultReturn: any = null): any { var props = varname.replace(/\]/,"").split(/[\.\[]/); let currentProp = props[0]; var nextVarname, index; var found = false; for (var prop in obj) { if (typeof obj[prop] != 'function') { if (currentProp === prop) { obj = obj[prop]; props.splice(0, 1); nextVarname = props.join("."); found = true; break; }; } } if (found) { if (nextVarname.length < 1) { return obj; } else { return Converter.getValue(obj, nextVarname, defaultReturn); } } else { return defaultReturn; } } public static flatten(obj: any): Map { let result:Map = new Map(); for (var i in obj) { if (!obj.hasOwnProperty(i)) continue; if ((typeof obj[i]) == 'object') { var flatObject = Converter.flatten(obj[i]); for (let [key, val] of flatObject) { result.set(i + '.' + key, val); } } else result.set(i, obj[i]); } return result; } }