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