@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.5 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21tb24vc3JjL2Z1bmN0aW9ucy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxPQUFjLEVBQ2QsZUFBdUIsR0FBRyxFQUMxQixnQkFBd0IsTUFBTTtJQUU5QixJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUV0Qiw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsRUFBRTtRQUM3QyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO2dCQUNmLElBQUksSUFBSSxZQUFZLENBQUM7YUFDdEI7WUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUMxQjtZQUNELElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFDRCxZQUFZLElBQUksR0FBRyxJQUFJLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxpREFBaUQ7SUFDakQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDZCxNQUFNLE9BQU8sR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxZQUFZLEdBQUcsR0FBRyxPQUFPLEdBQUcsYUFBYSxHQUFHLFlBQVksRUFBRSxDQUFDO0tBQzVEO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsR0FBVyxFQUNYLGVBQXVCLEdBQUcsRUFDMUIsZ0JBQXdCLE1BQU0sRUFDOUIsU0FBaUIsQ0FBQztJQUVsQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE1BQU0sUUFBUSxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsNENBQTRDO0lBQzVDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztJQUU3QixzQ0FBc0M7SUFDdEMsTUFBTSxJQUFJLEdBQWEsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RCw2REFBNkQ7SUFDN0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsTUFBTSxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBRTFCLE1BQU0sTUFBTSxHQUFhLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakMsU0FBUztTQUNWO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDNUI7SUFFRCxPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZLEVBQUUsU0FBaUIsQ0FBQztJQUN6RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJzaW9uIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgY29udmVydHNcbiAqIHRoZW0gdG8gQ1NWIGZvcm1hdC4gQ3VzdG9tIGtleSBhbmQgbGluZSBzZXBhcmF0b3JzIGNhbiBiZSBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIG9iamVjdHMgbGlzdCBvZiBzdHJpbmdzIGluIEpTT04gZm9ybWF0IG9yIGFjdHVhbCBvYmplY3RzXG4gKiBAcGFyYW0ga2V5U2VwYXJhdG9yIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IGN1c3RvbSB2YWx1ZSBzZXBhcmF0b3JcbiAqIEBwYXJhbSBsaW5lU2VwYXJhdG9yIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IGN1c3RvbSBlbmQgb2YgbGluZSBzZXBhcmF0b3JcbiAqIEByZXR1cm5zIENTViBmb3JtYXR0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0T2JqZWN0c1RvQ1NWKFxuICBvYmplY3RzOiBhbnlbXSxcbiAga2V5U2VwYXJhdG9yOiBzdHJpbmcgPSAnLCcsXG4gIGxpbmVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXHJcXG4nXG4pOiBzdHJpbmcge1xuICBpZiAoIW9iamVjdHMpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgb3V0cHV0U3RyaW5nID0gJyc7XG5cbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFycmF5LCBjcmVhdGluZyBvbmUgb3V0cHV0IGxpbmUgcGVyIG9iamVjdFxuICBvYmplY3RzLmZvckVhY2goKHZhbHVlOiBvYmplY3QsIGtleTogbnVtYmVyKSA9PiB7XG4gICAgbGV0IGxpbmUgPSAnJztcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIE9iamVjdC5rZXlzKG9iamVjdHNba2V5XSkpIHtcbiAgICAgIGlmIChsaW5lICE9PSAnJykge1xuICAgICAgICBsaW5lICs9IGtleVNlcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3RzW2tleV1baW5kZXhdID09PSBudWxsIHx8IG9iamVjdHNba2V5XVtpbmRleF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYmplY3RzW2tleV1baW5kZXhdID0gJyc7XG4gICAgICB9XG4gICAgICBsaW5lICs9IG9iamVjdHNba2V5XVtpbmRleF07XG4gICAgfVxuICAgIG91dHB1dFN0cmluZyArPSBgJHtsaW5lfSR7bGluZVNlcGFyYXRvcn1gO1xuICB9KTtcblxuICAvLyBBcHBlbmQgaGVhZGVyIHJvdyBpZGVudGlmeWluZyBrZXlzIGludG8gb3V0cHV0XG4gIGlmIChvYmplY3RzWzBdKSB7XG4gICAgY29uc3QgaGVhZGVyczogc3RyaW5nID0gT2JqZWN0LmtleXMob2JqZWN0c1swXSkuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgIG91dHB1dFN0cmluZyA9IGAke2hlYWRlcnN9JHtsaW5lU2VwYXJhdG9yfSR7b3V0cHV0U3RyaW5nfWA7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0U3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnNpb24gZnVuY3Rpb24gdGhhdCB0YWtlcyBhIENTViByZXByZXNlbnRhdGlvblxuICogb2Ygb2JqZWN0cyBhbmQgY29udmVydHMgdGhlbSB0byBKU09OLlxuICogVGhlIGZpcnN0IHJvdyBpbiB0aGUgaW5wdXQgbXVzdCBiZSB0aGUgb2JqZWN0IGtleXMuXG4gKiBDdXN0b20ga2V5IHNlcGFyYXRvciBhbmQgbGluZSBzZXBhcmF0b3IgY2FuIGJlIHNwZWNpZmllZC5cbiAqIEluZGVudGF0aW9uIHNpemUgZm9yIG91dHB1dCBKU09OIGNhbiBiZSBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGNzdiBsaXN0IG9mIHN0cmluZ3MgaW4gSlNPTiBmb3JtYXQgb3IgYWN0dWFsIG9iamVjdHNcbiAqIEBwYXJhbSBrZXlTZXBhcmF0b3Igb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgY3VzdG9tIHZhbHVlIHNlcGFyYXRvclxuICogQHBhcmFtIGxpbmVTZXBhcmF0b3Igb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgY3VzdG9tIGVuZCBvZiBsaW5lIHNlcGFyYXRvclxuICogQHBhcmFtIGluZGVudCBvcHRpb25hbCBwYXJhbWV0ZXIgaW5kaWNhdGluZyBzcGFjZSBpbmRlbnRhdGlvbiBmb3IgcHJldHR5IG91dHB1dC4gRGVmYXVsdCBpcyAyLlxuICogQHJldHVybnMgSlNPTiBmb3JtYXR0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q1NWVG9KU09OKFxuICBjc3Y6IHN0cmluZyxcbiAga2V5U2VwYXJhdG9yOiBzdHJpbmcgPSAnLCcsXG4gIGxpbmVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXHJcXG4nLFxuICBpbmRlbnQ6IG51bWJlciA9IDJcbik6IHN0cmluZyB7XG4gIGlmICghY3N2KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY3N2QXJyYXk6IHN0cmluZ1tdID0gY3N2LnNwbGl0KGxpbmVTZXBhcmF0b3IpO1xuICAvLyBJbnB1dCBDU1YgbXVzdCBoYXZlIGEgbWluaW11bSBvZiB0d28gcm93c1xuICBpZiAoY3N2QXJyYXkubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IG5ld09iamVjdHM6IGFueVtdID0gW107XG5cbiAgLy8gRXh0cmFjdCBvYmplY3Qga2V5cyBmcm9tIGhlYWRlciByb3dcbiAgY29uc3Qga2V5czogc3RyaW5nW10gPSBjc3ZBcnJheVswXS5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICAvLyBJdGVyYXRlIHRocm91Z2ggYXJyYXksIGNyZWF0aW5nIG9uZSBvdXRwdXQgbGluZSBwZXIgb2JqZWN0XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgY3N2QXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBuZXdPYmplY3Q6IGFueSA9IHt9O1xuXG4gICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IGNzdkFycmF5W2ldLnNwbGl0KGtleVNlcGFyYXRvcik7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggIT09IGtleXMubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICBuZXdPYmplY3Rba2V5c1tqXV0gPSB2YWx1ZXNbal07XG4gICAgfVxuICAgIG5ld09iamVjdHMucHVzaChuZXdPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdEpTT04obmV3T2JqZWN0cywgaW5kZW50KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCB0byBKU09OIHVzaW5nIHN0cmluZ2lmeS4gSW5kZW50YXRpb24gc2l6ZSBmb3Igb3V0cHV0IEpTT04gY2FuIGJlIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0ganNvbiBvYmplY3QgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gaW5kZW50IG9wdGlvbmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIHNwYWNlIGluZGVudGF0aW9uIGZvciBwcmV0dHkgb3V0cHV0LiBEZWZhdWx0IGlzIDIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRKU09OKGpzb246IG9iamVjdCwgaW5kZW50OiBudW1iZXIgPSAyKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHVuZGVmaW5lZCwgaW5kZW50KTtcbn1cbiJdfQ==