UNPKG

@glimmer/compiler

Version:
410 lines (330 loc) 35.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@glimmer/util"); var _utils = require("./utils"); function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var WireFormatDebugger = /*#__PURE__*/function () { function WireFormatDebugger(_ref) { var _statements = _ref[0], symbols = _ref[1], _hasEval = _ref[2], upvars = _ref[3]; this.upvars = upvars; this.symbols = symbols; } var _proto = WireFormatDebugger.prototype; _proto.format = function format(program) { var out = []; for (var _iterator = _createForOfIteratorHelperLoose(program[0]), _step; !(_step = _iterator()).done;) { var statement = _step.value; out.push(this.formatOpcode(statement)); } return out; }; _proto.formatOpcode = function formatOpcode(opcode) { if (Array.isArray(opcode)) { switch (opcode[0]) { case 1 /* Append */ : return ['append', this.formatOpcode(opcode[1])]; case 2 /* TrustingAppend */ : return ['trusting-append', this.formatOpcode(opcode[1])]; case 6 /* Block */ : return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])]; case 40 /* InElement */ : return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined]; case 10 /* OpenElement */ : return ['open-element', (0, _utils.inflateTagName)(opcode[1])]; case 11 /* OpenElementWithSplat */ : return ['open-element-with-splat', (0, _utils.inflateTagName)(opcode[1])]; case 13 /* CloseElement */ : return ['close-element']; case 12 /* FlushElement */ : return ['flush-element']; case 14 /* StaticAttr */ : return ['static-attr', (0, _utils.inflateAttrName)(opcode[1]), opcode[2], opcode[3]]; case 24 /* StaticComponentAttr */ : return ['static-component-attr', (0, _utils.inflateAttrName)(opcode[1]), opcode[2], opcode[3]]; case 15 /* DynamicAttr */ : return ['dynamic-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]]; case 16 /* ComponentAttr */ : return ['component-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]]; case 17 /* AttrSplat */ : return ['attr-splat']; case 18 /* Yield */ : return ['yield', opcode[1], this.formatParams(opcode[2])]; case 20 /* DynamicArg */ : return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])]; case 21 /* StaticArg */ : return ['static-arg', opcode[1], this.formatOpcode(opcode[2])]; case 22 /* TrustingDynamicAttr */ : return ['trusting-dynamic-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]]; case 23 /* TrustingComponentAttr */ : return ['trusting-component-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]]; case 26 /* Debugger */ : return ['debugger', opcode[1]]; case 3 /* Comment */ : return ['comment', opcode[1]]; case 4 /* Modifier */ : return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])]; case 8 /* Component */ : return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])]; case 48 /* HasBlock */ : return ['has-block', this.formatOpcode(opcode[1])]; case 49 /* HasBlockParams */ : return ['has-block-params', this.formatOpcode(opcode[1])]; case 50 /* Curry */ : return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])]; case 27 /* Undefined */ : return ['undefined']; case 28 /* Call */ : return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])]; case 29 /* Concat */ : return ['concat', this.formatParams(opcode[1])]; case 31 /* GetStrictFree */ : return ['get-strict-free', this.upvars[opcode[1]], opcode[2]]; case 34 /* GetFreeAsComponentOrHelperHeadOrThisFallback */ : return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]]; case 35 /* GetFreeAsComponentOrHelperHead */ : return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]]; case 36 /* GetFreeAsHelperHeadOrThisFallback */ : return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]]; case 99 /* GetFreeAsDeprecatedHelperHeadOrThisFallback */ : return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]]; case 37 /* GetFreeAsHelperHead */ : return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]]; case 39 /* GetFreeAsComponentHead */ : return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]]; case 38 /* GetFreeAsModifierHead */ : return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]]; case 30 /* GetSymbol */ : { if (opcode[1] === 0) { return ['get-symbol', 'this', opcode[2]]; } else { return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]]; } } case 32 /* GetTemplateSymbol */ : { return ['get-template-symbol', opcode[1], opcode[2]]; } case 41 /* If */ : return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null]; case 52 /* IfInline */ : return ['if-inline']; case 51 /* Not */ : return ['not']; case 42 /* Each */ : return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null]; case 43 /* With */ : return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null]; case 44 /* Let */ : return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])]; case 54 /* Log */ : return ['log', this.formatParams(opcode[1])]; case 45 /* WithDynamicVars */ : return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])]; case 53 /* GetDynamicVar */ : return ['-get-dynamic-vars', this.formatOpcode(opcode[1])]; case 46 /* InvokeComponent */ : return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])]; } } else { return opcode; } }; _proto.formatCurryType = function formatCurryType(value) { switch (value) { case 0 /* Component */ : return 'component'; case 1 /* Helper */ : return 'helper'; case 2 /* Modifier */ : return 'modifier'; default: throw (0, _util.exhausted)(value); } }; _proto.formatElementParams = function formatElementParams(opcodes) { var _this = this; if (opcodes === null) return null; return opcodes.map(function (o) { return _this.formatOpcode(o); }); }; _proto.formatParams = function formatParams(opcodes) { var _this2 = this; if (opcodes === null) return null; return opcodes.map(function (o) { return _this2.formatOpcode(o); }); }; _proto.formatHash = function formatHash(hash) { var _this3 = this; if (hash === null) return null; return hash[0].reduce(function (accum, key, index) { accum[key] = _this3.formatOpcode(hash[1][index]); return accum; }, (0, _util.dict)()); }; _proto.formatBlocks = function formatBlocks(blocks) { var _this4 = this; if (blocks === null) return null; return blocks[0].reduce(function (accum, key, index) { accum[key] = _this4.formatBlock(blocks[1][index]); return accum; }, (0, _util.dict)()); }; _proto.formatBlock = function formatBlock(block) { var _this5 = this; return { statements: block[0].map(function (s) { return _this5.formatOpcode(s); }), parameters: block[1] }; }; return WireFormatDebugger; }(); exports.default = WireFormatDebugger; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFYyxrQjtBQUlaLFdBQUEsa0JBQUEsQ0FBQSxJQUFBLEVBQTZFO0FBQUEsUUFBakUsV0FBaUUsR0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsUUFBakUsT0FBaUUsR0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsUUFBakUsUUFBaUUsR0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsUUFBN0UsTUFBNkUsR0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBO0FBQzNFLFNBQUEsTUFBQSxHQUFBLE1BQUE7QUFDQSxTQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0Q7Ozs7U0FFRCxNLEdBQUEsU0FBQSxNQUFBLENBQUEsT0FBQSxFQUF1QztBQUNyQyxRQUFJLEdBQUcsR0FBUCxFQUFBOztBQUVBLFNBQUEsSUFBQSxTQUFBLEdBQUEsK0JBQUEsQ0FBc0IsT0FBTyxDQUE3QixDQUE2QixDQUE3QixDQUFBLEVBQUEsS0FBQSxFQUFBLENBQUEsQ0FBQSxLQUFBLEdBQUEsU0FBQSxFQUFBLEVBQUEsSUFBQSxHQUFrQztBQUFBLFVBQWxDLFNBQWtDLEdBQUEsS0FBQSxDQUFBLEtBQUE7QUFDaEMsTUFBQSxHQUFHLENBQUgsSUFBQSxDQUFTLEtBQUEsWUFBQSxDQUFULFNBQVMsQ0FBVDtBQUNEOztBQUVELFdBQUEsR0FBQTs7O1NBR0YsWSxHQUFBLFNBQUEsWUFBQSxDQUFBLE1BQUEsRUFBc0M7QUFDcEMsUUFBSSxLQUFLLENBQUwsT0FBQSxDQUFKLE1BQUksQ0FBSixFQUEyQjtBQUN6QixjQUFRLE1BQU0sQ0FBZCxDQUFjLENBQWQ7QUFDRSxhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENB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Q0FBUDtBQURwQixPQUNPLENBRFA7QUFFTCxNQUFBLFVBQVUsRUFBRSxLQUFLLENBQUEsQ0FBQTtBQUZaLEtBQVAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXJyaWVkVHlwZSxcbiAgT3B0aW9uLFxuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXhwT3Bjb2RlcyBhcyBPcCxcbiAgV2lyZUZvcm1hdCxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaWN0LCBleGhhdXN0ZWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgaW5mbGF0ZUF0dHJOYW1lLCBpbmZsYXRlVGFnTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaXJlRm9ybWF0RGVidWdnZXIge1xuICBwcml2YXRlIHVwdmFyczogc3RyaW5nW107XG4gIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoW19zdGF0ZW1lbnRzLCBzeW1ib2xzLCBfaGFzRXZhbCwgdXB2YXJzXTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2spIHtcbiAgICB0aGlzLnVwdmFycyA9IHVwdmFycztcbiAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzO1xuICB9XG5cbiAgZm9ybWF0KHByb2dyYW06IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrKTogdW5rbm93biB7XG4gICAgbGV0IG91dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHByb2dyYW1bMF0pIHtcbiAgICAgIG91dC5wdXNoKHRoaXMuZm9ybWF0T3Bjb2RlKHN0YXRlbWVudCkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmb3JtYXRPcGNvZGUob3Bjb2RlOiBXaXJlRm9ybWF0LlN5bnRheCk6IHVua25vd24ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wY29kZSkpIHtcbiAgICAgIHN3aXRjaCAob3Bjb2RlWzBdKSB7XG4gICAgICAgIGNhc2UgT3AuQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ2FwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ3RydXN0aW5nLWFwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdibG9jaycsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSW5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaW4tZWxlbWVudCcsXG4gICAgICAgICAgICBvcGNvZGVbMV0sXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdID8gdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzNdKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuT3BlbkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnb3Blbi1lbGVtZW50JywgaW5mbGF0ZVRhZ05hbWUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5PcGVuRWxlbWVudFdpdGhTcGxhdDpcbiAgICAgICAgICByZXR1cm4gWydvcGVuLWVsZW1lbnQtd2l0aC1zcGxhdCcsIGluZmxhdGVUYWdOYW1lKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQ2xvc2VFbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ2Nsb3NlLWVsZW1lbnQnXTtcblxuICAgICAgICBjYXNlIE9wLkZsdXNoRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydmbHVzaC1lbGVtZW50J107XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLlN0YXRpY0NvbXBvbmVudEF0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWNvbXBvbmVudC1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZHluYW1pYy1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2NvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQXR0clNwbGF0OlxuICAgICAgICAgIHJldHVybiBbJ2F0dHItc3BsYXQnXTtcblxuICAgICAgICBjYXNlIE9wLllpZWxkOlxuICAgICAgICAgIHJldHVybiBbJ3lpZWxkJywgb3Bjb2RlWzFdLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnZHluYW1pYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQXJnOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuVHJ1c3RpbmdEeW5hbWljQXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWR5bmFtaWMtYXR0cicsXG4gICAgICAgICAgICBpbmZsYXRlQXR0ck5hbWUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSksXG4gICAgICAgICAgICBvcGNvZGVbM10sXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWNvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuRGVidWdnZXI6XG4gICAgICAgICAgcmV0dXJuIFsnZGVidWdnZXInLCBvcGNvZGVbMV1dO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tbWVudDpcbiAgICAgICAgICByZXR1cm4gWydjb21tZW50Jywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLk1vZGlmaWVyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnbW9kaWZpZXInLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEVsZW1lbnRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSGFzQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFsnaGFzLWJsb2NrJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9ja1BhcmFtczpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2stcGFyYW1zJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5DdXJyeTpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2N1cnJ5JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEN1cnJ5VHlwZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5VbmRlZmluZWQ6XG4gICAgICAgICAgcmV0dXJuIFsndW5kZWZpbmVkJ107XG5cbiAgICAgICAgY2FzZSBPcC5DYWxsOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY2FsbCcsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5Db25jYXQ6XG4gICAgICAgICAgcmV0dXJuIFsnY29uY2F0JywgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzFdIGFzIFdpcmVGb3JtYXQuQ29yZS5QYXJhbXMpXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN0cmljdEZyZWU6XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXN0cmljdC1mcmVlJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2snLFxuICAgICAgICAgICAgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSxcbiAgICAgICAgICAgIG9wY29kZVsyXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkOlxuICAgICAgICAgIHJldHVybiBbJ0dldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjaycsIHRoaXMudXB2YXJzW29wY29kZVsxXV1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzSGVscGVySGVhZDpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNIZWxwZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudEhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzQ29tcG9uZW50SGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNNb2RpZmllckhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzTW9kaWZpZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN5bWJvbDoge1xuICAgICAgICAgIGlmIChvcGNvZGVbMV0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCAndGhpcycsIG9wY29kZVsyXV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCB0aGlzLnN5bWJvbHNbb3Bjb2RlWzFdIC0gMV0sIG9wY29kZVsyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPcC5HZXRUZW1wbGF0ZVN5bWJvbDoge1xuICAgICAgICAgIHJldHVybiBbJ2dldC10ZW1wbGF0ZS1zeW1ib2wnLCBvcGNvZGVbMV0sIG9wY29kZVsyXV07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9wLklmOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaWYnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLklmSW5saW5lOlxuICAgICAgICAgIHJldHVybiBbJ2lmLWlubGluZSddO1xuXG4gICAgICAgIGNhc2UgT3AuTm90OlxuICAgICAgICAgIHJldHVybiBbJ25vdCddO1xuXG4gICAgICAgIGNhc2UgT3AuRWFjaDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2VhY2gnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIG9wY29kZVsyXSA/IHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSkgOiBudWxsLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbM10pLFxuICAgICAgICAgICAgb3Bjb2RlWzRdID8gdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbNF0pIDogbnVsbCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3dpdGgnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkxldDpcbiAgICAgICAgICByZXR1cm4gWydsZXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuTG9nOlxuICAgICAgICAgIHJldHVybiBbJ2xvZycsIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aER5bmFtaWNWYXJzOlxuICAgICAgICAgIHJldHVybiBbJy13aXRoLWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RHluYW1pY1ZhcjpcbiAgICAgICAgICByZXR1cm4gWyctZ2V0LWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuSW52b2tlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcGNvZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDdXJyeVR5cGUodmFsdWU6IEN1cnJpZWRUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBDdXJyaWVkVHlwZS5Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnY29tcG9uZW50JztcbiAgICAgIGNhc2UgQ3VycmllZFR5cGUuSGVscGVyOlxuICAgICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgICBjYXNlIEN1cnJpZWRUeXBlLk1vZGlmaWVyOlxuICAgICAgICByZXR1cm4gJ21vZGlmaWVyJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGV4aGF1c3RlZCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRFbGVtZW50UGFyYW1zKG9wY29kZXM6IE9wdGlvbjxXaXJlRm9ybWF0LkVsZW1lbnRQYXJhbWV0ZXJbXT4pOiBPcHRpb248dW5rbm93bltdPiB7XG4gICAgaWYgKG9wY29kZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBvcGNvZGVzLm1hcCgobykgPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKChvKSA9PiB0aGlzLmZvcm1hdE9wY29kZShvKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEhhc2goaGFzaDogV2lyZUZvcm1hdC5Db3JlLkhhc2gpOiBPcHRpb248b2JqZWN0PiB7XG4gICAgaWYgKGhhc2ggPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGhhc2hbMF0ucmVkdWNlKChhY2N1bSwga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjdW1ba2V5XSA9IHRoaXMuZm9ybWF0T3Bjb2RlKGhhc2hbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9ja3MoYmxvY2tzOiBXaXJlRm9ybWF0LkNvcmUuQmxvY2tzKTogT3B0aW9uPG9iamVjdD4ge1xuICAgIGlmIChibG9ja3MgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGJsb2Nrc1swXS5yZWR1Y2UoKGFjY3VtLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2N1bVtrZXldID0gdGhpcy5mb3JtYXRCbG9jayhibG9ja3NbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9jayhibG9jazogU2VyaWFsaXplZElubGluZUJsb2NrKTogb2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogYmxvY2tbMF0ubWFwKChzKSA9PiB0aGlzLmZvcm1hdE9wY29kZShzKSksXG4gICAgICBwYXJhbWV0ZXJzOiBibG9ja1sxXSxcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9