UNPKG

@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
/** * 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