154 lines
5.6 KiB
JavaScript
154 lines
5.6 KiB
JavaScript
|
"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
|