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.
		
		
		
		
		
			
		
			
				
					
					
						
							310 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							310 lines
						
					
					
						
							11 KiB
						
					
					
				"use strict";
 | 
						|
var __extends = (this && this.__extends) || (function () {
 | 
						|
    var extendStatics = Object.setPrototypeOf ||
 | 
						|
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 | 
						|
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
 | 
						|
    return function (d, b) {
 | 
						|
        extendStatics(d, b);
 | 
						|
        function __() { this.constructor = d; }
 | 
						|
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 | 
						|
    };
 | 
						|
})();
 | 
						|
var __importDefault = (this && this.__importDefault) || function (mod) {
 | 
						|
    return (mod && mod.__esModule) ? mod : { "default": mod };
 | 
						|
};
 | 
						|
Object.defineProperty(exports, "__esModule", { value: true });
 | 
						|
var Processor_1 = require("./Processor");
 | 
						|
var bluebird_1 = __importDefault(require("bluebird"));
 | 
						|
var dataClean_1 = require("./dataClean");
 | 
						|
var getEol_1 = __importDefault(require("./getEol"));
 | 
						|
var fileline_1 = require("./fileline");
 | 
						|
var util_1 = require("./util");
 | 
						|
var rowSplit_1 = require("./rowSplit");
 | 
						|
var lineToJson_1 = __importDefault(require("./lineToJson"));
 | 
						|
var CSVError_1 = __importDefault(require("./CSVError"));
 | 
						|
var ProcessorLocal = /** @class */ (function (_super) {
 | 
						|
    __extends(ProcessorLocal, _super);
 | 
						|
    function ProcessorLocal() {
 | 
						|
        var _this = _super !== null && _super.apply(this, arguments) || this;
 | 
						|
        _this.rowSplit = new rowSplit_1.RowSplit(_this.converter);
 | 
						|
        _this.eolEmitted = false;
 | 
						|
        _this._needEmitEol = undefined;
 | 
						|
        _this.headEmitted = false;
 | 
						|
        _this._needEmitHead = undefined;
 | 
						|
        return _this;
 | 
						|
    }
 | 
						|
    ProcessorLocal.prototype.flush = function () {
 | 
						|
        var _this = this;
 | 
						|
        if (this.runtime.csvLineBuffer && this.runtime.csvLineBuffer.length > 0) {
 | 
						|
            var buf = this.runtime.csvLineBuffer;
 | 
						|
            this.runtime.csvLineBuffer = undefined;
 | 
						|
            return this.process(buf, true)
 | 
						|
                .then(function (res) {
 | 
						|
                if (_this.runtime.csvLineBuffer && _this.runtime.csvLineBuffer.length > 0) {
 | 
						|
                    return bluebird_1.default.reject(CSVError_1.default.unclosed_quote(_this.runtime.parsedLineNumber, _this.runtime.csvLineBuffer.toString()));
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    return bluebird_1.default.resolve(res);
 | 
						|
                }
 | 
						|
            });
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            return bluebird_1.default.resolve([]);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.destroy = function () {
 | 
						|
        return bluebird_1.default.resolve();
 | 
						|
    };
 | 
						|
    Object.defineProperty(ProcessorLocal.prototype, "needEmitEol", {
 | 
						|
        get: function () {
 | 
						|
            if (this._needEmitEol === undefined) {
 | 
						|
                this._needEmitEol = this.converter.listeners("eol").length > 0;
 | 
						|
            }
 | 
						|
            return this._needEmitEol;
 | 
						|
        },
 | 
						|
        enumerable: true,
 | 
						|
        configurable: true
 | 
						|
    });
 | 
						|
    Object.defineProperty(ProcessorLocal.prototype, "needEmitHead", {
 | 
						|
        get: function () {
 | 
						|
            if (this._needEmitHead === undefined) {
 | 
						|
                this._needEmitHead = this.converter.listeners("header").length > 0;
 | 
						|
            }
 | 
						|
            return this._needEmitHead;
 | 
						|
        },
 | 
						|
        enumerable: true,
 | 
						|
        configurable: true
 | 
						|
    });
 | 
						|
    ProcessorLocal.prototype.process = function (chunk, finalChunk) {
 | 
						|
        var _this = this;
 | 
						|
        if (finalChunk === void 0) { finalChunk = false; }
 | 
						|
        var csvString;
 | 
						|
        if (finalChunk) {
 | 
						|
            csvString = chunk.toString();
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            csvString = dataClean_1.prepareData(chunk, this.converter.parseRuntime);
 | 
						|
        }
 | 
						|
        return bluebird_1.default.resolve()
 | 
						|
            .then(function () {
 | 
						|
            if (_this.runtime.preRawDataHook) {
 | 
						|
                return _this.runtime.preRawDataHook(csvString);
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                return csvString;
 | 
						|
            }
 | 
						|
        })
 | 
						|
            .then(function (csv) {
 | 
						|
            if (csv && csv.length > 0) {
 | 
						|
                return _this.processCSV(csv, finalChunk);
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                return bluebird_1.default.resolve([]);
 | 
						|
            }
 | 
						|
        });
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.processCSV = function (csv, finalChunk) {
 | 
						|
        var _this = this;
 | 
						|
        var params = this.params;
 | 
						|
        var runtime = this.runtime;
 | 
						|
        if (!runtime.eol) {
 | 
						|
            getEol_1.default(csv, runtime);
 | 
						|
        }
 | 
						|
        if (this.needEmitEol && !this.eolEmitted && runtime.eol) {
 | 
						|
            this.converter.emit("eol", runtime.eol);
 | 
						|
            this.eolEmitted = true;
 | 
						|
        }
 | 
						|
        // trim csv file has initial blank lines.
 | 
						|
        if (params.ignoreEmpty && !runtime.started) {
 | 
						|
            csv = util_1.trimLeft(csv);
 | 
						|
        }
 | 
						|
        var stringToLineResult = fileline_1.stringToLines(csv, runtime);
 | 
						|
        if (!finalChunk) {
 | 
						|
            this.prependLeftBuf(util_1.bufFromString(stringToLineResult.partial));
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            stringToLineResult.lines.push(stringToLineResult.partial);
 | 
						|
            stringToLineResult.partial = "";
 | 
						|
        }
 | 
						|
        if (stringToLineResult.lines.length > 0) {
 | 
						|
            var prom = void 0;
 | 
						|
            if (runtime.preFileLineHook) {
 | 
						|
                prom = this.runPreLineHook(stringToLineResult.lines);
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                prom = bluebird_1.default.resolve(stringToLineResult.lines);
 | 
						|
            }
 | 
						|
            return prom.then(function (lines) {
 | 
						|
                if (!runtime.started
 | 
						|
                    && !_this.runtime.headers) {
 | 
						|
                    return _this.processDataWithHead(lines);
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    return _this.processCSVBody(lines);
 | 
						|
                }
 | 
						|
            });
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            return bluebird_1.default.resolve([]);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.processDataWithHead = function (lines) {
 | 
						|
        if (this.params.noheader) {
 | 
						|
            if (this.params.headers) {
 | 
						|
                this.runtime.headers = this.params.headers;
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                this.runtime.headers = [];
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            var left = "";
 | 
						|
            var headerRow = [];
 | 
						|
            while (lines.length) {
 | 
						|
                var line = left + lines.shift();
 | 
						|
                var row = this.rowSplit.parse(line);
 | 
						|
                if (row.closed) {
 | 
						|
                    headerRow = row.cells;
 | 
						|
                    left = "";
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    left = line + getEol_1.default(line, this.runtime);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            this.prependLeftBuf(util_1.bufFromString(left));
 | 
						|
            if (headerRow.length === 0) {
 | 
						|
                return [];
 | 
						|
            }
 | 
						|
            if (this.params.headers) {
 | 
						|
                this.runtime.headers = this.params.headers;
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                this.runtime.headers = headerRow;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (this.runtime.needProcessIgnoreColumn || this.runtime.needProcessIncludeColumn) {
 | 
						|
            this.filterHeader();
 | 
						|
        }
 | 
						|
        if (this.needEmitHead && !this.headEmitted) {
 | 
						|
            this.converter.emit("header", this.runtime.headers);
 | 
						|
            this.headEmitted = true;
 | 
						|
        }
 | 
						|
        return this.processCSVBody(lines);
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.filterHeader = function () {
 | 
						|
        this.runtime.selectedColumns = [];
 | 
						|
        if (this.runtime.headers) {
 | 
						|
            var headers = this.runtime.headers;
 | 
						|
            for (var i = 0; i < headers.length; i++) {
 | 
						|
                if (this.params.ignoreColumns) {
 | 
						|
                    if (this.params.ignoreColumns.test(headers[i])) {
 | 
						|
                        if (this.params.includeColumns && this.params.includeColumns.test(headers[i])) {
 | 
						|
                            this.runtime.selectedColumns.push(i);
 | 
						|
                        }
 | 
						|
                        else {
 | 
						|
                            continue;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else {
 | 
						|
                        this.runtime.selectedColumns.push(i);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else if (this.params.includeColumns) {
 | 
						|
                    if (this.params.includeColumns.test(headers[i])) {
 | 
						|
                        this.runtime.selectedColumns.push(i);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    this.runtime.selectedColumns.push(i);
 | 
						|
                }
 | 
						|
                // if (this.params.includeColumns && this.params.includeColumns.test(headers[i])){
 | 
						|
                //   this.runtime.selectedColumns.push(i);
 | 
						|
                // }else{
 | 
						|
                //   if (this.params.ignoreColumns && this.params.ignoreColumns.test(headers[i])){
 | 
						|
                //     continue;
 | 
						|
                //   }else{
 | 
						|
                //     if (this.params.ignoreColumns && !this.params.includeColumns){
 | 
						|
                //       this.runtime.selectedColumns.push(i);
 | 
						|
                //     }
 | 
						|
                //   }
 | 
						|
                // }
 | 
						|
            }
 | 
						|
            this.runtime.headers = util_1.filterArray(this.runtime.headers, this.runtime.selectedColumns);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.processCSVBody = function (lines) {
 | 
						|
        if (this.params.output === "line") {
 | 
						|
            return lines;
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            var result = this.rowSplit.parseMultiLines(lines);
 | 
						|
            this.prependLeftBuf(util_1.bufFromString(result.partial));
 | 
						|
            if (this.params.output === "csv") {
 | 
						|
                return result.rowsCells;
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                return lineToJson_1.default(result.rowsCells, this.converter);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        // var jsonArr = linesToJson(lines.lines, params, this.recordNum);
 | 
						|
        // this.processResult(jsonArr);
 | 
						|
        // this.lastIndex += jsonArr.length;
 | 
						|
        // this.recordNum += jsonArr.length;
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.prependLeftBuf = function (buf) {
 | 
						|
        if (buf) {
 | 
						|
            if (this.runtime.csvLineBuffer) {
 | 
						|
                this.runtime.csvLineBuffer = Buffer.concat([buf, this.runtime.csvLineBuffer]);
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                this.runtime.csvLineBuffer = buf;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    };
 | 
						|
    ProcessorLocal.prototype.runPreLineHook = function (lines) {
 | 
						|
        var _this = this;
 | 
						|
        return new bluebird_1.default(function (resolve, reject) {
 | 
						|
            processLineHook(lines, _this.runtime, 0, function (err) {
 | 
						|
                if (err) {
 | 
						|
                    reject(err);
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    resolve(lines);
 | 
						|
                }
 | 
						|
            });
 | 
						|
        });
 | 
						|
    };
 | 
						|
    return ProcessorLocal;
 | 
						|
}(Processor_1.Processor));
 | 
						|
exports.ProcessorLocal = ProcessorLocal;
 | 
						|
function processLineHook(lines, runtime, offset, cb) {
 | 
						|
    if (offset >= lines.length) {
 | 
						|
        cb();
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        if (runtime.preFileLineHook) {
 | 
						|
            var line = lines[offset];
 | 
						|
            var res = runtime.preFileLineHook(line, runtime.parsedLineNumber + offset);
 | 
						|
            offset++;
 | 
						|
            if (res && res.then) {
 | 
						|
                res.then(function (value) {
 | 
						|
                    lines[offset - 1] = value;
 | 
						|
                    processLineHook(lines, runtime, offset, cb);
 | 
						|
                });
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                lines[offset - 1] = res;
 | 
						|
                while (offset < lines.length) {
 | 
						|
                    lines[offset] = runtime.preFileLineHook(lines[offset], runtime.parsedLineNumber + offset);
 | 
						|
                    offset++;
 | 
						|
                }
 | 
						|
                cb();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            cb();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
//# sourceMappingURL=ProcessorLocal.js.map
 |