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
						
					
					
				| "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
 |