@glimmer/compiler
Version:
364 lines (292 loc) • 34.8 kB
JavaScript
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; }
import { dict, exhausted } from '@glimmer/util';
import { inflateAttrName, inflateTagName } from './utils';
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', inflateTagName(opcode[1])];
case 11
/* OpenElementWithSplat */
:
return ['open-element-with-splat', inflateTagName(opcode[1])];
case 13
/* CloseElement */
:
return ['close-element'];
case 12
/* FlushElement */
:
return ['flush-element'];
case 14
/* StaticAttr */
:
return ['static-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];
case 24
/* StaticComponentAttr */
:
return ['static-component-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];
case 15
/* DynamicAttr */
:
return ['dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 16
/* ComponentAttr */
:
return ['component-attr', 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', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 23
/* TrustingComponentAttr */
:
return ['trusting-component-attr', 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 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;
}, 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;
}, 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;
}();
export { WireFormatDebugger as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxTQUFBLElBQUEsRUFBQSxTQUFBLFFBQUEsZUFBQTtBQUVBLFNBQUEsZUFBQSxFQUFBLGNBQUEsUUFBQSxTQUFBOztJQUVjLGtCO0FBSVosb0NBQTZFO0FBQUEsUUFBakUsV0FBaUU7QUFBQSxRQUFqRSxPQUFpRTtBQUFBLFFBQWpFLFFBQWlFO0FBQUEsUUFBN0UsTUFBNkU7QUFDM0UsU0FBQSxNQUFBLEdBQUEsTUFBQTtBQUNBLFNBQUEsT0FBQSxHQUFBLE9BQUE7QUFDRDs7OztTQUVELE0sR0FBQSxnQkFBTSxPQUFOLEVBQXVDO0FBQ3JDLFFBQUksR0FBRyxHQUFQLEVBQUE7O0FBRUEseURBQXNCLE9BQU8sQ0FBN0IsQ0FBNkIsQ0FBN0Isd0NBQWtDO0FBQUEsVUFBbEMsU0FBa0M7QUFDaEMsTUFBQSxHQUFHLENBQUgsSUFBQSxDQUFTLEtBQUEsWUFBQSxDQUFULFNBQVMsQ0FBVDtBQUNEOztBQUVELFdBQUEsR0FBQTtBQUNELEc7O1NBRUQsWSxHQUFBLHNCQUFZLE1BQVosRUFBc0M7QUFDcEMsUUFBSSxLQUFLLENBQUwsT0FBQSxDQUFKLE1BQUksQ0FBSixFQUEyQjtBQUN6QixjQUFRLE1BQU0sQ0FBZCxDQUFjLENBQWQ7QUFDRSxhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsUUFBQSxFQUFXLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBQTFDLENBQTBDLENBQXhCLENBQVgsQ0FBUDs7QUFDRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsaUJBQUEsRUFBb0IsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBbkQsQ0FBbUQsQ0FBeEIsQ0FBcEIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsT0FBQSxFQUVMLEtBQUEsWUFBQSxDQUFr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LENBQUEsWUFBQSxDQUFrQixJQUFJLENBQUosQ0FBSSxDQUFKLENBQS9CLEtBQStCLENBQWxCLENBQWI7QUFDQSxhQUFBLEtBQUE7QUFGSyxLQUFBLEVBR0osSUFISCxFQUFPLENBQVA7QUFJRCxHOztTQUVPLFksR0FBQSxzQkFBWSxNQUFaLEVBQTJDO0FBQUE7O0FBQ2pELFFBQUksTUFBTSxLQUFWLElBQUEsRUFBcUIsT0FBQSxJQUFBO0FBRXJCLFdBQU8sTUFBTSxDQUFOLENBQU0sQ0FBTixDQUFBLE1BQUEsQ0FBaUIsVUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBc0I7QUFDNUMsTUFBQSxLQUFLLENBQUwsR0FBSyxDQUFMLEdBQWEsTUFBQSxDQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFOLENBQU0sQ0FBTixDQUE5QixLQUE4QixDQUFqQixDQUFiO0FBQ0EsYUFBQSxLQUFBO0FBRkssS0FBQSxFQUdKLElBSEgsRUFBTyxDQUFQO0FBSUQsRzs7U0FFTyxXLEdBQUEscUJBQVcsS0FBWCxFQUF3QztBQUFBOztBQUM5QyxXQUFPO0FBQ0wsTUFBQSxVQUFVLEVBQUUsS0FBSyxDQUFMLENBQUssQ0FBTCxDQUFBLEdBQUEsQ0FBYyxVQUFBLENBQUQ7QUFBQSxlQUFPLE1BQUEsQ0FBQSxZQUFBLENBRDNCLENBQzJCLENBQVA7QUFBQSxPQUFiLENBRFA7QUFFTCxNQUFBLFVBQVUsRUFBRSxLQUFLLENBQUEsQ0FBQTtBQUZaLEtBQVA7QUFJRCxHOzs7OztTQTdTVyxrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEN1cnJpZWRUeXBlLFxuICBPcHRpb24sXG4gIFNlcmlhbGl6ZWRJbmxpbmVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssXG4gIFNleHBPcGNvZGVzIGFzIE9wLFxuICBXaXJlRm9ybWF0LFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRpY3QsIGV4aGF1c3RlZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBpbmZsYXRlQXR0ck5hbWUsIGluZmxhdGVUYWdOYW1lIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpcmVGb3JtYXREZWJ1Z2dlciB7XG4gIHByaXZhdGUgdXB2YXJzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBzeW1ib2xzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihbX3N0YXRlbWVudHMsIHN5bWJvbHMsIF9oYXNFdmFsLCB1cHZhcnNdOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jaykge1xuICAgIHRoaXMudXB2YXJzID0gdXB2YXJzO1xuICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHM7XG4gIH1cblxuICBmb3JtYXQocHJvZ3JhbTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2spOiB1bmtub3duIHtcbiAgICBsZXQgb3V0ID0gW107XG5cbiAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2YgcHJvZ3JhbVswXSkge1xuICAgICAgb3V0LnB1c2godGhpcy5mb3JtYXRPcGNvZGUoc3RhdGVtZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZvcm1hdE9wY29kZShvcGNvZGU6IFdpcmVGb3JtYXQuU3ludGF4KTogdW5rbm93biB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3Bjb2RlKSkge1xuICAgICAgc3dpdGNoIChvcGNvZGVbMF0pIHtcbiAgICAgICAgY2FzZSBPcC5BcHBlbmQ6XG4gICAgICAgICAgcmV0dXJuIFsnYXBwZW5kJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG4gICAgICAgIGNhc2UgT3AuVHJ1c3RpbmdBcHBlbmQ6XG4gICAgICAgICAgcmV0dXJuIFsndHJ1c3RpbmctYXBwZW5kJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5CbG9jazpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2Jsb2NrJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5JbkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdpbi1lbGVtZW50JyxcbiAgICAgICAgICAgIG9wY29kZVsxXSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSksXG4gICAgICAgICAgICBvcGNvZGVbM10gPyB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbM10pIDogdW5kZWZpbmVkLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5PcGVuRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydvcGVuLWVsZW1lbnQnLCBpbmZsYXRlVGFnTmFtZShvcGNvZGVbMV0pXTtcblxuICAgICAgICBjYXNlIE9wLk9wZW5FbGVtZW50V2l0aFNwbGF0OlxuICAgICAgICAgIHJldHVybiBbJ29wZW4tZWxlbWVudC13aXRoLXNwbGF0JywgaW5mbGF0ZVRhZ05hbWUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5DbG9zZUVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnY2xvc2UtZWxlbWVudCddO1xuXG4gICAgICAgIGNhc2UgT3AuRmx1c2hFbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ2ZsdXNoLWVsZW1lbnQnXTtcblxuICAgICAgICBjYXNlIE9wLlN0YXRpY0F0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWF0dHInLCBpbmZsYXRlQXR0ck5hbWUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gWydzdGF0aWMtY29tcG9uZW50LWF0dHInLCBpbmZsYXRlQXR0ck5hbWUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0F0dHI6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdkeW5hbWljLWF0dHInLFxuICAgICAgICAgICAgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5Db21wb25lbnRBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50LWF0dHInLFxuICAgICAgICAgICAgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5BdHRyU3BsYXQ6XG4gICAgICAgICAgcmV0dXJuIFsnYXR0ci1zcGxhdCddO1xuXG4gICAgICAgIGNhc2UgT3AuWWllbGQ6XG4gICAgICAgICAgcmV0dXJuIFsneWllbGQnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0FyZzpcbiAgICAgICAgICByZXR1cm4gWydkeW5hbWljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5UcnVzdGluZ0R5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAndHJ1c3RpbmctZHluYW1pYy1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuVHJ1c3RpbmdDb21wb25lbnRBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAndHJ1c3RpbmctY29tcG9uZW50LWF0dHInLFxuICAgICAgICAgICAgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5EZWJ1Z2dlcjpcbiAgICAgICAgICByZXR1cm4gWydkZWJ1Z2dlcicsIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5Db21tZW50OlxuICAgICAgICAgIHJldHVybiBbJ2NvbW1lbnQnLCBvcGNvZGVbMV1dO1xuXG4gICAgICAgIGNhc2UgT3AuTW9kaWZpZXI6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdtb2RpZmllcicsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5Db21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdjb21wb25lbnQnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0RWxlbWVudFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9jazpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2snLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pXTtcblxuICAgICAgICBjYXNlIE9wLkhhc0Jsb2NrUGFyYW1zOlxuICAgICAgICAgIHJldHVybiBbJ2hhcy1ibG9jay1wYXJhbXMnLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pXTtcblxuICAgICAgICBjYXNlIE9wLkN1cnJ5OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY3VycnknLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0Q3VycnlUeXBlKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLlVuZGVmaW5lZDpcbiAgICAgICAgICByZXR1cm4gWyd1bmRlZmluZWQnXTtcblxuICAgICAgICBjYXNlIE9wLkNhbGw6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdjYWxsJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkNvbmNhdDpcbiAgICAgICAgICByZXR1cm4gWydjb25jYXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0gYXMgV2lyZUZvcm1hdC5Db3JlLlBhcmFtcyldO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0U3RyaWN0RnJlZTpcbiAgICAgICAgICByZXR1cm4gWydnZXQtc3RyaWN0LWZyZWUnLCB0aGlzLnVwdmFyc1tvcGNvZGVbMV1dLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdHZXRGcmVlQXNDb21wb25lbnRPckhlbHBlckhlYWRPclRoaXNGYWxsYmFjaycsXG4gICAgICAgICAgICB0aGlzLnVwdmFyc1tvcGNvZGVbMV1dLFxuICAgICAgICAgICAgb3Bjb2RlWzJdLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNDb21wb25lbnRPckhlbHBlckhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0hlbHBlckhlYWRPclRoaXNGYWxsYmFjazpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2snLCB0aGlzLnVwdmFyc1tvcGNvZGVbMV1dLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjazpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNEZXByZWNhdGVkSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNIZWxwZXJIZWFkOlxuICAgICAgICAgIHJldHVybiBbJ0dldEZyZWVBc0hlbHBlckhlYWQnLCB0aGlzLnVwdmFyc1tvcGNvZGVbMV1dLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzQ29tcG9uZW50SGVhZDpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNDb21wb25lbnRIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc01vZGlmaWVySGVhZDpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNNb2RpZmllckhlYWQnLCB0aGlzLnVwdmFyc1tvcGNvZGVbMV1dLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0U3ltYm9sOiB7XG4gICAgICAgICAgaWYgKG9wY29kZVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFsnZ2V0LXN5bWJvbCcsICd0aGlzJywgb3Bjb2RlWzJdXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsnZ2V0LXN5bWJvbCcsIHRoaXMuc3ltYm9sc1tvcGNvZGVbMV0gLSAxXSwgb3Bjb2RlWzJdXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9wLkdldFRlbXBsYXRlU3ltYm9sOiB7XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXRlbXBsYXRlLXN5bWJvbCcsIG9wY29kZVsxXSwgb3Bjb2RlWzJdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT3AuSWY6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdpZicsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdID8gdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbM10pIDogbnVsbCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSWZJbmxpbmU6XG4gICAgICAgICAgcmV0dXJuIFsnaWYtaW5saW5lJ107XG5cbiAgICAgICAgY2FzZSBPcC5Ob3Q6XG4gICAgICAgICAgcmV0dXJuIFsnbm90J107XG5cbiAgICAgICAgY2FzZSBPcC5FYWNoOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZWFjaCcsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgb3Bjb2RlWzJdID8gdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSA6IG51bGwsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVszXSksXG4gICAgICAgICAgICBvcGNvZGVbNF0gPyB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVs0XSkgOiBudWxsLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5XaXRoOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnd2l0aCcsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdID8gdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbM10pIDogbnVsbCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuTGV0OlxuICAgICAgICAgIHJldHVybiBbJ2xldCcsIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsxXSksIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5Mb2c6XG4gICAgICAgICAgcmV0dXJuIFsnbG9nJywgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5XaXRoRHluYW1pY1ZhcnM6XG4gICAgICAgICAgcmV0dXJuIFsnLXdpdGgtZHluYW1pYy12YXJzJywgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVsxXSksIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXREeW5hbWljVmFyOlxuICAgICAgICAgIHJldHVybiBbJy1nZXQtZHluYW1pYy12YXJzJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5JbnZva2VDb21wb25lbnQ6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdjb21wb25lbnQnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2tzKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wY29kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEN1cnJ5VHlwZSh2YWx1ZTogQ3VycmllZFR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIEN1cnJpZWRUeXBlLkNvbXBvbmVudDpcbiAgICAgICAgcmV0dXJuICdjb21wb25lbnQnO1xuICAgICAgY2FzZSBDdXJyaWVkVHlwZS5IZWxwZXI6XG4gICAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICAgIGNhc2UgQ3VycmllZFR5cGUuTW9kaWZpZXI6XG4gICAgICAgIHJldHVybiAnbW9kaWZpZXInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgZXhoYXVzdGVkKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEVsZW1lbnRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRWxlbWVudFBhcmFtZXRlcltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKChvKSA9PiB0aGlzLmZvcm1hdE9wY29kZShvKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFBhcmFtcyhvcGNvZGVzOiBPcHRpb248V2lyZUZvcm1hdC5FeHByZXNzaW9uW10+KTogT3B0aW9uPHVua25vd25bXT4ge1xuICAgIGlmIChvcGNvZGVzID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gb3Bjb2Rlcy5tYXAoKG8pID0+IHRoaXMuZm9ybWF0T3Bjb2RlKG8pKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0SGFzaChoYXNoOiBXaXJlRm9ybWF0LkNvcmUuSGFzaCk6IE9wdGlvbjxvYmplY3Q+IHtcbiAgICBpZiAoaGFzaCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gaGFzaFswXS5yZWR1Y2UoKGFjY3VtLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2N1bVtrZXldID0gdGhpcy5mb3JtYXRPcGNvZGUoaGFzaFsxXVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIGRpY3QoKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEJsb2NrcyhibG9ja3M6IFdpcmVGb3JtYXQuQ29yZS5CbG9ja3MpOiBPcHRpb248b2JqZWN0PiB7XG4gICAgaWYgKGJsb2NrcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gYmxvY2tzWzBdLnJlZHVjZSgoYWNjdW0sIGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY3VtW2tleV0gPSB0aGlzLmZvcm1hdEJsb2NrKGJsb2Nrc1sxXVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIGRpY3QoKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEJsb2NrKGJsb2NrOiBTZXJpYWxpemVkSW5saW5lQmxvY2spOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZW1lbnRzOiBibG9ja1swXS5tYXAoKHMpID0+IHRoaXMuZm9ybWF0T3Bjb2RlKHMpKSxcbiAgICAgIHBhcmFtZXRlcnM6IGJsb2NrWzFdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=