@jsprismarine/brigadier 0.2.1 → 0.3.0

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 (269) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -21
  3. package/README.md +85 -81
  4. package/dist/CommandSyntaxException-BKBHJvxr.cjs +173 -0
  5. package/dist/CommandSyntaxException-Dz8Qlq9d.js +168 -0
  6. package/dist/LiteralArgumentBuilder-2hpX2C86.js +121 -0
  7. package/dist/LiteralArgumentBuilder-s6PUMmST.cjs +125 -0
  8. package/dist/RequiredArgumentBuilder-D105occO.js +144 -0
  9. package/dist/RequiredArgumentBuilder-DMJ4kl0u.cjs +148 -0
  10. package/dist/index.cjs.js +63 -0
  11. package/dist/index.d.ts +25 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.es.js +31 -0
  14. package/dist/lib/AmbiguityConsumer.cjs.js +3 -0
  15. package/dist/lib/AmbiguityConsumer.d.ts +6 -0
  16. package/dist/lib/AmbiguityConsumer.d.ts.map +1 -0
  17. package/dist/lib/AmbiguityConsumer.es.js +2 -0
  18. package/dist/lib/Command.cjs.js +3 -0
  19. package/dist/lib/Command.d.ts +6 -0
  20. package/dist/lib/Command.d.ts.map +1 -0
  21. package/dist/lib/Command.es.js +2 -0
  22. package/dist/lib/CommandDispatcher.cjs.js +369 -0
  23. package/dist/lib/CommandDispatcher.d.ts +31 -0
  24. package/dist/lib/CommandDispatcher.d.ts.map +1 -0
  25. package/dist/lib/CommandDispatcher.es.js +365 -0
  26. package/dist/lib/ImmutableStringReader.cjs.js +3 -0
  27. package/dist/lib/ImmutableStringReader.d.ts +13 -0
  28. package/dist/lib/ImmutableStringReader.d.ts.map +1 -0
  29. package/dist/lib/ImmutableStringReader.es.js +2 -0
  30. package/dist/lib/LiteralMessage.cjs.js +19 -0
  31. package/dist/lib/LiteralMessage.d.ts +9 -0
  32. package/dist/lib/LiteralMessage.d.ts.map +1 -0
  33. package/dist/lib/LiteralMessage.es.js +15 -0
  34. package/dist/lib/Message.cjs.js +3 -0
  35. package/dist/lib/Message.d.ts +4 -0
  36. package/dist/lib/Message.d.ts.map +1 -0
  37. package/dist/lib/Message.es.js +2 -0
  38. package/dist/lib/ParseResults.cjs.js +30 -0
  39. package/dist/lib/ParseResults.d.ts +15 -0
  40. package/dist/lib/ParseResults.d.ts.map +1 -0
  41. package/dist/lib/ParseResults.es.js +26 -0
  42. package/dist/lib/Predicate.cjs.js +3 -0
  43. package/dist/lib/Predicate.d.ts +4 -0
  44. package/dist/lib/Predicate.d.ts.map +1 -0
  45. package/dist/lib/Predicate.es.js +2 -0
  46. package/dist/lib/RedirectModifier.cjs.js +3 -0
  47. package/dist/lib/RedirectModifier.d.ts +6 -0
  48. package/dist/lib/RedirectModifier.d.ts.map +1 -0
  49. package/dist/lib/RedirectModifier.es.js +2 -0
  50. package/dist/lib/ResultConsumer.cjs.js +3 -0
  51. package/dist/lib/ResultConsumer.d.ts +6 -0
  52. package/dist/lib/ResultConsumer.d.ts.map +1 -0
  53. package/dist/lib/ResultConsumer.es.js +2 -0
  54. package/dist/lib/SingleRedirectModifier.cjs.js +3 -0
  55. package/dist/lib/SingleRedirectModifier.d.ts +6 -0
  56. package/dist/lib/SingleRedirectModifier.d.ts.map +1 -0
  57. package/dist/lib/SingleRedirectModifier.es.js +2 -0
  58. package/dist/lib/StringReader.cjs.js +164 -0
  59. package/dist/lib/StringReader.d.ts +29 -0
  60. package/dist/lib/StringReader.d.ts.map +1 -0
  61. package/dist/lib/StringReader.es.js +160 -0
  62. package/dist/lib/arguments/ArgumentType.cjs.js +23 -0
  63. package/dist/lib/arguments/ArgumentType.d.ts +23 -0
  64. package/dist/lib/arguments/ArgumentType.d.ts.map +1 -0
  65. package/dist/lib/arguments/ArgumentType.es.js +19 -0
  66. package/dist/lib/arguments/BoolArgumentType.cjs.js +33 -0
  67. package/dist/lib/arguments/BoolArgumentType.d.ts +15 -0
  68. package/dist/lib/arguments/BoolArgumentType.d.ts.map +1 -0
  69. package/dist/lib/arguments/BoolArgumentType.es.js +29 -0
  70. package/dist/lib/arguments/FloatArgumentType.cjs.js +71 -0
  71. package/dist/lib/arguments/FloatArgumentType.d.ts +18 -0
  72. package/dist/lib/arguments/FloatArgumentType.d.ts.map +1 -0
  73. package/dist/lib/arguments/FloatArgumentType.es.js +67 -0
  74. package/dist/lib/arguments/IntegerArgumentType.cjs.js +71 -0
  75. package/dist/lib/arguments/IntegerArgumentType.d.ts +18 -0
  76. package/dist/lib/arguments/IntegerArgumentType.d.ts.map +1 -0
  77. package/dist/lib/arguments/IntegerArgumentType.es.js +67 -0
  78. package/dist/lib/arguments/StringArgumentType.cjs.js +73 -0
  79. package/dist/lib/arguments/StringArgumentType.d.ts +23 -0
  80. package/dist/lib/arguments/StringArgumentType.d.ts.map +1 -0
  81. package/dist/lib/arguments/StringArgumentType.es.js +68 -0
  82. package/dist/lib/builder/ArgumentBuilder.cjs.js +72 -0
  83. package/dist/lib/builder/ArgumentBuilder.d.ts +30 -0
  84. package/dist/lib/builder/ArgumentBuilder.d.ts.map +1 -0
  85. package/dist/lib/builder/ArgumentBuilder.es.js +68 -0
  86. package/dist/lib/builder/LiteralArgumentBuilder.cjs.js +20 -0
  87. package/dist/lib/builder/LiteralArgumentBuilder.d.ts +13 -0
  88. package/dist/lib/builder/LiteralArgumentBuilder.d.ts.map +1 -0
  89. package/dist/lib/builder/LiteralArgumentBuilder.es.js +11 -0
  90. package/dist/lib/builder/RequiredArgumentBuilder.cjs.js +21 -0
  91. package/dist/lib/builder/RequiredArgumentBuilder.d.ts +20 -0
  92. package/dist/lib/builder/RequiredArgumentBuilder.d.ts.map +1 -0
  93. package/dist/lib/builder/RequiredArgumentBuilder.es.js +12 -0
  94. package/dist/lib/context/CommandContext.cjs.js +117 -0
  95. package/dist/lib/context/CommandContext.d.ts +35 -0
  96. package/dist/lib/context/CommandContext.d.ts.map +1 -0
  97. package/dist/lib/context/CommandContext.es.js +113 -0
  98. package/dist/lib/context/CommandContextBuilder.cjs.js +142 -0
  99. package/dist/lib/context/CommandContextBuilder.d.ts +40 -0
  100. package/dist/lib/context/CommandContextBuilder.d.ts.map +1 -0
  101. package/dist/lib/context/CommandContextBuilder.es.js +138 -0
  102. package/dist/lib/context/ParsedArgument.cjs.js +30 -0
  103. package/dist/lib/context/ParsedArgument.d.ts +11 -0
  104. package/dist/lib/context/ParsedArgument.d.ts.map +1 -0
  105. package/dist/lib/context/ParsedArgument.es.js +26 -0
  106. package/dist/lib/context/ParsedCommandNode.cjs.js +32 -0
  107. package/dist/lib/context/ParsedCommandNode.d.ts +13 -0
  108. package/dist/lib/context/ParsedCommandNode.d.ts.map +1 -0
  109. package/dist/lib/context/ParsedCommandNode.es.js +28 -0
  110. package/dist/lib/context/StringRange.cjs.js +52 -0
  111. package/dist/lib/context/StringRange.d.ts +18 -0
  112. package/dist/lib/context/StringRange.d.ts.map +1 -0
  113. package/dist/lib/context/StringRange.es.js +48 -0
  114. package/dist/lib/context/SuggestionContext.cjs.js +15 -0
  115. package/dist/lib/context/SuggestionContext.d.ts +8 -0
  116. package/dist/lib/context/SuggestionContext.d.ts.map +1 -0
  117. package/dist/lib/context/SuggestionContext.es.js +11 -0
  118. package/dist/lib/exceptions/BuiltInExceptionProvider.cjs.js +3 -0
  119. package/dist/lib/exceptions/BuiltInExceptionProvider.d.ts +25 -0
  120. package/dist/lib/exceptions/BuiltInExceptionProvider.d.ts.map +1 -0
  121. package/dist/lib/exceptions/BuiltInExceptionProvider.es.js +2 -0
  122. package/dist/lib/exceptions/BuiltInExceptions.cjs.js +11 -0
  123. package/dist/lib/exceptions/BuiltInExceptions.d.ts +45 -0
  124. package/dist/lib/exceptions/BuiltInExceptions.d.ts.map +1 -0
  125. package/dist/lib/exceptions/BuiltInExceptions.es.js +3 -0
  126. package/dist/lib/exceptions/CommandExceptionType.cjs.js +3 -0
  127. package/dist/lib/exceptions/CommandExceptionType.d.ts +3 -0
  128. package/dist/lib/exceptions/CommandExceptionType.d.ts.map +1 -0
  129. package/dist/lib/exceptions/CommandExceptionType.es.js +2 -0
  130. package/dist/lib/exceptions/CommandSyntaxException.cjs.js +11 -0
  131. package/dist/lib/exceptions/CommandSyntaxException.d.ts +21 -0
  132. package/dist/lib/exceptions/CommandSyntaxException.d.ts.map +1 -0
  133. package/dist/lib/exceptions/CommandSyntaxException.es.js +3 -0
  134. package/dist/lib/exceptions/DynamicCommandExceptionType.cjs.js +11 -0
  135. package/dist/lib/exceptions/DynamicCommandExceptionType.d.ts +12 -0
  136. package/dist/lib/exceptions/DynamicCommandExceptionType.d.ts.map +1 -0
  137. package/dist/lib/exceptions/DynamicCommandExceptionType.es.js +3 -0
  138. package/dist/lib/exceptions/SimpleCommandExceptionType.cjs.js +11 -0
  139. package/dist/lib/exceptions/SimpleCommandExceptionType.d.ts +13 -0
  140. package/dist/lib/exceptions/SimpleCommandExceptionType.d.ts.map +1 -0
  141. package/dist/lib/exceptions/SimpleCommandExceptionType.es.js +3 -0
  142. package/dist/lib/suggestion/IntegerSuggestion.cjs.js +39 -0
  143. package/dist/lib/suggestion/IntegerSuggestion.d.ts +14 -0
  144. package/dist/lib/suggestion/IntegerSuggestion.d.ts.map +1 -0
  145. package/dist/lib/suggestion/IntegerSuggestion.es.js +35 -0
  146. package/dist/lib/suggestion/Suggestion.cjs.js +72 -0
  147. package/dist/lib/suggestion/Suggestion.d.ts +19 -0
  148. package/dist/lib/suggestion/Suggestion.d.ts.map +1 -0
  149. package/dist/lib/suggestion/Suggestion.es.js +68 -0
  150. package/dist/lib/suggestion/SuggestionProvider.cjs.js +3 -0
  151. package/dist/lib/suggestion/SuggestionProvider.d.ts +8 -0
  152. package/dist/lib/suggestion/SuggestionProvider.d.ts.map +1 -0
  153. package/dist/lib/suggestion/SuggestionProvider.es.js +2 -0
  154. package/dist/lib/suggestion/Suggestions.cjs.js +71 -0
  155. package/dist/lib/suggestion/Suggestions.d.ts +18 -0
  156. package/dist/lib/suggestion/Suggestions.d.ts.map +1 -0
  157. package/dist/lib/suggestion/Suggestions.es.js +67 -0
  158. package/dist/lib/suggestion/SuggestionsBuilder.cjs.js +59 -0
  159. package/dist/lib/suggestion/SuggestionsBuilder.d.ts +20 -0
  160. package/dist/lib/suggestion/SuggestionsBuilder.d.ts.map +1 -0
  161. package/dist/lib/suggestion/SuggestionsBuilder.es.js +55 -0
  162. package/dist/lib/tree/ArgumentCommandNode.cjs.js +20 -0
  163. package/dist/lib/tree/ArgumentCommandNode.d.ts +33 -0
  164. package/dist/lib/tree/ArgumentCommandNode.d.ts.map +1 -0
  165. package/dist/lib/tree/ArgumentCommandNode.es.js +12 -0
  166. package/dist/lib/tree/CommandNode.cjs.js +133 -0
  167. package/dist/lib/tree/CommandNode.d.ts +47 -0
  168. package/dist/lib/tree/CommandNode.d.ts.map +1 -0
  169. package/dist/lib/tree/CommandNode.es.js +129 -0
  170. package/dist/lib/tree/LiteralCommandNode.cjs.js +19 -0
  171. package/dist/lib/tree/LiteralCommandNode.d.ts +29 -0
  172. package/dist/lib/tree/LiteralCommandNode.d.ts.map +1 -0
  173. package/dist/lib/tree/LiteralCommandNode.es.js +11 -0
  174. package/dist/lib/tree/RootCommandNode.cjs.js +59 -0
  175. package/dist/lib/tree/RootCommandNode.d.ts +23 -0
  176. package/dist/lib/tree/RootCommandNode.d.ts.map +1 -0
  177. package/dist/lib/tree/RootCommandNode.es.js +55 -0
  178. package/dist/lib/util/isEqual.cjs.js +59 -0
  179. package/dist/lib/util/isEqual.d.ts +2 -0
  180. package/dist/lib/util/isEqual.d.ts.map +1 -0
  181. package/dist/lib/util/isEqual.es.js +55 -0
  182. package/package.json +40 -41
  183. package/dist/index.js +0 -82
  184. package/dist/index.js.map +0 -1
  185. package/dist/lib/AmbiguityConsumer.js +0 -3
  186. package/dist/lib/AmbiguityConsumer.js.map +0 -1
  187. package/dist/lib/Command.js +0 -3
  188. package/dist/lib/Command.js.map +0 -1
  189. package/dist/lib/CommandDispatcher.js +0 -360
  190. package/dist/lib/CommandDispatcher.js.map +0 -1
  191. package/dist/lib/ImmutableStringReader.js +0 -3
  192. package/dist/lib/ImmutableStringReader.js.map +0 -1
  193. package/dist/lib/LiteralMessage.js +0 -15
  194. package/dist/lib/LiteralMessage.js.map +0 -1
  195. package/dist/lib/Message.js +0 -3
  196. package/dist/lib/Message.js.map +0 -1
  197. package/dist/lib/ParseResults.js +0 -24
  198. package/dist/lib/ParseResults.js.map +0 -1
  199. package/dist/lib/Predicate.js +0 -3
  200. package/dist/lib/Predicate.js.map +0 -1
  201. package/dist/lib/RedirectModifier.js +0 -3
  202. package/dist/lib/RedirectModifier.js.map +0 -1
  203. package/dist/lib/ResultConsumer.js +0 -3
  204. package/dist/lib/ResultConsumer.js.map +0 -1
  205. package/dist/lib/SingleRedirectModifier.js +0 -3
  206. package/dist/lib/SingleRedirectModifier.js.map +0 -1
  207. package/dist/lib/StringReader.js +0 -176
  208. package/dist/lib/StringReader.js.map +0 -1
  209. package/dist/lib/arguments/ArgumentType.js +0 -19
  210. package/dist/lib/arguments/ArgumentType.js.map +0 -1
  211. package/dist/lib/arguments/BoolArgumentType.js +0 -30
  212. package/dist/lib/arguments/BoolArgumentType.js.map +0 -1
  213. package/dist/lib/arguments/FloatArgumentType.js +0 -61
  214. package/dist/lib/arguments/FloatArgumentType.js.map +0 -1
  215. package/dist/lib/arguments/IntegerArgumentType.js +0 -61
  216. package/dist/lib/arguments/IntegerArgumentType.js.map +0 -1
  217. package/dist/lib/arguments/StringArgumentType.js +0 -71
  218. package/dist/lib/arguments/StringArgumentType.js.map +0 -1
  219. package/dist/lib/builder/ArgumentBuilder.js +0 -66
  220. package/dist/lib/builder/ArgumentBuilder.js.map +0 -1
  221. package/dist/lib/builder/LiteralArgumentBuilder.js +0 -33
  222. package/dist/lib/builder/LiteralArgumentBuilder.js.map +0 -1
  223. package/dist/lib/builder/RequiredArgumentBuilder.js +0 -44
  224. package/dist/lib/builder/RequiredArgumentBuilder.js.map +0 -1
  225. package/dist/lib/context/CommandContext.js +0 -96
  226. package/dist/lib/context/CommandContext.js.map +0 -1
  227. package/dist/lib/context/CommandContextBuilder.js +0 -120
  228. package/dist/lib/context/CommandContextBuilder.js.map +0 -1
  229. package/dist/lib/context/ParsedArgument.js +0 -27
  230. package/dist/lib/context/ParsedArgument.js.map +0 -1
  231. package/dist/lib/context/ParsedCommandNode.js +0 -27
  232. package/dist/lib/context/ParsedCommandNode.js.map +0 -1
  233. package/dist/lib/context/StringRange.js +0 -47
  234. package/dist/lib/context/StringRange.js.map +0 -1
  235. package/dist/lib/context/SuggestionContext.js +0 -10
  236. package/dist/lib/context/SuggestionContext.js.map +0 -1
  237. package/dist/lib/exceptions/BuiltInExceptionProvider.js +0 -3
  238. package/dist/lib/exceptions/BuiltInExceptionProvider.js.map +0 -1
  239. package/dist/lib/exceptions/BuiltInExceptions.js +0 -88
  240. package/dist/lib/exceptions/BuiltInExceptions.js.map +0 -1
  241. package/dist/lib/exceptions/CommandExceptionType.js +0 -3
  242. package/dist/lib/exceptions/CommandExceptionType.js.map +0 -1
  243. package/dist/lib/exceptions/CommandSyntaxException.js +0 -57
  244. package/dist/lib/exceptions/CommandSyntaxException.js.map +0 -1
  245. package/dist/lib/exceptions/DynamicCommandExceptionType.js +0 -20
  246. package/dist/lib/exceptions/DynamicCommandExceptionType.js.map +0 -1
  247. package/dist/lib/exceptions/SimpleCommandExceptionType.js +0 -23
  248. package/dist/lib/exceptions/SimpleCommandExceptionType.js.map +0 -1
  249. package/dist/lib/suggestion/IntegerSuggestion.js +0 -41
  250. package/dist/lib/suggestion/IntegerSuggestion.js.map +0 -1
  251. package/dist/lib/suggestion/Suggestion.js +0 -72
  252. package/dist/lib/suggestion/Suggestion.js.map +0 -1
  253. package/dist/lib/suggestion/SuggestionProvider.js +0 -3
  254. package/dist/lib/suggestion/SuggestionProvider.js.map +0 -1
  255. package/dist/lib/suggestion/Suggestions.js +0 -71
  256. package/dist/lib/suggestion/Suggestions.js.map +0 -1
  257. package/dist/lib/suggestion/SuggestionsBuilder.js +0 -54
  258. package/dist/lib/suggestion/SuggestionsBuilder.js.map +0 -1
  259. package/dist/lib/tree/ArgumentCommandNode.js +0 -97
  260. package/dist/lib/tree/ArgumentCommandNode.js.map +0 -1
  261. package/dist/lib/tree/CommandNode.js +0 -134
  262. package/dist/lib/tree/CommandNode.js.map +0 -1
  263. package/dist/lib/tree/LiteralCommandNode.js +0 -93
  264. package/dist/lib/tree/LiteralCommandNode.js.map +0 -1
  265. package/dist/lib/tree/RootCommandNode.js +0 -50
  266. package/dist/lib/tree/RootCommandNode.js.map +0 -1
  267. package/dist/lib/util/isEqual.js +0 -57
  268. package/dist/lib/util/isEqual.js.map +0 -1
  269. package/index.js +0 -1
@@ -0,0 +1,369 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+
5
+ const lib_context_CommandContextBuilder = require('./context/CommandContextBuilder.cjs.js');
6
+ const lib_exceptions_SimpleCommandExceptionType = require('../CommandSyntaxException-BKBHJvxr.cjs');
7
+ const lib_ParseResults = require('./ParseResults.cjs.js');
8
+ const lib_tree_RootCommandNode = require('./tree/RootCommandNode.cjs.js');
9
+ const lib_StringReader = require('./StringReader.cjs.js');
10
+ const lib_suggestion_Suggestions = require('./suggestion/Suggestions.cjs.js');
11
+ const lib_suggestion_SuggestionsBuilder = require('./suggestion/SuggestionsBuilder.cjs.js');
12
+ require('./context/StringRange.cjs.js');
13
+ require('./context/CommandContext.cjs.js');
14
+ require('./util/isEqual.cjs.js');
15
+ require('./context/SuggestionContext.cjs.js');
16
+ require('./context/ParsedCommandNode.cjs.js');
17
+ require('./LiteralMessage.cjs.js');
18
+ require('./tree/CommandNode.cjs.js');
19
+ require('./suggestion/Suggestion.cjs.js');
20
+ require('./suggestion/IntegerSuggestion.cjs.js');
21
+
22
+ const ARGUMENT_SEPARATOR = " ";
23
+ const USAGE_OPTIONAL_OPEN = "[";
24
+ const USAGE_OPTIONAL_CLOSE = "]";
25
+ const USAGE_REQUIRED_OPEN = "(";
26
+ const USAGE_REQUIRED_CLOSE = ")";
27
+ const USAGE_OR = "|";
28
+ class CommandDispatcher {
29
+ root;
30
+ consumer = {
31
+ onCommandComplete() {
32
+ }
33
+ };
34
+ constructor(root = null) {
35
+ this.root = root || new lib_tree_RootCommandNode.default();
36
+ }
37
+ register(command) {
38
+ let build = command.build();
39
+ this.root.addChild(build);
40
+ return build;
41
+ }
42
+ setConsumer(consumer) {
43
+ this.consumer = consumer;
44
+ }
45
+ execute(input, source = null) {
46
+ if (typeof input === "string")
47
+ input = new lib_StringReader.default(input);
48
+ let parse;
49
+ if (input instanceof lib_StringReader.default) {
50
+ if (source)
51
+ parse = this.parse(input, source);
52
+ } else
53
+ parse = input;
54
+ if (parse.getReader().canRead()) {
55
+ if (parse.getExceptions().size === 1) {
56
+ throw parse.getExceptions().values().next().value;
57
+ } else if (parse.getContext().getRange().isEmpty()) {
58
+ throw lib_exceptions_SimpleCommandExceptionType.CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(
59
+ parse.getReader()
60
+ );
61
+ } else {
62
+ throw lib_exceptions_SimpleCommandExceptionType.CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().createWithContext(
63
+ parse.getReader()
64
+ );
65
+ }
66
+ }
67
+ let result = [];
68
+ let forked = false;
69
+ let foundCommand = false;
70
+ let command = parse.getReader().getString();
71
+ let original = parse.getContext().build(command);
72
+ let contexts = [];
73
+ contexts.push(original);
74
+ let next = null;
75
+ while (contexts !== null) {
76
+ for (let i = 0; i < contexts.length; i++) {
77
+ let context = contexts[i];
78
+ let child = context.getChild();
79
+ if (child) {
80
+ forked = forked || context.isForked();
81
+ if (child.hasNodes()) {
82
+ foundCommand = true;
83
+ let modifier = context.getRedirectModifier();
84
+ if (!modifier) {
85
+ if (!next)
86
+ next = [];
87
+ next.push(child.copyFor(context.getSource()));
88
+ } else {
89
+ try {
90
+ let results = modifier.apply(context);
91
+ if (results.length !== 0) {
92
+ if (!next)
93
+ next = [];
94
+ for (let source2 of results) {
95
+ next.push(child.copyFor(source2));
96
+ }
97
+ }
98
+ } catch (ex) {
99
+ this.consumer.onCommandComplete(context, false, 0);
100
+ if (!forked)
101
+ throw ex;
102
+ }
103
+ }
104
+ }
105
+ } else if (context.getCommand()) {
106
+ foundCommand = true;
107
+ try {
108
+ let value = context.getCommand()(context);
109
+ result.push(value);
110
+ this.consumer.onCommandComplete(context, true, value);
111
+ } catch (ex) {
112
+ this.consumer.onCommandComplete(context, false, ex);
113
+ if (!forked)
114
+ throw ex;
115
+ }
116
+ }
117
+ }
118
+ contexts = next;
119
+ next = null;
120
+ }
121
+ if (!foundCommand) {
122
+ this.consumer.onCommandComplete(original, false, 0);
123
+ throw lib_exceptions_SimpleCommandExceptionType.CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(
124
+ parse.getReader()
125
+ );
126
+ }
127
+ return result;
128
+ }
129
+ parse(command, source) {
130
+ if (typeof command === "string")
131
+ command = new lib_StringReader.default(command);
132
+ let context = new lib_context_CommandContextBuilder.default(this, source, this.root, command.getCursor());
133
+ return this.parseNodes(this.root, command, context);
134
+ }
135
+ parseNodes(node, originalReader, contextSoFar) {
136
+ let source = contextSoFar.getSource();
137
+ let errors = null;
138
+ let potentials = null;
139
+ let cursor = originalReader.getCursor();
140
+ for (let child of node.getRelevantNodes(originalReader)) {
141
+ if (!child.canUse(source))
142
+ continue;
143
+ let context = contextSoFar.copy();
144
+ let reader = new lib_StringReader.default(originalReader);
145
+ try {
146
+ child.parse(reader, context);
147
+ if (reader.canRead()) {
148
+ if (reader.peek() != ARGUMENT_SEPARATOR)
149
+ throw lib_exceptions_SimpleCommandExceptionType.CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherExpectedArgumentSeparator().createWithContext(
150
+ reader
151
+ );
152
+ }
153
+ } catch (ex) {
154
+ if (errors == null) {
155
+ errors = /* @__PURE__ */ new Map();
156
+ }
157
+ errors.set(child, ex);
158
+ reader.setCursor(cursor);
159
+ continue;
160
+ }
161
+ context.withCommand(child.getCommand());
162
+ if (reader.canRead(!child.getRedirect() ? 2 : 1)) {
163
+ reader.skip();
164
+ if (child.getRedirect()) {
165
+ let childContext = new lib_context_CommandContextBuilder.default(
166
+ this,
167
+ source,
168
+ child.getRedirect(),
169
+ reader.getCursor()
170
+ );
171
+ let parse = this.parseNodes(child.getRedirect(), reader, childContext);
172
+ context.withChild(parse.getContext());
173
+ return new lib_ParseResults.default(context, parse.getReader(), parse.getExceptions());
174
+ } else {
175
+ let parse = this.parseNodes(child, reader, context);
176
+ if (potentials == null) {
177
+ potentials = [];
178
+ }
179
+ potentials.push(parse);
180
+ }
181
+ } else {
182
+ if (potentials == null) {
183
+ potentials = [];
184
+ }
185
+ potentials.push(new lib_ParseResults.default(context, reader, /* @__PURE__ */ new Map()));
186
+ }
187
+ }
188
+ if (potentials) {
189
+ if (potentials.length > 1) {
190
+ potentials.sort((a, b) => {
191
+ if (!a.getReader().canRead() && b.getReader().canRead()) {
192
+ return -1;
193
+ }
194
+ if (a.getReader().canRead() && !b.getReader().canRead()) {
195
+ return 1;
196
+ }
197
+ if (a.getExceptions().size === 0 && b.getExceptions().size !== 0) {
198
+ return -1;
199
+ }
200
+ if (a.getExceptions().size !== 0 && b.getExceptions().size === 0) {
201
+ return 1;
202
+ }
203
+ return 0;
204
+ });
205
+ }
206
+ return potentials[0];
207
+ }
208
+ return new lib_ParseResults.default(contextSoFar, originalReader, errors == null ? /* @__PURE__ */ new Map() : errors);
209
+ }
210
+ getAllUsage(node, source, restricted) {
211
+ const result = [];
212
+ this.__getAllUsage(node, source, result, "", restricted);
213
+ return result;
214
+ }
215
+ __getAllUsage(node, source, result, prefix = "", restricted) {
216
+ if (restricted && !node.canUse(source)) {
217
+ return;
218
+ }
219
+ if (node.getCommand() != null) {
220
+ result.push(prefix);
221
+ }
222
+ if (node.getRedirect() != null) {
223
+ const redirect = node.getRedirect() === this.root ? "..." : "-> " + node.getRedirect()?.getUsageText();
224
+ result.push(
225
+ prefix.length === 0 ? node.getUsageText() + ARGUMENT_SEPARATOR + redirect : prefix + ARGUMENT_SEPARATOR + redirect
226
+ );
227
+ } else if (node.getChildrenCount() > 0) {
228
+ for (let child of node.getChildren()) {
229
+ this.__getAllUsage(
230
+ child,
231
+ source,
232
+ result,
233
+ prefix.length === 0 ? child.getUsageText() : prefix + ARGUMENT_SEPARATOR + child.getUsageText(),
234
+ restricted
235
+ );
236
+ }
237
+ }
238
+ }
239
+ getSmartUsage(node, source) {
240
+ let result = /* @__PURE__ */ new Map();
241
+ let optional = node.getCommand() !== null;
242
+ for (let child of node.getChildren()) {
243
+ let usage = this.__getSmartUsage(child, source, optional, false);
244
+ if (usage !== null) {
245
+ result.set(child, usage);
246
+ }
247
+ }
248
+ return result;
249
+ }
250
+ __getSmartUsage(node, source, optional, deep) {
251
+ if (!node.canUse(source)) {
252
+ return null;
253
+ }
254
+ let self = optional ? USAGE_OPTIONAL_OPEN + node.getUsageText() + USAGE_OPTIONAL_CLOSE : node.getUsageText();
255
+ let childOptional = node.getCommand() != null;
256
+ let open = childOptional ? USAGE_OPTIONAL_OPEN : USAGE_REQUIRED_OPEN;
257
+ let close = childOptional ? USAGE_OPTIONAL_CLOSE : USAGE_REQUIRED_CLOSE;
258
+ if (!deep) {
259
+ if (node.getRedirect() != null) {
260
+ let redirect = node.getRedirect() == this.root ? "..." : "-> " + node.getRedirect()?.getUsageText();
261
+ return self + ARGUMENT_SEPARATOR + redirect;
262
+ } else {
263
+ let children = [...node.getChildren()].filter((c) => c.canUse(source));
264
+ if (children.length == 1) {
265
+ let usage = this.__getSmartUsage(
266
+ children[0],
267
+ // FIXME
268
+ source,
269
+ childOptional,
270
+ childOptional
271
+ );
272
+ if (usage !== null) {
273
+ return self + ARGUMENT_SEPARATOR + usage;
274
+ }
275
+ } else if (children.length > 1) {
276
+ let childUsage = /* @__PURE__ */ new Set();
277
+ for (let child of children) {
278
+ let usage = this.__getSmartUsage(child, source, childOptional, true);
279
+ if (usage !== null) {
280
+ childUsage.add(usage);
281
+ }
282
+ }
283
+ if (childUsage.size === 1) {
284
+ let usage = childUsage.values().next().value;
285
+ return self + ARGUMENT_SEPARATOR + (childOptional ? USAGE_OPTIONAL_OPEN + usage + USAGE_OPTIONAL_CLOSE : usage);
286
+ } else if (childUsage.size > 1) {
287
+ let builder = open;
288
+ let count = 0;
289
+ for (let child of children) {
290
+ if (count > 0) {
291
+ builder += USAGE_OR;
292
+ }
293
+ builder += child.getUsageText();
294
+ count++;
295
+ }
296
+ if (count > 0) {
297
+ builder += close;
298
+ return self + ARGUMENT_SEPARATOR + builder;
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ return self;
305
+ }
306
+ async getCompletionSuggestions(parse, cursor = parse.getReader().getTotalLength()) {
307
+ let context = parse.getContext();
308
+ let nodeBeforeCursor = context.findSuggestionContext(cursor);
309
+ let parent = nodeBeforeCursor.parent;
310
+ let start = Math.min(nodeBeforeCursor.startPos, cursor);
311
+ let fullInput = parse.getReader().getString();
312
+ let truncatedInput = fullInput.substring(0, cursor);
313
+ let futures = [];
314
+ for (let node of parent.getChildren()) {
315
+ let future = await lib_suggestion_Suggestions.default.empty();
316
+ try {
317
+ future = await node.listSuggestions(
318
+ context.build(truncatedInput),
319
+ new lib_suggestion_SuggestionsBuilder.default(truncatedInput, start)
320
+ );
321
+ } catch (ignored) {
322
+ }
323
+ futures.push(future);
324
+ }
325
+ return Promise.resolve(lib_suggestion_Suggestions.default.merge(fullInput, futures));
326
+ }
327
+ getRoot() {
328
+ return this.root;
329
+ }
330
+ getPath(target) {
331
+ let nodes = [];
332
+ this.addPaths(this.root, nodes, []);
333
+ for (let list of nodes) {
334
+ if (list[list.length - 1] === target) {
335
+ let result = [];
336
+ for (let node of list) {
337
+ if (node !== this.root) {
338
+ result.push(node.getName());
339
+ }
340
+ }
341
+ return result;
342
+ }
343
+ }
344
+ return [];
345
+ }
346
+ findNode(path) {
347
+ let node = this.root;
348
+ for (let name of path) {
349
+ node = node.getChild(name);
350
+ if (!node)
351
+ return null;
352
+ }
353
+ return node;
354
+ }
355
+ findAmbiguities(consumer, context) {
356
+ this.root.findAmbiguities(consumer, context);
357
+ }
358
+ addPaths(node, result, parents) {
359
+ let current = [];
360
+ current.push(...parents);
361
+ current.push(node);
362
+ result.push(current);
363
+ for (let child of node.getChildren())
364
+ this.addPaths(child, result, current);
365
+ }
366
+ }
367
+
368
+ exports.default = CommandDispatcher;
369
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZERpc3BhdGNoZXIuY2pzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0NvbW1hbmREaXNwYXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEFtYmlndWl0eUNvbnN1bWVyIGZyb20gJy4vQW1iaWd1aXR5Q29uc3VtZXInO1xuaW1wb3J0IHR5cGUgQ29tbWFuZENvbnRleHQgZnJvbSAnLi9jb250ZXh0L0NvbW1hbmRDb250ZXh0JztcbmltcG9ydCBDb21tYW5kQ29udGV4dEJ1aWxkZXIgZnJvbSAnLi9jb250ZXh0L0NvbW1hbmRDb250ZXh0QnVpbGRlcic7XG5pbXBvcnQgdHlwZSBDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvQ29tbWFuZE5vZGUnO1xuaW1wb3J0IENvbW1hbmRTeW50YXhFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb25zL0NvbW1hbmRTeW50YXhFeGNlcHRpb24nO1xuaW1wb3J0IHR5cGUgTGl0ZXJhbEFyZ3VtZW50QnVpbGRlciBmcm9tICcuL2J1aWxkZXIvTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcic7XG5pbXBvcnQgdHlwZSBMaXRlcmFsQ29tbWFuZE5vZGUgZnJvbSAnLi90cmVlL0xpdGVyYWxDb21tYW5kTm9kZSc7XG5pbXBvcnQgUGFyc2VSZXN1bHRzIGZyb20gJy4vUGFyc2VSZXN1bHRzJztcbmltcG9ydCB0eXBlIFJlc3VsdENvbnN1bWVyIGZyb20gJy4vUmVzdWx0Q29uc3VtZXInO1xuaW1wb3J0IFJvb3RDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvUm9vdENvbW1hbmROb2RlJztcbmltcG9ydCBTdHJpbmdSZWFkZXIgZnJvbSAnLi9TdHJpbmdSZWFkZXInO1xuaW1wb3J0IHR5cGUgU3VnZ2VzdGlvbkNvbnRleHQgZnJvbSAnLi9jb250ZXh0L1N1Z2dlc3Rpb25Db250ZXh0JztcbmltcG9ydCBTdWdnZXN0aW9ucyBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IFN1Z2dlc3Rpb25zQnVpbGRlciBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnNCdWlsZGVyJztcblxuY29uc3QgQVJHVU1FTlRfU0VQQVJBVE9SID0gJyAnO1xuY29uc3QgVVNBR0VfT1BUSU9OQUxfT1BFTiA9ICdbJztcbmNvbnN0IFVTQUdFX09QVElPTkFMX0NMT1NFID0gJ10nO1xuY29uc3QgVVNBR0VfUkVRVUlSRURfT1BFTiA9ICcoJztcbmNvbnN0IFVTQUdFX1JFUVVJUkVEX0NMT1NFID0gJyknO1xuY29uc3QgVVNBR0VfT1IgPSAnfCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmREaXNwYXRjaGVyPFM+IHtcbiAgICBwcml2YXRlIHJvb3Q6IFJvb3RDb21tYW5kTm9kZTxTPjtcblxuICAgIHByaXZhdGUgY29uc3VtZXI6IFJlc3VsdENvbnN1bWVyPFM+ID0ge1xuICAgICAgICBvbkNvbW1hbmRDb21wbGV0ZSgpIHt9XG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb290OiBSb290Q29tbWFuZE5vZGU8Uz4gfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLnJvb3QgPSByb290IHx8IG5ldyBSb290Q29tbWFuZE5vZGU8Uz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIoY29tbWFuZDogTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcjxTPik6IExpdGVyYWxDb21tYW5kTm9kZTxTPiB7XG4gICAgICAgIGxldCBidWlsZCA9IGNvbW1hbmQuYnVpbGQoKTtcbiAgICAgICAgdGhpcy5yb290LmFkZENoaWxkKGJ1aWxkKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb25zdW1lcihjb25zdW1lcjogUmVzdWx0Q29uc3VtZXI8Uz4pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lciA9IGNvbnN1bWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRlKFxuICAgICAgICBpbnB1dDogc3RyaW5nIHwgU3RyaW5nUmVhZGVyIHwgUGFyc2VSZXN1bHRzPFM+LFxuICAgICAgICBzb3VyY2U6IFMgfCBudWxsID0gbnVsbFxuICAgICk6IFByb21pc2U8YW55PiB8IFByb21pc2U8YW55PltdIHwgYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIGlucHV0ID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG5cbiAgICAgICAgbGV0IHBhcnNlITogUGFyc2VSZXN1bHRzPFM+OyAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5LlxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmdSZWFkZXIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHBhcnNlID0gdGhpcy5wYXJzZShpbnB1dCwgc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHBhcnNlID0gaW5wdXQ7XG5cbiAgICAgICAgaWYgKHBhcnNlLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgaWYgKHBhcnNlLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFyc2UuZ2V0RXhjZXB0aW9ucygpLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2UuZ2V0Q29udGV4dCgpLmdldFJhbmdlKCkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQ29tbWFuZCgpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICBwYXJzZS5nZXRSZWFkZXIoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5kaXNwYXRjaGVyVW5rbm93bkFyZ3VtZW50KCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGZvcmtlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm91bmRDb21tYW5kID0gZmFsc2U7XG4gICAgICAgIGxldCBjb21tYW5kID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IHBhcnNlLmdldENvbnRleHQoKS5idWlsZChjb21tYW5kKTtcbiAgICAgICAgbGV0IGNvbnRleHRzOiBBcnJheTxDb21tYW5kQ29udGV4dDxTPj4gfCBudWxsID0gW107XG4gICAgICAgIGNvbnRleHRzLnB1c2gob3JpZ2luYWwpO1xuICAgICAgICBsZXQgbmV4dDogQ29tbWFuZENvbnRleHQ8Uz5bXSB8IG51bGwgPSBudWxsO1xuICAgICAgICB3aGlsZSAoKGNvbnRleHRzIGFzIGFueSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGV4dCA9IGNvbnRleHRzW2ldITsgLy8gRklYTUVcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSBjb250ZXh0LmdldENoaWxkKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcmtlZCA9IGZvcmtlZCB8fCBjb250ZXh0LmlzRm9ya2VkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5oYXNOb2RlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZENvbW1hbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmaWVyID0gY29udGV4dC5nZXRSZWRpcmVjdE1vZGlmaWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSBuZXh0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5wdXNoKGNoaWxkLmNvcHlGb3IoY29udGV4dC5nZXRTb3VyY2UoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0czogQXJyYXk8Uz4gPSBtb2RpZmllci5hcHBseShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpIG5leHQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goY2hpbGQuY29weUZvcihzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgZmFsc2UsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmtlZCkgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmdldENvbW1hbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZENvbW1hbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gY29udGV4dC5nZXRDb21tYW5kKCkoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgZmFsc2UsIGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9ya2VkKSB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dHMgPSBuZXh0ITsgLy8gRklYTUVcbiAgICAgICAgICAgIG5leHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZENvbW1hbmQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUob3JpZ2luYWwsIGZhbHNlLCAwKTtcbiAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5kaXNwYXRjaGVyVW5rbm93bkNvbW1hbmQoKS5jcmVhdGVXaXRoQ29udGV4dChcbiAgICAgICAgICAgICAgICBwYXJzZS5nZXRSZWFkZXIoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHBhcnNlKGNvbW1hbmQ6IHN0cmluZyB8IFN0cmluZ1JlYWRlciwgc291cmNlOiBTKTogUGFyc2VSZXN1bHRzPFM+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJykgY29tbWFuZCA9IG5ldyBTdHJpbmdSZWFkZXIoY29tbWFuZCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPiA9IG5ldyBDb21tYW5kQ29udGV4dEJ1aWxkZXIodGhpcywgc291cmNlLCB0aGlzLnJvb3QsIGNvbW1hbmQuZ2V0Q3Vyc29yKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU5vZGVzKHRoaXMucm9vdCwgY29tbWFuZCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZU5vZGVzKFxuICAgICAgICBub2RlOiBDb21tYW5kTm9kZTxTPixcbiAgICAgICAgb3JpZ2luYWxSZWFkZXI6IFN0cmluZ1JlYWRlcixcbiAgICAgICAgY29udGV4dFNvRmFyOiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz5cbiAgICApOiBQYXJzZVJlc3VsdHM8Uz4ge1xuICAgICAgICBsZXQgc291cmNlOiBTID0gY29udGV4dFNvRmFyLmdldFNvdXJjZSgpO1xuICAgICAgICBsZXQgZXJyb3JzOiBNYXA8Q29tbWFuZE5vZGU8Uz4sIENvbW1hbmRTeW50YXhFeGNlcHRpb24+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBwb3RlbnRpYWxzOiBQYXJzZVJlc3VsdHM8Uz5bXSB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgY3Vyc29yID0gb3JpZ2luYWxSZWFkZXIuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0UmVsZXZhbnROb2RlcyhvcmlnaW5hbFJlYWRlcikpIHtcbiAgICAgICAgICAgIGlmICghY2hpbGQuY2FuVXNlKHNvdXJjZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgY29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gY29udGV4dFNvRmFyLmNvcHkoKTtcbiAgICAgICAgICAgIGxldCByZWFkZXI6IFN0cmluZ1JlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIob3JpZ2luYWxSZWFkZXIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjaGlsZC5wYXJzZShyZWFkZXIsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlYWRlci5jYW5SZWFkKCkpXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucGVlaygpICE9IEFSR1VNRU5UX1NFUEFSQVRPUilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5kaXNwYXRjaGVyRXhwZWN0ZWRBcmd1bWVudFNlcGFyYXRvcigpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9ycyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3JzLnNldChjaGlsZCwgZXggYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZWFkZXIuc2V0Q3Vyc29yKGN1cnNvcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQud2l0aENvbW1hbmQoY2hpbGQuZ2V0Q29tbWFuZCgpISk7XG4gICAgICAgICAgICBpZiAocmVhZGVyLmNhblJlYWQoIWNoaWxkLmdldFJlZGlyZWN0KCkgPyAyIDogMSkpIHtcbiAgICAgICAgICAgICAgICByZWFkZXIuc2tpcCgpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRSZWRpcmVjdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZENvbnRleHQ6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPiA9IG5ldyBDb21tYW5kQ29udGV4dEJ1aWxkZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZ2V0UmVkaXJlY3QoKSEsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuZ2V0Q3Vyc29yKClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlOiBQYXJzZVJlc3VsdHM8Uz4gPSB0aGlzLnBhcnNlTm9kZXMoY2hpbGQuZ2V0UmVkaXJlY3QoKSEsIHJlYWRlciwgY2hpbGRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53aXRoQ2hpbGQocGFyc2UuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdHMoY29udGV4dCwgcGFyc2UuZ2V0UmVhZGVyKCksIHBhcnNlLmdldEV4Y2VwdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlOiBQYXJzZVJlc3VsdHM8Uz4gPSB0aGlzLnBhcnNlTm9kZXMoY2hpbGQsIHJlYWRlciwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbHMucHVzaChwYXJzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFscyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG90ZW50aWFscy5wdXNoKG5ldyBQYXJzZVJlc3VsdHMoY29udGV4dCwgcmVhZGVyLCBuZXcgTWFwKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3RlbnRpYWxzKSB7XG4gICAgICAgICAgICBpZiAocG90ZW50aWFscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgcG90ZW50aWFscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYS5nZXRSZWFkZXIoKS5jYW5SZWFkKCkgJiYgYi5nZXRSZWFkZXIoKS5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRSZWFkZXIoKS5jYW5SZWFkKCkgJiYgIWIuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRFeGNlcHRpb25zKCkuc2l6ZSA9PT0gMCAmJiBiLmdldEV4Y2VwdGlvbnMoKS5zaXplICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0RXhjZXB0aW9ucygpLnNpemUgIT09IDAgJiYgYi5nZXRFeGNlcHRpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcG90ZW50aWFsc1swXSE7IC8vIEZJWE1FXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0czxTPihjb250ZXh0U29GYXIsIG9yaWdpbmFsUmVhZGVyLCBlcnJvcnMgPT0gbnVsbCA/IG5ldyBNYXAoKSA6IGVycm9ycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMsIHJlc3RyaWN0ZWQ6IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICB0aGlzLl9fZ2V0QWxsVXNhZ2Uobm9kZSwgc291cmNlLCByZXN1bHQsICcnLCByZXN0cmljdGVkKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9fZ2V0QWxsVXNhZ2Uobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHNvdXJjZTogUywgcmVzdWx0OiBzdHJpbmdbXSwgcHJlZml4ID0gJycsIHJlc3RyaWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHJlc3RyaWN0ZWQgJiYgIW5vZGUuY2FuVXNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmdldENvbW1hbmQoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZ2V0UmVkaXJlY3QoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IG5vZGUuZ2V0UmVkaXJlY3QoKSA9PT0gdGhpcy5yb290ID8gJy4uLicgOiAnLT4gJyArIG5vZGUuZ2V0UmVkaXJlY3QoKT8uZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICBwcmVmaXgubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gbm9kZS5nZXRVc2FnZVRleHQoKSArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHJlZGlyZWN0XG4gICAgICAgICAgICAgICAgICAgIDogcHJlZml4ICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgcmVkaXJlY3RcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5nZXRDaGlsZHJlbkNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9fZ2V0QWxsVXNhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4Lmxlbmd0aCA9PT0gMCA/IGNoaWxkLmdldFVzYWdlVGV4dCgpIDogcHJlZml4ICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgY2hpbGQuZ2V0VXNhZ2VUZXh0KCksXG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0ZWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNtYXJ0VXNhZ2Uobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHNvdXJjZTogUyk6IE1hcDxDb21tYW5kTm9kZTxTPiwgc3RyaW5nPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTWFwPENvbW1hbmROb2RlPFM+LCBzdHJpbmc+KCk7XG5cbiAgICAgICAgbGV0IG9wdGlvbmFsID0gbm9kZS5nZXRDb21tYW5kKCkgIT09IG51bGw7XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgbGV0IHVzYWdlID0gdGhpcy5fX2dldFNtYXJ0VXNhZ2UoY2hpbGQsIHNvdXJjZSwgb3B0aW9uYWwsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICh1c2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoY2hpbGQsIHVzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfX2dldFNtYXJ0VXNhZ2Uobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHNvdXJjZTogUywgb3B0aW9uYWw6IGJvb2xlYW4sIGRlZXA6IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCFub2RlLmNhblVzZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxmID0gb3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9PUEVOICsgbm9kZS5nZXRVc2FnZVRleHQoKSArIFVTQUdFX09QVElPTkFMX0NMT1NFIDogbm9kZS5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgbGV0IGNoaWxkT3B0aW9uYWwgPSBub2RlLmdldENvbW1hbmQoKSAhPSBudWxsO1xuICAgICAgICBsZXQgb3BlbiA9IGNoaWxkT3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9PUEVOIDogVVNBR0VfUkVRVUlSRURfT1BFTjtcbiAgICAgICAgbGV0IGNsb3NlID0gY2hpbGRPcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX0NMT1NFIDogVVNBR0VfUkVRVUlSRURfQ0xPU0U7XG5cbiAgICAgICAgaWYgKCFkZWVwKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5nZXRSZWRpcmVjdCgpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3QgPSBub2RlLmdldFJlZGlyZWN0KCkgPT0gdGhpcy5yb290ID8gJy4uLicgOiAnLT4gJyArIG5vZGUuZ2V0UmVkaXJlY3QoKT8uZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyByZWRpcmVjdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuOiBDb21tYW5kTm9kZTxTPltdID0gWy4uLm5vZGUuZ2V0Q2hpbGRyZW4oKV0uZmlsdGVyKChjKSA9PiBjLmNhblVzZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzYWdlID0gdGhpcy5fX2dldFNtYXJ0VXNhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblswXSEsIC8vIEZJWE1FXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRPcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgdXNhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkVXNhZ2UgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2FnZSA9IHRoaXMuX19nZXRTbWFydFVzYWdlKGNoaWxkLCBzb3VyY2UsIGNoaWxkT3B0aW9uYWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRVc2FnZS5hZGQodXNhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFVzYWdlLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2FnZSA9IGNoaWxkVXNhZ2UudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdVTUVOVF9TRVBBUkFUT1IgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGlsZE9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfT1BFTiArIHVzYWdlICsgVVNBR0VfT1BUSU9OQUxfQ0xPU0UgOiB1c2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRVc2FnZS5zaXplID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1aWxkZXIgPSBvcGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyICs9IFVTQUdFX09SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyICs9IGNoaWxkLmdldFVzYWdlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciArPSBjbG9zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIEFSR1VNRU5UX1NFUEFSQVRPUiArIGJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbXBsZXRpb25TdWdnZXN0aW9ucyhcbiAgICAgICAgcGFyc2U6IFBhcnNlUmVzdWx0czxTPixcbiAgICAgICAgY3Vyc29yID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0VG90YWxMZW5ndGgoKVxuICAgICk6IFByb21pc2U8U3VnZ2VzdGlvbnM+IHtcbiAgICAgICAgbGV0IGNvbnRleHQ6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPiA9IHBhcnNlLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG5vZGVCZWZvcmVDdXJzb3I6IFN1Z2dlc3Rpb25Db250ZXh0PFM+ID0gY29udGV4dC5maW5kU3VnZ2VzdGlvbkNvbnRleHQoY3Vyc29yKTtcbiAgICAgICAgbGV0IHBhcmVudDogQ29tbWFuZE5vZGU8Uz4gPSBub2RlQmVmb3JlQ3Vyc29yLnBhcmVudDtcbiAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4obm9kZUJlZm9yZUN1cnNvci5zdGFydFBvcywgY3Vyc29yKTtcbiAgICAgICAgbGV0IGZ1bGxJbnB1dCA9IHBhcnNlLmdldFJlYWRlcigpLmdldFN0cmluZygpO1xuICAgICAgICBsZXQgdHJ1bmNhdGVkSW5wdXQgPSBmdWxsSW5wdXQuc3Vic3RyaW5nKDAsIGN1cnNvcik7XG4gICAgICAgIGxldCBmdXR1cmVzID0gW107XG4gICAgICAgIGZvciAobGV0IG5vZGUgb2YgcGFyZW50LmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgIGxldCBmdXR1cmUgPSBhd2FpdCBTdWdnZXN0aW9ucy5lbXB0eSgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmdXR1cmUgPSBhd2FpdCBub2RlLmxpc3RTdWdnZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5idWlsZCh0cnVuY2F0ZWRJbnB1dCksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdWdnZXN0aW9uc0J1aWxkZXIodHJ1bmNhdGVkSW5wdXQsIHN0YXJ0KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7fVxuICAgICAgICAgICAgZnV0dXJlcy5wdXNoKGZ1dHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFN1Z2dlc3Rpb25zLm1lcmdlKGZ1bGxJbnB1dCwgZnV0dXJlcykhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um9vdCgpOiBSb290Q29tbWFuZE5vZGU8Uz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoKHRhcmdldDogQ29tbWFuZE5vZGU8Uz4pOiBzdHJpbmdbXSB7XG4gICAgICAgIGxldCBub2RlczogQXJyYXk8QXJyYXk8Q29tbWFuZE5vZGU8Uz4+PiA9IFtdO1xuICAgICAgICB0aGlzLmFkZFBhdGhzKHRoaXMucm9vdCwgbm9kZXMsIFtdKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKGxpc3RbbGlzdC5sZW5ndGggLSAxXSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG5vZGUgb2YgbGlzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSAhPT0gdGhpcy5yb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlLmdldE5hbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmROb2RlKHBhdGg6IHN0cmluZ1tdKTogQ29tbWFuZE5vZGU8Uz4gfCBudWxsIHtcbiAgICAgICAgbGV0IG5vZGU6IENvbW1hbmROb2RlPFM+IHwgdW5kZWZpbmVkID0gdGhpcy5yb290O1xuICAgICAgICBmb3IgKGxldCBuYW1lIG9mIHBhdGgpIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmdldENoaWxkKG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEFtYmlndWl0aWVzKGNvbnN1bWVyOiBBbWJpZ3VpdHlDb25zdW1lcjxTPiwgY29udGV4dDogYW55KSB7XG4gICAgICAgIHRoaXMucm9vdC5maW5kQW1iaWd1aXRpZXMoY29uc3VtZXIsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUGF0aHMobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHJlc3VsdDogQXJyYXk8QXJyYXk8Q29tbWFuZE5vZGU8Uz4+PiwgcGFyZW50czogQXJyYXk8Q29tbWFuZE5vZGU8Uz4+KTogdm9pZCB7XG4gICAgICAgIGxldCBjdXJyZW50OiBBcnJheTxDb21tYW5kTm9kZTxTPj4gPSBbXTtcbiAgICAgICAgY3VycmVudC5wdXNoKC4uLnBhcmVudHMpO1xuICAgICAgICBjdXJyZW50LnB1c2gobm9kZSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldENoaWxkcmVuKCkpIHRoaXMuYWRkUGF0aHMoY2hpbGQsIHJlc3VsdCwgY3VycmVudCk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIlJvb3RDb21tYW5kTm9kZSIsIlN0cmluZ1JlYWRlciIsIkNvbW1hbmRTeW50YXhFeGNlcHRpb24iLCJzb3VyY2UiLCJDb21tYW5kQ29udGV4dEJ1aWxkZXIiLCJQYXJzZVJlc3VsdHMiLCJTdWdnZXN0aW9ucyIsIlN1Z2dlc3Rpb25zQnVpbGRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsTUFBTSxrQkFBcUIsR0FBQSxHQUFBLENBQUE7QUFDM0IsTUFBTSxtQkFBc0IsR0FBQSxHQUFBLENBQUE7QUFDNUIsTUFBTSxvQkFBdUIsR0FBQSxHQUFBLENBQUE7QUFDN0IsTUFBTSxtQkFBc0IsR0FBQSxHQUFBLENBQUE7QUFDNUIsTUFBTSxvQkFBdUIsR0FBQSxHQUFBLENBQUE7QUFDN0IsTUFBTSxRQUFXLEdBQUEsR0FBQSxDQUFBO0FBRWpCLE1BQXFCLGlCQUFxQixDQUFBO0FBQUEsRUFDOUIsSUFBQSxDQUFBO0FBQUEsRUFFQSxRQUE4QixHQUFBO0FBQUEsSUFDbEMsaUJBQW9CLEdBQUE7QUFBQSxLQUFDO0FBQUEsR0FDekIsQ0FBQTtBQUFBLEVBRU8sV0FBQSxDQUFZLE9BQWtDLElBQU0sRUFBQTtBQUN2RCxJQUFLLElBQUEsQ0FBQSxJQUFBLEdBQU8sSUFBUSxJQUFBLElBQUlBLGdDQUFtQixFQUFBLENBQUE7QUFBQSxHQUMvQztBQUFBLEVBRU8sU0FBUyxPQUEyRCxFQUFBO0FBQ3ZFLElBQUksSUFB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
@@ -0,0 +1,31 @@
1
+ import { default as Suggestions } from './suggestion/Suggestions';
2
+ import { default as StringReader } from './StringReader';
3
+ import { default as RootCommandNode } from './tree/RootCommandNode';
4
+ import { default as ResultConsumer } from './ResultConsumer';
5
+ import { default as ParseResults } from './ParseResults';
6
+ import { default as LiteralCommandNode } from './tree/LiteralCommandNode';
7
+ import { default as LiteralArgumentBuilder } from './builder/LiteralArgumentBuilder';
8
+ import { default as CommandNode } from './tree/CommandNode';
9
+ import { default as AmbiguityConsumer } from './AmbiguityConsumer';
10
+
11
+ export default class CommandDispatcher<S> {
12
+ private root;
13
+ private consumer;
14
+ constructor(root?: RootCommandNode<S> | null);
15
+ register(command: LiteralArgumentBuilder<S>): LiteralCommandNode<S>;
16
+ setConsumer(consumer: ResultConsumer<S>): void;
17
+ execute(input: string | StringReader | ParseResults<S>, source?: S | null): Promise<any> | Promise<any>[] | any;
18
+ parse(command: string | StringReader, source: S): ParseResults<S>;
19
+ private parseNodes;
20
+ getAllUsage(node: CommandNode<S>, source: S, restricted: boolean): string[];
21
+ private __getAllUsage;
22
+ getSmartUsage(node: CommandNode<S>, source: S): Map<CommandNode<S>, string>;
23
+ private __getSmartUsage;
24
+ getCompletionSuggestions(parse: ParseResults<S>, cursor?: number): Promise<Suggestions>;
25
+ getRoot(): RootCommandNode<S>;
26
+ getPath(target: CommandNode<S>): string[];
27
+ findNode(path: string[]): CommandNode<S> | null;
28
+ findAmbiguities(consumer: AmbiguityConsumer<S>, context: any): void;
29
+ private addPaths;
30
+ }
31
+ //# sourceMappingURL=CommandDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandDispatcher.d.ts","sourceRoot":"","sources":["../../src/lib/CommandDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAGzD,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,sBAAsB,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAUnD,MAAM,CAAC,OAAO,OAAO,iBAAiB,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAqB;IAEjC,OAAO,CAAC,QAAQ,CAEd;gBAEiB,IAAI,GAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAW;IAIlD,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAMnE,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAIvC,OAAO,CACV,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,EAC9C,MAAM,GAAE,CAAC,GAAG,IAAW,GACxB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG;IAqF/B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAOxE,OAAO,CAAC,UAAU;IAoFX,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE;IAMlF,OAAO,CAAC,aAAa;IA6Bd,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAclF,OAAO,CAAC,eAAe;IA8DV,wBAAwB,CACjC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,SAAqC,GAC5C,OAAO,CAAC,WAAW,CAAC;IAsBhB,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC;IAI7B,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;IAiBzC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAS/C,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG;IAInE,OAAO,CAAC,QAAQ;CAOnB"}