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
							 |