78 lines
1.6 KiB
TypeScript
78 lines
1.6 KiB
TypeScript
|
import ICommandOption, { Choice, CommandOptionDefinition, DependsOnMode, OptionType, ParseResult } from "../interfaces/CommandOption";
|
||
|
|
||
|
class CommandOption implements ICommandOption {
|
||
|
|
||
|
name: string;
|
||
|
|
||
|
aliases: string[];
|
||
|
|
||
|
options: ICommandOption[];
|
||
|
|
||
|
type: OptionType;
|
||
|
|
||
|
minimum?: number;
|
||
|
|
||
|
maximum?: number;
|
||
|
|
||
|
flag: boolean;
|
||
|
|
||
|
valueOptional: boolean;
|
||
|
|
||
|
defaultValue: boolean | number | string | null;
|
||
|
|
||
|
valueAsAlias: boolean;
|
||
|
|
||
|
choices: Choice[];
|
||
|
|
||
|
dependsOn: string[];
|
||
|
|
||
|
dependsOnMode: DependsOnMode;
|
||
|
|
||
|
required: boolean;
|
||
|
|
||
|
rawValue?: string[];
|
||
|
|
||
|
value?: unknown;
|
||
|
|
||
|
aliased = false;
|
||
|
|
||
|
constructor(def: CommandOptionDefinition|ICommandOption) {
|
||
|
|
||
|
this.name = def.name;
|
||
|
this.aliases = def.aliases || [];
|
||
|
|
||
|
this.options = def.options || [];
|
||
|
this.choices = def.choices || [];
|
||
|
|
||
|
this.type = def.type || OptionType.STRING;
|
||
|
this.flag = def.flag || false;
|
||
|
|
||
|
this.valueOptional = def.valueOptional || false;
|
||
|
this.defaultValue = def.defaultValue ?? null;
|
||
|
this.valueAsAlias = def.valueAsAlias || false;
|
||
|
|
||
|
this.dependsOn = def.dependsOn || [];
|
||
|
this.dependsOnMode = def.dependsOnMode || 'AND';
|
||
|
|
||
|
this.required = def.required || false;
|
||
|
|
||
|
}
|
||
|
|
||
|
clone(rawValue?: string[]): ICommandOption {
|
||
|
const opt = new CommandOption(this);
|
||
|
opt.rawValue = rawValue;
|
||
|
return opt;
|
||
|
}
|
||
|
|
||
|
parse(): ParseResult {
|
||
|
return { error: false, removed: [] };
|
||
|
}
|
||
|
|
||
|
get plural(): boolean {
|
||
|
return this.type.toString().endsWith('S');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export { CommandOption };
|
||
|
export default CommandOption;
|