Initial commit
This commit is contained in:
180
themes/keepit/node_modules/csvtojson/bin/csvtojson.js
generated
vendored
Normal file
180
themes/keepit/node_modules/csvtojson/bin/csvtojson.js
generated
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
function csvtojson() {
|
||||
var Converter = require("../v2").Converter;
|
||||
var fs = require("fs");
|
||||
var options = require("./options.json");
|
||||
var cmds = options.commands;
|
||||
var opts = options.options;
|
||||
var exps = options.examples;
|
||||
var pkg = require("../package.json");
|
||||
var os = require("os");
|
||||
/**
|
||||
*{
|
||||
"cmd": "parse", command to run
|
||||
"options": {}, options to passe to the command
|
||||
"inputStream": process.stdin // input stream for the command. default is stdin. can be a file read stream.
|
||||
};
|
||||
*
|
||||
*/
|
||||
var parsedCmd;
|
||||
|
||||
function _showHelp(errno) {
|
||||
var key;
|
||||
errno = typeof errno === "number" ? errno : 0;
|
||||
console.log("csvtojson: Convert csv to JSON format");
|
||||
console.log("version:", pkg.version);
|
||||
console.log("Usage: csvtojson [<command>] [<options>] filepath\n");
|
||||
console.log("Commands: ");
|
||||
for (key in cmds) {
|
||||
if (cmds.hasOwnProperty(key)) {
|
||||
console.log("\t%s: %s", key, cmds[key]);
|
||||
}
|
||||
}
|
||||
console.log("Options: ");
|
||||
for (key in opts) {
|
||||
if (opts.hasOwnProperty(key)) {
|
||||
console.log("\t%s: %s", key, opts[key].desc);
|
||||
}
|
||||
}
|
||||
console.log("Examples: ");
|
||||
for (var i = 0; i < exps.length; i++) {
|
||||
console.log("\t%s", exps[i]);
|
||||
}
|
||||
process.exit(errno);
|
||||
}
|
||||
function stringToRegExp(str) {
|
||||
var lastSlash = str.lastIndexOf("/");
|
||||
var source = str.substring(1, lastSlash);
|
||||
var flag = str.substring(lastSlash + 1);
|
||||
return new RegExp(source,flag);
|
||||
}
|
||||
function parse() {
|
||||
var is = parsedCmd.inputStream;
|
||||
if (parsedCmd.options.maxRowLength === undefined) {
|
||||
parsedCmd.options.maxRowLength = 10240;
|
||||
}
|
||||
if (is === process.stdin && is.isTTY) {
|
||||
console.log("Please specify csv file path or pipe the csv data through.\n");
|
||||
_showHelp(1);
|
||||
}
|
||||
if (parsedCmd.options.delimiter === "\\t") {
|
||||
parsedCmd.options.delimiter = "\t";
|
||||
}
|
||||
if (parsedCmd.options.ignoreColumns) {
|
||||
parsedCmd.options.ignoreColumns=stringToRegExp(parsedCmd.options.ignoreColumns);
|
||||
|
||||
}
|
||||
if (parsedCmd.options.includeColumns) {
|
||||
parsedCmd.options.includeColumns=stringToRegExp(parsedCmd.options.includeColumns);
|
||||
|
||||
}
|
||||
var conv = new Converter(parsedCmd.options);
|
||||
var isFirst = true;
|
||||
conv.on("error", function (err, pos) {
|
||||
if (!parsedCmd.options.quiet) {
|
||||
console.error("csvtojson got an error: ", err);
|
||||
if (pos) {
|
||||
console.error("The error happens at following line: ");
|
||||
console.log(pos);
|
||||
}
|
||||
}
|
||||
process.exit(1);
|
||||
})
|
||||
.on("data",function (dataStr) {
|
||||
process.stdout.write((isFirst ? "" : "," + os.EOL) + dataStr.toString().substr(0,dataStr.length-1));
|
||||
isFirst = false;
|
||||
})
|
||||
.on("done", function () {
|
||||
console.log(os.EOL + "]");
|
||||
})
|
||||
console.log("[");
|
||||
is.pipe(conv);
|
||||
// is.pipe(conv);
|
||||
}
|
||||
|
||||
function run(cmd, options) {
|
||||
if (cmd === "parse") {
|
||||
parse();
|
||||
} else if (cmd === "version") {
|
||||
console.log(pkg.version);
|
||||
} else {
|
||||
console.log("unknown command %s.", cmd);
|
||||
_showHelp(1);
|
||||
}
|
||||
}
|
||||
|
||||
function commandParser() {
|
||||
var parsedCmd = {
|
||||
"cmd": "parse",
|
||||
"options": {},
|
||||
"inputStream": process.stdin
|
||||
};
|
||||
|
||||
function parseObject(val, optional) {
|
||||
try {
|
||||
return JSON.parse(val);
|
||||
} catch (e) {
|
||||
if (optional) {
|
||||
return val;
|
||||
} else {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function parseBool(str, optName) {
|
||||
str = str.toLowerCase();
|
||||
if (str === "true" || str === "y") {
|
||||
return true;
|
||||
} else if (str === "false" || str === "n") {
|
||||
return false;
|
||||
}
|
||||
console.log("Unknown boolean value %s for parameter %s.", str, optName);
|
||||
_showHelp(1);
|
||||
}
|
||||
process.argv.slice(2).forEach(function (item) {
|
||||
if (item.indexOf("--") > -1) {
|
||||
var itemArr = item.split("=");
|
||||
var optName = itemArr[0];
|
||||
var key, val, type;
|
||||
if (!opts[optName]) {
|
||||
console.log("Option %s not supported.", optName);
|
||||
_showHelp(1);
|
||||
}
|
||||
key = optName.replace('--', '');
|
||||
val = itemArr[1] || '';
|
||||
type = opts[optName].type;
|
||||
if (type === "string") {
|
||||
parsedCmd.options[key] = val.toString();
|
||||
} else if (type === "boolean") {
|
||||
parsedCmd.options[key] = parseBool(val, optName);
|
||||
} else if (type === "number") {
|
||||
parsedCmd.options[key] = parseFloat(val);
|
||||
} else if (type === "object") {
|
||||
parsedCmd.options[key] = parseObject(val, false);
|
||||
} else if (type === "~object") {
|
||||
parsedCmd.options[key] = parseObject(val, true);
|
||||
} else {
|
||||
throw ({
|
||||
name: "UnimplementedException",
|
||||
message: "Option type parsing not implemented. See bin/options.json"
|
||||
});
|
||||
}
|
||||
} else if (cmds[item]) {
|
||||
parsedCmd.cmd = item;
|
||||
} else if (fs.existsSync(item)) {
|
||||
parsedCmd.inputStream = fs.createReadStream(item);
|
||||
} else {
|
||||
console.log("unknown parameter %s.", item);
|
||||
}
|
||||
});
|
||||
return parsedCmd;
|
||||
}
|
||||
process.stdin.setEncoding('utf8');
|
||||
parsedCmd = commandParser();
|
||||
run(parsedCmd.cmd, parsedCmd.options);
|
||||
}
|
||||
module.exports = csvtojson;
|
||||
if (!module.parent) {
|
||||
csvtojson();
|
||||
}
|
||||
Reference in New Issue
Block a user