@wq2/brigadier-ts 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/Command.d.ts +1 -1
- package/dist/CommandDispatcher.d.ts +1 -1
- package/dist/CommandDispatcher.js +231 -357
- package/dist/ParseResults.d.ts +1 -1
- package/dist/ParseResults.js +9 -10
- package/dist/StringReader.d.ts +1 -1
- package/dist/StringReader.js +75 -77
- package/dist/arguments/ArgumentType.d.ts +1 -1
- package/dist/arguments/ArgumentType.js +9 -8
- package/dist/arguments/BoolArgumentType.d.ts +5 -1
- package/dist/arguments/BoolArgumentType.js +9 -27
- package/dist/arguments/FloatArgumentType.d.ts +1 -1
- package/dist/arguments/FloatArgumentType.js +11 -30
- package/dist/arguments/IntegerArgumentType.d.ts +1 -1
- package/dist/arguments/IntegerArgumentType.js +11 -30
- package/dist/arguments/LongArgumentType.d.ts +3 -3
- package/dist/arguments/LongArgumentType.js +13 -32
- package/dist/arguments/NumberArgumentType.d.ts +2 -2
- package/dist/arguments/NumberArgumentType.js +15 -33
- package/dist/arguments/StringArgumentType.d.ts +1 -1
- package/dist/arguments/StringArgumentType.js +11 -29
- package/dist/builder/ArgumentBuilder.d.ts +1 -1
- package/dist/builder/ArgumentBuilder.js +31 -71
- package/dist/builder/LiteralArgumentBuilder.js +14 -33
- package/dist/builder/RequiredArgumentBuilder.d.ts +1 -1
- package/dist/builder/RequiredArgumentBuilder.js +18 -37
- package/dist/context/CommandContext.d.ts +1 -1
- package/dist/context/CommandContext.js +31 -32
- package/dist/context/CommandContextBuilder.d.ts +1 -1
- package/dist/context/CommandContextBuilder.js +47 -50
- package/dist/context/ParsedArgument.js +8 -9
- package/dist/context/ParsedCommandNode.d.ts +1 -1
- package/dist/context/ParsedCommandNode.js +7 -8
- package/dist/context/StringRange.js +17 -18
- package/dist/context/SuggestionContext.d.ts +1 -1
- package/dist/context/SuggestionContext.js +3 -4
- package/dist/exceptions/CommandErrorType.d.ts +3 -3
- package/dist/exceptions/CommandErrorType.js +10 -19
- package/dist/exceptions/CommandSyntaxError.js +36 -54
- package/dist/suggestion/Suggestion.d.ts +1 -1
- package/dist/suggestion/Suggestion.js +16 -17
- package/dist/suggestion/Suggestions.d.ts +1 -1
- package/dist/suggestion/Suggestions.js +28 -30
- package/dist/suggestion/SuggestionsBuilder.d.ts +1 -1
- package/dist/suggestion/SuggestionsBuilder.js +22 -23
- package/dist/tree/ArgumentCommandNode.d.ts +1 -1
- package/dist/tree/ArgumentCommandNode.js +22 -40
- package/dist/tree/CommandNode.d.ts +1 -1
- package/dist/tree/CommandNode.js +28 -29
- package/dist/tree/LiteralCommandNode.d.ts +1 -1
- package/dist/tree/LiteralCommandNode.js +28 -41
- package/dist/tree/RootCommandNode.d.ts +1 -1
- package/dist/tree/RootCommandNode.js +17 -69
- package/jest.config.js +5 -5
- package/package.json +32 -32
- package/src/Command.ts +2 -1
- package/src/CommandDispatcher.ts +397 -295
- package/src/ParseResults.ts +26 -22
- package/src/StringReader.ts +212 -193
- package/src/arguments/ArgumentType.ts +13 -8
- package/src/arguments/BoolArgumentType.ts +22 -21
- package/src/arguments/FloatArgumentType.ts +13 -14
- package/src/arguments/IntegerArgumentType.ts +13 -14
- package/src/arguments/LongArgumentType.ts +16 -17
- package/src/arguments/NumberArgumentType.ts +48 -38
- package/src/arguments/StringArgumentType.ts +26 -26
- package/src/builder/ArgumentBuilder.ts +80 -75
- package/src/builder/LiteralArgumentBuilder.ts +31 -21
- package/src/builder/RequiredArgumentBuilder.ts +42 -32
- package/src/context/CommandContext.ts +99 -76
- package/src/context/CommandContextBuilder.ts +169 -143
- package/src/context/ParsedArgument.ts +13 -13
- package/src/context/ParsedCommandNode.ts +14 -14
- package/src/context/StringRange.ts +26 -26
- package/src/context/SuggestionContext.ts +7 -7
- package/src/exceptions/CommandErrorType.ts +20 -13
- package/src/exceptions/CommandSyntaxError.ts +78 -37
- package/src/index.ts +30 -30
- package/src/suggestion/Suggestion.ts +46 -46
- package/src/suggestion/Suggestions.ts +59 -57
- package/src/suggestion/SuggestionsBuilder.ts +59 -57
- package/src/tree/ArgumentCommandNode.ts +51 -40
- package/src/tree/CommandNode.ts +96 -87
- package/src/tree/LiteralCommandNode.ts +78 -57
- package/src/tree/RootCommandNode.ts +33 -23
- package/test/Arguments.test.ts +47 -33
- package/test/CommandDispatcher.test.ts +18 -22
- package/test/StringReader.test.ts +47 -47
- package/tsconfig.json +9 -14
package/src/ParseResults.ts
CHANGED
|
@@ -1,30 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type {
|
|
2
|
+
CommandContextBuilder,
|
|
3
|
+
StringReader,
|
|
4
|
+
CommandNode,
|
|
5
|
+
CommandSyntaxError,
|
|
6
6
|
} from ".";
|
|
7
7
|
|
|
8
8
|
export class ParseResults<S> {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
private context: CommandContextBuilder<S>;
|
|
10
|
+
private reader: StringReader;
|
|
11
|
+
private errors: Map<CommandNode<S>, CommandSyntaxError>;
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
constructor(
|
|
14
|
+
context: CommandContextBuilder<S>,
|
|
15
|
+
reader: StringReader,
|
|
16
|
+
errors: Map<CommandNode<S>, CommandSyntaxError>,
|
|
17
|
+
) {
|
|
18
|
+
this.context = context;
|
|
19
|
+
this.reader = reader;
|
|
20
|
+
this.errors = errors;
|
|
21
|
+
}
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
getContext(): CommandContextBuilder<S> {
|
|
24
|
+
return this.context;
|
|
25
|
+
}
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
getReader(): StringReader {
|
|
28
|
+
return this.reader;
|
|
29
|
+
}
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
getErrors(): Map<CommandNode<S>, CommandSyntaxError> {
|
|
32
|
+
return this.errors;
|
|
33
|
+
}
|
|
30
34
|
}
|
package/src/StringReader.ts
CHANGED
|
@@ -1,197 +1,216 @@
|
|
|
1
1
|
import { CommandSyntaxError } from "./exceptions/CommandSyntaxError";
|
|
2
2
|
|
|
3
3
|
export class StringReader {
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
4
|
+
private string: string;
|
|
5
|
+
private cursor: number;
|
|
6
|
+
|
|
7
|
+
constructor(string: string | StringReader) {
|
|
8
|
+
if (string instanceof StringReader) {
|
|
9
|
+
this.string = string.getString();
|
|
10
|
+
this.cursor = string.getCursor();
|
|
11
|
+
} else {
|
|
12
|
+
this.string = string;
|
|
13
|
+
this.cursor = 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getString(): string {
|
|
18
|
+
return this.string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getCursor(): number {
|
|
22
|
+
return this.cursor;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setCursor(cursor: number): void {
|
|
26
|
+
this.cursor = cursor;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getRemainingLength(): number {
|
|
30
|
+
return this.string.length - this.cursor;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getTotalLength(): number {
|
|
34
|
+
return this.string.length;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
getRead(): string {
|
|
38
|
+
return this.string.substring(0, this.cursor);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getRemaining(): string {
|
|
42
|
+
return this.string.substring(this.cursor);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
canRead(length = 1): boolean {
|
|
46
|
+
return this.cursor + length <= this.string.length;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
peek(offset = 0): string {
|
|
50
|
+
return this.string.charAt(this.cursor + offset);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
read(): string {
|
|
54
|
+
const char = this.string.charAt(this.cursor);
|
|
55
|
+
this.cursor += 1;
|
|
56
|
+
return char;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
skip(): void {
|
|
60
|
+
this.cursor += 1;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
isAllowedNumber(c: string): boolean {
|
|
64
|
+
return (c >= "0" && c <= "9") || c === "." || c === "-";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
readInt(): number {
|
|
68
|
+
const start = this.cursor;
|
|
69
|
+
while (this.canRead() && this.isAllowedNumber(this.peek())) {
|
|
70
|
+
this.skip();
|
|
71
|
+
}
|
|
72
|
+
const number = this.string.substring(start, this.cursor);
|
|
73
|
+
if (number.length === 0) {
|
|
74
|
+
throw CommandSyntaxError.READER_EXPECTED_INT.createWithContext(this);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const value = Number(number);
|
|
78
|
+
if (Number.isNaN(value) || !Number.isInteger(value)) {
|
|
79
|
+
throw new Error();
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
} catch (_) {
|
|
83
|
+
this.cursor = start;
|
|
84
|
+
throw CommandSyntaxError.READER_INVALID_INT.createWithContext(
|
|
85
|
+
this,
|
|
86
|
+
number,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
readLong(): bigint {
|
|
92
|
+
const start = this.cursor;
|
|
93
|
+
while (this.canRead() && this.isAllowedNumber(this.peek())) {
|
|
94
|
+
this.skip();
|
|
95
|
+
}
|
|
96
|
+
const number = this.string.substring(start, this.cursor);
|
|
97
|
+
if (number.length === 0) {
|
|
98
|
+
throw CommandSyntaxError.READER_EXPECTED_INT.createWithContext(this);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return BigInt(number);
|
|
102
|
+
} catch (_) {
|
|
103
|
+
this.cursor = start;
|
|
104
|
+
throw CommandSyntaxError.READER_INVALID_INT.createWithContext(
|
|
105
|
+
this,
|
|
106
|
+
number,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
readFloat(): number {
|
|
112
|
+
const start = this.cursor;
|
|
113
|
+
while (this.canRead() && this.isAllowedNumber(this.peek())) {
|
|
114
|
+
this.skip();
|
|
115
|
+
}
|
|
116
|
+
const number = this.string.substring(start, this.cursor);
|
|
117
|
+
if (number.length === 0) {
|
|
118
|
+
throw CommandSyntaxError.READER_EXPECTED_FLOAT.createWithContext(this);
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const value = Number(number);
|
|
122
|
+
if (Number.isNaN(value)) {
|
|
123
|
+
throw new Error();
|
|
124
|
+
}
|
|
125
|
+
return value;
|
|
126
|
+
} catch (_e) {
|
|
127
|
+
this.cursor = start;
|
|
128
|
+
throw CommandSyntaxError.READER_INVALID_FLOAT.createWithContext(
|
|
129
|
+
this,
|
|
130
|
+
number,
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
isAllowedInUnquotedString(c: string): boolean {
|
|
136
|
+
return (
|
|
137
|
+
(c >= "0" && c <= "9") ||
|
|
138
|
+
(c >= "A" && c <= "Z") ||
|
|
139
|
+
(c >= "a" && c <= "z") ||
|
|
140
|
+
c === "_" ||
|
|
141
|
+
c === "-" ||
|
|
142
|
+
c === "." ||
|
|
143
|
+
c === "+"
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
isQuotedStringStart(c: string): boolean {
|
|
148
|
+
return c === "'" || c === '"';
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
readUnquotedString(): string {
|
|
152
|
+
const start = this.cursor;
|
|
153
|
+
while (this.canRead() && this.isAllowedInUnquotedString(this.peek())) {
|
|
154
|
+
this.skip();
|
|
155
|
+
}
|
|
156
|
+
return this.string.substring(start, this.cursor);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
readStringUntil(terminator: string): string {
|
|
160
|
+
const result = [];
|
|
161
|
+
let escaped = false;
|
|
162
|
+
while (this.canRead()) {
|
|
163
|
+
const c = this.read();
|
|
164
|
+
if (escaped) {
|
|
165
|
+
if (c === terminator || c === "\\") {
|
|
166
|
+
result.push(c);
|
|
167
|
+
escaped = false;
|
|
168
|
+
} else {
|
|
169
|
+
this.setCursor(this.cursor - 1);
|
|
170
|
+
throw CommandSyntaxError.READER_INVALID_ESCAPE.createWithContext(
|
|
171
|
+
this,
|
|
172
|
+
c,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
} else if (c === "\\") {
|
|
176
|
+
escaped = true;
|
|
177
|
+
} else if (c === terminator) {
|
|
178
|
+
return result.join("");
|
|
179
|
+
} else {
|
|
180
|
+
result.push(c);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
throw CommandSyntaxError.READER_EXPECTED_END_OF_QUOTE.createWithContext(
|
|
184
|
+
this,
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
readString(): string {
|
|
189
|
+
if (!this.canRead()) {
|
|
190
|
+
return "";
|
|
191
|
+
}
|
|
192
|
+
const next = this.peek();
|
|
193
|
+
if (this.isQuotedStringStart(next)) {
|
|
194
|
+
this.skip();
|
|
195
|
+
return this.readStringUntil(next);
|
|
196
|
+
}
|
|
197
|
+
return this.readUnquotedString();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
readBoolean(): boolean {
|
|
201
|
+
const value = this.readUnquotedString();
|
|
202
|
+
if (value.length === 0) {
|
|
203
|
+
throw CommandSyntaxError.READER_EXPECTED_BOOL.createWithContext(this);
|
|
204
|
+
}
|
|
205
|
+
if (value === "true") {
|
|
206
|
+
return true;
|
|
207
|
+
} else if (value === "false") {
|
|
208
|
+
return false;
|
|
209
|
+
} else {
|
|
210
|
+
throw CommandSyntaxError.READER_INVALID_BOOL.createWithContext(
|
|
211
|
+
this,
|
|
212
|
+
value,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
197
216
|
}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
type StringReader,
|
|
3
|
+
type CommandContext,
|
|
4
|
+
Suggestions,
|
|
5
|
+
type SuggestionsBuilder,
|
|
6
6
|
} from "..";
|
|
7
7
|
|
|
8
8
|
export abstract class ArgumentType<T> {
|
|
9
|
-
|
|
9
|
+
abstract parse(reader: StringReader): T;
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
listSuggestions(
|
|
12
|
+
// biome-ignore lint/correctness/noUnusedFunctionParameters: optional override
|
|
13
|
+
context: CommandContext<any>,
|
|
14
|
+
// biome-ignore lint/correctness/noUnusedFunctionParameters: optional override
|
|
15
|
+
builder: SuggestionsBuilder,
|
|
16
|
+
): Promise<Suggestions> {
|
|
17
|
+
return Suggestions.empty();
|
|
18
|
+
}
|
|
14
19
|
}
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Suggestions
|
|
7
|
-
} from "..";
|
|
1
|
+
import { ArgumentType } from "./ArgumentType";
|
|
2
|
+
import type { StringReader } from "../StringReader";
|
|
3
|
+
import type { CommandContext } from "../context/CommandContext";
|
|
4
|
+
import type { SuggestionsBuilder } from "../suggestion/SuggestionsBuilder";
|
|
5
|
+
import type { Suggestions } from "../suggestion/Suggestions";
|
|
8
6
|
|
|
9
7
|
export class BoolArgumentType extends ArgumentType<boolean> {
|
|
8
|
+
parse(reader: StringReader): boolean {
|
|
9
|
+
return reader.readBoolean();
|
|
10
|
+
}
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
listSuggestions(
|
|
13
|
+
// biome-ignore lint/correctness/noUnusedFunctionParameters: optional override
|
|
14
|
+
context: CommandContext<any>,
|
|
15
|
+
builder: SuggestionsBuilder,
|
|
16
|
+
): Promise<Suggestions> {
|
|
17
|
+
if ("true".startsWith(builder.getRemaining().toLowerCase())) {
|
|
18
|
+
builder.suggest("true");
|
|
19
|
+
}
|
|
20
|
+
if ("false".startsWith(builder.getRemaining().toLowerCase())) {
|
|
21
|
+
builder.suggest("false");
|
|
22
|
+
}
|
|
23
|
+
return builder.buildPromise();
|
|
24
|
+
}
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
export function bool(): BoolArgumentType {
|
|
27
|
-
|
|
28
|
+
return new BoolArgumentType();
|
|
28
29
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
1
|
+
import { type StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
2
2
|
|
|
3
3
|
export class FloatArgumentType extends NumberArgumentType {
|
|
4
|
+
constructor(minimum = -Infinity, maximum = Infinity) {
|
|
5
|
+
super(minimum, maximum);
|
|
6
|
+
}
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
readNumber(reader: StringReader): number {
|
|
9
|
+
return reader.readFloat();
|
|
10
|
+
}
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
getTooSmallError() {
|
|
13
|
+
return CommandSyntaxError.FLOAT_TOO_SMALL;
|
|
14
|
+
}
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
getTooBigError() {
|
|
18
|
-
return CommandSyntaxError.FLOAT_TOO_BIG;
|
|
19
|
-
}
|
|
16
|
+
getTooBigError() {
|
|
17
|
+
return CommandSyntaxError.FLOAT_TOO_BIG;
|
|
18
|
+
}
|
|
20
19
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
1
|
+
import { type StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
2
2
|
|
|
3
3
|
export class IntegerArgumentType extends NumberArgumentType {
|
|
4
|
+
constructor(minimum = -2147483648, maximum = 2147483647) {
|
|
5
|
+
super(minimum, maximum);
|
|
6
|
+
}
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
readNumber(reader: StringReader): number {
|
|
9
|
+
return reader.readInt();
|
|
10
|
+
}
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
getTooSmallError() {
|
|
14
|
-
return CommandSyntaxError.INTEGER_TOO_SMALL;
|
|
15
|
-
}
|
|
12
|
+
getTooSmallError() {
|
|
13
|
+
return CommandSyntaxError.INTEGER_TOO_SMALL;
|
|
14
|
+
}
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
getTooBigError() {
|
|
17
|
+
return CommandSyntaxError.INTEGER_TOO_BIG;
|
|
18
|
+
}
|
|
20
19
|
}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
1
|
+
import { type StringReader, NumberArgumentType, CommandSyntaxError } from "..";
|
|
2
2
|
|
|
3
|
-
export class LongArgumentType extends NumberArgumentType<
|
|
3
|
+
export class LongArgumentType extends NumberArgumentType<bigint> {
|
|
4
|
+
private static readonly MIN = -9223372036854775808n;
|
|
5
|
+
private static readonly MAX = 9223372036854775807n;
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
constructor(minimum = LongArgumentType.MIN, maximum = LongArgumentType.MAX) {
|
|
8
|
+
super(minimum, maximum);
|
|
9
|
+
}
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
readNumber(reader: StringReader): bigint {
|
|
12
|
+
return reader.readLong();
|
|
13
|
+
}
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
getTooSmallError() {
|
|
16
|
+
return CommandSyntaxError.LONG_TOO_SMALL;
|
|
17
|
+
}
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
getTooBigError() {
|
|
21
|
-
return CommandSyntaxError.LONG_TOO_BIG;
|
|
22
|
-
}
|
|
19
|
+
getTooBigError() {
|
|
20
|
+
return CommandSyntaxError.LONG_TOO_BIG;
|
|
21
|
+
}
|
|
23
22
|
}
|