@wq2/brigadier-ts 1.0.6 → 1.0.8

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 (115) hide show
  1. package/.git-blame-ignore-revs +2 -0
  2. package/.github/workflows/publish.yml +6 -4
  3. package/.github/workflows/test.yml +9 -4
  4. package/{README.md → ReadME.md} +4 -0
  5. package/dist/Command.d.ts +7 -2
  6. package/dist/CommandDispatcher.d.ts +30 -25
  7. package/dist/CommandDispatcher.js +2 -297
  8. package/dist/CommandDispatcher.js.map +1 -0
  9. package/dist/ParseResults.d.ts +17 -9
  10. package/dist/ParseResults.js +2 -20
  11. package/dist/ParseResults.js.map +1 -0
  12. package/dist/Predicate.d.ts +5 -1
  13. package/dist/StringReader.d.ts +29 -25
  14. package/dist/StringReader.js +2 -186
  15. package/dist/StringReader.js.map +1 -0
  16. package/dist/arguments/ArgumentType.d.ts +12 -7
  17. package/dist/arguments/ArgumentType.js +2 -14
  18. package/dist/arguments/ArgumentType.js.map +1 -0
  19. package/dist/arguments/BoolArgumentType.d.ts +14 -9
  20. package/dist/arguments/BoolArgumentType.js +2 -23
  21. package/dist/arguments/BoolArgumentType.js.map +1 -0
  22. package/dist/arguments/FloatArgumentType.d.ts +13 -7
  23. package/dist/arguments/FloatArgumentType.js +2 -20
  24. package/dist/arguments/FloatArgumentType.js.map +1 -0
  25. package/dist/arguments/IntegerArgumentType.d.ts +13 -7
  26. package/dist/arguments/IntegerArgumentType.js +2 -20
  27. package/dist/arguments/IntegerArgumentType.js.map +1 -0
  28. package/dist/arguments/LongArgumentType.d.ts +15 -9
  29. package/dist/arguments/LongArgumentType.js +2 -22
  30. package/dist/arguments/LongArgumentType.js.map +1 -0
  31. package/dist/arguments/NumberArgumentType.d.ts +18 -13
  32. package/dist/arguments/NumberArgumentType.js +2 -31
  33. package/dist/arguments/NumberArgumentType.js.map +1 -0
  34. package/dist/arguments/StringArgumentType.d.ts +15 -11
  35. package/dist/arguments/StringArgumentType.js +2 -39
  36. package/dist/arguments/StringArgumentType.js.map +1 -0
  37. package/dist/builder/ArgumentBuilder.d.ts +32 -27
  38. package/dist/builder/ArgumentBuilder.js +2 -56
  39. package/dist/builder/ArgumentBuilder.js.map +1 -0
  40. package/dist/builder/LiteralArgumentBuilder.d.ts +14 -9
  41. package/dist/builder/LiteralArgumentBuilder.js +2 -29
  42. package/dist/builder/LiteralArgumentBuilder.js.map +1 -0
  43. package/dist/builder/RequiredArgumentBuilder.d.ts +17 -12
  44. package/dist/builder/RequiredArgumentBuilder.js +2 -33
  45. package/dist/builder/RequiredArgumentBuilder.js.map +1 -0
  46. package/dist/context/CommandContext.d.ts +36 -31
  47. package/dist/context/CommandContext.js +2 -66
  48. package/dist/context/CommandContext.js.map +1 -0
  49. package/dist/context/CommandContextBuilder.d.ts +42 -37
  50. package/dist/context/CommandContextBuilder.js +2 -118
  51. package/dist/context/CommandContextBuilder.js.map +1 -0
  52. package/dist/context/ParsedArgument.d.ts +12 -7
  53. package/dist/context/ParsedArgument.js +2 -17
  54. package/dist/context/ParsedArgument.js.map +1 -0
  55. package/dist/context/ParsedCommandNode.d.ts +13 -8
  56. package/dist/context/ParsedCommandNode.js +2 -16
  57. package/dist/context/ParsedCommandNode.js.map +1 -0
  58. package/dist/context/StringRange.d.ts +14 -10
  59. package/dist/context/StringRange.js +2 -30
  60. package/dist/context/StringRange.js.map +1 -0
  61. package/dist/context/SuggestionContext.d.ts +10 -5
  62. package/dist/context/SuggestionContext.js +2 -10
  63. package/dist/context/SuggestionContext.js.map +1 -0
  64. package/dist/exceptions/CommandErrorType.d.ts +12 -8
  65. package/dist/exceptions/CommandErrorType.js +2 -18
  66. package/dist/exceptions/CommandErrorType.js.map +1 -0
  67. package/dist/exceptions/CommandSyntaxError.d.ts +8 -4
  68. package/dist/exceptions/CommandSyntaxError.js +2 -20
  69. package/dist/exceptions/CommandSyntaxError.js.map +1 -0
  70. package/dist/exceptions/StandardErrorTypes.d.ts +28 -23
  71. package/dist/exceptions/StandardErrorTypes.js +2 -26
  72. package/dist/exceptions/StandardErrorTypes.js.map +1 -0
  73. package/dist/index.d.ts +32 -30
  74. package/dist/index.js +1 -46
  75. package/dist/suggestion/Suggestion.d.ts +16 -11
  76. package/dist/suggestion/Suggestion.js +2 -48
  77. package/dist/suggestion/Suggestion.js.map +1 -0
  78. package/dist/suggestion/Suggestions.d.ts +18 -13
  79. package/dist/suggestion/Suggestions.js +2 -56
  80. package/dist/suggestion/Suggestions.js.map +1 -0
  81. package/dist/suggestion/SuggestionsBuilder.d.ts +21 -16
  82. package/dist/suggestion/SuggestionsBuilder.js +2 -47
  83. package/dist/suggestion/SuggestionsBuilder.js.map +1 -0
  84. package/dist/tree/ArgumentCommandNode.d.ts +26 -21
  85. package/dist/tree/ArgumentCommandNode.js +2 -34
  86. package/dist/tree/ArgumentCommandNode.js.map +1 -0
  87. package/dist/tree/CommandNode.d.ts +45 -39
  88. package/dist/tree/CommandNode.js +2 -80
  89. package/dist/tree/CommandNode.js.map +1 -0
  90. package/dist/tree/LiteralCommandNode.d.ts +24 -19
  91. package/dist/tree/LiteralCommandNode.js +2 -60
  92. package/dist/tree/LiteralCommandNode.js.map +1 -0
  93. package/dist/tree/RootCommandNode.d.ts +17 -12
  94. package/dist/tree/RootCommandNode.js +2 -26
  95. package/dist/tree/RootCommandNode.js.map +1 -0
  96. package/dist/tree/internal.js +2 -7
  97. package/dist/tree/internal.js.map +1 -0
  98. package/dist/tree/internal2.d.ts +8 -5
  99. package/dist/tree/internal2.js +2 -10
  100. package/dist/tree/internal2.js.map +1 -0
  101. package/package.json +39 -33
  102. package/src/CommandDispatcher.ts +6 -1
  103. package/src/StringReader.ts +10 -1
  104. package/src/arguments/FloatArgumentType.ts +4 -1
  105. package/src/arguments/IntegerArgumentType.ts +4 -1
  106. package/src/index.ts +1 -0
  107. package/src/tree/CommandNode.ts +7 -8
  108. package/src/tree/LiteralCommandNode.ts +1 -4
  109. package/src/tree/internal.ts +7 -0
  110. package/tsconfig.json +3 -2
  111. package/tsdown.config.ts +10 -0
  112. package/dist/Command.js +0 -2
  113. package/dist/Predicate.js +0 -2
  114. package/dist/tree/internal.d.ts +0 -3
  115. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,2 @@
1
+ # README.md -> ReadME.md
2
+ e42274aaeb197333ca887d38939ede38ead8e593
@@ -27,15 +27,17 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - uses: actions/checkout@v6
30
- - uses: actions/setup-node@v6
30
+
31
+ - name: Setup Bun
32
+ uses: oven-sh/setup-bun@v2
31
33
  with:
32
- node-version: '24'
34
+ bun-version: latest
33
35
 
34
36
  - name: Install & Build
35
- run: npm install && npm run build
37
+ run: bun install && bun run build
36
38
 
37
39
  - name: Publish (npm)
38
- run: npm publish --registry=https://registry.npmjs.org/ --loglevel info
40
+ run: bunx npm publish --registry=https://registry.npmjs.org/ --loglevel info
39
41
  env:
40
42
  GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
41
43
  NPM_TOKEN: ${{ env.GITHUB_TOKEN }}
@@ -11,13 +11,18 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - name: Checkout
14
- uses: actions/checkout@v1
14
+ uses: actions/checkout@v6
15
+
16
+ - name: Setup Bun
17
+ uses: oven-sh/setup-bun@v2
18
+ with:
19
+ bun-version: latest
15
20
 
16
21
  - name: Install
17
- run: npm ci
22
+ run: bun i
18
23
 
19
24
  - name: Build
20
- run: npm run build
25
+ run: bun run build
21
26
 
22
27
  - name: Test
23
- run: npm run test
28
+ run: bun test
@@ -9,6 +9,10 @@ Fork of [brigadier-ts](https://github.com/misode/brigadier-ts) with some changes
9
9
 
10
10
  (not many, but we'll probably add more later)
11
11
 
12
+ ## Migration from original
13
+
14
+ See [our wiki page](https://github.com/MinibloxCheaters2/brigadier-ts/wiki/Migrating-from-Misode-brigadier%E2%80%90ts)
15
+
12
16
  ## Installation
13
17
 
14
18
  ```
package/dist/Command.d.ts CHANGED
@@ -1,2 +1,7 @@
1
- import type { CommandContext } from "./context/CommandContext";
2
- export type Command<S> = (c: CommandContext<S>) => Promise<number | void>;
1
+ import { CommandContext } from "./context/CommandContext.js";
2
+
3
+ //#region src/Command.d.ts
4
+ type Command<S> = (c: CommandContext<S>) => Promise<number | void>;
5
+ //#endregion
6
+ export { Command };
7
+ //# sourceMappingURL=Command.d.ts.map
@@ -1,26 +1,31 @@
1
- import type { LiteralArgumentBuilder } from "./builder/LiteralArgumentBuilder";
2
- import { ParseResults } from "./ParseResults";
3
- import { StringReader } from "./StringReader";
4
- import { Suggestions } from "./suggestion/Suggestions";
5
- import type { CommandNode } from "./tree/CommandNode";
6
- import type { LiteralCommandNode } from "./tree/LiteralCommandNode";
7
- import { RootCommandNode } from "./tree/RootCommandNode";
8
- export declare class CommandDispatcher<S> {
9
- private root;
10
- private static USAGE_OPTIONAL_OPEN;
11
- private static USAGE_OPTIONAL_CLOSE;
12
- private static USAGE_REQUIRED_OPEN;
13
- private static USAGE_REQUIRED_CLOSE;
14
- private static USAGE_OR;
15
- constructor();
16
- register(command: LiteralArgumentBuilder<S>): LiteralCommandNode<S>;
17
- execute(parse: ParseResults<S> | string, source: S): Promise<number>;
18
- parse(reader: StringReader | string, source: S): Promise<ParseResults<S>>;
19
- private parseNodes;
20
- getAllUsage(node: CommandNode<S>, source: S, restricted: boolean): Promise<string[]>;
21
- private getAllUsageImpl;
22
- getCompletionSuggestions(parse: ParseResults<S>, cursor?: number): Promise<Suggestions>;
23
- getSmartUsage(node: CommandNode<S>, source: S): Map<CommandNode<S>, string>;
24
- getSmartUsage(node: CommandNode<S>, source: S, optional: boolean, deep: boolean): string;
25
- getRoot(): RootCommandNode<S>;
1
+ import { StringReader } from "./StringReader.js";
2
+ import { Suggestions } from "./suggestion/Suggestions.js";
3
+ import { LiteralCommandNode } from "./tree/LiteralCommandNode.js";
4
+ import { LiteralArgumentBuilder } from "./builder/LiteralArgumentBuilder.js";
5
+ import { ParseResults } from "./ParseResults.js";
6
+ import { RootCommandNode } from "./tree/RootCommandNode.js";
7
+ import { CommandNode } from "./tree/CommandNode.js";
8
+
9
+ //#region src/CommandDispatcher.d.ts
10
+ declare class CommandDispatcher<S> {
11
+ private root;
12
+ private static USAGE_OPTIONAL_OPEN;
13
+ private static USAGE_OPTIONAL_CLOSE;
14
+ private static USAGE_REQUIRED_OPEN;
15
+ private static USAGE_REQUIRED_CLOSE;
16
+ private static USAGE_OR;
17
+ constructor();
18
+ register(command: LiteralArgumentBuilder<S>): LiteralCommandNode<S>;
19
+ execute(parse: ParseResults<S> | string, source: S): Promise<number>;
20
+ parse(reader: StringReader | string, source: S): Promise<ParseResults<S>>;
21
+ private parseNodes;
22
+ getAllUsage(node: CommandNode<S>, source: S, restricted: boolean): Promise<string[]>;
23
+ private getAllUsageImpl;
24
+ getCompletionSuggestions(parse: ParseResults<S>, cursor?: number): Promise<Suggestions>;
25
+ getSmartUsage(node: CommandNode<S>, source: S): Map<CommandNode<S>, string>;
26
+ getSmartUsage(node: CommandNode<S>, source: S, optional: boolean, deep: boolean): string;
27
+ getRoot(): RootCommandNode<S>;
26
28
  }
29
+ //#endregion
30
+ export { CommandDispatcher };
31
+ //# sourceMappingURL=CommandDispatcher.d.ts.map
@@ -1,297 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommandDispatcher = void 0;
4
- const CommandContextBuilder_1 = require("./context/CommandContextBuilder");
5
- const CommandSyntaxError_1 = require("./exceptions/CommandSyntaxError");
6
- const StandardErrorTypes_1 = require("./exceptions/StandardErrorTypes");
7
- const ParseResults_1 = require("./ParseResults");
8
- const StringReader_1 = require("./StringReader");
9
- const Suggestions_1 = require("./suggestion/Suggestions");
10
- const SuggestionsBuilder_1 = require("./suggestion/SuggestionsBuilder");
11
- const RootCommandNode_1 = require("./tree/RootCommandNode");
12
- class CommandDispatcher {
13
- constructor() {
14
- this.root = new RootCommandNode_1.RootCommandNode();
15
- }
16
- register(command) {
17
- const build = command.build();
18
- this.root.addChild(build);
19
- return build;
20
- }
21
- async execute(parse, source) {
22
- if (typeof parse === "string") {
23
- parse = await this.parse(new StringReader_1.StringReader(parse), source);
24
- }
25
- if (parse.getReader().canRead()) {
26
- if (parse.getErrors().size === 1) {
27
- throw parse.getErrors().values().next();
28
- }
29
- else if (parse.getContext().getRange().isEmpty()) {
30
- throw StandardErrorTypes_1.DISPATCHER_UNKNOWN_COMMAND.createWithContext(parse.getReader());
31
- }
32
- else {
33
- throw StandardErrorTypes_1.DISPATCHER_UNKNOWN_ARGUMENT.createWithContext(parse.getReader());
34
- }
35
- }
36
- let result = 0;
37
- let successfulForks = 0;
38
- let forked = false;
39
- let foundCommand = false;
40
- const command = parse.getReader().getString();
41
- const original = parse.getContext().build(command);
42
- let contexts = [original];
43
- let next = [];
44
- while (contexts.length > 0) {
45
- const size = contexts.length;
46
- for (let i = 0; i < size; i++) {
47
- const context = contexts[i];
48
- const child = context.getChild();
49
- if (child !== null) {
50
- forked = forked || context.isForked();
51
- if (child.hasNodes()) {
52
- foundCommand = true;
53
- const modifier = context.getRedirectModifier();
54
- if (modifier === null) {
55
- next.push(child.copyFor(context.getSource()));
56
- }
57
- else {
58
- try {
59
- const results = modifier(context);
60
- results.forEach((source) => {
61
- next.push(child.copyFor(source));
62
- });
63
- }
64
- catch (e) {
65
- if (!forked)
66
- throw e;
67
- }
68
- }
69
- }
70
- }
71
- else if (context.getCommand()) {
72
- foundCommand = true;
73
- try {
74
- const value = await context.getCommand()(context);
75
- result += value || value === 0 ? value : 1;
76
- successfulForks++;
77
- }
78
- catch (e) {
79
- if (!forked)
80
- throw e;
81
- }
82
- }
83
- }
84
- contexts = next;
85
- next = [];
86
- }
87
- if (!foundCommand) {
88
- throw StandardErrorTypes_1.DISPATCHER_UNKNOWN_COMMAND.createWithContext(parse.getReader());
89
- }
90
- return forked ? successfulForks : result;
91
- }
92
- async parse(reader, source) {
93
- reader = new StringReader_1.StringReader(reader);
94
- const context = new CommandContextBuilder_1.CommandContextBuilder(this, source, this.root, reader.getCursor());
95
- return this.parseNodes(this.root, reader, context);
96
- }
97
- async parseNodes(node, originalReader, contextSoFar) {
98
- const source = contextSoFar.getSource();
99
- const errors = new Map();
100
- const potentials = [];
101
- const cursor = originalReader.getCursor();
102
- for (const child of node.getRelevantNodes(originalReader)) {
103
- if (!(await child.canUse(source))) {
104
- continue;
105
- }
106
- const context = contextSoFar.copy();
107
- const reader = new StringReader_1.StringReader(originalReader);
108
- try {
109
- try {
110
- child.parse(reader, context);
111
- }
112
- catch (e) {
113
- if (e instanceof CommandSyntaxError_1.CommandSyntaxError) {
114
- throw e;
115
- }
116
- else {
117
- throw StandardErrorTypes_1.DISPATCHER_PARSE_ERROR.createWithContext(reader, e.message);
118
- }
119
- }
120
- if (reader.canRead() && reader.peek() !== " ") {
121
- throw StandardErrorTypes_1.DISPATCHER_EXPECTED_ARGUMENT_SEPARATOR.createWithContext(reader);
122
- }
123
- }
124
- catch (e) {
125
- if (e instanceof CommandSyntaxError_1.CommandSyntaxError) {
126
- errors.set(child, e);
127
- reader.setCursor(cursor);
128
- continue;
129
- }
130
- else {
131
- throw e;
132
- }
133
- }
134
- context.withCommand(child.getCommand());
135
- if (reader.canRead(child.getRedirect() === null ? 2 : 1)) {
136
- reader.skip();
137
- if (child.getRedirect()) {
138
- const childContext = new CommandContextBuilder_1.CommandContextBuilder(this, source, child.getRedirect(), reader.getCursor());
139
- const parse = await this.parseNodes(child.getRedirect(), reader, childContext);
140
- context.withChild(parse.getContext());
141
- return new ParseResults_1.ParseResults(context, parse.getReader(), parse.getErrors());
142
- }
143
- else {
144
- potentials.push(this.parseNodes(child, reader, context));
145
- }
146
- }
147
- else {
148
- potentials.push(new ParseResults_1.ParseResults(context, reader, new Map()));
149
- }
150
- }
151
- if (potentials.length === 0) {
152
- potentials.push(new ParseResults_1.ParseResults(contextSoFar, originalReader, errors));
153
- }
154
- return potentials[0];
155
- }
156
- async getAllUsage(node, source, restricted) {
157
- const result = [];
158
- await this.getAllUsageImpl(node, source, result, "", restricted);
159
- return result;
160
- }
161
- async getAllUsageImpl(node, source, result, prefix, restricted) {
162
- if (restricted && !(await node.canUse(source))) {
163
- return;
164
- }
165
- if (node.getCommand() != null) {
166
- result.push(prefix);
167
- }
168
- if (node.getRedirect() != null) {
169
- const redirect = node.getRedirect() === this.root
170
- ? "..."
171
- : `-> ${node.getRedirect().getUsageText()}`;
172
- result.push(prefix.length === 0
173
- ? `${node.getUsageText()} ${redirect}`
174
- : `${prefix} ${redirect}`);
175
- }
176
- else if (node.getChildren().length > 0) {
177
- for (const child of node.getChildren()) {
178
- const newPrefix = prefix.length === 0
179
- ? child.getUsageText()
180
- : `${prefix} ${child.getUsageText()}`;
181
- await this.getAllUsageImpl(child, source, result, newPrefix, restricted);
182
- }
183
- }
184
- }
185
- async getCompletionSuggestions(parse, cursor) {
186
- if (cursor === undefined) {
187
- cursor = parse.getReader().getTotalLength();
188
- }
189
- const context = parse.getContext();
190
- const nodeBeforeCursor = context.findSuggestionContext(cursor);
191
- const parent = nodeBeforeCursor.parent;
192
- const start = Math.min(nodeBeforeCursor.startPos, cursor);
193
- const fullInput = parse.getReader().getString();
194
- const truncatedInput = fullInput.substring(0, cursor);
195
- const promises = [];
196
- for (const node of parent.getChildren()) {
197
- let promise = Suggestions_1.Suggestions.empty();
198
- try {
199
- promise = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder_1.SuggestionsBuilder(truncatedInput, start));
200
- }
201
- catch (ignored) {
202
- console.log("???", ignored);
203
- }
204
- promises.push(promise);
205
- }
206
- const suggestions = await Promise.all(promises);
207
- return Suggestions_1.Suggestions.merge(fullInput, suggestions);
208
- }
209
- getSmartUsage(node, source, optional, deep) {
210
- if (optional === undefined && deep === undefined) {
211
- const result = new Map();
212
- const optional = node.getCommand() !== undefined && node.getCommand() !== null;
213
- const children = node.getChildren();
214
- for (const index in children) {
215
- const child = children[index];
216
- const usage = this.getSmartUsage(child, source, optional, false);
217
- if (usage !== undefined) {
218
- result.set(child, usage);
219
- }
220
- }
221
- return result;
222
- }
223
- else {
224
- if (!node.canUse(source)) {
225
- return undefined;
226
- }
227
- const self = optional
228
- ? CommandDispatcher.USAGE_OPTIONAL_OPEN +
229
- node.getUsageText() +
230
- CommandDispatcher.USAGE_OPTIONAL_CLOSE
231
- : node.getUsageText();
232
- const childOptional = node.getCommand() !== undefined;
233
- const open = childOptional
234
- ? CommandDispatcher.USAGE_OPTIONAL_OPEN
235
- : CommandDispatcher.USAGE_REQUIRED_OPEN;
236
- const close = childOptional
237
- ? CommandDispatcher.USAGE_OPTIONAL_CLOSE
238
- : CommandDispatcher.USAGE_REQUIRED_CLOSE;
239
- if (!deep) {
240
- if (node.getRedirect() !== undefined) {
241
- const redirect = node.getRedirect() === this.root
242
- ? "..."
243
- : `-> ${node.getRedirect().getUsageText()}`;
244
- return `${self} ${redirect}`;
245
- }
246
- else {
247
- const children = node
248
- .getChildren()
249
- .filter((c) => c.canUse(source));
250
- if (children.length === 1) {
251
- const usage = String(this.getSmartUsage(children[0], source, childOptional, childOptional));
252
- if (usage !== undefined) {
253
- return `${self} ${usage}`;
254
- }
255
- }
256
- else if (children.length > 1) {
257
- const childUsage = new Set();
258
- for (const index in children) {
259
- const child = children[index];
260
- const usage = this.getSmartUsage(child, source, childOptional, true);
261
- if (usage !== undefined) {
262
- childUsage.add(usage);
263
- }
264
- }
265
- if (childUsage.size === 1) {
266
- const usage = childUsage.values().next().value;
267
- return `${self} ${childOptional ? CommandDispatcher.USAGE_OPTIONAL_OPEN + usage + CommandDispatcher.USAGE_OPTIONAL_CLOSE : usage}`;
268
- }
269
- else if (childUsage.size > 1) {
270
- let builder = open;
271
- for (let index = 0; index < children.length; index++) {
272
- const child = children[index];
273
- if (index > 0) {
274
- builder += CommandDispatcher.USAGE_OR;
275
- }
276
- builder += child.getUsageText();
277
- }
278
- if (children.length > 0) {
279
- builder += close;
280
- return `${self} ${builder}`;
281
- }
282
- }
283
- }
284
- }
285
- }
286
- }
287
- }
288
- getRoot() {
289
- return this.root;
290
- }
291
- }
292
- exports.CommandDispatcher = CommandDispatcher;
293
- CommandDispatcher.USAGE_OPTIONAL_OPEN = "[";
294
- CommandDispatcher.USAGE_OPTIONAL_CLOSE = "]";
295
- CommandDispatcher.USAGE_REQUIRED_OPEN = "(";
296
- CommandDispatcher.USAGE_REQUIRED_CLOSE = ")";
297
- CommandDispatcher.USAGE_OR = "|";
1
+ import{Suggestions as e}from"./suggestion/Suggestions.js";import{CommandSyntaxError as t}from"./exceptions/CommandSyntaxError.js";import{DISPATCHER_EXPECTED_ARGUMENT_SEPARATOR as n,DISPATCHER_PARSE_ERROR as r,DISPATCHER_UNKNOWN_ARGUMENT as i,DISPATCHER_UNKNOWN_COMMAND as a}from"./exceptions/StandardErrorTypes.js";import{RootCommandNode as o}from"./tree/RootCommandNode.js";import{CommandContextBuilder as s}from"./context/CommandContextBuilder.js";import{ParseResults as c}from"./ParseResults.js";import{StringReader as l}from"./StringReader.js";import{SuggestionsBuilder as u}from"./suggestion/SuggestionsBuilder.js";var d=class d{constructor(){this.root=new o}register(e){let t=e.build();return this.root.addChild(t),t}async execute(e,t){if(typeof e==`string`&&(e=await this.parse(new l(e),t)),e.getReader().canRead())throw e.getErrors().size===1?e.getErrors().values().next():e.getContext().getRange().isEmpty()?a.createWithContext(e.getReader()):i.createWithContext(e.getReader());let n=0,r=0,o=!1,s=!1,c=e.getReader().getString(),u=[e.getContext().build(c)],d=[];for(;u.length>0;){let e=u.length;for(let t=0;t<e;t++){let e=u[t],i=e.getChild();if(i!==null){if(o=o||e.isForked(),i.hasNodes()){s=!0;let t=e.getRedirectModifier();if(t===null)d.push(i.copyFor(e.getSource()));else try{t(e).forEach(e=>{d.push(i.copyFor(e))})}catch(e){if(!o)throw e}}}else if(e.getCommand()){s=!0;try{let t=await e.getCommand()(e);n+=t||t===0?t:1,r++}catch(e){if(!o)throw e}}}u=d,d=[]}if(!s)throw a.createWithContext(e.getReader());return o?r:n}async parse(e,t){e=new l(e);let n=new s(this,t,this.root,e.getCursor());return this.parseNodes(this.root,e,n)}async parseNodes(e,i,a){let o=a.getSource(),u=new Map,d=[],f=i.getCursor();for(let p of e.getRelevantNodes(i)){if(!await p.canUse(o))continue;let e=a.copy(),m=new l(i);try{try{p.parse(m,e)}catch(e){throw e instanceof t?e:r.createWithContext(m,e.message)}if(m.canRead()&&m.peek()!==` `)throw n.createWithContext(m)}catch(e){if(e instanceof t){u.set(p,e),m.setCursor(f);continue}else throw e}if(e.withCommand(p.getCommand()),m.canRead(p.getRedirect()===null?2:1))if(m.skip(),p.getRedirect()){let t=new s(this,o,p.getRedirect(),m.getCursor()),n=await this.parseNodes(p.getRedirect(),m,t);return e.withChild(n.getContext()),new c(e,n.getReader(),n.getErrors())}else d.push(this.parseNodes(p,m,e));else d.push(new c(e,m,new Map))}return d.length===0&&d.push(new c(a,i,u)),d[0]}async getAllUsage(e,t,n){let r=[];return await this.getAllUsageImpl(e,t,r,``,n),r}async getAllUsageImpl(e,t,n,r,i){if(!(i&&!await e.canUse(t))){if(e.getCommand()!=null&&n.push(r),e.getRedirect()!=null){let t=e.getRedirect()===this.root?`...`:`-> ${e.getRedirect().getUsageText()}`;n.push(r.length===0?`${e.getUsageText()} ${t}`:`${r} ${t}`)}else if(e.getChildren().length>0)for(let a of e.getChildren()){let e=r.length===0?a.getUsageText():`${r} ${a.getUsageText()}`;await this.getAllUsageImpl(a,t,n,e,i)}}}async getCompletionSuggestions(t,n){n===void 0&&(n=t.getReader().getTotalLength());let r=t.getContext(),i=r.findSuggestionContext(n),a=i.parent,o=Math.min(i.startPos,n),s=t.getReader().getString(),c=s.substring(0,n),l=[];for(let t of a.getChildren()){let n=e.empty();try{n=t.listSuggestions(r.build(c),new u(c,o))}catch(e){console.log(`???`,e)}l.push(n)}let d=await Promise.all(l);return e.merge(s,d)}getSmartUsage(e,t,n,r){if(n===void 0&&r===void 0){let n=new Map,r=e.getCommand()!==void 0&&e.getCommand()!==null,i=e.getChildren();for(let e in i){let a=i[e],o=this.getSmartUsage(a,t,r,!1);o!==void 0&&n.set(a,o)}return n}else{if(!e.canUse(t))return;let i=n?d.USAGE_OPTIONAL_OPEN+e.getUsageText()+d.USAGE_OPTIONAL_CLOSE:e.getUsageText(),a=e.getCommand()!==void 0,o=a?d.USAGE_OPTIONAL_OPEN:d.USAGE_REQUIRED_OPEN,s=a?d.USAGE_OPTIONAL_CLOSE:d.USAGE_REQUIRED_CLOSE;if(!r){if(e.getRedirect()!==void 0)return`${i} ${e.getRedirect()===this.root?`...`:`-> ${e.getRedirect().getUsageText()}`}`;{let n=e.getChildren().filter(e=>e.canUse(t));if(n.length===1){let e=String(this.getSmartUsage(n[0],t,a,a));if(e!==void 0)return`${i} ${e}`}else if(n.length>1){let e=new Set;for(let r in n){let i=n[r],o=this.getSmartUsage(i,t,a,!0);o!==void 0&&e.add(o)}if(e.size===1){let t=e.values().next().value;return`${i} ${a?d.USAGE_OPTIONAL_OPEN+t+d.USAGE_OPTIONAL_CLOSE:t}`}else if(e.size>1){let e=o;for(let t=0;t<n.length;t++){let r=n[t];t>0&&(e+=d.USAGE_OR),e+=r.getUsageText()}if(n.length>0)return e+=s,`${i} ${e}`}}}}}}getRoot(){return this.root}};d.USAGE_OPTIONAL_OPEN=`[`,d.USAGE_OPTIONAL_CLOSE=`]`,d.USAGE_REQUIRED_OPEN=`(`,d.USAGE_REQUIRED_CLOSE=`)`,d.USAGE_OR=`|`;export{d as CommandDispatcher};
2
+ //# sourceMappingURL=CommandDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandDispatcher.js","names":[],"sources":["../src/CommandDispatcher.ts"],"sourcesContent":["import type { LiteralArgumentBuilder } from \"./builder/LiteralArgumentBuilder\";\nimport { CommandContextBuilder } from \"./context/CommandContextBuilder\";\nimport { CommandSyntaxError } from \"./exceptions/CommandSyntaxError\";\nimport {\n\tDISPATCHER_EXPECTED_ARGUMENT_SEPARATOR,\n\tDISPATCHER_PARSE_ERROR,\n\tDISPATCHER_UNKNOWN_ARGUMENT,\n\tDISPATCHER_UNKNOWN_COMMAND,\n} from \"./exceptions/StandardErrorTypes\";\nimport { ParseResults } from \"./ParseResults\";\nimport { StringReader } from \"./StringReader\";\nimport { Suggestions } from \"./suggestion/Suggestions\";\nimport { SuggestionsBuilder } from \"./suggestion/SuggestionsBuilder\";\nimport type { CommandNode } from \"./tree/CommandNode\";\nimport type { LiteralCommandNode } from \"./tree/LiteralCommandNode\";\nimport { RootCommandNode } from \"./tree/RootCommandNode\";\n\nexport class CommandDispatcher<S> {\n\tprivate root: RootCommandNode<S>;\n\n\tprivate static USAGE_OPTIONAL_OPEN = \"[\";\n\tprivate static USAGE_OPTIONAL_CLOSE = \"]\";\n\tprivate static USAGE_REQUIRED_OPEN = \"(\";\n\tprivate static USAGE_REQUIRED_CLOSE = \")\";\n\tprivate static USAGE_OR = \"|\";\n\n\tconstructor() {\n\t\tthis.root = new RootCommandNode();\n\t}\n\n\tregister(command: LiteralArgumentBuilder<S>): LiteralCommandNode<S> {\n\t\tconst build = command.build();\n\t\tthis.root.addChild(build);\n\t\treturn build;\n\t}\n\n\tasync execute(parse: ParseResults<S> | string, source: S): Promise<number> {\n\t\tif (typeof parse === \"string\") {\n\t\t\tparse = await this.parse(new StringReader(parse), source);\n\t\t}\n\n\t\tif (parse.getReader().canRead()) {\n\t\t\tif (parse.getErrors().size === 1) {\n\t\t\t\tthrow parse.getErrors().values().next();\n\t\t\t} else if (parse.getContext().getRange().isEmpty()) {\n\t\t\t\tthrow DISPATCHER_UNKNOWN_COMMAND.createWithContext(parse.getReader());\n\t\t\t} else {\n\t\t\t\tthrow DISPATCHER_UNKNOWN_ARGUMENT.createWithContext(parse.getReader());\n\t\t\t}\n\t\t}\n\n\t\tlet result = 0;\n\t\tlet successfulForks = 0;\n\t\tlet forked = false;\n\t\tlet foundCommand = false;\n\t\tconst command = parse.getReader().getString();\n\t\tconst original = parse.getContext().build(command);\n\t\tlet contexts = [original];\n\t\tlet next = [];\n\n\t\twhile (contexts.length > 0) {\n\t\t\tconst size = contexts.length;\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tconst context = contexts[i];\n\t\t\t\tconst child = context.getChild();\n\t\t\t\tif (child !== null) {\n\t\t\t\t\tforked = forked || context.isForked();\n\t\t\t\t\tif (child.hasNodes()) {\n\t\t\t\t\t\tfoundCommand = true;\n\t\t\t\t\t\tconst modifier = context.getRedirectModifier();\n\t\t\t\t\t\tif (modifier === null) {\n\t\t\t\t\t\t\tnext.push(child.copyFor(context.getSource()));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst results = <S[]>modifier(context);\n\t\t\t\t\t\t\t\tresults.forEach((source) => {\n\t\t\t\t\t\t\t\t\tnext.push(child.copyFor(source));\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tif (!forked) throw e;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (context.getCommand()) {\n\t\t\t\t\tfoundCommand = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst value = await context.getCommand()(context);\n\t\t\t\t\t\tresult += value || value === 0 ? value : 1;\n\t\t\t\t\t\tsuccessfulForks++;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!forked) throw e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontexts = next;\n\t\t\tnext = [];\n\t\t}\n\n\t\tif (!foundCommand) {\n\t\t\tthrow DISPATCHER_UNKNOWN_COMMAND.createWithContext(parse.getReader());\n\t\t}\n\t\treturn forked ? successfulForks : result;\n\t}\n\n\tasync parse(\n\t\treader: StringReader | string,\n\t\tsource: S,\n\t): Promise<ParseResults<S>> {\n\t\treader = new StringReader(reader);\n\t\tconst context = new CommandContextBuilder<S>(\n\t\t\tthis,\n\t\t\tsource,\n\t\t\tthis.root,\n\t\t\treader.getCursor(),\n\t\t);\n\t\treturn this.parseNodes(this.root, reader, context);\n\t}\n\n\tprivate async parseNodes(\n\t\tnode: CommandNode<S>,\n\t\toriginalReader: StringReader,\n\t\tcontextSoFar: CommandContextBuilder<S>,\n\t): Promise<ParseResults<S>> {\n\t\tconst source = contextSoFar.getSource();\n\t\tconst errors = new Map<CommandNode<S>, CommandSyntaxError>();\n\t\tconst potentials = [];\n\t\tconst cursor = originalReader.getCursor();\n\n\t\tfor (const child of node.getRelevantNodes(originalReader)) {\n\t\t\tif (!(await child.canUse(source))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst context = contextSoFar.copy();\n\t\t\tconst reader = new StringReader(originalReader);\n\n\t\t\ttry {\n\t\t\t\ttry {\n\t\t\t\t\tchild.parse(reader, context);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof CommandSyntaxError) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow DISPATCHER_PARSE_ERROR.createWithContext(reader, e.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reader.canRead() && reader.peek() !== \" \") {\n\t\t\t\t\tthrow DISPATCHER_EXPECTED_ARGUMENT_SEPARATOR.createWithContext(\n\t\t\t\t\t\treader,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof CommandSyntaxError) {\n\t\t\t\t\terrors.set(child, e);\n\t\t\t\t\treader.setCursor(cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.withCommand(child.getCommand());\n\t\t\tif (reader.canRead(child.getRedirect() === null ? 2 : 1)) {\n\t\t\t\treader.skip();\n\t\t\t\tif (child.getRedirect()) {\n\t\t\t\t\tconst childContext = new CommandContextBuilder<S>(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tchild.getRedirect(),\n\t\t\t\t\t\treader.getCursor(),\n\t\t\t\t\t);\n\t\t\t\t\tconst parse = await this.parseNodes(\n\t\t\t\t\t\tchild.getRedirect(),\n\t\t\t\t\t\treader,\n\t\t\t\t\t\tchildContext,\n\t\t\t\t\t);\n\t\t\t\t\tcontext.withChild(parse.getContext());\n\t\t\t\t\treturn new ParseResults<S>(\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tparse.getReader(),\n\t\t\t\t\t\tparse.getErrors(),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpotentials.push(this.parseNodes(child, reader, context));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpotentials.push(new ParseResults(context, reader, new Map()));\n\t\t\t}\n\t\t}\n\t\tif (potentials.length === 0) {\n\t\t\tpotentials.push(new ParseResults(contextSoFar, originalReader, errors));\n\t\t}\n\t\treturn potentials[0];\n\t}\n\n\tasync getAllUsage(\n\t\tnode: CommandNode<S>,\n\t\tsource: S,\n\t\trestricted: boolean,\n\t): Promise<string[]> {\n\t\tconst result = [];\n\t\tawait this.getAllUsageImpl(node, source, result, \"\", restricted);\n\t\treturn result;\n\t}\n\n\tprivate async getAllUsageImpl(\n\t\tnode: CommandNode<S>,\n\t\tsource: S,\n\t\tresult: string[],\n\t\tprefix: string,\n\t\trestricted: boolean,\n\t): Promise<void> {\n\t\tif (restricted && !(await node.canUse(source))) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (node.getCommand() != null) {\n\t\t\tresult.push(prefix);\n\t\t}\n\n\t\tif (node.getRedirect() != null) {\n\t\t\tconst redirect =\n\t\t\t\tnode.getRedirect() === this.root\n\t\t\t\t\t? \"...\"\n\t\t\t\t\t: `-> ${node.getRedirect().getUsageText()}`;\n\t\t\tresult.push(\n\t\t\t\tprefix.length === 0\n\t\t\t\t\t? `${node.getUsageText()} ${redirect}`\n\t\t\t\t\t: `${prefix} ${redirect}`,\n\t\t\t);\n\t\t} else if (node.getChildren().length > 0) {\n\t\t\tfor (const child of node.getChildren()) {\n\t\t\t\tconst newPrefix =\n\t\t\t\t\tprefix.length === 0\n\t\t\t\t\t\t? child.getUsageText()\n\t\t\t\t\t\t: `${prefix} ${child.getUsageText()}`;\n\t\t\t\tawait this.getAllUsageImpl(\n\t\t\t\t\tchild,\n\t\t\t\t\tsource,\n\t\t\t\t\tresult,\n\t\t\t\t\tnewPrefix,\n\t\t\t\t\trestricted,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getCompletionSuggestions(\n\t\tparse: ParseResults<S>,\n\t\tcursor?: number,\n\t): Promise<Suggestions> {\n\t\tif (cursor === undefined) {\n\t\t\tcursor = parse.getReader().getTotalLength();\n\t\t}\n\t\tconst context = parse.getContext();\n\t\tconst nodeBeforeCursor = context.findSuggestionContext(cursor);\n\t\tconst parent = nodeBeforeCursor.parent;\n\t\tconst start = Math.min(nodeBeforeCursor.startPos, cursor);\n\n\t\tconst fullInput = parse.getReader().getString();\n\t\tconst truncatedInput = fullInput.substring(0, cursor);\n\t\tconst promises: Promise<Suggestions>[] = [];\n\t\tfor (const node of parent.getChildren()) {\n\t\t\tlet promise = Suggestions.empty();\n\t\t\ttry {\n\t\t\t\tpromise = node.listSuggestions(\n\t\t\t\t\tcontext.build(truncatedInput),\n\t\t\t\t\tnew SuggestionsBuilder(truncatedInput, start),\n\t\t\t\t);\n\t\t\t} catch (ignored) {\n\t\t\t\tconsole.log(\"???\", ignored);\n\t\t\t}\n\t\t\tpromises.push(promise);\n\t\t}\n\t\tconst suggestions = await Promise.all(promises);\n\t\treturn Suggestions.merge(fullInput, suggestions);\n\t}\n\n\tgetSmartUsage(node: CommandNode<S>, source: S): Map<CommandNode<S>, string>;\n\tgetSmartUsage(\n\t\tnode: CommandNode<S>,\n\t\tsource: S,\n\t\toptional: boolean,\n\t\tdeep: boolean,\n\t): string;\n\n\tgetSmartUsage(\n\t\tnode: CommandNode<S>,\n\t\tsource: S,\n\t\toptional?: boolean,\n\t\tdeep?: boolean,\n\t): Map<CommandNode<S>, string> | string {\n\t\tif (optional === undefined && deep === undefined) {\n\t\t\tconst result = new Map<CommandNode<S>, string>();\n\t\t\tconst optional: boolean =\n\t\t\t\tnode.getCommand() !== undefined && node.getCommand() !== null;\n\t\t\tconst children = node.getChildren();\n\n\t\t\tfor (const index in children) {\n\t\t\t\tconst child = children[index];\n\t\t\t\tconst usage = this.getSmartUsage(child, source, optional, false);\n\n\t\t\t\tif (usage !== undefined) {\n\t\t\t\t\tresult.set(child, usage);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\tif (!node.canUse(source)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst self: string = optional\n\t\t\t\t? CommandDispatcher.USAGE_OPTIONAL_OPEN +\n\t\t\t\t\tnode.getUsageText() +\n\t\t\t\t\tCommandDispatcher.USAGE_OPTIONAL_CLOSE\n\t\t\t\t: node.getUsageText();\n\t\t\tconst childOptional: boolean = node.getCommand() !== undefined;\n\t\t\tconst open: string = childOptional\n\t\t\t\t? CommandDispatcher.USAGE_OPTIONAL_OPEN\n\t\t\t\t: CommandDispatcher.USAGE_REQUIRED_OPEN;\n\t\t\tconst close: string = childOptional\n\t\t\t\t? CommandDispatcher.USAGE_OPTIONAL_CLOSE\n\t\t\t\t: CommandDispatcher.USAGE_REQUIRED_CLOSE;\n\n\t\t\tif (!deep) {\n\t\t\t\tif (node.getRedirect() !== undefined) {\n\t\t\t\t\tconst redirect =\n\t\t\t\t\t\tnode.getRedirect() === this.root\n\t\t\t\t\t\t\t? \"...\"\n\t\t\t\t\t\t\t: `-> ${node.getRedirect().getUsageText()}`;\n\t\t\t\t\treturn `${self} ${redirect}`;\n\t\t\t\t} else {\n\t\t\t\t\tconst children: CommandNode<S>[] = node\n\t\t\t\t\t\t.getChildren()\n\t\t\t\t\t\t.filter((c) => c.canUse(source));\n\n\t\t\t\t\tif (children.length === 1) {\n\t\t\t\t\t\tconst usage = String(\n\t\t\t\t\t\t\tthis.getSmartUsage(\n\t\t\t\t\t\t\t\tchildren[0],\n\t\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\t\tchildOptional,\n\t\t\t\t\t\t\t\tchildOptional,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (usage !== undefined) {\n\t\t\t\t\t\t\treturn `${self} ${usage}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (children.length > 1) {\n\t\t\t\t\t\tconst childUsage = new Set<string>();\n\n\t\t\t\t\t\tfor (const index in children) {\n\t\t\t\t\t\t\tconst child = children[index];\n\t\t\t\t\t\t\tconst usage = this.getSmartUsage(\n\t\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\t\tchildOptional,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (usage !== undefined) {\n\t\t\t\t\t\t\t\tchildUsage.add(usage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (childUsage.size === 1) {\n\t\t\t\t\t\t\tconst usage = childUsage.values().next().value;\n\t\t\t\t\t\t\treturn `${self} ${childOptional ? CommandDispatcher.USAGE_OPTIONAL_OPEN + usage + CommandDispatcher.USAGE_OPTIONAL_CLOSE : usage}`;\n\t\t\t\t\t\t} else if (childUsage.size > 1) {\n\t\t\t\t\t\t\tlet builder = open;\n\n\t\t\t\t\t\t\tfor (let index = 0; index < children.length; index++) {\n\t\t\t\t\t\t\t\tconst child = children[index];\n\n\t\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\t\tbuilder += CommandDispatcher.USAGE_OR;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbuilder += child.getUsageText();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\t\t\tbuilder += close;\n\t\t\t\t\t\t\t\treturn `${self} ${builder}`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRoot(): RootCommandNode<S> {\n\t\treturn this.root;\n\t}\n}\n"],"mappings":"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"}
@@ -1,10 +1,18 @@
1
- import type { CommandContextBuilder, CommandNode, CommandSyntaxError, StringReader } from ".";
2
- export declare class ParseResults<S> {
3
- private context;
4
- private reader;
5
- private errors;
6
- constructor(context: CommandContextBuilder<S>, reader: StringReader, errors: Map<CommandNode<S>, CommandSyntaxError>);
7
- getContext(): CommandContextBuilder<S>;
8
- getReader(): StringReader;
9
- getErrors(): Map<CommandNode<S>, CommandSyntaxError>;
1
+ import { StringReader } from "./StringReader.js";
2
+ import { CommandContextBuilder } from "./context/CommandContextBuilder.js";
3
+ import { CommandNode } from "./tree/CommandNode.js";
4
+ import { CommandSyntaxError } from "./exceptions/CommandSyntaxError.js";
5
+
6
+ //#region src/ParseResults.d.ts
7
+ declare class ParseResults<S> {
8
+ private context;
9
+ private reader;
10
+ private errors;
11
+ constructor(context: CommandContextBuilder<S>, reader: StringReader, errors: Map<CommandNode<S>, CommandSyntaxError>);
12
+ getContext(): CommandContextBuilder<S>;
13
+ getReader(): StringReader;
14
+ getErrors(): Map<CommandNode<S>, CommandSyntaxError>;
10
15
  }
16
+ //#endregion
17
+ export { ParseResults };
18
+ //# sourceMappingURL=ParseResults.d.ts.map
@@ -1,20 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParseResults = void 0;
4
- class ParseResults {
5
- constructor(context, reader, errors) {
6
- this.context = context;
7
- this.reader = reader;
8
- this.errors = errors;
9
- }
10
- getContext() {
11
- return this.context;
12
- }
13
- getReader() {
14
- return this.reader;
15
- }
16
- getErrors() {
17
- return this.errors;
18
- }
19
- }
20
- exports.ParseResults = ParseResults;
1
+ var e=class{constructor(e,t,n){this.context=e,this.reader=t,this.errors=n}getContext(){return this.context}getReader(){return this.reader}getErrors(){return this.errors}};export{e as ParseResults};
2
+ //# sourceMappingURL=ParseResults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParseResults.js","names":[],"sources":["../src/ParseResults.ts"],"sourcesContent":["import type {\n\tCommandContextBuilder,\n\tCommandNode,\n\tCommandSyntaxError,\n\tStringReader,\n} from \".\";\n\nexport class ParseResults<S> {\n\tprivate context: CommandContextBuilder<S>;\n\tprivate reader: StringReader;\n\tprivate errors: Map<CommandNode<S>, CommandSyntaxError>;\n\n\tconstructor(\n\t\tcontext: CommandContextBuilder<S>,\n\t\treader: StringReader,\n\t\terrors: Map<CommandNode<S>, CommandSyntaxError>,\n\t) {\n\t\tthis.context = context;\n\t\tthis.reader = reader;\n\t\tthis.errors = errors;\n\t}\n\n\tgetContext(): CommandContextBuilder<S> {\n\t\treturn this.context;\n\t}\n\n\tgetReader(): StringReader {\n\t\treturn this.reader;\n\t}\n\n\tgetErrors(): Map<CommandNode<S>, CommandSyntaxError> {\n\t\treturn this.errors;\n\t}\n}\n"],"mappings":"AAOA,IAAa,EAAb,KAA6B,CAK5B,YACC,EACA,EACA,EACC,CACD,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,OAAS,EAGf,YAAuC,CACtC,OAAO,KAAK,QAGb,WAA0B,CACzB,OAAO,KAAK,OAGb,WAAqD,CACpD,OAAO,KAAK"}
@@ -1 +1,5 @@
1
- export type Predicate<S> = (c: S) => Promise<boolean>;
1
+ //#region src/Predicate.d.ts
2
+ type Predicate<S> = (c: S) => Promise<boolean>;
3
+ //#endregion
4
+ export { Predicate };
5
+ //# sourceMappingURL=Predicate.d.ts.map
@@ -1,26 +1,30 @@
1
- export declare class StringReader {
2
- private string;
3
- private cursor;
4
- constructor(string: string | StringReader);
5
- getString(): string;
6
- getCursor(): number;
7
- setCursor(cursor: number): void;
8
- getRemainingLength(): number;
9
- getTotalLength(): number;
10
- getRead(): string;
11
- getRemaining(): string;
12
- canRead(length?: number): boolean;
13
- peek(offset?: number): string;
14
- read(): string;
15
- skip(): void;
16
- isAllowedNumber(c: string): boolean;
17
- readInt(): number;
18
- readLong(): bigint;
19
- readFloat(): number;
20
- isAllowedInUnquotedString(c: string): boolean;
21
- isQuotedStringStart(c: string): boolean;
22
- readUnquotedString(): string;
23
- readStringUntil(terminator: string): string;
24
- readString(): string;
25
- readBoolean(): boolean;
1
+ //#region src/StringReader.d.ts
2
+ declare class StringReader {
3
+ private string;
4
+ private cursor;
5
+ constructor(string: string | StringReader);
6
+ getString(): string;
7
+ getCursor(): number;
8
+ setCursor(cursor: number): void;
9
+ getRemainingLength(): number;
10
+ getTotalLength(): number;
11
+ getRead(): string;
12
+ getRemaining(): string;
13
+ canRead(length?: number): boolean;
14
+ peek(offset?: number): string;
15
+ read(): string;
16
+ skip(): void;
17
+ isAllowedNumber(c: string): boolean;
18
+ readInt(): number;
19
+ readLong(): bigint;
20
+ readFloat(): number;
21
+ isAllowedInUnquotedString(c: string): boolean;
22
+ isQuotedStringStart(c: string): boolean;
23
+ readUnquotedString(): string;
24
+ readStringUntil(terminator: string): string;
25
+ readString(): string;
26
+ readBoolean(): boolean;
26
27
  }
28
+ //#endregion
29
+ export { StringReader };
30
+ //# sourceMappingURL=StringReader.d.ts.map