frontend/.pnpm-store/v3/files/4b/6b45e755ccdbe9399c8939a6f894a5f869dadd233591d83e221774af1223eb4669e3abf52cb24138335d51e55d948af9f14f0ad7878aed3a80ec5a33b38996

85 lines
2.1 KiB
Plaintext

var param = null;
var fileLine = require("./fileline");
var csvline = require("./csvline");
var linesToJson = require("./linesToJson");
var CSVError = require('./CSVError');
var eom = "\x03";
var eom1 = "\x0e";
var eom2 = "\x0f";
/**
* message is like :
* 0{"a":"b"}
* 13345|a,b,c
* <cmd><data>
* <cmd> is 0-9
*/
var buffer="";
process.stdin.on("data", function(d) {
var str = d.toString("utf8");
var all = buffer + str;
var cmdArr = all.split(eom);
while (cmdArr.length > 1) {
processMsg(cmdArr.shift());
}
buffer = cmdArr[0];
});
process.on("message", processMsg);
function processMsg(msg) {
if (msg) {
var cmd = msg[0];
var data = msg.substr(1);
switch (cmd) {
case "0":
initParams(data);
break;
case "1":
processData(data);
break;
default:
console.error("Unknown command: " + msg);
}
}
}
function initParams(data) {
param = JSON.parse(data);
}
/**
* e.g.
* 1023|a,b,c,d\ne,f,g,h\n
* <start line number>|<raw csv data>
*/
function processData(data) {
if (!param){
console.error("Parameter not initialised when processing data.");
process.exit(1);
}
var sepIdx = data.indexOf("|");
var startIdx = parseInt(data.substr(0, sepIdx));
var csvData = data.substr(sepIdx + 1);
var lines = fileLine(csvData,param); //convert to file lines.
// process.send("0"+lines.lines.length+"|"+lines.partial);
var csvLines = csvline(lines.lines,param);
var res = linesToJson(csvLines.lines,param,startIdx);
if (csvLines.partial) {
var lastIdx = res.length > 0 ? res[res.length - 1].index + 1 : startIdx;
res.push({
err:CSVError.unclosed_quote(lastIdx, csvLines.partial)
});
}
// console.error(res)
//1<line num>|^<row>|^err|^data|&<line num>|^<row>|^err|^data
var str="1";
res.forEach(function(item) {
var errStr = item.err ? item.err.toString() : "";
str += item.index + eom2 + JSON.stringify(item.row) + eom2 + errStr + eom2 + JSON.stringify(item.json) + eom1;
});
sendData(str);
}
function sendData(str) {
process.stdout.write(str + eom);
}