@wq2/brigadier-ts 1.0.0 → 1.0.1
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 +2 -2
- 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 -2
- 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
|
@@ -1,39 +1,49 @@
|
|
|
1
|
-
import { ArgumentType, StringReader, CommandErrorType } from "..";
|
|
2
|
-
|
|
3
|
-
export abstract class NumberArgumentType<
|
|
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
|
-
|
|
1
|
+
import { ArgumentType, type StringReader, type CommandErrorType } from "..";
|
|
2
|
+
|
|
3
|
+
export abstract class NumberArgumentType<
|
|
4
|
+
N extends number | bigint = number,
|
|
5
|
+
> extends ArgumentType<N> {
|
|
6
|
+
private minimum: N;
|
|
7
|
+
private maximum: N;
|
|
8
|
+
|
|
9
|
+
constructor(minimum: N, maximum: N) {
|
|
10
|
+
super();
|
|
11
|
+
this.minimum = minimum;
|
|
12
|
+
this.maximum = maximum;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getMinimum(): N {
|
|
16
|
+
return this.minimum;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getMaximum(): N {
|
|
20
|
+
return this.maximum;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
parse(reader: StringReader): N {
|
|
24
|
+
const start = reader.getCursor();
|
|
25
|
+
const result = this.readNumber(reader);
|
|
26
|
+
if (result < this.minimum) {
|
|
27
|
+
reader.setCursor(start);
|
|
28
|
+
throw this.getTooSmallError().createWithContext(
|
|
29
|
+
reader,
|
|
30
|
+
result,
|
|
31
|
+
this.minimum,
|
|
32
|
+
);
|
|
33
|
+
} else if (result > this.maximum) {
|
|
34
|
+
reader.setCursor(start);
|
|
35
|
+
throw this.getTooBigError().createWithContext(
|
|
36
|
+
reader,
|
|
37
|
+
result,
|
|
38
|
+
this.maximum,
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
abstract readNumber(reader: StringReader): N;
|
|
45
|
+
|
|
46
|
+
abstract getTooSmallError(): CommandErrorType;
|
|
47
|
+
|
|
48
|
+
abstract getTooBigError(): CommandErrorType;
|
|
39
49
|
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { ArgumentType, StringReader } from "..";
|
|
1
|
+
import { ArgumentType, type StringReader } from "..";
|
|
2
2
|
|
|
3
3
|
type StringType = "single_word" | "quotable_phrase" | "greedy_phrase";
|
|
4
4
|
|
|
5
5
|
export class StringArgumentType extends ArgumentType<string> {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
6
|
+
private type: StringType;
|
|
7
|
+
|
|
8
|
+
constructor(type: StringType) {
|
|
9
|
+
super();
|
|
10
|
+
this.type = type;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getType(): StringType {
|
|
14
|
+
return this.type;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
parse(reader: StringReader): string {
|
|
18
|
+
if (this.type === "greedy_phrase") {
|
|
19
|
+
const text = reader.getRemaining();
|
|
20
|
+
reader.setCursor(reader.getTotalLength());
|
|
21
|
+
return text;
|
|
22
|
+
} else if (this.type === "single_word") {
|
|
23
|
+
return reader.readUnquotedString();
|
|
24
|
+
} else {
|
|
25
|
+
return reader.readString();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export function word(): StringArgumentType {
|
|
31
|
-
|
|
31
|
+
return new StringArgumentType("single_word");
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export function string(): StringArgumentType {
|
|
35
|
-
|
|
35
|
+
return new StringArgumentType("quotable_phrase");
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export function greedyString(): StringArgumentType {
|
|
39
|
-
|
|
39
|
+
return new StringArgumentType("greedy_phrase");
|
|
40
40
|
}
|
|
@@ -1,82 +1,87 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
CommandNode,
|
|
3
|
+
RootCommandNode,
|
|
4
|
+
type Command,
|
|
5
|
+
type Predicate,
|
|
6
|
+
type CommandContext,
|
|
7
7
|
} from "..";
|
|
8
8
|
|
|
9
9
|
export type RedirectModifier<S> = (context: CommandContext<S>) => S | S[];
|
|
10
10
|
|
|
11
11
|
export abstract class ArgumentBuilder<S, T extends ArgumentBuilder<S, T>> {
|
|
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
|
-
|
|
12
|
+
private arguments: RootCommandNode<S>;
|
|
13
|
+
private command: Command<S>;
|
|
14
|
+
private requirement: Predicate<S>;
|
|
15
|
+
private target: CommandNode<S>;
|
|
16
|
+
private modifier: RedirectModifier<S>;
|
|
17
|
+
private forks: boolean;
|
|
18
|
+
|
|
19
|
+
constructor() {
|
|
20
|
+
this.arguments = new RootCommandNode();
|
|
21
|
+
this.requirement = async (_) => true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
abstract getThis(): T;
|
|
25
|
+
|
|
26
|
+
// biome-ignore lint/suspicious/noThenProperty: proof?
|
|
27
|
+
then(argument: ArgumentBuilder<S, any> | CommandNode<S>): T {
|
|
28
|
+
const child = argument instanceof CommandNode ? argument : argument.build();
|
|
29
|
+
this.arguments.addChild(child);
|
|
30
|
+
return this.getThis();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
executes(command: Command<S>): T {
|
|
34
|
+
this.command = command;
|
|
35
|
+
return this.getThis();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
requires(requirement: Predicate<S>): T {
|
|
39
|
+
this.requirement = requirement;
|
|
40
|
+
return this.getThis();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
redirect(target: CommandNode<S>, modifier: RedirectModifier<S> = null): T {
|
|
44
|
+
return this.forward(target, modifier, false);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fork(target: CommandNode<S>, modifier: RedirectModifier<S>): T {
|
|
48
|
+
return this.forward(target, modifier, true);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
forward(
|
|
52
|
+
target: CommandNode<S>,
|
|
53
|
+
modifier: RedirectModifier<S>,
|
|
54
|
+
forks: boolean,
|
|
55
|
+
): T {
|
|
56
|
+
this.target = target;
|
|
57
|
+
this.modifier = modifier;
|
|
58
|
+
this.forks = forks;
|
|
59
|
+
return this.getThis();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
getArguments(): CommandNode<S>[] {
|
|
63
|
+
return this.arguments.getChildren();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
getCommand(): Command<S> {
|
|
67
|
+
return this.command;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getRequirement(): Predicate<S> {
|
|
71
|
+
return this.requirement;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
getRedirect(): CommandNode<S> {
|
|
75
|
+
return this.target;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
getRedirectModifier(): RedirectModifier<S> {
|
|
79
|
+
return this.modifier;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
isFork(): boolean {
|
|
83
|
+
return this.forks;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
abstract build(): CommandNode<S>;
|
|
82
87
|
}
|
|
@@ -1,30 +1,40 @@
|
|
|
1
1
|
import { ArgumentBuilder, LiteralCommandNode } from "..";
|
|
2
2
|
|
|
3
|
-
export class LiteralArgumentBuilder<S> extends ArgumentBuilder<
|
|
4
|
-
|
|
3
|
+
export class LiteralArgumentBuilder<S> extends ArgumentBuilder<
|
|
4
|
+
S,
|
|
5
|
+
LiteralArgumentBuilder<S>
|
|
6
|
+
> {
|
|
7
|
+
private literal: string;
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
constructor(literal: string) {
|
|
10
|
+
super();
|
|
11
|
+
this.literal = literal;
|
|
12
|
+
}
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
getThis(): LiteralArgumentBuilder<S> {
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
getLiteral(): string {
|
|
19
|
+
return this.literal;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
build(): LiteralCommandNode<S> {
|
|
23
|
+
const result = new LiteralCommandNode<S>(
|
|
24
|
+
this.getLiteral(),
|
|
25
|
+
this.getCommand(),
|
|
26
|
+
this.getRequirement(),
|
|
27
|
+
this.getRedirect(),
|
|
28
|
+
this.getRedirectModifier(),
|
|
29
|
+
this.isFork(),
|
|
30
|
+
);
|
|
31
|
+
for (const argument of this.getArguments()) {
|
|
32
|
+
result.addChild(argument);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
26
36
|
}
|
|
27
37
|
|
|
28
38
|
export function literal<S = any>(name: string): LiteralArgumentBuilder<S> {
|
|
29
|
-
|
|
39
|
+
return new LiteralArgumentBuilder(name);
|
|
30
40
|
}
|
|
@@ -1,40 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArgumentBuilder,
|
|
3
|
-
ArgumentType,
|
|
4
|
-
ArgumentCommandNode
|
|
5
|
-
} from "..";
|
|
1
|
+
import { ArgumentBuilder, type ArgumentType, ArgumentCommandNode } from "..";
|
|
6
2
|
|
|
7
|
-
export class RequiredArgumentBuilder<S, T> extends ArgumentBuilder<
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
export class RequiredArgumentBuilder<S, T> extends ArgumentBuilder<
|
|
4
|
+
S,
|
|
5
|
+
RequiredArgumentBuilder<S, T>
|
|
6
|
+
> {
|
|
7
|
+
private name: string;
|
|
8
|
+
private type: ArgumentType<T>;
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
constructor(name: string, type: ArgumentType<T>) {
|
|
11
|
+
super();
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.type = type;
|
|
14
|
+
}
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
getThis(): RequiredArgumentBuilder<S, T> {
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
getName(): string {
|
|
21
|
+
return this.name;
|
|
22
|
+
}
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
getType(): ArgumentType<T> {
|
|
25
|
+
return this.type;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
build(): ArgumentCommandNode<S, T> {
|
|
29
|
+
const result = new ArgumentCommandNode(
|
|
30
|
+
this.getName(),
|
|
31
|
+
this.getType(),
|
|
32
|
+
this.getCommand(),
|
|
33
|
+
this.getRequirement(),
|
|
34
|
+
this.getRedirect(),
|
|
35
|
+
this.getRedirectModifier(),
|
|
36
|
+
this.isFork(),
|
|
37
|
+
);
|
|
38
|
+
for (const argument of this.getArguments()) {
|
|
39
|
+
result.addChild(argument);
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
export function argument<S = any, T = any>(
|
|
39
|
-
|
|
45
|
+
export function argument<S = any, T = any>(
|
|
46
|
+
name: string,
|
|
47
|
+
type: ArgumentType<T>,
|
|
48
|
+
): RequiredArgumentBuilder<S, T> {
|
|
49
|
+
return new RequiredArgumentBuilder(name, type);
|
|
40
50
|
}
|
|
@@ -1,94 +1,117 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import type {
|
|
2
|
+
Command,
|
|
3
|
+
CommandNode,
|
|
4
|
+
StringRange,
|
|
5
|
+
ParsedArgument,
|
|
6
|
+
ParsedCommandNode,
|
|
7
|
+
RedirectModifier,
|
|
7
8
|
} from "..";
|
|
8
9
|
|
|
9
10
|
export class CommandContext<S> {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
private source: S;
|
|
12
|
+
private input: string;
|
|
13
|
+
private arguments: Map<string, ParsedArgument<any>>;
|
|
14
|
+
private nodes: ParsedCommandNode<S>[];
|
|
15
|
+
private command: Command<S>;
|
|
16
|
+
private rootNode: CommandNode<S>;
|
|
17
|
+
private child: CommandContext<S>;
|
|
18
|
+
private range: StringRange;
|
|
19
|
+
private modifier: RedirectModifier<S>;
|
|
20
|
+
private forks: boolean;
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
constructor(
|
|
23
|
+
source: S,
|
|
24
|
+
input: string,
|
|
25
|
+
parsedArguments: Map<string, ParsedArgument<any>>,
|
|
26
|
+
command: Command<S>,
|
|
27
|
+
rootNode: CommandNode<S>,
|
|
28
|
+
nodes: ParsedCommandNode<S>[],
|
|
29
|
+
range: StringRange,
|
|
30
|
+
child: CommandContext<S>,
|
|
31
|
+
modifier: RedirectModifier<S>,
|
|
32
|
+
forks: boolean,
|
|
33
|
+
) {
|
|
34
|
+
this.source = source;
|
|
35
|
+
this.input = input;
|
|
36
|
+
this.arguments = parsedArguments;
|
|
37
|
+
this.command = command;
|
|
38
|
+
this.rootNode = rootNode;
|
|
39
|
+
this.nodes = nodes;
|
|
40
|
+
this.range = range;
|
|
41
|
+
this.child = child;
|
|
42
|
+
this.modifier = modifier;
|
|
43
|
+
this.forks = forks;
|
|
44
|
+
}
|
|
33
45
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
copyFor(source: S): CommandContext<S> {
|
|
47
|
+
if (this.source === source) {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
return new CommandContext<S>(
|
|
51
|
+
source,
|
|
52
|
+
this.input,
|
|
53
|
+
this.arguments,
|
|
54
|
+
this.command,
|
|
55
|
+
this.rootNode,
|
|
56
|
+
this.nodes,
|
|
57
|
+
this.range,
|
|
58
|
+
this.child,
|
|
59
|
+
this.modifier,
|
|
60
|
+
this.forks,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
40
63
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
getChild(): CommandContext<S> {
|
|
65
|
+
return this.child;
|
|
66
|
+
}
|
|
44
67
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
68
|
+
getLastChild(): CommandContext<S> {
|
|
69
|
+
let result: CommandContext<S> = this;
|
|
70
|
+
while (result.getChild() != null) {
|
|
71
|
+
result = result.getChild();
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
52
75
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
getCommand(): Command<S> {
|
|
77
|
+
return this.command;
|
|
78
|
+
}
|
|
56
79
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
80
|
+
getSource(): S {
|
|
81
|
+
return this.source;
|
|
82
|
+
}
|
|
60
83
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
84
|
+
getRootNode(): CommandNode<S> {
|
|
85
|
+
return this.rootNode;
|
|
86
|
+
}
|
|
64
87
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
88
|
+
get(name: string): any {
|
|
89
|
+
const argument = this.arguments.get(name);
|
|
90
|
+
// TODO: Throw exception when argument is null
|
|
91
|
+
return argument.getResult();
|
|
92
|
+
}
|
|
70
93
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
94
|
+
getRedirectModifier(): RedirectModifier<S> {
|
|
95
|
+
return this.modifier;
|
|
96
|
+
}
|
|
74
97
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
getRange(): StringRange {
|
|
99
|
+
return this.range;
|
|
100
|
+
}
|
|
78
101
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
102
|
+
getInput(): string {
|
|
103
|
+
return this.input;
|
|
104
|
+
}
|
|
82
105
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
getNodes(): ParsedCommandNode<S>[] {
|
|
107
|
+
return this.nodes;
|
|
108
|
+
}
|
|
86
109
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
110
|
+
hasNodes(): boolean {
|
|
111
|
+
return this.nodes.length !== 0;
|
|
112
|
+
}
|
|
90
113
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
isForked(): boolean {
|
|
115
|
+
return this.forks;
|
|
116
|
+
}
|
|
94
117
|
}
|