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
			| 
											3 years ago
										 | "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
 |