120 lines
No EOL
3.9 KiB
JavaScript
120 lines
No EOL
3.9 KiB
JavaScript
module.exports = (input) => {
|
|
if (typeof input === "string") input = input.split(/\s+/g);
|
|
const args = { _: [] };
|
|
let curr = null;
|
|
let concated = "";
|
|
for (let i = 0; i < input.length; i++) {
|
|
const a = input[i];
|
|
if (a.startsWith("--") && !curr) {
|
|
if (a.includes("=")) {
|
|
const [arg, value] = a.slice(2).split("=");
|
|
let ended = true;
|
|
if (value.startsWith("\"")) {
|
|
if (value.endsWith("\"")) {
|
|
args[arg] = value.slice(1).slice(0, -1);
|
|
} else {
|
|
args[arg] = `${value.slice(1)} `;
|
|
ended = false;
|
|
}
|
|
} else if (value.endsWith("\"")) {
|
|
args[arg] += a.slice(0, -1);
|
|
} else if (value !== "") {
|
|
args[arg] = value;
|
|
} else {
|
|
args[arg] = true;
|
|
}
|
|
if (args[arg] === "true") {
|
|
args[arg] = true;
|
|
} else if (args[arg] === "false") {
|
|
args[arg] = false;
|
|
}
|
|
if (!ended) curr = arg;
|
|
} else {
|
|
args[a.slice(2)] = true;
|
|
}
|
|
} else if (curr) {
|
|
if (a.endsWith("\"")) {
|
|
args[curr] += a.slice(0, -1);
|
|
curr = null;
|
|
} else {
|
|
args[curr] += `${a} `;
|
|
}
|
|
} else if (a.startsWith("\"")) {
|
|
if (a.endsWith("\"")) {
|
|
args.push(a.slice(1).slice(0, -1));
|
|
} else {
|
|
concated += `${a.slice(1)} `;
|
|
}
|
|
} else if (a.endsWith("\"")) {
|
|
concated += a.slice(0, -1);
|
|
args._.push(concated);
|
|
concated = "";
|
|
} else {
|
|
if (concated !== "") {
|
|
concated += `${a} `;
|
|
} else {
|
|
args._.push(a);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (curr && args[curr] == "") {
|
|
args[curr] = true;
|
|
}
|
|
|
|
return args;
|
|
};
|
|
|
|
// /*
|
|
// Format:
|
|
// [{name: "verbose", type: "bool"}, {name: "username", type: "string"}]
|
|
// */
|
|
// module.exports = (input, format) => {
|
|
// let results = {};
|
|
// let text = input.split(' ').slice(1).join(' ');
|
|
// format.forEach(element => {
|
|
// if(element.pos !== undefined) return;
|
|
// switch (element.type) {
|
|
// case "bool":
|
|
// res = text.match(`--${element.name}[ |=](.*?)($| )`);
|
|
// if(res) {
|
|
// text = text.replace(res[0], "");
|
|
// results[element.name] = (res[1].toLowerCase() == "true");
|
|
// } else {
|
|
// res = text.match(`--${element.name}`);
|
|
// if(res) text = text.replace(res[0], "");
|
|
// results[element.name] = (res != null);
|
|
// }
|
|
// break;
|
|
// case "string":
|
|
// res = text.match(`--${element.name}[ |=](.*?)($| )`);
|
|
// if(res) text = text.replace(res[0], "");
|
|
// results[element.name] = (res ? res[1].replace('\\','') : null);
|
|
// break;
|
|
// case "int":
|
|
// res = text.match(`--${element.name}[ |=](.*?)($| )`);
|
|
// if(res) text = text.replace(res[0], "");
|
|
// results[element.name] = (res ? parseInt(res[1]) : null);
|
|
// break;
|
|
// case "float":
|
|
// res = text.match(`--${element.name}[ |=](.*?)($| )`);
|
|
// if(res) text = text.replace(res[0], "");
|
|
// results[element.name] = (res ? parseFloat(res[1]) : null);
|
|
// break;
|
|
// default:
|
|
// throw Error("unknown type");
|
|
// break;
|
|
// }
|
|
// });
|
|
// let s = text.split(' ');
|
|
// results._ = text;
|
|
// format.forEach(element => {
|
|
// if(element.pos === undefined) return;
|
|
// if(element.pos <= s.length) {
|
|
// results[element.name] = s[element.pos];
|
|
// } else {
|
|
// results[element.name] = null;
|
|
// }
|
|
// })
|
|
// return results;
|
|
// }
|