UNPKG

@glimmer/compiler

Version:
342 lines (276 loc) 32.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@glimmer/util"); var _utils = require("./utils"); class WireFormatDebugger { constructor([_statements, symbols, _hasEval, upvars]) { this.upvars = upvars; this.symbols = symbols; } format(program) { let out = []; for (let statement of program[0]) { out.push(this.formatOpcode(statement)); } return out; } 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; } } 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); } } formatElementParams(opcodes) { if (opcodes === null) return null; return opcodes.map(o => this.formatOpcode(o)); } formatParams(opcodes) { if (opcodes === null) return null; return opcodes.map(o => this.formatOpcode(o)); } formatHash(hash) { if (hash === null) return null; return hash[0].reduce((accum, key, index) => { accum[key] = this.formatOpcode(hash[1][index]); return accum; }, (0, _util.dict)()); } formatBlocks(blocks) { if (blocks === null) return null; return blocks[0].reduce((accum, key, index) => { accum[key] = this.formatBlock(blocks[1][index]); return accum; }, (0, _util.dict)()); } formatBlock(block) { return { statements: block[0].map(s => this.formatOpcode(s)), parameters: block[1] }; } } exports.default = WireFormatDebugger; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUE7O0FBRUE7O0FBRWMsTUFBQSxrQkFBQSxDQUF5QjtBQUlyQyxFQUFBLFdBQUEsQ0FBWSxDQUFBLFdBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFaLE1BQVksQ0FBWixFQUE2RTtBQUMzRSxTQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0EsU0FBQSxPQUFBLEdBQUEsT0FBQTtBQUNEOztBQUVELEVBQUEsTUFBTSxDQUFBLE9BQUEsRUFBaUM7QUFDckMsUUFBSSxHQUFHLEdBQVAsRUFBQTs7QUFFQSxTQUFLLElBQUwsU0FBQSxJQUFzQixPQUFPLENBQTdCLENBQTZCLENBQTdCLEVBQWtDO0FBQ2hDLE1BQUEsR0FBRyxDQUFILElBQUEsQ0FBUyxLQUFBLFlBQUEsQ0FBVCxTQUFTLENBQVQ7QUFDRDs7QUFFRCxXQUFBLEdBQUE7QUFDRDs7QUFFRCxFQUFBLFlBQVksQ0FBQSxNQUFBLEVBQTBCO0FBQ3BDLFFBQUksS0FBSyxDQUFMLE9BQUEsQ0FBSixNQUFJLENBQUosRUFBMkI7QUFDekIsY0FBUSxNQUFNLENBQWQsQ0FBYyxDQUFkO0FBQ0UsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLFFBQUEsRUFBVyxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUExQyxDQUEwQyxDQUF4QixDQUFYLENBQVA7O0FBQ0YsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLGlCQUFBLEVBQW9CLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBQW5ELENBQW1ELENBQXhCLENBQXBCLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLE9BQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUZuQixDQUVtQixDQUF4QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0s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QUFNLEtBQVYsSUFBQSxFQUFxQixPQUFBLElBQUE7QUFFckIsV0FBTyxNQUFNLENBQU4sQ0FBTSxDQUFOLENBQUEsTUFBQSxDQUFpQixDQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxLQUFzQjtBQUM1QyxNQUFBLEtBQUssQ0FBTCxHQUFLLENBQUwsR0FBYSxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFOLENBQU0sQ0FBTixDQUE5QixLQUE4QixDQUFqQixDQUFiO0FBQ0EsYUFBQSxLQUFBO0FBRkssS0FBQSxFQUFQLGlCQUFPLENBQVA7QUFJRDs7QUFFTyxFQUFBLFdBQVcsQ0FBQSxLQUFBLEVBQTZCO0FBQzlDLFdBQU87QUFDTCxNQUFBLFVBQVUsRUFBRSxLQUFLLENBQUwsQ0FBSyxDQUFMLENBQUEsR0FBQSxDQUFjLENBQUQsSUFBTyxLQUFBLFlBQUEsQ0FEM0IsQ0FDMkIsQ0FBcEIsQ0FEUDtBQUVMLE1BQUEsVUFBVSxFQUFFLEtBQUssQ0FBQSxDQUFBO0FBRlosS0FBUDtBQUlEOztBQTdTb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXJyaWVkVHlwZSxcbiAgT3B0aW9uLFxuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXhwT3Bjb2RlcyBhcyBPcCxcbiAgV2lyZUZvcm1hdCxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaWN0LCBleGhhdXN0ZWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgaW5mbGF0ZUF0dHJOYW1lLCBpbmZsYXRlVGFnTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaXJlRm9ybWF0RGVidWdnZXIge1xuICBwcml2YXRlIHVwdmFyczogc3RyaW5nW107XG4gIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoW19zdGF0ZW1lbnRzLCBzeW1ib2xzLCBfaGFzRXZhbCwgdXB2YXJzXTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2spIHtcbiAgICB0aGlzLnVwdmFycyA9IHVwdmFycztcbiAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzO1xuICB9XG5cbiAgZm9ybWF0KHByb2dyYW06IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrKTogdW5rbm93biB7XG4gICAgbGV0IG91dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHByb2dyYW1bMF0pIHtcbiAgICAgIG91dC5wdXNoKHRoaXMuZm9ybWF0T3Bjb2RlKHN0YXRlbWVudCkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmb3JtYXRPcGNvZGUob3Bjb2RlOiBXaXJlRm9ybWF0LlN5bnRheCk6IHVua25vd24ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wY29kZSkpIHtcbiAgICAgIHN3aXRjaCAob3Bjb2RlWzBdKSB7XG4gICAgICAgIGNhc2UgT3AuQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ2FwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ3RydXN0aW5nLWFwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdibG9jaycsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSW5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaW4tZWxlbWVudCcsXG4gICAgICAgICAgICBvcGNvZGVbMV0sXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdID8gdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzNdKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuT3BlbkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnb3Blbi1lbGVtZW50JywgaW5mbGF0ZVRhZ05hbWUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5PcGVuRWxlbWVudFdpdGhTcGxhdDpcbiAgICAgICAgICByZXR1cm4gWydvcGVuLWVsZW1lbnQtd2l0aC1zcGxhdCcsIGluZmxhdGVUYWdOYW1lKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQ2xvc2VFbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ2Nsb3NlLWVsZW1lbnQnXTtcblxuICAgICAgICBjYXNlIE9wLkZsdXNoRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydmbHVzaC1lbGVtZW50J107XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLlN0YXRpY0NvbXBvbmVudEF0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWNvbXBvbmVudC1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZHluYW1pYy1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2NvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQXR0clNwbGF0OlxuICAgICAgICAgIHJldHVybiBbJ2F0dHItc3BsYXQnXTtcblxuICAgICAgICBjYXNlIE9wLllpZWxkOlxuICAgICAgICAgIHJldHVybiBbJ3lpZWxkJywgb3Bjb2RlWzFdLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnZHluYW1pYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQXJnOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuVHJ1c3RpbmdEeW5hbWljQXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWR5bmFtaWMtYXR0cicsXG4gICAgICAgICAgICBpbmZsYXRlQXR0ck5hbWUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSksXG4gICAgICAgICAgICBvcGNvZGVbM10sXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWNvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuRGVidWdnZXI6XG4gICAgICAgICAgcmV0dXJuIFsnZGVidWdnZXInLCBvcGNvZGVbMV1dO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tbWVudDpcbiAgICAgICAgICByZXR1cm4gWydjb21tZW50Jywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLk1vZGlmaWVyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnbW9kaWZpZXInLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEVsZW1lbnRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSGFzQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFsnaGFzLWJsb2NrJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9ja1BhcmFtczpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2stcGFyYW1zJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5DdXJyeTpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2N1cnJ5JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEN1cnJ5VHlwZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5VbmRlZmluZWQ6XG4gICAgICAgICAgcmV0dXJuIFsndW5kZWZpbmVkJ107XG5cbiAgICAgICAgY2FzZSBPcC5DYWxsOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY2FsbCcsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5Db25jYXQ6XG4gICAgICAgICAgcmV0dXJuIFsnY29uY2F0JywgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzFdIGFzIFdpcmVGb3JtYXQuQ29yZS5QYXJhbXMpXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN0cmljdEZyZWU6XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXN0cmljdC1mcmVlJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2snLFxuICAgICAgICAgICAgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSxcbiAgICAgICAgICAgIG9wY29kZVsyXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkOlxuICAgICAgICAgIHJldHVybiBbJ0dldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjaycsIHRoaXMudXB2YXJzW29wY29kZVsxXV1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzSGVscGVySGVhZDpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNIZWxwZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudEhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzQ29tcG9uZW50SGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNNb2RpZmllckhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzTW9kaWZpZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN5bWJvbDoge1xuICAgICAgICAgIGlmIChvcGNvZGVbMV0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCAndGhpcycsIG9wY29kZVsyXV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCB0aGlzLnN5bWJvbHNbb3Bjb2RlWzFdIC0gMV0sIG9wY29kZVsyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPcC5HZXRUZW1wbGF0ZVN5bWJvbDoge1xuICAgICAgICAgIHJldHVybiBbJ2dldC10ZW1wbGF0ZS1zeW1ib2wnLCBvcGNvZGVbMV0sIG9wY29kZVsyXV07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9wLklmOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaWYnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLklmSW5saW5lOlxuICAgICAgICAgIHJldHVybiBbJ2lmLWlubGluZSddO1xuXG4gICAgICAgIGNhc2UgT3AuTm90OlxuICAgICAgICAgIHJldHVybiBbJ25vdCddO1xuXG4gICAgICAgIGNhc2UgT3AuRWFjaDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2VhY2gnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIG9wY29kZVsyXSA/IHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSkgOiBudWxsLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbM10pLFxuICAgICAgICAgICAgb3Bjb2RlWzRdID8gdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbNF0pIDogbnVsbCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3dpdGgnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkxldDpcbiAgICAgICAgICByZXR1cm4gWydsZXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuTG9nOlxuICAgICAgICAgIHJldHVybiBbJ2xvZycsIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aER5bmFtaWNWYXJzOlxuICAgICAgICAgIHJldHVybiBbJy13aXRoLWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RHluYW1pY1ZhcjpcbiAgICAgICAgICByZXR1cm4gWyctZ2V0LWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuSW52b2tlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcGNvZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDdXJyeVR5cGUodmFsdWU6IEN1cnJpZWRUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBDdXJyaWVkVHlwZS5Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnY29tcG9uZW50JztcbiAgICAgIGNhc2UgQ3VycmllZFR5cGUuSGVscGVyOlxuICAgICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgICBjYXNlIEN1cnJpZWRUeXBlLk1vZGlmaWVyOlxuICAgICAgICByZXR1cm4gJ21vZGlmaWVyJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGV4aGF1c3RlZCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRFbGVtZW50UGFyYW1zKG9wY29kZXM6IE9wdGlvbjxXaXJlRm9ybWF0LkVsZW1lbnRQYXJhbWV0ZXJbXT4pOiBPcHRpb248dW5rbm93bltdPiB7XG4gICAgaWYgKG9wY29kZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBvcGNvZGVzLm1hcCgobykgPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKChvKSA9PiB0aGlzLmZvcm1hdE9wY29kZShvKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEhhc2goaGFzaDogV2lyZUZvcm1hdC5Db3JlLkhhc2gpOiBPcHRpb248b2JqZWN0PiB7XG4gICAgaWYgKGhhc2ggPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGhhc2hbMF0ucmVkdWNlKChhY2N1bSwga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjdW1ba2V5XSA9IHRoaXMuZm9ybWF0T3Bjb2RlKGhhc2hbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9ja3MoYmxvY2tzOiBXaXJlRm9ybWF0LkNvcmUuQmxvY2tzKTogT3B0aW9uPG9iamVjdD4ge1xuICAgIGlmIChibG9ja3MgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGJsb2Nrc1swXS5yZWR1Y2UoKGFjY3VtLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2N1bVtrZXldID0gdGhpcy5mb3JtYXRCbG9jayhibG9ja3NbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9jayhibG9jazogU2VyaWFsaXplZElubGluZUJsb2NrKTogb2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogYmxvY2tbMF0ubWFwKChzKSA9PiB0aGlzLmZvcm1hdE9wY29kZShzKSksXG4gICAgICBwYXJhbWV0ZXJzOiBibG9ja1sxXSxcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9