UNPKG

tsbase

Version:

Base class libraries for TypeScript

82 lines 3.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Csv = void 0; var Query_1 = require("../Patterns/CommandQuery/Query"); var Regex_1 = require("./Regex"); var Strings_1 = require("./Strings"); var Csv = /** @class */ (function () { function Csv() { } /** * Accepts a json object and returns the CSV string equivalent. * @param json */ Csv.EncodeAsCsv = function (headers, json) { var _this = this; var csvConversionResult = new Query_1.Query(function () { return _this.convertToCSV(json); }).Execute(); return csvConversionResult.IsSuccess && csvConversionResult.Value ? "".concat(headers.toString(), "\r\n").concat(csvConversionResult.Value) : Strings_1.Strings.Empty; }; /** * Accepts a csv string amd returns the JSON equivalent object. * @param csv * @param headerKeys sequential array of keys for each header in the given csv * @returns */ Csv.DecodeAsJson = function (csv, headerKeys) { var json = []; var lines = csv.split('\n'); var headersString = lines.shift(); var headers = headersString && Regex_1.Regex.AggregateMatches(Regex_1.Regex.CsvData, headersString, [], function (match, cv) { match && cv.push(match[1]); }); if (!headers || !headerKeys.length || headers.length !== headerKeys.length) { console.error('Unable to decode CSV to JSON - ensure the given headerKeys is the same length as the CSV headers', "CSV Headers Count: ".concat(headers === null || headers === void 0 ? void 0 : headers.length, " | headerKeys Length: ").concat(headerKeys.length)); return json; } var valueString = lines.join('\n'); var recordValues = Regex_1.Regex.AggregateMatches(Regex_1.Regex.CsvData, valueString, [], function (match, cv) { if (cv.length === 0 || cv[cv.length - 1].length % headers.length === 0) { cv.push([]); } match && cv[cv.length - 1].push(match[1] || ''); }); recordValues.forEach(function (rv) { var entry = {}; headerKeys.forEach(function (k, i) { if (k) { entry[k] = rv[i]; } }); json.push(entry); }); return json; }; // eslint-disable-next-line complexity Csv.convertToCSV = function (json) { var items = typeof json !== 'object' ? JSON.parse(json) : json; var str = Strings_1.Strings.Empty; for (var i = 0; i < items.length; i++) { var item = items[i]; var line = Strings_1.Strings.Empty; for (var key in item) { if (line !== Strings_1.Strings.Empty) { line += ','; } var value = item[key]; var literalQuotes = (value === null || value === void 0 ? void 0 : value.toString().includes(',')) ? '"' : ''; line += value !== Strings_1.Strings.Empty ? "".concat(literalQuotes, "\"").concat(value, "\"").concat(literalQuotes) : Strings_1.Strings.Empty; } str += line + '\r\n'; } return str.trim(); }; return Csv; }()); exports.Csv = Csv; //# sourceMappingURL=Csv.js.map