quicksilver-cli
Version:
Cli tool for Quicksilver
98 lines (97 loc) • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const field_1 = require("../commands/field/field");
function parseItem(arg) {
const splitArgs = arg.split("=");
return {
name: splitArgs[0],
value: splitArgs.length == 1 ? "" : splitArgs.slice(1).join("=")
};
}
function parseArguments(fields, args) {
const fullNameArguments = args.filter(arg => /^-{2}/.test(arg));
const aliasesNameArguments = args.filter(arg => /^-[^-]+/.test(arg));
const indexArguments = args.filter(arg => /^[^-]/.test(arg));
const result = {
allArguments: args,
fullNameArguments: fullNameArguments,
aliasesNameArguments: aliasesNameArguments,
indexArguments: indexArguments,
unrecognizedArguments: []
};
_parseFullNameArgs(result, fullNameArguments, fields);
_parseAliasesNameArgs(result, aliasesNameArguments, fields);
_parseIndexArgs(result, indexArguments, fields);
return result;
}
exports.parseArguments = parseArguments;
function _parseFullNameArgs(result, fullNameArguments, fields) {
for (let arg of fullNameArguments) {
const item = parseItem(arg.substring(2));
const matchFields = fields.filter(field => field.name == item.name);
if (matchFields.length > 0) {
_formatValue(result, matchFields[0], item.value);
}
else {
result.unrecognizedArguments.push(arg);
}
}
}
function _parseAliasesNameArgs(result, aliasesNameArguments, fields) {
for (let arg of aliasesNameArguments) {
const item = parseItem(arg.substring(1));
const matchFields = fields.filter(field => field.aliases && field.aliases.includes(item.name));
if (matchFields.length > 0) {
_formatValue(result, matchFields[0], item.value);
}
else {
result.unrecognizedArguments.push(arg);
}
}
}
function _parseIndexArgs(result, indexArguments, fields) {
for (let i = 0; i < indexArguments.length; i++) {
const arg = indexArguments[i];
const matchFields = fields.filter(field => ("defaultIndex" in field) && field.defaultIndex == i);
if (matchFields.length > 0) {
_formatValue(result, matchFields[0], arg);
}
else {
result.unrecognizedArguments.push(arg);
}
}
}
function _formatValue(result, field, arg) {
let type;
if (field.type == field_1.FieldType.Array) {
type = field.itemType;
}
else {
type = field.type;
}
let value;
if (type == field_1.FieldType.Boolean) {
value = !(/no|false|0/gi.test(arg));
}
else if (type == field_1.FieldType.Number) {
value = Number(arg);
if (isNaN(value)) {
value = 0;
}
}
else {
value = arg;
}
if (field.type == field_1.FieldType.Array) {
let values = result[field.name];
if (values == null) {
result[field.name] = [value];
}
else {
values.push(value);
}
}
else {
result[field.name] = value;
}
}