UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

335 lines (330 loc) • 37.1 kB
'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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