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
 |