var helper = require('./helper.js'); module.exports = { toObject : toObject, toArray : toArray, toColumnArray : toColumnArray, toSchemaObject : toSchemaObject, toCSV : toCSV } function toColumnArray(data, opts){ opts = opts || { }; var delimiter = (opts.delimiter || ','); var quote = helper.getQuoteChar(opts.quote); var content = data; var headers = null; if(typeof(content) !== "string"){ throw new Error("Invalid input, input data should be a string"); } content = content.split(/[\n\r]+/ig); if(typeof(opts.headers) === "string"){ headers = opts.headers.split(/[\n\r]+/ig); headers = quote ? helper.convertArray(headers.shift(), delimiter, quote) : headers.shift().split(delimiter); }else{ headers = quote ? helper.convertArray(content.shift(), delimiter, quote) : content.shift().split(delimiter); } var hashData = { }; headers.forEach(function(item){ hashData[item] = []; }); content.forEach(function(item){ if(item){ item = quote ? helper.convertArray(item, delimiter, quote) : item.split(delimiter); item.forEach(function(val, index){ hashData[headers[index]].push(helper.removeQuote(val)); }); } }); return hashData; } function toObject(data, opts){ opts = opts || { }; var delimiter = (opts.delimiter || ','); var quote = helper.getQuoteChar(opts.quote); var content = data; var headers = null; if(typeof(content) !== "string"){ throw new Error("Invalid input, input data should be a string"); } content = content.split(/[\n\r]+/ig); if(typeof(opts.headers) === "string"){ headers = opts.headers.split(/[\n\r]+/ig); headers = quote ? helper.convertArray(headers.shift(), delimiter, quote) : headers.shift().split(delimiter); }else{ headers = quote ? helper.convertArray(content.shift(), delimiter, quote) : content.shift().split(delimiter); } var hashData = [ ]; content.forEach(function(item){ if(item){ item = quote ? helper.convertArray(item, delimiter, quote) : item.split(delimiter); var hashItem = { }; headers.forEach(function(headerItem, index){ hashItem[headerItem] = helper.removeQuote(item[index]); }); hashData.push(hashItem); } }); return hashData; } function toSchemaObject(data, opts){ opts = opts || { }; var delimiter = (opts.delimiter || ','); var quote = helper.getQuoteChar(opts.quote); var content = data; var headers = null; if(typeof(content) !== "string"){ throw new Error("Invalid input, input should be a string"); } content = content.split(/[\n\r]+/ig); if(typeof(opts.headers) === "string"){ headers = opts.headers.split(/[\n\r]+/ig); headers = quote ? helper.convertArray(headers.shift(), delimiter, quote) : headers.shift().split(delimiter); }else{ headers = quote ? helper.convertArray(content.shift(), delimiter, quote) : content.shift().split(delimiter); } var hashData = [ ]; content.forEach(function(item){ if(item){ item = quote ? helper.convertArray(item, delimiter, quote) : item.split(delimiter); var schemaObject = {}; item.forEach(function(val, index){ helper.addDataInSchema(headers[index], val, schemaObject , delimiter, quote); }); hashData.push(schemaObject); } }); return hashData; } function toArray(data, opts){ opts = opts || { }; var delimiter = (opts.delimiter || ','); var quote = helper.getQuoteChar(opts.quote); var content = data; if(typeof(content) !== "string"){ throw new Error("Invalid input, input data should be a string"); } content = content.split(/[\n\r]+/ig); var arrayData = [ ]; content.forEach(function(item){ if(item){ item = quote ? helper.convertArray(item, delimiter, quote) : item.split(delimiter); item = item.map(function(cItem){ return helper.removeQuote(cItem); }); arrayData.push(item); } }); return arrayData; } function toCSV(data, opts){ opts = (opts || { }); opts.delimiter = (opts.delimiter || ','); opts.wrap = (opts.wrap || ''); opts.arrayDenote = (opts.arrayDenote && String(opts.arrayDenote).trim() ? opts.arrayDenote : '[]'); opts.objectDenote = (opts.objectDenote && String(opts.objectDenote).trim() ? opts.objectDenote : '.'); opts.detailedOutput = (typeof(opts.detailedOutput) !== "boolean" ? true : opts.detailedOutput); opts.headers = String(opts.headers).toLowerCase(); var csvJSON = { }; var csvData = ""; if(!opts.headers.match(/none|full|relative|key/)){ opts.headers = 'full'; }else{ opts.headers = opts.headers.match(/none|full|relative|key/)[0]; } if(opts.wrap === true){ opts.wrap = '"'; } if(typeof(data) === "string"){ data = JSON.parse(data); } helper.toCsv(data, csvJSON, "", 0, opts); var headers = helper.getHeaders(opts.headers, csvJSON, opts); if(headers){ if(opts.wrap){ headers = headers.map(function(item){ return opts.wrap + item + opts.wrap; }); } csvData = headers.join(opts.delimiter); } var bigArrayLen = helper.getLengthyItem(csvJSON); var keys = Object.keys(csvJSON); var row = [ ]; var replaceNewLinePattern = /\n|\r/g; if(!opts.wrap){ replaceNewLinePattern = new RegExp('\n|\r|' + opts.delimiter, 'g'); } for(var i = 0; i < bigArrayLen; i++){ row = [ ]; for(var j = 0; j < keys.length; j++){ if(csvJSON[keys[j]][i]){ csvJSON[keys[j]][i] = csvJSON[keys[j]][i].replace(replaceNewLinePattern, '\t'); if(opts.wrap){ csvJSON[keys[j]][i] = opts.wrap + csvJSON[keys[j]][i] + opts.wrap; } row[row.length] = csvJSON[keys[j]][i]; }else{ row[row.length] = ""; } } csvData += '\n' + row.join(opts.delimiter); } return csvData; }