aboutsummaryrefslogtreecommitdiff
path: root/src/lib/common/util/Arg.ts
blob: ee9aee0240c1ca17364edf9a3bcb7627e8375c52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import { type BushArgumentType, type BushMessage, type BushSlashMessage } from '#lib';
import { Argument, type ArgumentTypeCaster, type Flag, type ParsedValuePredicate } from 'discord-akairo';
import { type Message } from 'discord.js';

export class Arg {
	/**
	 * Casts a phrase to this argument's type.
	 * @param type - The type to cast to.
	 * @param message - Message that called the command.
	 * @param phrase - Phrase to process.
	 */
	public static cast(type: BushArgumentType, message: BushMessage | BushSlashMessage, phrase: string): Promise<any> {
		return Argument.cast(type, client.commandHandler.resolver, message as Message, phrase);
	}

	/**
	 * Creates a type that is the left-to-right composition of the given types.
	 * If any of the types fails, the entire composition fails.
	 * @param types - Types to use.
	 */
	public static compose(...types: BushArgumentType[]): ArgumentTypeCaster {
		return Argument.compose(...types);
	}

	/**
	 * Creates a type that is the left-to-right composition of the given types.
	 * If any of the types fails, the composition still continues with the failure passed on.
	 * @param types - Types to use.
	 */
	public static composeWithFailure(...types: BushArgumentType[]): ArgumentTypeCaster {
		return Argument.composeWithFailure(...types);
	}

	/**
	 * Checks if something is null, undefined, or a fail flag.
	 * @param value - Value to check.
	 */
	public static isFailure(value: any): value is null | undefined | (Flag & { value: any }) {
		return Argument.isFailure(value);
	}

	/**
	 * Creates a type from multiple types (product type).
	 * Only inputs where each type resolves with a non-void value are valid.
	 * @param types - Types to use.
	 */
	public static product(...types: BushArgumentType[]): ArgumentTypeCaster {
		return Argument.product(...types);
	}

	/**
	 * Creates a type where the parsed value must be within a range.
	 * @param type - The type to use.
	 * @param min - Minimum value.
	 * @param max - Maximum value.
	 * @param inclusive - Whether or not to be inclusive on the upper bound.
	 */
	public static range(type: BushArgumentType, min: number, max: number, inclusive?: boolean): ArgumentTypeCaster {
		return Argument.range(type, min, max, inclusive);
	}

	/**
	 * Creates a type that parses as normal but also tags it with some data.
	 * Result is in an object `{ tag, value }` and wrapped in `Flag.fail` when failed.
	 * @param type - The type to use.
	 * @param tag - Tag to add. Defaults to the `type` argument, so useful if it is a string.
	 */
	public static tagged(type: BushArgumentType, tag?: any): ArgumentTypeCaster {
		return Argument.tagged(type, tag);
	}

	/**
	 * Creates a type from multiple types (union type).
	 * The first type that resolves to a non-void value is used.
	 * Each type will also be tagged using `tagged` with themselves.
	 * @param types - Types to use.
	 */
	public static taggedUnion(...types: BushArgumentType[]): ArgumentTypeCaster {
		return Argument.taggedUnion(...types);
	}

	/**
	 * Creates a type that parses as normal but also tags it with some data and carries the original input.
	 * Result is in an object `{ tag, input, value }` and wrapped in `Flag.fail` when failed.
	 * @param type - The type to use.
	 * @param tag - Tag to add. Defaults to the `type` argument, so useful if it is a string.
	 */
	public static taggedWithInput(type: BushArgumentType, tag?: any): ArgumentTypeCaster {
		return Argument.taggedWithInput(type, tag);
	}

	/**
	 * Creates a type from multiple types (union type).
	 * The first type that resolves to a non-void value is used.
	 * @param types - Types to use.
	 */
	public static union(...types: BushArgumentType[]): ArgumentTypeCaster {
		return Argument.union(...types);
	}

	/**
	 * Creates a type with extra validation.
	 * If the predicate is not true, the value is considered invalid.
	 * @param type - The type to use.
	 * @param predicate - The predicate function.
	 */
	public static validate(type: BushArgumentType, predicate: ParsedValuePredicate): ArgumentTypeCaster {
		return Argument.validate(type, predicate);
	}

	/**
	 * Creates a type that parses as normal but also carries the original input.
	 * Result is in an object `{ input, value }` and wrapped in `Flag.fail` when failed.
	 * @param type - The type to use.
	 */
	public static withInput(type: BushArgumentType): ArgumentTypeCaster {
		return Argument.withInput(type);
	}
}