parser.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  2. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  3. import { assert, assign } from '@glimmer/util';
  4. import { EntityParser, EventedTokenizer, HTML5NamedCharRefs as namedCharRefs } from 'simple-html-tokenizer';
  5. export var Parser = /*#__PURE__*/function () {
  6. function Parser(source, entityParser, mode) {
  7. if (entityParser === void 0) {
  8. entityParser = new EntityParser(namedCharRefs);
  9. }
  10. if (mode === void 0) {
  11. mode = 'precompile';
  12. }
  13. this.elementStack = [];
  14. this.currentAttribute = null;
  15. this.currentNode = null;
  16. this.source = source;
  17. this.lines = source.source.split(/(?:\r\n?|\n)/g);
  18. this.tokenizer = new EventedTokenizer(this, entityParser, mode);
  19. }
  20. var _proto = Parser.prototype;
  21. _proto.offset = function offset() {
  22. var _this$tokenizer = this.tokenizer,
  23. line = _this$tokenizer.line,
  24. column = _this$tokenizer.column;
  25. return this.source.offsetFor(line, column);
  26. };
  27. _proto.pos = function pos(_ref) {
  28. var line = _ref.line,
  29. column = _ref.column;
  30. return this.source.offsetFor(line, column);
  31. };
  32. _proto.finish = function finish(node) {
  33. return assign({}, node, {
  34. loc: node.loc.until(this.offset())
  35. }); // node.loc = node.loc.withEnd(end);
  36. };
  37. _proto.acceptTemplate = function acceptTemplate(node) {
  38. return this[node.type](node);
  39. };
  40. _proto.acceptNode = function acceptNode(node) {
  41. return this[node.type](node);
  42. };
  43. _proto.currentElement = function currentElement() {
  44. return this.elementStack[this.elementStack.length - 1];
  45. };
  46. _proto.sourceForNode = function sourceForNode(node, endNode) {
  47. var firstLine = node.loc.start.line - 1;
  48. var currentLine = firstLine - 1;
  49. var firstColumn = node.loc.start.column;
  50. var string = [];
  51. var line;
  52. var lastLine;
  53. var lastColumn;
  54. if (endNode) {
  55. lastLine = endNode.loc.end.line - 1;
  56. lastColumn = endNode.loc.end.column;
  57. } else {
  58. lastLine = node.loc.end.line - 1;
  59. lastColumn = node.loc.end.column;
  60. }
  61. while (currentLine < lastLine) {
  62. currentLine++;
  63. line = this.lines[currentLine];
  64. if (currentLine === firstLine) {
  65. if (firstLine === lastLine) {
  66. string.push(line.slice(firstColumn, lastColumn));
  67. } else {
  68. string.push(line.slice(firstColumn));
  69. }
  70. } else if (currentLine === lastLine) {
  71. string.push(line.slice(0, lastColumn));
  72. } else {
  73. string.push(line);
  74. }
  75. }
  76. return string.join('\n');
  77. };
  78. _createClass(Parser, [{
  79. key: "currentAttr",
  80. get: function get() {
  81. return this.currentAttribute;
  82. }
  83. }, {
  84. key: "currentTag",
  85. get: function get() {
  86. var node = this.currentNode;
  87. false && assert(node && (node.type === 'StartTag' || node.type === 'EndTag'), 'expected tag');
  88. return node;
  89. }
  90. }, {
  91. key: "currentStartTag",
  92. get: function get() {
  93. var node = this.currentNode;
  94. false && assert(node && node.type === 'StartTag', 'expected start tag');
  95. return node;
  96. }
  97. }, {
  98. key: "currentEndTag",
  99. get: function get() {
  100. var node = this.currentNode;
  101. false && assert(node && node.type === 'EndTag', 'expected end tag');
  102. return node;
  103. }
  104. }, {
  105. key: "currentComment",
  106. get: function get() {
  107. var node = this.currentNode;
  108. false && assert(node && node.type === 'CommentStatement', 'expected a comment');
  109. return node;
  110. }
  111. }, {
  112. key: "currentData",
  113. get: function get() {
  114. var node = this.currentNode;
  115. false && assert(node && node.type === 'TextNode', 'expected a text node');
  116. return node;
  117. }
  118. }]);
  119. return Parser;
  120. }();
  121. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFBLE1BQUEsRUFBQSxNQUFBLFFBQUEsZUFBQTtBQUNBLFNBQUEsWUFBQSxFQUFBLGdCQUFBLEVBR0Usa0JBQWtCLElBSHBCLGFBQUEsUUFBQSx1QkFBQTtBQXNDQSxXQUFNLE1BQU47QUFlRSxrQkFBQSxNQUFBLEVBRUUsWUFGRixFQUdFLElBSEYsRUFHK0M7QUFBQSxRQUQ3QyxZQUM2QztBQUQ3QyxNQUFBLFlBQzZDLEdBRDlCLElBQUEsWUFBQSxDQUZqQixhQUVpQixDQUM4QjtBQUFBOztBQUFBLFFBQTdDLElBQTZDO0FBQTdDLE1BQUEsSUFBNkMsR0FIL0MsWUFHK0M7QUFBQTs7QUFqQnJDLFNBQUEsWUFBQSxHQUFBLEVBQUE7QUFHSCxTQUFBLGdCQUFBLEdBQUEsSUFBQTtBQUNBLFNBQUEsV0FBQSxHQUFBLElBQUE7QUFlTCxTQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0EsU0FBQSxLQUFBLEdBQWEsTUFBTSxDQUFOLE1BQUEsQ0FBQSxLQUFBLENBQWIsZUFBYSxDQUFiO0FBQ0EsU0FBQSxTQUFBLEdBQWlCLElBQUEsZ0JBQUEsQ0FBQSxJQUFBLEVBQUEsWUFBQSxFQUFqQixJQUFpQixDQUFqQjtBQUNEOztBQXZCSDs7QUFBQSxTQXlCRSxNQXpCRixHQXlCRSxrQkFBTTtBQUFBLDBCQUNtQixLQUF2QixTQURJO0FBQUEsUUFDQSxJQURBLG1CQUNBLElBREE7QUFBQSxRQUNRLE1BRFIsbUJBQ1EsTUFEUjtBQUVKLFdBQU8sS0FBQSxNQUFBLENBQUEsU0FBQSxDQUFBLElBQUEsRUFBUCxNQUFPLENBQVA7QUFDRCxHQTVCSDs7QUFBQSxTQThCRSxHQTlCRixHQThCRSxtQkFBb0M7QUFBQSxRQUFoQyxJQUFnQyxRQUFoQyxJQUFnQztBQUFBLFFBQXhCLE1BQXdCLFFBQXhCLE1BQXdCO0FBQ2xDLFdBQU8s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LElBQUksQ0FBSixJQUFBLEtBQXRDLFFBQUssQ0FBTCxFQUZNLGNBRU4sQ0FGTTtBQUdaLGFBQUEsSUFBQTtBQUNEO0FBekZIO0FBQUE7QUFBQSx3QkEyRnFCO0FBQ2pCLFVBQUksSUFBSSxHQUFHLEtBQVgsV0FBQTtBQURpQixlQUVqQixNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBSixJQUFBLEtBQVQsVUFBQSxFQUZXLG9CQUVYLENBRlc7QUFHakIsYUFBQSxJQUFBO0FBQ0Q7QUEvRkg7QUFBQTtBQUFBLHdCQWlHbUI7QUFDZixVQUFJLElBQUksR0FBRyxLQUFYLFdBQUE7QUFEZSxlQUVmLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFKLElBQUEsS0FBVCxRQUFBLEVBRlMsa0JBRVQsQ0FGUztBQUdmLGFBQUEsSUFBQTtBQUNEO0FBckdIO0FBQUE7QUFBQSx3QkF1R29CO0FBQ2hCLFVBQUksSUFBSSxHQUFHLEtBQVgsV0FBQTtBQURnQixlQUVoQixNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBSixJQUFBLEtBQVQsa0JBQUEsRUFGVSxvQkFFVixDQUZVO0FBR2hCLGFBQUEsSUFBQTtBQUNEO0FBM0dIO0FBQUE7QUFBQSx3QkE2R2lCO0FBQ2IsVUFBSSxJQUFJLEdBQUcsS0FBWCxXQUFBO0FBRGEsZUFFYixNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBSixJQUFBLEtBQVQsVUFBQSxFQUZPLHNCQUVQLENBRk87QUFHYixhQUFBLElBQUE7QUFDRDtBQWpISDs7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGFzc2lnbiwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBFbnRpdHlQYXJzZXIsXG4gIEV2ZW50ZWRUb2tlbml6ZXIsXG4gIEhUTUw1TmFtZWRDaGFyUmVmcyBhcyBuYW1lZENoYXJSZWZzLFxufSBmcm9tICdzaW1wbGUtaHRtbC10b2tlbml6ZXInO1xuXG5pbXBvcnQgeyBTb3VyY2VQb3NpdGlvbiB9IGZyb20gJy4vc291cmNlL2xvY2F0aW9uJztcbmltcG9ydCB7IFNvdXJjZSB9IGZyb20gJy4vc291cmNlL3NvdXJjZSc7XG5pbXBvcnQgeyBTb3VyY2VPZmZzZXQsIFNvdXJjZVNwYW4gfSBmcm9tICcuL3NvdXJjZS9zcGFuJztcbmltcG9ydCAqIGFzIEFTVHYxIGZyb20gJy4vdjEvYXBpJztcbmltcG9ydCAqIGFzIEhCUyBmcm9tICcuL3YxL2hhbmRsZWJhcnMtYXN0JztcblxuZXhwb3J0IHR5cGUgUGFyc2VyTm9kZUJ1aWxkZXI8TiBleHRlbmRzIHsgbG9jOiBTb3VyY2VTcGFuIH0+ID0gT21pdDxOLCAnbG9jJz4gJiB7XG4gIGxvYzogU291cmNlT2Zmc2V0O1xufTtcblxuZXhwb3J0IHR5cGUgRWxlbWVudCA9IEFTVHYxLlRlbXBsYXRlIHwgQVNUdjEuQmxvY2sgfCBBU1R2MS5FbGVtZW50Tm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBUYWc8VCBleHRlbmRzICdTdGFydFRhZycgfCAnRW5kVGFnJz4ge1xuICByZWFkb25seSB0eXBlOiBUO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEFTVHYxLkF0dHJOb2RlW107XG4gIHJlYWRvbmx5IG1vZGlmaWVyczogQVNUdjEuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50W107XG4gIHJlYWRvbmx5IGNvbW1lbnRzOiBBU1R2MS5NdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnRbXTtcbiAgc2VsZkNsb3Npbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxvYzogU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbnRQYXJ0OiBBU1R2MS5UZXh0Tm9kZSB8IG51bGw7XG4gIHBhcnRzOiAoQVNUdjEuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1R2MS5UZXh0Tm9kZSlbXTtcbiAgaXNRdW90ZWQ6IGJvb2xlYW47XG4gIGlzRHluYW1pYzogYm9vbGVhbjtcbiAgc3RhcnQ6IFNvdXJjZU9mZnNldDtcbiAgdmFsdWVTcGFuOiBTb3VyY2VTcGFuO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFyc2VyIHtcbiAgcHJvdGVjdGVkIGVsZW1lbnRTdGFjazogRWxlbWVudFtdID0gW107XG4gIHByaXZhdGUgbGluZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBzb3VyY2U6IFNvdXJjZTtcbiAgcHVibGljIGN1cnJlbnRBdHRyaWJ1dGU6IE9wdGlvbjxBdHRyaWJ1dGU+ID0gbnVsbDtcbiAgcHVibGljIGN1cnJlbnROb2RlOiBPcHRpb248XG4gICAgUmVhZG9ubHk8XG4gICAgICB8IFBhcnNlck5vZGVCdWlsZGVyPEFTVHYxLkNvbW1lbnRTdGF0ZW1lbnQ+XG4gICAgICB8IEFTVHYxLlRleHROb2RlXG4gICAgICB8IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnU3RhcnRUYWcnPj5cbiAgICAgIHwgUGFyc2VyTm9kZUJ1aWxkZXI8VGFnPCdFbmRUYWcnPj5cbiAgICA+XG4gID4gPSBudWxsO1xuICBwdWJsaWMgdG9rZW5pemVyOiBFdmVudGVkVG9rZW5pemVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogU291cmNlLFxuICAgIGVudGl0eVBhcnNlciA9IG5ldyBFbnRpdHlQYXJzZXIobmFtZWRDaGFyUmVmcyksXG4gICAgbW9kZTogJ3ByZWNvbXBpbGUnIHwgJ2NvZGVtb2QnID0gJ3ByZWNvbXBpbGUnXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMubGluZXMgPSBzb3VyY2Uuc291cmNlLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgRXZlbnRlZFRva2VuaXplcih0aGlzLCBlbnRpdHlQYXJzZXIsIG1vZGUpO1xuICB9XG5cbiAgb2Zmc2V0KCk6IFNvdXJjZU9mZnNldCB7XG4gICAgbGV0IHsgbGluZSwgY29sdW1uIH0gPSB0aGlzLnRva2VuaXplcjtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2Zmc2V0Rm9yKGxpbmUsIGNvbHVtbik7XG4gIH1cblxuICBwb3MoeyBsaW5lLCBjb2x1bW4gfTogU291cmNlUG9zaXRpb24pOiBTb3VyY2VPZmZzZXQge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5vZmZzZXRGb3IobGluZSwgY29sdW1uKTtcbiAgfVxuXG4gIGZpbmlzaDxUIGV4dGVuZHMgeyBsb2M6IFNvdXJjZVNwYW4gfT4obm9kZTogUGFyc2VyTm9kZUJ1aWxkZXI8VD4pOiBUIHtcbiAgICByZXR1cm4gKGFzc2lnbih7fSwgbm9kZSwge1xuICAgICAgbG9jOiBub2RlLmxvYy51bnRpbCh0aGlzLm9mZnNldCgpKSxcbiAgICB9IGFzIGNvbnN0KSBhcyB1bmtub3duKSBhcyBUO1xuXG4gICAgLy8gbm9kZS5sb2MgPSBub2RlLmxvYy53aXRoRW5kKGVuZCk7XG4gIH1cblxuICBhYnN0cmFjdCBQcm9ncmFtKG5vZGU6IEhCUy5Qcm9ncmFtKTogSEJTLk91dHB1dDwnUHJvZ3JhbSc+O1xuICBhYnN0cmFjdCBNdXN0YWNoZVN0YXRlbWVudChub2RlOiBIQlMuTXVzdGFjaGVTdGF0ZW1lbnQpOiBIQlMuT3V0cHV0PCdNdXN0YWNoZVN0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBEZWNvcmF0b3Iobm9kZTogSEJTLkRlY29yYXRvcik6IEhCUy5PdXRwdXQ8J0RlY29yYXRvcic+O1xuICBhYnN0cmFjdCBCbG9ja1N0YXRlbWVudChub2RlOiBIQlMuQmxvY2tTdGF0ZW1lbnQpOiBIQlMuT3V0cHV0PCdCbG9ja1N0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBEZWNvcmF0b3JCbG9jayhub2RlOiBIQlMuRGVjb3JhdG9yQmxvY2spOiBIQlMuT3V0cHV0PCdEZWNvcmF0b3JCbG9jayc+O1xuICBhYnN0cmFjdCBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEhCUy5QYXJ0aWFsU3RhdGVtZW50KTogSEJTLk91dHB1dDwnUGFydGlhbFN0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQoXG4gICAgbm9kZTogSEJTLlBhcnRpYWxCbG9ja1N0YXRlbWVudFxuICApOiBIQlMuT3V0cHV0PCdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgQ29udGVudFN0YXRlbWVudChub2RlOiBIQlMuQ29udGVudFN0YXRlbWVudCk6IEhCUy5PdXRwdXQ8J0NvbnRlbnRTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgQ29tbWVudFN0YXRlbWVudChub2RlOiBIQlMuQ29tbWVudFN0YXRlbWVudCk6IEhCUy5PdXRwdXQ8J0NvbW1lbnRTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgU3ViRXhwcmVzc2lvbihub2RlOiBIQlMuU3ViRXhwcmVzc2lvbik6IEhCUy5PdXRwdXQ8J1N1YkV4cHJlc3Npb24nPjtcbiAgYWJzdHJhY3QgUGF0aEV4cHJlc3Npb24obm9kZTogSEJTLlBhdGhFeHByZXNzaW9uKTogSEJTLk91dHB1dDwnUGF0aEV4cHJlc3Npb24nPjtcbiAgYWJzdHJhY3QgU3RyaW5nTGl0ZXJhbChub2RlOiBIQlMuU3RyaW5nTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J1N0cmluZ0xpdGVyYWwnPjtcbiAgYWJzdHJhY3QgQm9vbGVhbkxpdGVyYWwobm9kZTogSEJTLkJvb2xlYW5MaXRlcmFsKTogSEJTLk91dHB1dDwnQm9vbGVhbkxpdGVyYWwnPjtcbiAgYWJzdHJhY3QgTnVtYmVyTGl0ZXJhbChub2RlOiBIQlMuTnVtYmVyTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J051bWJlckxpdGVyYWwnPjtcbiAgYWJzdHJhY3QgVW5kZWZpbmVkTGl0ZXJhbChub2RlOiBIQlMuVW5kZWZpbmVkTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J1VuZGVmaW5lZExpdGVyYWwnPjtcbiAgYWJzdHJhY3QgTnVsbExpdGVyYWwobm9kZTogSEJTLk51bGxMaXRlcmFsKTogSEJTLk91dHB1dDwnTnVsbExpdGVyYWwnPjtcblxuICBhYnN0cmFjdCByZXNldCgpOiB2b2lkO1xuICBhYnN0cmFjdCBmaW5pc2hEYXRhKCk6IHZvaWQ7XG4gIGFic3RyYWN0IHRhZ09wZW4oKTogdm9pZDtcbiAgYWJzdHJhY3QgYmVnaW5EYXRhKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGFwcGVuZFRvRGF0YShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpblN0YXJ0VGFnKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGFwcGVuZFRvVGFnTmFtZShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpbkF0dHJpYnV0ZSgpOiB2b2lkO1xuICBhYnN0cmFjdCBhcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcjogc3RyaW5nKTogdm9pZDtcbiAgYWJzdHJhY3QgYmVnaW5BdHRyaWJ1dGVWYWx1ZShxdW90ZWQ6IGJvb2xlYW4pOiB2b2lkO1xuICBhYnN0cmFjdCBhcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXI6IHN0cmluZyk6IHZvaWQ7XG4gIGFic3RyYWN0IGZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk6IHZvaWQ7XG4gIGFic3RyYWN0IG1hcmtUYWdBc1NlbGZDbG9zaW5nKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGJlZ2luRW5kVGFnKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGZpbmlzaFRhZygpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpbkNvbW1lbnQoKTogdm9pZDtcbiAgYWJzdHJhY3QgYXBwZW5kVG9Db21tZW50RGF0YShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBmaW5pc2hDb21tZW50KCk6IHZvaWQ7XG4gIGFic3RyYWN0IHJlcG9ydFN5bnRheEVycm9yKGVycm9yOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGdldCBjdXJyZW50QXR0cigpOiBBdHRyaWJ1dGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5jdXJyZW50QXR0cmlidXRlLCAnZXhwZWN0ZWQgYXR0cmlidXRlJyk7XG4gIH1cblxuICBnZXQgY3VycmVudFRhZygpOiBQYXJzZXJOb2RlQnVpbGRlcjxUYWc8J1N0YXJ0VGFnJyB8ICdFbmRUYWcnPj4ge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiAobm9kZS50eXBlID09PSAnU3RhcnRUYWcnIHx8IG5vZGUudHlwZSA9PT0gJ0VuZFRhZycpLCAnZXhwZWN0ZWQgdGFnJyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBnZXQgY3VycmVudFN0YXJ0VGFnKCk6IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnU3RhcnRUYWcnPj4ge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiBub2RlLnR5cGUgPT09ICdTdGFydFRhZycsICdleHBlY3RlZCBzdGFydCB0YWcnKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50RW5kVGFnKCk6IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnRW5kVGFnJz4+IHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgYXNzZXJ0KG5vZGUgJiYgbm9kZS50eXBlID09PSAnRW5kVGFnJywgJ2V4cGVjdGVkIGVuZCB0YWcnKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29tbWVudCgpOiBQYXJzZXJOb2RlQnVpbGRlcjxBU1R2MS5Db21tZW50U3RhdGVtZW50PiB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgIGFzc2VydChub2RlICYmIG5vZGUudHlwZSA9PT0gJ0NvbW1lbnRTdGF0ZW1lbnQnLCAnZXhwZWN0ZWQgYSBjb21tZW50Jyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBnZXQgY3VycmVudERhdGEoKTogQVNUdjEuVGV4dE5vZGUge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiBub2RlLnR5cGUgPT09ICdUZXh0Tm9kZScsICdleHBlY3RlZCBhIHRleHQgbm9kZScpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgYWNjZXB0VGVtcGxhdGUobm9kZTogSEJTLlByb2dyYW0pOiBBU1R2MS5UZW1wbGF0ZSB7XG4gICAgcmV0dXJuIHRoaXNbbm9kZS50eXBlIGFzICdQcm9ncmFtJ10obm9kZSkgYXMgQVNUdjEuVGVtcGxhdGU7XG4gIH1cblxuICBhY2NlcHROb2RlKG5vZGU6IEhCUy5Qcm9ncmFtKTogQVNUdjEuQmxvY2sgfCBBU1R2MS5UZW1wbGF0ZTtcbiAgYWNjZXB0Tm9kZTxVIGV4dGVuZHMgSEJTLk5vZGUgfCBBU1R2MS5Ob2RlPihub2RlOiBIQlMuTm9kZSk6IFU7XG4gIGFjY2VwdE5vZGU8VCBleHRlbmRzIEhCUy5Ob2RlVHlwZT4obm9kZTogSEJTLk5vZGU8VD4pOiBIQlMuT3V0cHV0PFQ+IHtcbiAgICByZXR1cm4gKHRoaXNbbm9kZS50eXBlIGFzIFRdIGFzIChub2RlOiBIQlMuTm9kZTxUPikgPT4gSEJTLk91dHB1dDxUPikobm9kZSk7XG4gIH1cblxuICBjdXJyZW50RWxlbWVudCgpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2tbdGhpcy5lbGVtZW50U3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICBzb3VyY2VGb3JOb2RlKG5vZGU6IEhCUy5Ob2RlLCBlbmROb2RlPzogeyBsb2M6IEhCUy5Tb3VyY2VMb2NhdGlvbiB9KTogc3RyaW5nIHtcbiAgICBsZXQgZmlyc3RMaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZSAtIDE7XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gZmlyc3RMaW5lIC0gMTtcbiAgICBsZXQgZmlyc3RDb2x1bW4gPSBub2RlLmxvYy5zdGFydC5jb2x1bW47XG4gICAgbGV0IHN0cmluZyA9IFtdO1xuICAgIGxldCBsaW5lO1xuXG4gICAgbGV0IGxhc3RMaW5lOiBudW1iZXI7XG4gICAgbGV0IGxhc3RDb2x1bW46IG51bWJlcjtcblxuICAgIGlmIChlbmROb2RlKSB7XG4gICAgICBsYXN0TGluZSA9IGVuZE5vZGUubG9jLmVuZC5saW5lIC0gMTtcbiAgICAgIGxhc3RDb2x1bW4gPSBlbmROb2RlLmxvYy5lbmQuY29sdW1uO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TGluZSA9IG5vZGUubG9jLmVuZC5saW5lIC0gMTtcbiAgICAgIGxhc3RDb2x1bW4gPSBub2RlLmxvYy5lbmQuY29sdW1uO1xuICAgIH1cblxuICAgIHdoaWxlIChjdXJyZW50TGluZSA8IGxhc3RMaW5lKSB7XG4gICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgbGluZSA9IHRoaXMubGluZXNbY3VycmVudExpbmVdO1xuXG4gICAgICBpZiAoY3VycmVudExpbmUgPT09IGZpcnN0TGluZSkge1xuICAgICAgICBpZiAoZmlyc3RMaW5lID09PSBsYXN0TGluZSkge1xuICAgICAgICAgIHN0cmluZy5wdXNoKGxpbmUuc2xpY2UoZmlyc3RDb2x1bW4sIGxhc3RDb2x1bW4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChsaW5lLnNsaWNlKGZpcnN0Q29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudExpbmUgPT09IGxhc3RMaW5lKSB7XG4gICAgICAgIHN0cmluZy5wdXNoKGxpbmUuc2xpY2UoMCwgbGFzdENvbHVtbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaW5nLnB1c2gobGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZy5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==