@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
335 lines (330 loc) • 37.1 kB
JavaScript
'use strict';
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const brigadier = require('@jsprismarine/brigadier');
const network_type_CommandParameter = require('../network/type/CommandParameter.cjs.cjs');
const math = require('@jsprismarine/math');
const minecraft = require('@jsprismarine/minecraft');
const network_type_CommandEnum = require('../network/type/CommandEnum.cjs.cjs');
const utils_ParseTargetSelector = require('../utils/ParseTargetSelector.cjs.cjs');
const utils_ParseTildeCaretNotation = require('../utils/ParseTildeCaretNotation.cjs.cjs');
class CommandArgument {
getReadableType() {
return "";
}
// eslint-disable-next-line unused-imports/no-unused-vars
getParameters(server) {
return /* @__PURE__ */ new Set();
}
}
class CommandArgumentGamemode {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "gameMode";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, _context) {
return minecraft.getGametypeName(minecraft.getGametypeId(reader.readString()));
}
async listSuggestions(_context, _builder) {
return brigadier.Suggestions.empty();
}
getExamples() {
return ["survival", "creative", "adventure", "spectator"];
}
getReadableType() {
return this.name;
}
getParameters() {
const gameModeEnum = new network_type_CommandEnum.CommandEnum();
gameModeEnum.name = "GameMode";
gameModeEnum.values = ["survival", "creative", "adventure", "spectator"];
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
isOptional: this.optional,
flags: this.flags,
enum: gameModeEnum,
postfix: this.postfix
})
]);
}
}
class CommandArgumentMob {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "entityType";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, _context) {
let str = "";
while (reader.canRead()) {
const pos = reader.getCursor();
const char = reader.read();
if (char === " ") {
reader.setCursor(pos);
break;
}
str += char;
}
return str;
}
async listSuggestions(_context, _builder) {
return brigadier.Suggestions.empty();
}
getExamples() {
return [];
}
getReadableType() {
return this.name;
}
getParameters() {
const entityTypeEnum = new network_type_CommandEnum.CommandEnum();
entityTypeEnum.name = "EntityType";
entityTypeEnum.values = [];
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
isOptional: this.optional,
flags: this.flags,
enum: entityTypeEnum,
postfix: this.postfix
})
]);
}
}
class CommandArgumentEntity {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "target";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, context) {
let player = "";
while (reader.canRead()) {
const pos = reader.getCursor();
const char = reader.read();
if (char === " ") {
reader.setCursor(pos);
break;
}
player += char;
}
if (player.startsWith("@"))
try {
return utils_ParseTargetSelector.default({
input: player,
source: context.getSource(),
entities: context.getSource().getWorld().getEntities()
});
} catch (error) {
if (!error.message.includes("no results")) throw error;
return [];
}
return [context.getSource().getServer().getSessionManager().getPlayerByExactName(player)];
}
getReadableType() {
return this.name;
}
getParameters() {
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
paramType: network_type_CommandParameter.CommandParameterType.Target,
isOptional: this.optional,
flags: this.flags,
postfix: this.postfix
})
]);
}
}
class CommandArgumentPosition extends math.Vector3 {
name;
optional;
flags;
postfix;
constructor(data) {
super(0, 0, 0);
this.name = data?.name ?? "position";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, context) {
const getPos = () => {
let pos = "";
while (reader.canRead()) {
const cursor = reader.getCursor();
const char = reader.read();
if (char === " ") {
reader.setCursor(cursor);
break;
}
pos += char;
}
return pos;
};
this.setX(
utils_ParseTildeCaretNotation.default({
input: getPos(),
source: context.getSource(),
type: "x"
})
);
reader.skip();
this.setY(
utils_ParseTildeCaretNotation.default({
input: getPos(),
source: context.getSource(),
type: "y"
})
);
reader.skip();
this.setZ(
utils_ParseTildeCaretNotation.default({
input: getPos(),
source: context.getSource(),
type: "z"
})
);
return this;
}
getReadableType() {
return this.name;
}
getParameters() {
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
paramType: network_type_CommandParameter.CommandParameterType.Position,
isOptional: this.optional,
flags: this.flags,
postfix: this.postfix
})
]);
}
}
class CommandArgumentCommand {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "command";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, _context) {
const command = reader.readString();
return command;
}
getReadableType() {
return this.name;
}
getParameters() {
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
paramType: network_type_CommandParameter.CommandParameterType.Position,
isOptional: this.optional,
flags: this.flags,
postfix: this.postfix
})
]);
}
}
class BooleanArgumentCommand {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "boolean";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, _context) {
const boolean = reader.readString();
if (boolean === "true") return true;
return false;
}
getReadableType() {
return this.name;
}
getParameters() {
const booleanEnum = new network_type_CommandEnum.CommandEnum();
booleanEnum.name = "Boolean";
booleanEnum.values = ["true", "false"];
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
isOptional: this.optional,
enum: booleanEnum,
flags: this.flags,
postfix: this.postfix
})
]);
}
}
class PlayerArgumentCommand {
name;
optional;
flags;
postfix;
constructor(data) {
this.name = data?.name ?? "player";
this.optional = data?.optional ?? false;
this.flags = data?.flags ?? network_type_CommandParameter.CommandParameterFlags.NONE;
this.postfix = data?.postfix ?? null;
}
parse(reader, _context) {
const player = reader.readString();
return player;
}
getReadableType() {
return this.name;
}
getParameters(server) {
const playerEnum = new network_type_CommandEnum.CommandEnum();
playerEnum.name = "Player";
try {
playerEnum.values = server.getSessionManager().getAllPlayers().map((player) => player.getName());
} catch {
playerEnum.values = [];
}
return /* @__PURE__ */ new Set([
new network_type_CommandParameter.default({
paramName: this.name,
isOptional: this.optional,
enum: playerEnum,
flags: this.flags,
postfix: this.postfix
})
]);
}
}
exports.BooleanArgumentCommand = BooleanArgumentCommand;
exports.CommandArgument = CommandArgument;
exports.CommandArgumentCommand = CommandArgumentCommand;
exports.CommandArgumentEntity = CommandArgumentEntity;
exports.CommandArgumentGamemode = CommandArgumentGamemode;
exports.CommandArgumentMob = CommandArgumentMob;
exports.CommandArgumentPosition = CommandArgumentPosition;
exports.PlayerArgumentCommand = PlayerArgumentCommand;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZEFyZ3VtZW50cy5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZC9Db21tYW5kQXJndW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZENvbnRleHQsIFN0cmluZ1JlYWRlciB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvYnJpZ2FkaWVyJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnQGpzcHJpc21hcmluZS9icmlnYWRpZXInO1xuaW1wb3J0IENvbW1hbmRQYXJhbWV0ZXIsIHsgQ29tbWFuZFBhcmFtZXRlckZsYWdzLCBDb21tYW5kUGFyYW1ldGVyVHlwZSB9IGZyb20gJy4uL25ldHdvcmsvdHlwZS9Db21tYW5kUGFyYW1ldGVyJztcblxuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgeyBnZXRHYW1ldHlwZUlkLCBnZXRHYW1ldHlwZU5hbWUgfSBmcm9tICdAanNwcmlzbWFyaW5lL21pbmVjcmFmdCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vUGxheWVyJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuaW1wb3J0IHsgQ29tbWFuZEVudW0gfSBmcm9tICcuLi9uZXR3b3JrL3R5cGUvQ29tbWFuZEVudW0nO1xuaW1wb3J0IFBhcnNlVGFyZ2V0U2VsZWN0b3IgZnJvbSAnLi4vdXRpbHMvUGFyc2VUYXJnZXRTZWxlY3Rvcic7XG5pbXBvcnQgUGFyc2VUaWxkZUNhcmV0Tm90YXRpb24gZnJvbSAnLi4vdXRpbHMvUGFyc2VUaWxkZUNhcmV0Tm90YXRpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEFyZ3VtZW50IHtcbiAgICBwdWJsaWMgZ2V0UmVhZGFibGVUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVudXNlZC1pbXBvcnRzL25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoc2VydmVyOiBTZXJ2ZXIpOiBTZXQ8Q29tbWFuZFBhcmFtZXRlcj4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gbmV3IFNldCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1hbmRBcmd1bWVudEdhbWVtb2RlIGltcGxlbWVudHMgQ29tbWFuZEFyZ3VtZW50IHtcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmxhZ3M6IENvbW1hbmRQYXJhbWV0ZXJGbGFncztcbiAgICBwcml2YXRlIHBvc3RmaXg6IHN0cmluZyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YT86IHsgbmFtZT86IHN0cmluZzsgb3B0aW9uYWw/OiBib29sZWFuOyBmbGFncz86IENvbW1hbmRQYXJhbWV0ZXJGbGFnczsgcG9zdGZpeD86IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGE/Lm5hbWUgPz8gJ2dhbWVNb2RlJztcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IGRhdGE/Lm9wdGlvbmFsID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmZsYWdzID0gZGF0YT8uZmxhZ3MgPz8gQ29tbWFuZFBhcmFtZXRlckZsYWdzLk5PTkU7XG4gICAgICAgIHRoaXMucG9zdGZpeCA9IGRhdGE/LnBvc3RmaXggPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2UocmVhZGVyOiBTdHJpbmdSZWFkZXIsIF9jb250ZXh0OiBDb21tYW5kQ29udGV4dDxQbGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBnZXRHYW1ldHlwZU5hbWUoZ2V0R2FtZXR5cGVJZChyZWFkZXIucmVhZFN0cmluZygpKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBsaXN0U3VnZ2VzdGlvbnMoX2NvbnRleHQ6IGFueSwgX2J1aWxkZXI6IGFueSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIHJldHVybiBTdWdnZXN0aW9ucy5lbXB0eSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0RXhhbXBsZXMoKSB7XG4gICAgICAgIHJldHVybiBbJ3N1cnZpdmFsJywgJ2NyZWF0aXZlJywgJ2FkdmVudHVyZScsICdzcGVjdGF0b3InXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVhZGFibGVUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoKTogU2V0PENvbW1hbmRQYXJhbWV0ZXI+IHtcbiAgICAgICAgY29uc3QgZ2FtZU1vZGVFbnVtID0gbmV3IENvbW1hbmRFbnVtKCk7XG4gICAgICAgIGdhbWVNb2RlRW51bS5uYW1lID0gJ0dhbWVNb2RlJztcblxuICAgICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBkeW5hbWljXG4gICAgICAgIGdhbWVNb2RlRW51bS52YWx1ZXMgPSBbJ3N1cnZpdmFsJywgJ2NyZWF0aXZlJywgJ2FkdmVudHVyZScsICdzcGVjdGF0b3InXTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgICAgICAgbmV3IENvbW1hbmRQYXJhbWV0ZXIoe1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICAgICAgICAgICAgZW51bTogZ2FtZU1vZGVFbnVtLFxuICAgICAgICAgICAgICAgIHBvc3RmaXg6IHRoaXMucG9zdGZpeFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEFyZ3VtZW50TW9iIGltcGxlbWVudHMgQ29tbWFuZEFyZ3VtZW50IHtcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmxhZ3M6IENvbW1hbmRQYXJhbWV0ZXJGbGFncztcbiAgICBwcml2YXRlIHBvc3RmaXg6IHN0cmluZyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YT86IHsgbmFtZT86IHN0cmluZzsgb3B0aW9uYWw/OiBib29sZWFuOyBmbGFncz86IENvbW1hbmRQYXJhbWV0ZXJGbGFnczsgcG9zdGZpeD86IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGE/Lm5hbWUgPz8gJ2VudGl0eVR5cGUnO1xuICAgICAgICB0aGlzLm9wdGlvbmFsID0gZGF0YT8ub3B0aW9uYWwgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZmxhZ3MgPSBkYXRhPy5mbGFncyA/PyBDb21tYW5kUGFyYW1ldGVyRmxhZ3MuTk9ORTtcbiAgICAgICAgdGhpcy5wb3N0Zml4ID0gZGF0YT8ucG9zdGZpeCA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZShyZWFkZXI6IFN0cmluZ1JlYWRlciwgX2NvbnRleHQ6IENvbW1hbmRDb250ZXh0PFBsYXllcj4pIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICB3aGlsZSAocmVhZGVyLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gcmVhZGVyLmdldEN1cnNvcigpO1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnNldEN1cnNvcihwb3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHIgKz0gY2hhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBsaXN0U3VnZ2VzdGlvbnMoX2NvbnRleHQ6IGFueSwgX2J1aWxkZXI6IGFueSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIHJldHVybiBTdWdnZXN0aW9ucy5lbXB0eSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0RXhhbXBsZXMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVhZGFibGVUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoKTogU2V0PENvbW1hbmRQYXJhbWV0ZXI+IHtcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZUVudW0gPSBuZXcgQ29tbWFuZEVudW0oKTtcbiAgICAgICAgZW50aXR5VHlwZUVudW0ubmFtZSA9ICdFbnRpdHlUeXBlJztcbiAgICAgICAgZW50aXR5VHlwZUVudW0udmFsdWVzID0gW107IC8vT2JqZWN0LmVudHJpZXMoRW50aXRpZXMpLm1hcCgoWywgZW50aXR5XSkgPT4gZW50aXR5Lk1PQl9JRCk7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgICAgIG5ldyBDb21tYW5kUGFyYW1ldGVyKHtcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIGZsYWdzOiB0aGlzLmZsYWdzLFxuICAgICAgICAgICAgICAgIGVudW06IGVudGl0eVR5cGVFbnVtLFxuICAgICAgICAgICAgICAgIHBvc3RmaXg6IHRoaXMucG9zdGZpeFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEFyZ3VtZW50RW50aXR5IGltcGxlbWVudHMgQ29tbWFuZEFyZ3VtZW50IHtcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmxhZ3M6IENvbW1hbmRQYXJhbWV0ZXJGbGFncztcbiAgICBwcml2YXRlIHBvc3RmaXg6IHN0cmluZyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YT86IHsgbmFtZT86IHN0cmluZzsgb3B0aW9uYWw/OiBib29sZWFuOyBmbGFncz86IENvbW1hbmRQYXJhbWV0ZXJGbGFnczsgcG9zdGZpeD86IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGE/Lm5hbWUgPz8gJ3RhcmdldCc7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBkYXRhPy5vcHRpb25hbCA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5mbGFncyA9IGRhdGE/LmZsYWdzID8/IENvbW1hbmRQYXJhbWV0ZXJGbGFncy5OT05FO1xuICAgICAgICB0aGlzLnBvc3RmaXggPSBkYXRhPy5wb3N0Zml4ID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHBhcnNlKHJlYWRlcjogU3RyaW5nUmVhZGVyLCBjb250ZXh0OiBDb21tYW5kQ29udGV4dDxQbGF5ZXI+KSB7XG4gICAgICAgIGxldCBwbGF5ZXIgPSAnJztcbiAgICAgICAgd2hpbGUgKHJlYWRlci5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHJlYWRlci5nZXRDdXJzb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIHJlYWRlci5zZXRDdXJzb3IocG9zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGxheWVyICs9IGNoYXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGxheWVyLnN0YXJ0c1dpdGgoJ0AnKSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlVGFyZ2V0U2VsZWN0b3Ioe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dDogcGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGNvbnRleHQuZ2V0U291cmNlKCksXG4gICAgICAgICAgICAgICAgICAgIGVudGl0aWVzOiBjb250ZXh0LmdldFNvdXJjZSgpLmdldFdvcmxkKCkuZ2V0RW50aXRpZXMoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlcnJvciBhcyBhbnkpLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIHJlc3VsdHMnKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbY29udGV4dC5nZXRTb3VyY2UoKS5nZXRTZXJ2ZXIoKS5nZXRTZXNzaW9uTWFuYWdlcigpLmdldFBsYXllckJ5RXhhY3ROYW1lKHBsYXllcildOyAvLyBUT0RPOiBieSBuYW1lIG5vdCBleGFjdFxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkYWJsZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyYW1ldGVycygpOiBTZXQ8Q29tbWFuZFBhcmFtZXRlcj4ge1xuICAgICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgICAgICBuZXcgQ29tbWFuZFBhcmFtZXRlcih7XG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1UeXBlOiBDb21tYW5kUGFyYW1ldGVyVHlwZS5UYXJnZXQsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdGhpcy5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICBmbGFnczogdGhpcy5mbGFncyxcbiAgICAgICAgICAgICAgICBwb3N0Zml4OiB0aGlzLnBvc3RmaXhcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1hbmRBcmd1bWVudFBvc2l0aW9uIGV4dGVuZHMgVmVjdG9yMyBpbXBsZW1lbnRzIENvbW1hbmRBcmd1bWVudCB7XG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBvcHRpb25hbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZsYWdzOiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7XG4gICAgcHJpdmF0ZSBwb3N0Zml4OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE/OiB7IG5hbWU/OiBzdHJpbmc7IG9wdGlvbmFsPzogYm9vbGVhbjsgZmxhZ3M/OiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7IHBvc3RmaXg/OiBzdHJpbmcgfSkge1xuICAgICAgICBzdXBlcigwLCAwLCAwKTtcbiAgICAgICAgdGhpcy5uYW1lID0gZGF0YT8ubmFtZSA/PyAncG9zaXRpb24nO1xuICAgICAgICB0aGlzLm9wdGlvbmFsID0gZGF0YT8ub3B0aW9uYWwgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZmxhZ3MgPSBkYXRhPy5mbGFncyA/PyBDb21tYW5kUGFyYW1ldGVyRmxhZ3MuTk9ORTtcbiAgICAgICAgdGhpcy5wb3N0Zml4ID0gZGF0YT8ucG9zdGZpeCA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZShyZWFkZXI6IFN0cmluZ1JlYWRlciwgY29udGV4dDogQ29tbWFuZENvbnRleHQ8UGxheWVyPikge1xuICAgICAgICBjb25zdCBnZXRQb3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcG9zID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IHJlYWRlci5nZXRDdXJzb3IoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFyID0gcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5zZXRDdXJzb3IoY3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcG9zICs9IGNoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0WChcbiAgICAgICAgICAgIFBhcnNlVGlsZGVDYXJldE5vdGF0aW9uKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogZ2V0UG9zKCksXG4gICAgICAgICAgICAgICAgc291cmNlOiBjb250ZXh0LmdldFNvdXJjZSgpLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd4J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVhZGVyLnNraXAoKTtcbiAgICAgICAgdGhpcy5zZXRZKFxuICAgICAgICAgICAgUGFyc2VUaWxkZUNhcmV0Tm90YXRpb24oe1xuICAgICAgICAgICAgICAgIGlucHV0OiBnZXRQb3MoKSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6IGNvbnRleHQuZ2V0U291cmNlKCksXG4gICAgICAgICAgICAgICAgdHlwZTogJ3knXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZWFkZXIuc2tpcCgpO1xuICAgICAgICB0aGlzLnNldFooXG4gICAgICAgICAgICBQYXJzZVRpbGRlQ2FyZXROb3RhdGlvbih7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IGdldFBvcygpLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogY29udGV4dC5nZXRTb3VyY2UoKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAneidcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkYWJsZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyYW1ldGVycygpOiBTZXQ8Q29tbWFuZFBhcmFtZXRlcj4ge1xuICAgICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgICAgICBuZXcgQ29tbWFuZFBhcmFtZXRlcih7XG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1UeXBlOiBDb21tYW5kUGFyYW1ldGVyVHlwZS5Qb3NpdGlvbixcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIGZsYWdzOiB0aGlzLmZsYWdzLFxuICAgICAgICAgICAgICAgIHBvc3RmaXg6IHRoaXMucG9zdGZpeFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEFyZ3VtZW50Q29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmRBcmd1bWVudCB7XG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBvcHRpb25hbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZsYWdzOiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7XG4gICAgcHJpdmF0ZSBwb3N0Zml4OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE/OiB7IG5hbWU/OiBzdHJpbmc7IG9wdGlvbmFsPzogYm9vbGVhbjsgZmxhZ3M/OiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7IHBvc3RmaXg/OiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBkYXRhPy5uYW1lID8/ICdjb21tYW5kJztcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IGRhdGE/Lm9wdGlvbmFsID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmZsYWdzID0gZGF0YT8uZmxhZ3MgPz8gQ29tbWFuZFBhcmFtZXRlckZsYWdzLk5PTkU7XG4gICAgICAgIHRoaXMucG9zdGZpeCA9IGRhdGE/LnBvc3RmaXggPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2UocmVhZGVyOiBTdHJpbmdSZWFkZXIsIF9jb250ZXh0OiBDb21tYW5kQ29udGV4dDxQbGF5ZXI+KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSByZWFkZXIucmVhZFN0cmluZygpO1xuXG4gICAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkYWJsZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyYW1ldGVycygpOiBTZXQ8Q29tbWFuZFBhcmFtZXRlcj4ge1xuICAgICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgICAgICBuZXcgQ29tbWFuZFBhcmFtZXRlcih7XG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1UeXBlOiBDb21tYW5kUGFyYW1ldGVyVHlwZS5Qb3NpdGlvbixcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIGZsYWdzOiB0aGlzLmZsYWdzLFxuICAgICAgICAgICAgICAgIHBvc3RmaXg6IHRoaXMucG9zdGZpeFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9vbGVhbkFyZ3VtZW50Q29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmRBcmd1bWVudCB7XG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBvcHRpb25hbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZsYWdzOiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7XG4gICAgcHJpdmF0ZSBwb3N0Zml4OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE/OiB7IG5hbWU/OiBzdHJpbmc7IG9wdGlvbmFsPzogYm9vbGVhbjsgZmxhZ3M/OiBDb21tYW5kUGFyYW1ldGVyRmxhZ3M7IHBvc3RmaXg/OiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBkYXRhPy5uYW1lID8/ICdib29sZWFuJztcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IGRhdGE/Lm9wdGlvbmFsID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmZsYWdzID0gZGF0YT8uZmxhZ3MgPz8gQ29tbWFuZFBhcmFtZXRlckZsYWdzLk5PTkU7XG4gICAgICAgIHRoaXMucG9zdGZpeCA9IGRhdGE/LnBvc3RmaXggPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2UocmVhZGVyOiBTdHJpbmdSZWFkZXIsIF9jb250ZXh0OiBDb21tYW5kQ29udGV4dDxQbGF5ZXI+KSB7XG4gICAgICAgIGNvbnN0IGJvb2xlYW4gPSByZWFkZXIucmVhZFN0cmluZygpO1xuXG4gICAgICAgIGlmIChib29sZWFuID09PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVhZGFibGVUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoKTogU2V0PENvbW1hbmRQYXJhbWV0ZXI+IHtcbiAgICAgICAgY29uc3QgYm9vbGVhbkVudW0gPSBuZXcgQ29tbWFuZEVudW0oKTtcbiAgICAgICAgYm9vbGVhbkVudW0ubmFtZSA9ICdCb29sZWFuJztcbiAgICAgICAgYm9vbGVhbkVudW0udmFsdWVzID0gWyd0cnVlJywgJ2ZhbHNlJ107XG4gICAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgICAgIG5ldyBDb21tYW5kUGFyYW1ldGVyKHtcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIGVudW06IGJvb2xlYW5FbnVtLFxuICAgICAgICAgICAgICAgIGZsYWdzOiB0aGlzLmZsYWdzLFxuICAgICAgICAgICAgICAgIHBvc3RmaXg6IHRoaXMucG9zdGZpeFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGxheWVyQXJndW1lbnRDb21tYW5kIGltcGxlbWVudHMgQ29tbWFuZEFyZ3VtZW50IHtcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmxhZ3M6IENvbW1hbmRQYXJhbWV0ZXJGbGFncztcbiAgICBwcml2YXRlIHBvc3RmaXg6IHN0cmluZyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YT86IHsgbmFtZT86IHN0cmluZzsgb3B0aW9uYWw/OiBib29sZWFuOyBmbGFncz86IENvbW1hbmRQYXJhbWV0ZXJGbGFnczsgcG9zdGZpeD86IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGE/Lm5hbWUgPz8gJ3BsYXllcic7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBkYXRhPy5vcHRpb25hbCA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5mbGFncyA9IGRhdGE/LmZsYWdzID8/IENvbW1hbmRQYXJhbWV0ZXJGbGFncy5OT05FO1xuICAgICAgICB0aGlzLnBvc3RmaXggPSBkYXRhPy5wb3N0Zml4ID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHBhcnNlKHJlYWRlcjogU3RyaW5nUmVhZGVyLCBfY29udGV4dDogQ29tbWFuZENvbnRleHQ8UGxheWVyPikge1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSByZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkYWJsZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyYW1ldGVycyhzZXJ2ZXI6IFNlcnZlcik6IFNldDxDb21tYW5kUGFyYW1ldGVyPiB7XG4gICAgICAgIGNvbnN0IHBsYXllckVudW0gPSBuZXcgQ29tbWFuZEVudW0oKTtcbiAgICAgICAgcGxheWVyRW51bS5uYW1lID0gJ1BsYXllcic7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGF5ZXJFbnVtLnZhbHVlcyA9IHNlcnZlclxuICAgICAgICAgICAgICAgIC5nZXRTZXNzaW9uTWFuYWdlcigpXG4gICAgICAgICAgICAgICAgLmdldEFsbFBsYXllcnMoKVxuICAgICAgICAgICAgICAgIC5tYXAoKHBsYXllcikgPT4gcGxheWVyLmdldE5hbWUoKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcGxheWVyRW51bS52YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgICAgIG5ldyBDb21tYW5kUGFyYW1ldGVyKHtcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIGVudW06IHBsYXllckVudW0sXG4gICAgICAgICAgICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeDogdGhpcy5wb3N0Zml4XG4gICAgICAgICAgICB9KVxuICAgICAgICBdKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiQ29tbWFuZFBhcmFtZXRlckZsYWdzIiwiZ2V0R2FtZXR5cGVOYW1lIiwiZ2V0R2FtZXR5cGVJZCIsIlN1Z2dlc3Rpb25zIiwiQ29tbWFuZEVudW0iLCJDb21tYW5kUGFyYW1ldGVyIiwiUGFyc2VUYXJnZXRTZWxlY3RvciIsIkNv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