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
 |