You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							212 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							212 lines
						
					
					
						
							6.5 KiB
						
					
					
				| "use strict";
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| var CSVError_1 = __importDefault(require("./CSVError"));
 | |
| var set_1 = __importDefault(require("lodash/set"));
 | |
| var numReg = /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/;
 | |
| function default_1(csvRows, conv) {
 | |
|     var res = [];
 | |
|     for (var i = 0, len = csvRows.length; i < len; i++) {
 | |
|         var r = processRow(csvRows[i], conv, i);
 | |
|         if (r) {
 | |
|             res.push(r);
 | |
|         }
 | |
|     }
 | |
|     return res;
 | |
| }
 | |
| exports.default = default_1;
 | |
| ;
 | |
| function processRow(row, conv, index) {
 | |
|     if (conv.parseParam.checkColumn && conv.parseRuntime.headers && row.length !== conv.parseRuntime.headers.length) {
 | |
|         throw (CSVError_1.default.column_mismatched(conv.parseRuntime.parsedLineNumber + index));
 | |
|     }
 | |
|     var headRow = conv.parseRuntime.headers || [];
 | |
|     var resultRow = convertRowToJson(row, headRow, conv);
 | |
|     if (resultRow) {
 | |
|         return resultRow;
 | |
|     }
 | |
|     else {
 | |
|         return null;
 | |
|     }
 | |
| }
 | |
| function convertRowToJson(row, headRow, conv) {
 | |
|     var hasValue = false;
 | |
|     var resultRow = {};
 | |
|     for (var i = 0, len = row.length; i < len; i++) {
 | |
|         var item = row[i];
 | |
|         if (conv.parseParam.ignoreEmpty && item === '') {
 | |
|             continue;
 | |
|         }
 | |
|         hasValue = true;
 | |
|         var head = headRow[i];
 | |
|         if (!head || head === "") {
 | |
|             head = headRow[i] = "field" + (i + 1);
 | |
|         }
 | |
|         var convFunc = getConvFunc(head, i, conv);
 | |
|         if (convFunc) {
 | |
|             var convRes = convFunc(item, head, resultRow, row, i);
 | |
|             if (convRes !== undefined) {
 | |
|                 setPath(resultRow, head, convRes, conv, i);
 | |
|             }
 | |
|         }
 | |
|         else {
 | |
|             // var flag = getFlag(head, i, param);
 | |
|             // if (flag === 'omit') {
 | |
|             //   continue;
 | |
|             // }
 | |
|             if (conv.parseParam.checkType) {
 | |
|                 var convertFunc = checkType(item, head, i, conv);
 | |
|                 item = convertFunc(item);
 | |
|             }
 | |
|             if (item !== undefined) {
 | |
|                 setPath(resultRow, head, item, conv, i);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     if (hasValue) {
 | |
|         return resultRow;
 | |
|     }
 | |
|     else {
 | |
|         return null;
 | |
|     }
 | |
| }
 | |
| var builtInConv = {
 | |
|     "string": stringType,
 | |
|     "number": numberType,
 | |
|     "omit": function () { }
 | |
| };
 | |
| function getConvFunc(head, i, conv) {
 | |
|     if (conv.parseRuntime.columnConv[i] !== undefined) {
 | |
|         return conv.parseRuntime.columnConv[i];
 | |
|     }
 | |
|     else {
 | |
|         var flag = conv.parseParam.colParser[head];
 | |
|         if (flag === undefined) {
 | |
|             return conv.parseRuntime.columnConv[i] = null;
 | |
|         }
 | |
|         if (typeof flag === "object") {
 | |
|             flag = flag.cellParser || "string";
 | |
|         }
 | |
|         if (typeof flag === "string") {
 | |
|             flag = flag.trim().toLowerCase();
 | |
|             var builtInFunc = builtInConv[flag];
 | |
|             if (builtInFunc) {
 | |
|                 return conv.parseRuntime.columnConv[i] = builtInFunc;
 | |
|             }
 | |
|             else {
 | |
|                 return conv.parseRuntime.columnConv[i] = null;
 | |
|             }
 | |
|         }
 | |
|         else if (typeof flag === "function") {
 | |
|             return conv.parseRuntime.columnConv[i] = flag;
 | |
|         }
 | |
|         else {
 | |
|             return conv.parseRuntime.columnConv[i] = null;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| function setPath(resultJson, head, value, conv, headIdx) {
 | |
|     if (!conv.parseRuntime.columnValueSetter[headIdx]) {
 | |
|         if (conv.parseParam.flatKeys) {
 | |
|             conv.parseRuntime.columnValueSetter[headIdx] = flatSetter;
 | |
|         }
 | |
|         else {
 | |
|             if (head.indexOf(".") > -1) {
 | |
|                 var headArr = head.split(".");
 | |
|                 var jsonHead = true;
 | |
|                 while (headArr.length > 0) {
 | |
|                     var headCom = headArr.shift();
 | |
|                     if (headCom.length === 0) {
 | |
|                         jsonHead = false;
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|                 if (!jsonHead || conv.parseParam.colParser[head] && conv.parseParam.colParser[head].flat) {
 | |
|                     conv.parseRuntime.columnValueSetter[headIdx] = flatSetter;
 | |
|                 }
 | |
|                 else {
 | |
|                     conv.parseRuntime.columnValueSetter[headIdx] = jsonSetter;
 | |
|                 }
 | |
|             }
 | |
|             else {
 | |
|                 conv.parseRuntime.columnValueSetter[headIdx] = flatSetter;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     if (conv.parseParam.nullObject === true && value === "null") {
 | |
|         value = null;
 | |
|     }
 | |
|     conv.parseRuntime.columnValueSetter[headIdx](resultJson, head, value);
 | |
|     // flatSetter(resultJson, head, value);
 | |
| }
 | |
| function flatSetter(resultJson, head, value) {
 | |
|     resultJson[head] = value;
 | |
| }
 | |
| function jsonSetter(resultJson, head, value) {
 | |
|     set_1.default(resultJson, head, value);
 | |
| }
 | |
| function checkType(item, head, headIdx, conv) {
 | |
|     if (conv.parseRuntime.headerType[headIdx]) {
 | |
|         return conv.parseRuntime.headerType[headIdx];
 | |
|     }
 | |
|     else if (head.indexOf('number#!') > -1) {
 | |
|         return conv.parseRuntime.headerType[headIdx] = numberType;
 | |
|     }
 | |
|     else if (head.indexOf('string#!') > -1) {
 | |
|         return conv.parseRuntime.headerType[headIdx] = stringType;
 | |
|     }
 | |
|     else if (conv.parseParam.checkType) {
 | |
|         return conv.parseRuntime.headerType[headIdx] = dynamicType;
 | |
|     }
 | |
|     else {
 | |
|         return conv.parseRuntime.headerType[headIdx] = stringType;
 | |
|     }
 | |
| }
 | |
| function numberType(item) {
 | |
|     var rtn = parseFloat(item);
 | |
|     if (isNaN(rtn)) {
 | |
|         return item;
 | |
|     }
 | |
|     return rtn;
 | |
| }
 | |
| function stringType(item) {
 | |
|     return item.toString();
 | |
| }
 | |
| function dynamicType(item) {
 | |
|     var trimed = item.trim();
 | |
|     if (trimed === "") {
 | |
|         return stringType(item);
 | |
|     }
 | |
|     if (numReg.test(trimed)) {
 | |
|         return numberType(item);
 | |
|     }
 | |
|     else if (trimed.length === 5 && trimed.toLowerCase() === "false" || trimed.length === 4 && trimed.toLowerCase() === "true") {
 | |
|         return booleanType(item);
 | |
|     }
 | |
|     else if (trimed[0] === "{" && trimed[trimed.length - 1] === "}" || trimed[0] === "[" && trimed[trimed.length - 1] === "]") {
 | |
|         return jsonType(item);
 | |
|     }
 | |
|     else {
 | |
|         return stringType(item);
 | |
|     }
 | |
| }
 | |
| function booleanType(item) {
 | |
|     var trimed = item.trim();
 | |
|     if (trimed.length === 5 && trimed.toLowerCase() === "false") {
 | |
|         return false;
 | |
|     }
 | |
|     else {
 | |
|         return true;
 | |
|     }
 | |
| }
 | |
| function jsonType(item) {
 | |
|     try {
 | |
|         return JSON.parse(item);
 | |
|     }
 | |
|     catch (e) {
 | |
|         return item;
 | |
|     }
 | |
| }
 | |
| //# sourceMappingURL=lineToJson.js.map
 |