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.
		
		
		
		
		
			
		
			
				
					154 lines
				
				5.6 KiB
			
		
		
			
		
	
	
					154 lines
				
				5.6 KiB
			| 
											3 years ago
										 | "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 Parameters_1 = require("./Parameters"); | ||
|  | var CSVError_1 = __importDefault(require("./CSVError")); | ||
|  | var ProcessorFork = /** @class */ (function (_super) { | ||
|  |     __extends(ProcessorFork, _super); | ||
|  |     function ProcessorFork(converter) { | ||
|  |         var _this = _super.call(this, converter) || this; | ||
|  |         _this.converter = converter; | ||
|  |         _this.inited = false; | ||
|  |         _this.resultBuf = []; | ||
|  |         _this.leftChunk = ""; | ||
|  |         _this.finalChunk = false; | ||
|  |         _this.childProcess = require("child_process").spawn(process.execPath, [__dirname + "/../v2/worker.js"], { | ||
|  |             stdio: ["pipe", "pipe", "pipe", "ipc"] | ||
|  |         }); | ||
|  |         _this.initWorker(); | ||
|  |         return _this; | ||
|  |     } | ||
|  |     ProcessorFork.prototype.flush = function () { | ||
|  |         var _this = this; | ||
|  |         return new bluebird_1.default(function (resolve, reject) { | ||
|  |             // console.log("flush");
 | ||
|  |             _this.finalChunk = true; | ||
|  |             _this.next = resolve; | ||
|  |             _this.childProcess.stdin.end(); | ||
|  |             // this.childProcess.stdout.on("end",()=>{
 | ||
|  |             //   // console.log("!!!!");
 | ||
|  |             //   this.flushResult();
 | ||
|  |             // })
 | ||
|  |         }); | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.destroy = function () { | ||
|  |         this.childProcess.kill(); | ||
|  |         return bluebird_1.default.resolve(); | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.prepareParam = function (param) { | ||
|  |         var clone = Parameters_1.mergeParams(param); | ||
|  |         if (clone.ignoreColumns) { | ||
|  |             clone.ignoreColumns = { | ||
|  |                 source: clone.ignoreColumns.source, | ||
|  |                 flags: clone.ignoreColumns.flags | ||
|  |             }; | ||
|  |         } | ||
|  |         if (clone.includeColumns) { | ||
|  |             clone.includeColumns = { | ||
|  |                 source: clone.includeColumns.source, | ||
|  |                 flags: clone.includeColumns.flags | ||
|  |             }; | ||
|  |         } | ||
|  |         return clone; | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.initWorker = function () { | ||
|  |         var _this = this; | ||
|  |         this.childProcess.on("exit", function () { | ||
|  |             _this.flushResult(); | ||
|  |         }); | ||
|  |         this.childProcess.send({ | ||
|  |             cmd: "init", | ||
|  |             params: this.prepareParam(this.converter.parseParam) | ||
|  |         }); | ||
|  |         this.childProcess.on("message", function (msg) { | ||
|  |             if (msg.cmd === "inited") { | ||
|  |                 _this.inited = true; | ||
|  |             } | ||
|  |             else if (msg.cmd === "eol") { | ||
|  |                 if (_this.converter.listeners("eol").length > 0) { | ||
|  |                     _this.converter.emit("eol", msg.value); | ||
|  |                 } | ||
|  |             } | ||
|  |             else if (msg.cmd === "header") { | ||
|  |                 if (_this.converter.listeners("header").length > 0) { | ||
|  |                     _this.converter.emit("header", msg.value); | ||
|  |                 } | ||
|  |             } | ||
|  |             else if (msg.cmd === "done") { | ||
|  |                 // this.flushResult();
 | ||
|  |             } | ||
|  |         }); | ||
|  |         this.childProcess.stdout.on("data", function (data) { | ||
|  |             // console.log("stdout", data.toString());
 | ||
|  |             var res = data.toString(); | ||
|  |             // console.log(res);
 | ||
|  |             _this.appendBuf(res); | ||
|  |         }); | ||
|  |         this.childProcess.stderr.on("data", function (data) { | ||
|  |             // console.log("stderr", data.toString());
 | ||
|  |             _this.converter.emit("error", CSVError_1.default.fromJSON(JSON.parse(data.toString()))); | ||
|  |         }); | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.flushResult = function () { | ||
|  |         // console.log("flush result", this.resultBuf.length);
 | ||
|  |         if (this.next) { | ||
|  |             this.next(this.resultBuf); | ||
|  |         } | ||
|  |         this.resultBuf = []; | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.appendBuf = function (data) { | ||
|  |         var res = this.leftChunk + data; | ||
|  |         var list = res.split("\n"); | ||
|  |         var counter = 0; | ||
|  |         var lastBit = list[list.length - 1]; | ||
|  |         if (lastBit !== "") { | ||
|  |             this.leftChunk = list.pop() || ""; | ||
|  |         } | ||
|  |         else { | ||
|  |             this.leftChunk = ""; | ||
|  |         } | ||
|  |         this.resultBuf = this.resultBuf.concat(list); | ||
|  |         // while (list.length) {
 | ||
|  |         //   let item = list.shift() || "";
 | ||
|  |         //   if (item.length === 0 ) {
 | ||
|  |         //     continue;
 | ||
|  |         //   }
 | ||
|  |         //   // if (this.params.output !== "line") {
 | ||
|  |         //   //     item = JSON.parse(item);
 | ||
|  |         //   // }
 | ||
|  |         //   this.resultBuf.push(item);
 | ||
|  |         //   counter++;
 | ||
|  |         // }
 | ||
|  |         // console.log("buf length",this.resultBuf.length);
 | ||
|  |     }; | ||
|  |     ProcessorFork.prototype.process = function (chunk) { | ||
|  |         var _this = this; | ||
|  |         return new bluebird_1.default(function (resolve, reject) { | ||
|  |             // console.log("chunk", chunk.length);
 | ||
|  |             _this.next = resolve; | ||
|  |             // this.appendReadBuf(chunk);
 | ||
|  |             _this.childProcess.stdin.write(chunk, function () { | ||
|  |                 // console.log("chunk callback");
 | ||
|  |                 _this.flushResult(); | ||
|  |             }); | ||
|  |         }); | ||
|  |     }; | ||
|  |     return ProcessorFork; | ||
|  | }(Processor_1.Processor)); | ||
|  | exports.ProcessorFork = ProcessorFork; | ||
|  | exports.EOM = "\x03"; | ||
|  | //# sourceMappingURL=ProcessFork.js.map
 |