'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);

/**
 * 生成 CSV 文件内容，可以用于 fs.writeFileSync 输出
 *
 * 第一行为表头
 * @param {Array<Array<string>>} dataList 二维数据列表
 * @returns 生成的字符串
 * @example
 *
 * ```ts
 * generateCSV([['a','b'], ['1', '2']]);
 * ```
 */
function generateCSV(dataList) {
  var _a;
  var result = [];
  if (!(dataList === null || dataList === void 0 ? void 0 : dataList.length) || !((_a = dataList[0]) === null || _a === void 0 ? void 0 : _a.length)) {
    return '';
  }
  dataList.forEach(function (line, lineIndex) {
    line.forEach(function (text, index) {
      if (lineIndex === 0 && index === 0) {
        result.push("\uFEFF".concat(text, ","));
      } else if (index === line.length - 1) {
        result.push("".concat(text, "\n"));
      } else {
        result.push("".concat(text, ","));
      }
    });
  });
  return result.join('');
}
/**
 * 生成 CSV 所需数据，可用于传递给 generateCSV 方法
 *
 * @param {Array<Record<string, string | number | boolean>>} list 数据列表
 * @param {Record<string, string>} headMap 数据项的 key 和表头标题的映射关系
 * @returns 二维数组，第一行是表头
 *
 * @example
 * ```ts
 * generateCSVData([
 *   {
 *     file: 'a.js',
 *     size: 88,
 *   },
 *  {
 *     file: 'b.js',
 *     size: 66,
 *   }
 * ], { file: '文件名称', size: '文件大小' })
 *
 *
 * // [['文件名称', '文件大小'], ['a.js', 88], ['b.js', 66]]
 * ```
 */
function generateCSVData(list, headMap) {
  var dataList = list.map(function (item) {
    return Object.keys(headMap).map(function (key) {
      return item[key];
    });
  });
  return [Object.values(headMap)].concat(_toConsumableArray__default["default"](dataList));
}

exports.generateCSV = generateCSV;
exports.generateCSVData = generateCSVData;
