UNPKG

quicksilver-cli

Version:
98 lines (97 loc) 3.24 kB
"use strict"; 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; } }