UNPKG

discord-bot-cli

Version:

An easy way to build a command-based discord bot with discord.js.

67 lines (66 loc) 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseFlags = void 0; const parseValue_1 = require("./parseValue"); const CommandResult_1 = require("../../models/CommandResult"); const CommandResultError_1 = require("../../models/errors/CommandResultError"); /** @internal */ function parseFlags(message, inputArguments, flagDefinitions, shortcuts) { const args = [...inputArguments]; const flagValues = new Map(Array.from(flagDefinitions.entries()).map(([k, v]) => [k, v.defaultValue])); function parse(index, flagName, flagValue, dontUseNextArg) { const flag = flagDefinitions.get(flagName); if (!flag) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagUnknown(flagName)); if (flagValue) { const parsed = parseValue_1.parseValue(flag, message, flagValue); if (parsed.value === undefined) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagInvalid(flag, flagValue), parsed.message); flagValues.set(flagName, parsed.value); args.splice(index, 1); } else { if (flag.type === "boolean") { flagValues.set(flagName, true); args.splice(index, 1); } else { if (dontUseNextArg || index + 1 >= args.length) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagInvalid(flag, "")); const parsed = parseValue_1.parseValue(flag, message, args[index + 1]); if (parsed.value === undefined) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagInvalid(flag, args[index + 1]), parsed.message); flagValues.set(flagName, parsed.value); args.splice(index, 2); } } } for (let i = 0; i < args.length; i++) { const f = args[i]; if (f.match(/^--[^-].*$/)) { const parts = f.substring(2).split("="); parse(i, parts[0], parts.length > 1 ? parts[1] : undefined); } else if (f.match(/^-[a-zA-Z](=.+)?$/)) { const parts = f.substring(1).split("="); const flagName = shortcuts === null || shortcuts === void 0 ? void 0 : shortcuts.get(parts[0]); if (!flagName) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagUnknown(parts[0])); parse(i, flagName, parts.length > 1 ? parts[1] : undefined); } else if (f.match(/^-[a-zA-Z]{2,}$/)) { const flags = f.substring(1).split(""); for (let j = 0; j < flags.length; j++) { const flagName = shortcuts === null || shortcuts === void 0 ? void 0 : shortcuts.get(flags[j]); if (!flagName) throw new CommandResultError_1.CommandResultError(CommandResult_1.CommandResultUtils.failParseFlagUnknown(flags[j])); parse(i, flagName, undefined, j != flags.length - 1); } } else continue; i--; } return { args, flagValues }; } exports.parseFlags = parseFlags;