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
							 |