@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.
- package/CHANGELOG.md +29 -0
- package/LICENSE +21 -21
- package/README.md +85 -81
- package/dist/CommandSyntaxException-BKBHJvxr.cjs +173 -0
- package/dist/CommandSyntaxException-Dz8Qlq9d.js +168 -0
- package/dist/LiteralArgumentBuilder-2hpX2C86.js +121 -0
- package/dist/LiteralArgumentBuilder-s6PUMmST.cjs +125 -0
- package/dist/RequiredArgumentBuilder-D105occO.js +144 -0
- package/dist/RequiredArgumentBuilder-DMJ4kl0u.cjs +148 -0
- package/dist/index.cjs.js +63 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +31 -0
- package/dist/lib/AmbiguityConsumer.cjs.js +3 -0
- package/dist/lib/AmbiguityConsumer.d.ts +6 -0
- package/dist/lib/AmbiguityConsumer.d.ts.map +1 -0
- package/dist/lib/AmbiguityConsumer.es.js +2 -0
- package/dist/lib/Command.cjs.js +3 -0
- package/dist/lib/Command.d.ts +6 -0
- package/dist/lib/Command.d.ts.map +1 -0
- package/dist/lib/Command.es.js +2 -0
- package/dist/lib/CommandDispatcher.cjs.js +369 -0
- package/dist/lib/CommandDispatcher.d.ts +31 -0
- package/dist/lib/CommandDispatcher.d.ts.map +1 -0
- package/dist/lib/CommandDispatcher.es.js +365 -0
- package/dist/lib/ImmutableStringReader.cjs.js +3 -0
- package/dist/lib/ImmutableStringReader.d.ts +13 -0
- package/dist/lib/ImmutableStringReader.d.ts.map +1 -0
- package/dist/lib/ImmutableStringReader.es.js +2 -0
- package/dist/lib/LiteralMessage.cjs.js +19 -0
- package/dist/lib/LiteralMessage.d.ts +9 -0
- package/dist/lib/LiteralMessage.d.ts.map +1 -0
- package/dist/lib/LiteralMessage.es.js +15 -0
- package/dist/lib/Message.cjs.js +3 -0
- package/dist/lib/Message.d.ts +4 -0
- package/dist/lib/Message.d.ts.map +1 -0
- package/dist/lib/Message.es.js +2 -0
- package/dist/lib/ParseResults.cjs.js +30 -0
- package/dist/lib/ParseResults.d.ts +15 -0
- package/dist/lib/ParseResults.d.ts.map +1 -0
- package/dist/lib/ParseResults.es.js +26 -0
- package/dist/lib/Predicate.cjs.js +3 -0
- package/dist/lib/Predicate.d.ts +4 -0
- package/dist/lib/Predicate.d.ts.map +1 -0
- package/dist/lib/Predicate.es.js +2 -0
- package/dist/lib/RedirectModifier.cjs.js +3 -0
- package/dist/lib/RedirectModifier.d.ts +6 -0
- package/dist/lib/RedirectModifier.d.ts.map +1 -0
- package/dist/lib/RedirectModifier.es.js +2 -0
- package/dist/lib/ResultConsumer.cjs.js +3 -0
- package/dist/lib/ResultConsumer.d.ts +6 -0
- package/dist/lib/ResultConsumer.d.ts.map +1 -0
- package/dist/lib/ResultConsumer.es.js +2 -0
- package/dist/lib/SingleRedirectModifier.cjs.js +3 -0
- package/dist/lib/SingleRedirectModifier.d.ts +6 -0
- package/dist/lib/SingleRedirectModifier.d.ts.map +1 -0
- package/dist/lib/SingleRedirectModifier.es.js +2 -0
- package/dist/lib/StringReader.cjs.js +164 -0
- package/dist/lib/StringReader.d.ts +29 -0
- package/dist/lib/StringReader.d.ts.map +1 -0
- package/dist/lib/StringReader.es.js +160 -0
- package/dist/lib/arguments/ArgumentType.cjs.js +23 -0
- package/dist/lib/arguments/ArgumentType.d.ts +23 -0
- package/dist/lib/arguments/ArgumentType.d.ts.map +1 -0
- package/dist/lib/arguments/ArgumentType.es.js +19 -0
- package/dist/lib/arguments/BoolArgumentType.cjs.js +33 -0
- package/dist/lib/arguments/BoolArgumentType.d.ts +15 -0
- package/dist/lib/arguments/BoolArgumentType.d.ts.map +1 -0
- package/dist/lib/arguments/BoolArgumentType.es.js +29 -0
- package/dist/lib/arguments/FloatArgumentType.cjs.js +71 -0
- package/dist/lib/arguments/FloatArgumentType.d.ts +18 -0
- package/dist/lib/arguments/FloatArgumentType.d.ts.map +1 -0
- package/dist/lib/arguments/FloatArgumentType.es.js +67 -0
- package/dist/lib/arguments/IntegerArgumentType.cjs.js +71 -0
- package/dist/lib/arguments/IntegerArgumentType.d.ts +18 -0
- package/dist/lib/arguments/IntegerArgumentType.d.ts.map +1 -0
- package/dist/lib/arguments/IntegerArgumentType.es.js +67 -0
- package/dist/lib/arguments/StringArgumentType.cjs.js +73 -0
- package/dist/lib/arguments/StringArgumentType.d.ts +23 -0
- package/dist/lib/arguments/StringArgumentType.d.ts.map +1 -0
- package/dist/lib/arguments/StringArgumentType.es.js +68 -0
- package/dist/lib/builder/ArgumentBuilder.cjs.js +72 -0
- package/dist/lib/builder/ArgumentBuilder.d.ts +30 -0
- package/dist/lib/builder/ArgumentBuilder.d.ts.map +1 -0
- package/dist/lib/builder/ArgumentBuilder.es.js +68 -0
- package/dist/lib/builder/LiteralArgumentBuilder.cjs.js +20 -0
- package/dist/lib/builder/LiteralArgumentBuilder.d.ts +13 -0
- package/dist/lib/builder/LiteralArgumentBuilder.d.ts.map +1 -0
- package/dist/lib/builder/LiteralArgumentBuilder.es.js +11 -0
- package/dist/lib/builder/RequiredArgumentBuilder.cjs.js +21 -0
- package/dist/lib/builder/RequiredArgumentBuilder.d.ts +20 -0
- package/dist/lib/builder/RequiredArgumentBuilder.d.ts.map +1 -0
- package/dist/lib/builder/RequiredArgumentBuilder.es.js +12 -0
- package/dist/lib/context/CommandContext.cjs.js +117 -0
- package/dist/lib/context/CommandContext.d.ts +35 -0
- package/dist/lib/context/CommandContext.d.ts.map +1 -0
- package/dist/lib/context/CommandContext.es.js +113 -0
- package/dist/lib/context/CommandContextBuilder.cjs.js +142 -0
- package/dist/lib/context/CommandContextBuilder.d.ts +40 -0
- package/dist/lib/context/CommandContextBuilder.d.ts.map +1 -0
- package/dist/lib/context/CommandContextBuilder.es.js +138 -0
- package/dist/lib/context/ParsedArgument.cjs.js +30 -0
- package/dist/lib/context/ParsedArgument.d.ts +11 -0
- package/dist/lib/context/ParsedArgument.d.ts.map +1 -0
- package/dist/lib/context/ParsedArgument.es.js +26 -0
- package/dist/lib/context/ParsedCommandNode.cjs.js +32 -0
- package/dist/lib/context/ParsedCommandNode.d.ts +13 -0
- package/dist/lib/context/ParsedCommandNode.d.ts.map +1 -0
- package/dist/lib/context/ParsedCommandNode.es.js +28 -0
- package/dist/lib/context/StringRange.cjs.js +52 -0
- package/dist/lib/context/StringRange.d.ts +18 -0
- package/dist/lib/context/StringRange.d.ts.map +1 -0
- package/dist/lib/context/StringRange.es.js +48 -0
- package/dist/lib/context/SuggestionContext.cjs.js +15 -0
- package/dist/lib/context/SuggestionContext.d.ts +8 -0
- package/dist/lib/context/SuggestionContext.d.ts.map +1 -0
- package/dist/lib/context/SuggestionContext.es.js +11 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.cjs.js +3 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.d.ts +25 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.d.ts.map +1 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.es.js +2 -0
- package/dist/lib/exceptions/BuiltInExceptions.cjs.js +11 -0
- package/dist/lib/exceptions/BuiltInExceptions.d.ts +45 -0
- package/dist/lib/exceptions/BuiltInExceptions.d.ts.map +1 -0
- package/dist/lib/exceptions/BuiltInExceptions.es.js +3 -0
- package/dist/lib/exceptions/CommandExceptionType.cjs.js +3 -0
- package/dist/lib/exceptions/CommandExceptionType.d.ts +3 -0
- package/dist/lib/exceptions/CommandExceptionType.d.ts.map +1 -0
- package/dist/lib/exceptions/CommandExceptionType.es.js +2 -0
- package/dist/lib/exceptions/CommandSyntaxException.cjs.js +11 -0
- package/dist/lib/exceptions/CommandSyntaxException.d.ts +21 -0
- package/dist/lib/exceptions/CommandSyntaxException.d.ts.map +1 -0
- package/dist/lib/exceptions/CommandSyntaxException.es.js +3 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.cjs.js +11 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.d.ts +12 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.d.ts.map +1 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.es.js +3 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.cjs.js +11 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.d.ts +13 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.d.ts.map +1 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.es.js +3 -0
- package/dist/lib/suggestion/IntegerSuggestion.cjs.js +39 -0
- package/dist/lib/suggestion/IntegerSuggestion.d.ts +14 -0
- package/dist/lib/suggestion/IntegerSuggestion.d.ts.map +1 -0
- package/dist/lib/suggestion/IntegerSuggestion.es.js +35 -0
- package/dist/lib/suggestion/Suggestion.cjs.js +72 -0
- package/dist/lib/suggestion/Suggestion.d.ts +19 -0
- package/dist/lib/suggestion/Suggestion.d.ts.map +1 -0
- package/dist/lib/suggestion/Suggestion.es.js +68 -0
- package/dist/lib/suggestion/SuggestionProvider.cjs.js +3 -0
- package/dist/lib/suggestion/SuggestionProvider.d.ts +8 -0
- package/dist/lib/suggestion/SuggestionProvider.d.ts.map +1 -0
- package/dist/lib/suggestion/SuggestionProvider.es.js +2 -0
- package/dist/lib/suggestion/Suggestions.cjs.js +71 -0
- package/dist/lib/suggestion/Suggestions.d.ts +18 -0
- package/dist/lib/suggestion/Suggestions.d.ts.map +1 -0
- package/dist/lib/suggestion/Suggestions.es.js +67 -0
- package/dist/lib/suggestion/SuggestionsBuilder.cjs.js +59 -0
- package/dist/lib/suggestion/SuggestionsBuilder.d.ts +20 -0
- package/dist/lib/suggestion/SuggestionsBuilder.d.ts.map +1 -0
- package/dist/lib/suggestion/SuggestionsBuilder.es.js +55 -0
- package/dist/lib/tree/ArgumentCommandNode.cjs.js +20 -0
- package/dist/lib/tree/ArgumentCommandNode.d.ts +33 -0
- package/dist/lib/tree/ArgumentCommandNode.d.ts.map +1 -0
- package/dist/lib/tree/ArgumentCommandNode.es.js +12 -0
- package/dist/lib/tree/CommandNode.cjs.js +133 -0
- package/dist/lib/tree/CommandNode.d.ts +47 -0
- package/dist/lib/tree/CommandNode.d.ts.map +1 -0
- package/dist/lib/tree/CommandNode.es.js +129 -0
- package/dist/lib/tree/LiteralCommandNode.cjs.js +19 -0
- package/dist/lib/tree/LiteralCommandNode.d.ts +29 -0
- package/dist/lib/tree/LiteralCommandNode.d.ts.map +1 -0
- package/dist/lib/tree/LiteralCommandNode.es.js +11 -0
- package/dist/lib/tree/RootCommandNode.cjs.js +59 -0
- package/dist/lib/tree/RootCommandNode.d.ts +23 -0
- package/dist/lib/tree/RootCommandNode.d.ts.map +1 -0
- package/dist/lib/tree/RootCommandNode.es.js +55 -0
- package/dist/lib/util/isEqual.cjs.js +59 -0
- package/dist/lib/util/isEqual.d.ts +2 -0
- package/dist/lib/util/isEqual.d.ts.map +1 -0
- package/dist/lib/util/isEqual.es.js +55 -0
- package/package.json +40 -41
- package/dist/index.js +0 -82
- package/dist/index.js.map +0 -1
- package/dist/lib/AmbiguityConsumer.js +0 -3
- package/dist/lib/AmbiguityConsumer.js.map +0 -1
- package/dist/lib/Command.js +0 -3
- package/dist/lib/Command.js.map +0 -1
- package/dist/lib/CommandDispatcher.js +0 -360
- package/dist/lib/CommandDispatcher.js.map +0 -1
- package/dist/lib/ImmutableStringReader.js +0 -3
- package/dist/lib/ImmutableStringReader.js.map +0 -1
- package/dist/lib/LiteralMessage.js +0 -15
- package/dist/lib/LiteralMessage.js.map +0 -1
- package/dist/lib/Message.js +0 -3
- package/dist/lib/Message.js.map +0 -1
- package/dist/lib/ParseResults.js +0 -24
- package/dist/lib/ParseResults.js.map +0 -1
- package/dist/lib/Predicate.js +0 -3
- package/dist/lib/Predicate.js.map +0 -1
- package/dist/lib/RedirectModifier.js +0 -3
- package/dist/lib/RedirectModifier.js.map +0 -1
- package/dist/lib/ResultConsumer.js +0 -3
- package/dist/lib/ResultConsumer.js.map +0 -1
- package/dist/lib/SingleRedirectModifier.js +0 -3
- package/dist/lib/SingleRedirectModifier.js.map +0 -1
- package/dist/lib/StringReader.js +0 -176
- package/dist/lib/StringReader.js.map +0 -1
- package/dist/lib/arguments/ArgumentType.js +0 -19
- package/dist/lib/arguments/ArgumentType.js.map +0 -1
- package/dist/lib/arguments/BoolArgumentType.js +0 -30
- package/dist/lib/arguments/BoolArgumentType.js.map +0 -1
- package/dist/lib/arguments/FloatArgumentType.js +0 -61
- package/dist/lib/arguments/FloatArgumentType.js.map +0 -1
- package/dist/lib/arguments/IntegerArgumentType.js +0 -61
- package/dist/lib/arguments/IntegerArgumentType.js.map +0 -1
- package/dist/lib/arguments/StringArgumentType.js +0 -71
- package/dist/lib/arguments/StringArgumentType.js.map +0 -1
- package/dist/lib/builder/ArgumentBuilder.js +0 -66
- package/dist/lib/builder/ArgumentBuilder.js.map +0 -1
- package/dist/lib/builder/LiteralArgumentBuilder.js +0 -33
- package/dist/lib/builder/LiteralArgumentBuilder.js.map +0 -1
- package/dist/lib/builder/RequiredArgumentBuilder.js +0 -44
- package/dist/lib/builder/RequiredArgumentBuilder.js.map +0 -1
- package/dist/lib/context/CommandContext.js +0 -96
- package/dist/lib/context/CommandContext.js.map +0 -1
- package/dist/lib/context/CommandContextBuilder.js +0 -120
- package/dist/lib/context/CommandContextBuilder.js.map +0 -1
- package/dist/lib/context/ParsedArgument.js +0 -27
- package/dist/lib/context/ParsedArgument.js.map +0 -1
- package/dist/lib/context/ParsedCommandNode.js +0 -27
- package/dist/lib/context/ParsedCommandNode.js.map +0 -1
- package/dist/lib/context/StringRange.js +0 -47
- package/dist/lib/context/StringRange.js.map +0 -1
- package/dist/lib/context/SuggestionContext.js +0 -10
- package/dist/lib/context/SuggestionContext.js.map +0 -1
- package/dist/lib/exceptions/BuiltInExceptionProvider.js +0 -3
- package/dist/lib/exceptions/BuiltInExceptionProvider.js.map +0 -1
- package/dist/lib/exceptions/BuiltInExceptions.js +0 -88
- package/dist/lib/exceptions/BuiltInExceptions.js.map +0 -1
- package/dist/lib/exceptions/CommandExceptionType.js +0 -3
- package/dist/lib/exceptions/CommandExceptionType.js.map +0 -1
- package/dist/lib/exceptions/CommandSyntaxException.js +0 -57
- package/dist/lib/exceptions/CommandSyntaxException.js.map +0 -1
- package/dist/lib/exceptions/DynamicCommandExceptionType.js +0 -20
- package/dist/lib/exceptions/DynamicCommandExceptionType.js.map +0 -1
- package/dist/lib/exceptions/SimpleCommandExceptionType.js +0 -23
- package/dist/lib/exceptions/SimpleCommandExceptionType.js.map +0 -1
- package/dist/lib/suggestion/IntegerSuggestion.js +0 -41
- package/dist/lib/suggestion/IntegerSuggestion.js.map +0 -1
- package/dist/lib/suggestion/Suggestion.js +0 -72
- package/dist/lib/suggestion/Suggestion.js.map +0 -1
- package/dist/lib/suggestion/SuggestionProvider.js +0 -3
- package/dist/lib/suggestion/SuggestionProvider.js.map +0 -1
- package/dist/lib/suggestion/Suggestions.js +0 -71
- package/dist/lib/suggestion/Suggestions.js.map +0 -1
- package/dist/lib/suggestion/SuggestionsBuilder.js +0 -54
- package/dist/lib/suggestion/SuggestionsBuilder.js.map +0 -1
- package/dist/lib/tree/ArgumentCommandNode.js +0 -97
- package/dist/lib/tree/ArgumentCommandNode.js.map +0 -1
- package/dist/lib/tree/CommandNode.js +0 -134
- package/dist/lib/tree/CommandNode.js.map +0 -1
- package/dist/lib/tree/LiteralCommandNode.js +0 -93
- package/dist/lib/tree/LiteralCommandNode.js.map +0 -1
- package/dist/lib/tree/RootCommandNode.js +0 -50
- package/dist/lib/tree/RootCommandNode.js.map +0 -1
- package/dist/lib/util/isEqual.js +0 -57
- package/dist/lib/util/isEqual.js.map +0 -1
- 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"}
|