@covalent/core
Version:
Core Teradata UI Platform for layouts, icons, custom components and themes. This should be added as a dependency for any project that wants to use layouts, icons and themes for Angular Material.
84 lines • 10.6 kB
JavaScript
/**
* Conversion function that takes an array of objects and converts
* them to CSV format. Custom key and line separators can be specified.
*
* @param objects list of strings in JSON format or actual objects
* @param keySeparator optional parameter to specify custom value separator
* @param lineSeparator optional parameter to specify custom end of line separator
* @returns CSV formatted string
*/
export function convertObjectsToCSV(objects, keySeparator = ',', lineSeparator = '\r\n') {
if (!objects) {
return '';
}
let outputString = '';
// Iterate through array, creating one output line per object
objects.forEach((value, key) => {
let line = '';
for (const index of Object.keys(objects[key])) {
if (line !== '') {
line += keySeparator;
}
if (objects[key][index] === null || objects[key][index] === undefined) {
objects[key][index] = '';
}
line += objects[key][index];
}
outputString += `${line}${lineSeparator}`;
});
// Append header row identifying keys into output
if (objects[0]) {
const headers = Object.keys(objects[0]).join(keySeparator);
outputString = `${headers}${lineSeparator}${outputString}`;
}
return outputString;
}
/**
* Conversion function that takes a CSV representation
* of objects and converts them to JSON.
* The first row in the input must be the object keys.
* Custom key separator and line separator can be specified.
* Indentation size for output JSON can be specified.
*
* @param csv list of strings in JSON format or actual objects
* @param keySeparator optional parameter to specify custom value separator
* @param lineSeparator optional parameter to specify custom end of line separator
* @param indent optional parameter indicating space indentation for pretty output. Default is 2.
* @returns JSON formatted string
*/
export function convertCSVToJSON(csv, keySeparator = ',', lineSeparator = '\r\n', indent = 2) {
if (!csv) {
return '';
}
const csvArray = csv.split(lineSeparator);
// Input CSV must have a minimum of two rows
if (csvArray.length < 2) {
return '';
}
const newObjects = [];
// Extract object keys from header row
const keys = csvArray[0].split(keySeparator);
// Iterate through array, creating one output line per object
for (let i = 1; i < csvArray.length; i++) {
const newObject = {};
const values = csvArray[i].split(keySeparator);
if (values.length !== keys.length) {
continue;
}
for (let j = 0; j < keys.length; j++) {
newObject[keys[j]] = values[j];
}
newObjects.push(newObject);
}
return formatJSON(newObjects, indent);
}
/**
* Convert object to JSON using stringify. Indentation size for output JSON can be specified.
*
* @param json object to be converted
* @param indent optional parameter indicating space indentation for pretty output. Default is 2.
*/
export function formatJSON(json, indent = 2) {
return JSON.stringify(json, undefined, indent);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21tb24vc3JjL2Z1bmN0aW9ucy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxPQUFjLEVBQ2QsWUFBWSxHQUFHLEdBQUcsRUFDbEIsYUFBYSxHQUFHLE1BQU07SUFFdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXRCLDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQzdDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNoQixJQUFJLElBQUksWUFBWSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxZQUFZLElBQUksR0FBRyxJQUFJLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxpREFBaUQ7SUFDakQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUFXLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25FLFlBQVksR0FBRyxHQUFHLE9BQU8sR0FBRyxhQUFhLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEdBQVcsRUFDWCxZQUFZLEdBQUcsR0FBRyxFQUNsQixhQUFhLEdBQUcsTUFBTSxFQUN0QixNQUFNLEdBQUcsQ0FBQztJQUVWLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsNENBQTRDO0lBQzVDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7SUFFN0Isc0NBQXNDO0lBQ3RDLE1BQU0sSUFBSSxHQUFhLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsNkRBQTZEO0lBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBRTFCLE1BQU0sTUFBTSxHQUFhLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxTQUFTO1FBQ1gsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnNpb24gZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCBjb252ZXJ0c1xuICogdGhlbSB0byBDU1YgZm9ybWF0LiBDdXN0b20ga2V5IGFuZCBsaW5lIHNlcGFyYXRvcnMgY2FuIGJlIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0cyBsaXN0IG9mIHN0cmluZ3MgaW4gSlNPTiBmb3JtYXQgb3IgYWN0dWFsIG9iamVjdHNcbiAqIEBwYXJhbSBrZXlTZXBhcmF0b3Igb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgY3VzdG9tIHZhbHVlIHNlcGFyYXRvclxuICogQHBhcmFtIGxpbmVTZXBhcmF0b3Igb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgY3VzdG9tIGVuZCBvZiBsaW5lIHNlcGFyYXRvclxuICogQHJldHVybnMgQ1NWIGZvcm1hdHRlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPYmplY3RzVG9DU1YoXG4gIG9iamVjdHM6IGFueVtdLFxuICBrZXlTZXBhcmF0b3IgPSAnLCcsXG4gIGxpbmVTZXBhcmF0b3IgPSAnXFxyXFxuJ1xuKTogc3RyaW5nIHtcbiAgaWYgKCFvYmplY3RzKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG91dHB1dFN0cmluZyA9ICcnO1xuXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBhcnJheSwgY3JlYXRpbmcgb25lIG91dHB1dCBsaW5lIHBlciBvYmplY3RcbiAgb2JqZWN0cy5mb3JFYWNoKCh2YWx1ZTogb2JqZWN0LCBrZXk6IG51bWJlcikgPT4ge1xuICAgIGxldCBsaW5lID0gJyc7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBPYmplY3Qua2V5cyhvYmplY3RzW2tleV0pKSB7XG4gICAgICBpZiAobGluZSAhPT0gJycpIHtcbiAgICAgICAgbGluZSArPSBrZXlTZXBhcmF0b3I7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0c1trZXldW2luZGV4XSA9PT0gbnVsbCB8fCBvYmplY3RzW2tleV1baW5kZXhdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb2JqZWN0c1trZXldW2luZGV4XSA9ICcnO1xuICAgICAgfVxuICAgICAgbGluZSArPSBvYmplY3RzW2tleV1baW5kZXhdO1xuICAgIH1cbiAgICBvdXRwdXRTdHJpbmcgKz0gYCR7bGluZX0ke2xpbmVTZXBhcmF0b3J9YDtcbiAgfSk7XG5cbiAgLy8gQXBwZW5kIGhlYWRlciByb3cgaWRlbnRpZnlpbmcga2V5cyBpbnRvIG91dHB1dFxuICBpZiAob2JqZWN0c1swXSkge1xuICAgIGNvbnN0IGhlYWRlcnM6IHN0cmluZyA9IE9iamVjdC5rZXlzKG9iamVjdHNbMF0pLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICBvdXRwdXRTdHJpbmcgPSBgJHtoZWFkZXJzfSR7bGluZVNlcGFyYXRvcn0ke291dHB1dFN0cmluZ31gO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dFN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJzaW9uIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBDU1YgcmVwcmVzZW50YXRpb25cbiAqIG9mIG9iamVjdHMgYW5kIGNvbnZlcnRzIHRoZW0gdG8gSlNPTi5cbiAqIFRoZSBmaXJzdCByb3cgaW4gdGhlIGlucHV0IG11c3QgYmUgdGhlIG9iamVjdCBrZXlzLlxuICogQ3VzdG9tIGtleSBzZXBhcmF0b3IgYW5kIGxpbmUgc2VwYXJhdG9yIGNhbiBiZSBzcGVjaWZpZWQuXG4gKiBJbmRlbnRhdGlvbiBzaXplIGZvciBvdXRwdXQgSlNPTiBjYW4gYmUgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjc3YgbGlzdCBvZiBzdHJpbmdzIGluIEpTT04gZm9ybWF0IG9yIGFjdHVhbCBvYmplY3RzXG4gKiBAcGFyYW0ga2V5U2VwYXJhdG9yIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IGN1c3RvbSB2YWx1ZSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBsaW5lU2VwYXJhdG9yIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IGN1c3RvbSBlbmQgb2YgbGluZSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBpbmRlbnQgb3B0aW9uYWwgcGFyYW1ldGVyIGluZGljYXRpbmcgc3BhY2UgaW5kZW50YXRpb24gZm9yIHByZXR0eSBvdXRwdXQuIERlZmF1bHQgaXMgMi5cbiAqIEByZXR1cm5zIEpTT04gZm9ybWF0dGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENTVlRvSlNPTihcbiAgY3N2OiBzdHJpbmcsXG4gIGtleVNlcGFyYXRvciA9ICcsJyxcbiAgbGluZVNlcGFyYXRvciA9ICdcXHJcXG4nLFxuICBpbmRlbnQgPSAyXG4pOiBzdHJpbmcge1xuICBpZiAoIWNzdikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNzdkFycmF5OiBzdHJpbmdbXSA9IGNzdi5zcGxpdChsaW5lU2VwYXJhdG9yKTtcbiAgLy8gSW5wdXQgQ1NWIG11c3QgaGF2ZSBhIG1pbmltdW0gb2YgdHdvIHJvd3NcbiAgaWYgKGNzdkFycmF5Lmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBuZXdPYmplY3RzOiBhbnlbXSA9IFtdO1xuXG4gIC8vIEV4dHJhY3Qgb2JqZWN0IGtleXMgZnJvbSBoZWFkZXIgcm93XG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gY3N2QXJyYXlbMF0uc3BsaXQoa2V5U2VwYXJhdG9yKTtcbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFycmF5LCBjcmVhdGluZyBvbmUgb3V0cHV0IGxpbmUgcGVyIG9iamVjdFxuICBmb3IgKGxldCBpID0gMTsgaSA8IGNzdkFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV3T2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBjc3ZBcnJheVtpXS5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoICE9PSBrZXlzLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgbmV3T2JqZWN0W2tleXNbal1dID0gdmFsdWVzW2pdO1xuICAgIH1cbiAgICBuZXdPYmplY3RzLnB1c2gobmV3T2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRKU09OKG5ld09iamVjdHMsIGluZGVudCk7XG59XG5cbi8qKlxuICogQ29udmVydCBvYmplY3QgdG8gSlNPTiB1c2luZyBzdHJpbmdpZnkuIEluZGVudGF0aW9uIHNpemUgZm9yIG91dHB1dCBKU09OIGNhbiBiZSBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGpzb24gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIGluZGVudCBvcHRpb25hbCBwYXJhbWV0ZXIgaW5kaWNhdGluZyBzcGFjZSBpbmRlbnRhdGlvbiBmb3IgcHJldHR5IG91dHB1dC4gRGVmYXVsdCBpcyAyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SlNPTihqc29uOiBvYmplY3QsIGluZGVudCA9IDIpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgdW5kZWZpbmVkLCBpbmRlbnQpO1xufVxuIl19