builders.js 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.BuildElement = exports.Builder = void 0;
  6. var _util = require("@glimmer/util");
  7. var _slice = require("../source/slice");
  8. var _spanList = require("../source/span-list");
  9. var ASTv2 = _interopRequireWildcard(require("./api"));
  10. function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
  11. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
  12. var __rest = void 0 && (void 0).__rest || function (s, e) {
  13. var t = {};
  14. for (var p in s) {
  15. if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
  16. }
  17. if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  18. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
  19. }
  20. return t;
  21. };
  22. var Builder = /*#__PURE__*/function () {
  23. function Builder() {}
  24. var _proto = Builder.prototype; // TEMPLATE //
  25. _proto.template = function template(symbols, body, loc) {
  26. return new ASTv2.Template({
  27. table: symbols,
  28. body: body,
  29. loc: loc
  30. });
  31. } // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //
  32. ;
  33. _proto.block = function block(symbols, body, loc) {
  34. return new ASTv2.Block({
  35. scope: symbols,
  36. body: body,
  37. loc: loc
  38. });
  39. };
  40. _proto.namedBlock = function namedBlock(name, block, loc) {
  41. return new ASTv2.NamedBlock({
  42. name: name,
  43. block: block,
  44. attrs: [],
  45. componentArgs: [],
  46. modifiers: [],
  47. loc: loc
  48. });
  49. };
  50. _proto.simpleNamedBlock = function simpleNamedBlock(name, block, loc) {
  51. return new BuildElement({
  52. selfClosing: false,
  53. attrs: [],
  54. componentArgs: [],
  55. modifiers: [],
  56. comments: []
  57. }).named(name, block, loc);
  58. };
  59. _proto.slice = function slice(chars, loc) {
  60. return new _slice.SourceSlice({
  61. loc: loc,
  62. chars: chars
  63. });
  64. };
  65. _proto.args = function args(positional, named, loc) {
  66. return new ASTv2.Args({
  67. loc: loc,
  68. positional: positional,
  69. named: named
  70. });
  71. };
  72. _proto.positional = function positional(exprs, loc) {
  73. return new ASTv2.PositionalArguments({
  74. loc: loc,
  75. exprs: exprs
  76. });
  77. };
  78. _proto.namedArgument = function namedArgument(key, value) {
  79. return new ASTv2.NamedArgument({
  80. name: key,
  81. value: value
  82. });
  83. };
  84. _proto.named = function named(entries, loc) {
  85. return new ASTv2.NamedArguments({
  86. loc: loc,
  87. entries: entries
  88. });
  89. };
  90. _proto.attr = function attr(_ref, loc) {
  91. var name = _ref.name,
  92. value = _ref.value,
  93. trusting = _ref.trusting;
  94. return new ASTv2.HtmlAttr({
  95. loc: loc,
  96. name: name,
  97. value: value,
  98. trusting: trusting
  99. });
  100. };
  101. _proto.splatAttr = function splatAttr(symbol, loc) {
  102. return new ASTv2.SplatAttr({
  103. symbol: symbol,
  104. loc: loc
  105. });
  106. };
  107. _proto.arg = function arg(_ref2, loc) {
  108. var name = _ref2.name,
  109. value = _ref2.value,
  110. trusting = _ref2.trusting;
  111. return new ASTv2.ComponentArg({
  112. name: name,
  113. value: value,
  114. trusting: trusting,
  115. loc: loc
  116. });
  117. } // EXPRESSIONS //
  118. ;
  119. _proto.path = function path(head, tail, loc) {
  120. return new ASTv2.PathExpression({
  121. loc: loc,
  122. ref: head,
  123. tail: tail
  124. });
  125. };
  126. _proto.self = function self(loc) {
  127. return new ASTv2.ThisReference({
  128. loc: loc
  129. });
  130. };
  131. _proto.at = function at(name, symbol, loc) {
  132. // the `@` should be included so we have a complete source range
  133. false && (0, _util.assert)(name[0] === '@', "call builders.at() with a string that starts with '@'");
  134. return new ASTv2.ArgReference({
  135. loc: loc,
  136. name: new _slice.SourceSlice({
  137. loc: loc,
  138. chars: name
  139. }),
  140. symbol: symbol
  141. });
  142. };
  143. _proto.freeVar = function freeVar(_ref3) {
  144. var name = _ref3.name,
  145. context = _ref3.context,
  146. symbol = _ref3.symbol,
  147. loc = _ref3.loc;
  148. false && (0, _util.assert)(name !== 'this', "You called builders.freeVar() with 'this'. Call builders.this instead");
  149. false && (0, _util.assert)(name[0] !== '@', "You called builders.freeVar() with '" + name + "'. Call builders.at('" + name + "') instead");
  150. return new ASTv2.FreeVarReference({
  151. name: name,
  152. resolution: context,
  153. symbol: symbol,
  154. loc: loc
  155. });
  156. };
  157. _proto.localVar = function localVar(name, symbol, isTemplateLocal, loc) {
  158. false && (0, _util.assert)(name !== 'this', "You called builders.var() with 'this'. Call builders.this instead");
  159. false && (0, _util.assert)(name[0] !== '@', "You called builders.var() with '" + name + "'. Call builders.at('" + name + "') instead");
  160. return new ASTv2.LocalVarReference({
  161. loc: loc,
  162. name: name,
  163. isTemplateLocal: isTemplateLocal,
  164. symbol: symbol
  165. });
  166. };
  167. _proto.sexp = function sexp(parts, loc) {
  168. return new ASTv2.CallExpression({
  169. loc: loc,
  170. callee: parts.callee,
  171. args: parts.args
  172. });
  173. };
  174. _proto.deprecatedCall = function deprecatedCall(arg, callee, loc) {
  175. return new ASTv2.DeprecatedCallExpression({
  176. loc: loc,
  177. arg: arg,
  178. callee: callee
  179. });
  180. };
  181. _proto.interpolate = function interpolate(parts, loc) {
  182. (0, _util.assertPresent)(parts);
  183. return new ASTv2.InterpolateExpression({
  184. loc: loc,
  185. parts: parts
  186. });
  187. };
  188. _proto.literal = function literal(value, loc) {
  189. return new ASTv2.LiteralExpression({
  190. loc: loc,
  191. value: value
  192. });
  193. } // STATEMENTS //
  194. ;
  195. _proto.append = function append(_ref4, loc) {
  196. var table = _ref4.table,
  197. trusting = _ref4.trusting,
  198. value = _ref4.value;
  199. return new ASTv2.AppendContent({
  200. table: table,
  201. trusting: trusting,
  202. value: value,
  203. loc: loc
  204. });
  205. };
  206. _proto.modifier = function modifier(_ref5, loc) {
  207. var callee = _ref5.callee,
  208. args = _ref5.args;
  209. return new ASTv2.ElementModifier({
  210. loc: loc,
  211. callee: callee,
  212. args: args
  213. });
  214. };
  215. _proto.namedBlocks = function namedBlocks(blocks, loc) {
  216. return new ASTv2.NamedBlocks({
  217. loc: loc,
  218. blocks: blocks
  219. });
  220. };
  221. _proto.blockStatement = function blockStatement(_a, loc) {
  222. var symbols = _a.symbols,
  223. program = _a.program,
  224. _a$inverse = _a.inverse,
  225. inverse = _a$inverse === void 0 ? null : _a$inverse,
  226. call = __rest(_a, ["symbols", "program", "inverse"]);
  227. var blocksLoc = program.loc;
  228. var blocks = [this.namedBlock(_slice.SourceSlice.synthetic('default'), program, program.loc)];
  229. if (inverse) {
  230. blocksLoc = blocksLoc.extend(inverse.loc);
  231. blocks.push(this.namedBlock(_slice.SourceSlice.synthetic('else'), inverse, inverse.loc));
  232. }
  233. return new ASTv2.InvokeBlock({
  234. loc: loc,
  235. blocks: this.namedBlocks(blocks, blocksLoc),
  236. callee: call.callee,
  237. args: call.args
  238. });
  239. };
  240. _proto.element = function element(options) {
  241. return new BuildElement(options);
  242. };
  243. return Builder;
  244. }();
  245. exports.Builder = Builder;
  246. var BuildElement = /*#__PURE__*/function () {
  247. function BuildElement(base) {
  248. this.base = base;
  249. this.builder = new Builder();
  250. }
  251. var _proto2 = BuildElement.prototype;
  252. _proto2.simple = function simple(tag, body, loc) {
  253. return new ASTv2.SimpleElement((0, _util.assign)({
  254. tag: tag,
  255. body: body,
  256. componentArgs: [],
  257. loc: loc
  258. }, this.base));
  259. };
  260. _proto2.named = function named(name, block, loc) {
  261. return new ASTv2.NamedBlock((0, _util.assign)({
  262. name: name,
  263. block: block,
  264. componentArgs: [],
  265. loc: loc
  266. }, this.base));
  267. };
  268. _proto2.selfClosingComponent = function selfClosingComponent(callee, loc) {
  269. return new ASTv2.InvokeComponent((0, _util.assign)({
  270. loc: loc,
  271. callee: callee,
  272. // point the empty named blocks at the `/` self-closing tag
  273. blocks: new ASTv2.NamedBlocks({
  274. blocks: [],
  275. loc: loc.sliceEndChars({
  276. skipEnd: 1,
  277. chars: 1
  278. })
  279. })
  280. }, this.base));
  281. };
  282. _proto2.componentWithDefaultBlock = function componentWithDefaultBlock(callee, children, symbols, loc) {
  283. var block = this.builder.block(symbols, children, loc);
  284. var namedBlock = this.builder.namedBlock(_slice.SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);
  285. return new ASTv2.InvokeComponent((0, _util.assign)({
  286. loc: loc,
  287. callee: callee,
  288. blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)
  289. }, this.base));
  290. };
  291. _proto2.componentWithNamedBlocks = function componentWithNamedBlocks(callee, blocks, loc) {
  292. return new ASTv2.InvokeComponent((0, _util.assign)({
  293. loc: loc,
  294. callee: callee,
  295. blocks: this.builder.namedBlocks(blocks, _spanList.SpanList.range(blocks))
  296. }, this.base));
  297. };
  298. return BuildElement;
  299. }();
  300. exports.BuildElement = BuildElement;
  301. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9idWlsZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFNLE9BQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLE9BQUEsR0FBQSxDQUFBOztBQUFBLE1BQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUEsQ0FDRTs7QUFERixFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBR0UsU0FBQSxRQUFBLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBR2lCO0FBRWYsV0FBTyxJQUFJLEtBQUssQ0FBVCxRQUFBLENBQW1CO0FBQ3hCLE1BQUEsS0FBSyxFQURtQixPQUFBO0FBRXhCLE1BQUEsSUFGd0IsRUFBQSxJQUFBO0FBR3hCLE1BQUEsR0FBQSxFQUFBO0FBSHdCLEtBQW5CLENBQVA7QUFSSixHQUFBLENBZUU7QUFmRjs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxLQUFBLEdBaUJFLFNBQUEsS0FBQSxDQUFBLE9BQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxFQUEyRTtBQUN6RSxXQUFPLElBQUksS0FBSyxDQUFULEtBQUEsQ0FBZ0I7QUFDckIsTUFBQSxLQUFLLEVBRGdCLE9BQUE7QUFFckIsTUFBQSxJQUZxQixFQUFBLElBQUE7QUFHckIsTUFBQSxHQUFBLEVBQUE7QUFIcUIsS0FBaEIsQ0FBUDtBQWxCSixHQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLFVBQUEsR0F5QkUsU0FBQSxVQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQWlFO0FBQy9ELFdBQU8sSUFBSSxLQUFLLENBQVQsVUFBQSxDQUFxQjtBQUMxQixNQUFBLElBRDBCLEVBQUEsSUFBQTtBQUUxQixNQUFBLEtBRjBCLEVBQUEsS0FBQTtBQUcxQixNQUFBLEtBQUssRUFIcUIsRUFBQTtB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LE9BQUEsQ0FBQSx3QkFBQSxHQXdFRSxTQUFBLHdCQUFBLENBQUEsTUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBR2lCO0FBRWYsV0FBTyxJQUFJLEtBQUssQ0FBVCxlQUFBLENBQ0wsa0JBQ0U7QUFDRSxNQUFBLEdBREYsRUFBQSxHQUFBO0FBRUUsTUFBQSxNQUZGLEVBQUEsTUFBQTtBQUdFLE1BQUEsTUFBTSxFQUFFLEtBQUEsT0FBQSxDQUFBLFdBQUEsQ0FBQSxNQUFBLEVBQWlDLG1CQUFBLEtBQUEsQ0FBakMsTUFBaUMsQ0FBakM7QUFIVixLQURGLEVBTUUsS0FQSixJQUNFLENBREssQ0FBUDtBQTdFSixHQUFBOztBQUFBLFNBQUEsWUFBQTtBQUFBLENBQUEsRUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJlc2VudEFycmF5IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGFzc2VydFByZXNlbnQsIGFzc2lnbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBTb3VyY2VTbGljZSB9IGZyb20gJy4uL3NvdXJjZS9zbGljZSc7XG5pbXBvcnQgeyBTb3VyY2VTcGFuIH0gZnJvbSAnLi4vc291cmNlL3NwYW4nO1xuaW1wb3J0IHsgU3Bhbkxpc3QgfSBmcm9tICcuLi9zb3VyY2Uvc3Bhbi1saXN0JztcbmltcG9ydCB7IEJsb2NrU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgU3ltYm9sVGFibGUgfSBmcm9tICcuLi9zeW1ib2wtdGFibGUnO1xuaW1wb3J0ICogYXMgQVNUdjIgZnJvbSAnLi9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxQYXJ0cyB7XG4gIGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGU7XG4gIGFyZ3M6IEFTVHYyLkFyZ3M7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcbiAgLy8gVEVNUExBVEUgLy9cblxuICB0ZW1wbGF0ZShcbiAgICBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsXG4gICAgYm9keTogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGVtcGxhdGUoe1xuICAgICAgdGFibGU6IHN5bWJvbHMsXG4gICAgICBib2R5LFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSU5URVJOQUwgKHRoZXNlIG5vZGVzIGNhbm5vdCBiZSByZWFjaGVkIHdoZW4gZG9pbmcgZ2VuZXJhbC1wdXJwb3NlIHZpc2l0aW5nKSAvL1xuXG4gIGJsb2NrKHN5bWJvbHM6IEJsb2NrU3ltYm9sVGFibGUsIGJvZHk6IEFTVHYyLkNvbnRlbnROb2RlW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkJsb2NrKHtcbiAgICAgIHNjb3BlOiBzeW1ib2xzLFxuICAgICAgYm9keSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5OYW1lZEJsb2NrKHtcbiAgICAgIG5hbWUsXG4gICAgICBibG9jayxcbiAgICAgIGF0dHJzOiBbXSxcbiAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgbW9kaWZpZXJzOiBbXSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIHNpbXBsZU5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZEVsZW1lbnQoe1xuICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgYXR0cnM6IFtdLFxuICAgICAgY29tcG9uZW50QXJnczogW10sXG4gICAgICBtb2RpZmllcnM6IFtdLFxuICAgICAgY29tbWVudHM6IFtdLFxuICAgIH0pLm5hbWVkKG5hbWUsIGJsb2NrLCBsb2MpO1xuICB9XG5cbiAgc2xpY2UoY2hhcnM6IHN0cmluZywgbG9jOiBTb3VyY2VTcGFuKTogU291cmNlU2xpY2Uge1xuICAgIHJldHVybiBuZXcgU291cmNlU2xpY2Uoe1xuICAgICAgbG9jLFxuICAgICAgY2hhcnMsXG4gICAgfSk7XG4gIH1cblxuICBhcmdzKFxuICAgIHBvc2l0aW9uYWw6IEFTVHYyLlBvc2l0aW9uYWxBcmd1bWVudHMsXG4gICAgbmFtZWQ6IEFTVHYyLk5hbWVkQXJndW1lbnRzLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5BcmdzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkFyZ3Moe1xuICAgICAgbG9jLFxuICAgICAgcG9zaXRpb25hbCxcbiAgICAgIG5hbWVkLFxuICAgIH0pO1xuICB9XG5cbiAgcG9zaXRpb25hbChleHByczogQVNUdjIuRXhwcmVzc2lvbk5vZGVbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGV4cHJzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRBcmd1bWVudChrZXk6IFNvdXJjZVNsaWNlLCB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBBU1R2Mi5OYW1lZEFyZ3VtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnQoe1xuICAgICAgbmFtZToga2V5LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBuYW1lZChlbnRyaWVzOiBBU1R2Mi5OYW1lZEFyZ3VtZW50W10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQXJndW1lbnRzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGVudHJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBhdHRyKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSHRtbEF0dHIge1xuICAgIHJldHVybiBuZXcgQVNUdjIuSHRtbEF0dHIoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgfSk7XG4gIH1cblxuICBzcGxhdEF0dHIoc3ltYm9sOiBudW1iZXIsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLlNwbGF0QXR0ciB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5TcGxhdEF0dHIoe1xuICAgICAgc3ltYm9sLFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgYXJnKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQ29tcG9uZW50QXJnIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNvbXBvbmVudEFyZyh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICB0cnVzdGluZyxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVYUFJFU1NJT05TIC8vXG5cbiAgcGF0aChoZWFkOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSwgdGFpbDogU291cmNlU2xpY2VbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUGF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuUGF0aEV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcmVmOiBoZWFkLFxuICAgICAgdGFpbCxcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGYobG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuVmFyaWFibGVSZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGhpc1JlZmVyZW5jZSh7XG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBhdChuYW1lOiBzdHJpbmcsIHN5bWJvbDogbnVtYmVyLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgLy8gdGhlIGBAYCBzaG91bGQgYmUgaW5jbHVkZWQgc28gd2UgaGF2ZSBhIGNvbXBsZXRlIHNvdXJjZSByYW5nZVxuICAgIGFzc2VydChuYW1lWzBdID09PSAnQCcsIGBjYWxsIGJ1aWxkZXJzLmF0KCkgd2l0aCBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICdAJ2ApO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcmdSZWZlcmVuY2Uoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZTogbmV3IFNvdXJjZVNsaWNlKHsgbG9jLCBjaGFyczogbmFtZSB9KSxcbiAgICAgIHN5bWJvbCxcbiAgICB9KTtcbiAgfVxuXG4gIGZyZWVWYXIoe1xuICAgIG5hbWUsXG4gICAgY29udGV4dCxcbiAgICBzeW1ib2wsXG4gICAgbG9jLFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbnRleHQ6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uO1xuICAgIHN5bWJvbDogbnVtYmVyO1xuICAgIGxvYzogU291cmNlU3BhbjtcbiAgfSk6IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUgIT09ICd0aGlzJyxcbiAgICAgIGBZb3UgY2FsbGVkIGJ1aWxkZXJzLmZyZWVWYXIoKSB3aXRoICd0aGlzJy4gQ2FsbCBidWlsZGVycy50aGlzIGluc3RlYWRgXG4gICAgKTtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lWzBdICE9PSAnQCcsXG4gICAgICBgWW91IGNhbGxlZCBidWlsZGVycy5mcmVlVmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uoe1xuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdXRpb246IGNvbnRleHQsXG4gICAgICBzeW1ib2wsXG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBsb2NhbFZhcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3ltYm9sOiBudW1iZXIsXG4gICAgaXNUZW1wbGF0ZUxvY2FsOiBib29sZWFuLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgYXNzZXJ0KG5hbWUgIT09ICd0aGlzJywgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAndGhpcycuIENhbGwgYnVpbGRlcnMudGhpcyBpbnN0ZWFkYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgbmFtZVswXSAhPT0gJ0AnLFxuICAgICAgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKHtcbiAgICAgIGxvYyxcbiAgICAgIG5hbWUsXG4gICAgICBpc1RlbXBsYXRlTG9jYWwsXG4gICAgICBzeW1ib2wsXG4gICAgfSk7XG4gIH1cblxuICBzZXhwKHBhcnRzOiBDYWxsUGFydHMsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkNhbGxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGNhbGxlZTogcGFydHMuY2FsbGVlLFxuICAgICAgYXJnczogcGFydHMuYXJncyxcbiAgICB9KTtcbiAgfVxuXG4gIGRlcHJlY2F0ZWRDYWxsKFxuICAgIGFyZzogU291cmNlU2xpY2UsXG4gICAgY2FsbGVlOiBBU1R2Mi5GcmVlVmFyUmVmZXJlbmNlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGFyZyxcbiAgICAgIGNhbGxlZSxcbiAgICB9KTtcbiAgfVxuXG4gIGludGVycG9sYXRlKHBhcnRzOiBBU1R2Mi5FeHByZXNzaW9uTm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24ge1xuICAgIGFzc2VydFByZXNlbnQocGFydHMpO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcGFydHMsXG4gICAgfSk7XG4gIH1cblxuICBsaXRlcmFsKHZhbHVlOiBzdHJpbmcsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogc3RyaW5nIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bWJlciwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBudW1iZXIgfTtcbiAgbGl0ZXJhbCh2YWx1ZTogYm9vbGVhbiwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBib29sZWFuIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bGwsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogbnVsbCB9O1xuICBsaXRlcmFsKHZhbHVlOiB1bmRlZmluZWQsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIGxpdGVyYWwoXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbjtcbiAgbGl0ZXJhbChcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jOiBTb3VyY2VTcGFuXG4gICk6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RBVEVNRU5UUyAvL1xuXG4gIGFwcGVuZChcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRydXN0aW5nLFxuICAgICAgdmFsdWUsXG4gICAgfTogeyB0YWJsZTogU3ltYm9sVGFibGU7IHRydXN0aW5nOiBib29sZWFuOyB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUgfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQXBwZW5kQ29udGVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcHBlbmRDb250ZW50KHtcbiAgICAgIHRhYmxlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vZGlmaWVyKHsgY2FsbGVlLCBhcmdzIH06IENhbGxQYXJ0cywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuRWxlbWVudE1vZGlmaWVyIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkVsZW1lbnRNb2RpZmllcih7XG4gICAgICBsb2MsXG4gICAgICBjYWxsZWUsXG4gICAgICBhcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRCbG9ja3MoYmxvY2tzOiBBU1R2Mi5OYW1lZEJsb2NrW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQmxvY2tzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2tzKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrcyxcbiAgICB9KTtcbiAgfVxuXG4gIGJsb2NrU3RhdGVtZW50KFxuICAgIHtcbiAgICAgIHN5bWJvbHMsXG4gICAgICBwcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IG51bGwsXG4gICAgICAuLi5jYWxsXG4gICAgfToge1xuICAgICAgc3ltYm9sczogU3ltYm9sVGFibGU7XG4gICAgICBwcm9ncmFtOiBBU1R2Mi5CbG9jaztcbiAgICAgIGludmVyc2U/OiBBU1R2Mi5CbG9jayB8IG51bGw7XG4gICAgfSAmIENhbGxQYXJ0cyxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQmxvY2sge1xuICAgIGxldCBibG9ja3NMb2MgPSBwcm9ncmFtLmxvYztcbiAgICBsZXQgYmxvY2tzOiBQcmVzZW50QXJyYXk8QVNUdjIuTmFtZWRCbG9jaz4gPSBbXG4gICAgICB0aGlzLm5hbWVkQmxvY2soU291cmNlU2xpY2Uuc3ludGhldGljKCdkZWZhdWx0JyksIHByb2dyYW0sIHByb2dyYW0ubG9jKSxcbiAgICBdO1xuICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICBibG9ja3NMb2MgPSBibG9ja3NMb2MuZXh0ZW5kKGludmVyc2UubG9jKTtcbiAgICAgIGJsb2Nrcy5wdXNoKHRoaXMubmFtZWRCbG9jayhTb3VyY2VTbGljZS5zeW50aGV0aWMoJ2Vsc2UnKSwgaW52ZXJzZSwgaW52ZXJzZS5sb2MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUJsb2NrKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrczogdGhpcy5uYW1lZEJsb2NrcyhibG9ja3MsIGJsb2Nrc0xvYyksXG4gICAgICBjYWxsZWU6IGNhbGwuY2FsbGVlLFxuICAgICAgYXJnczogY2FsbC5hcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgZWxlbWVudChvcHRpb25zOiBCdWlsZEJhc2VFbGVtZW50KTogQnVpbGRFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkRWxlbWVudChvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQmFzZUVsZW1lbnQge1xuICBzZWxmQ2xvc2luZzogYm9vbGVhbjtcbiAgYXR0cnM6IEFTVHYyLkh0bWxPclNwbGF0QXR0cltdO1xuICBjb21wb25lbnRBcmdzOiBBU1R2Mi5Db21wb25lbnRBcmdbXTtcbiAgbW9kaWZpZXJzOiBBU1R2Mi5FbGVtZW50TW9kaWZpZXJbXTtcbiAgY29tbWVudHM6IEFTVHYyLkdsaW1tZXJDb21tZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEVsZW1lbnQge1xuICByZWFkb25seSBidWlsZGVyOiBCdWlsZGVyO1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBiYXNlOiBCdWlsZEJhc2VFbGVtZW50KSB7XG4gICAgdGhpcy5idWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgfVxuXG4gIHNpbXBsZSh0YWc6IFNvdXJjZVNsaWNlLCBib2R5OiBBU1R2Mi5Db250ZW50Tm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5TaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLlNpbXBsZUVsZW1lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb21wb25lbnRBcmdzOiBbXSxcbiAgICAgICAgICBsb2MsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuYW1lZChuYW1lOiBTb3VyY2VTbGljZSwgYmxvY2s6IEFTVHYyLkJsb2NrLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5OYW1lZEJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2soXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgICAgIGxvYyxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNlbGZDbG9zaW5nQ29tcG9uZW50KGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkludm9rZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnZva2VDb21wb25lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBsb2MsXG4gICAgICAgICAgY2FsbGVlLFxuICAgICAgICAgIC8vIHBvaW50IHRoZSBlbXB0eSBuYW1lZCBibG9ja3MgYXQgdGhlIGAvYCBzZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgYmxvY2tzOiBuZXcgQVNUdjIuTmFtZWRCbG9ja3Moe1xuICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIGxvYzogbG9jLnNsaWNlRW5kQ2hhcnMoeyBza2lwRW5kOiAxLCBjaGFyczogMSB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpdGhEZWZhdWx0QmxvY2soXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBjaGlsZHJlbjogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBzeW1ib2xzOiBCbG9ja1N5bWJvbFRhYmxlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5JbnZva2VDb21wb25lbnQge1xuICAgIGxldCBibG9jayA9IHRoaXMuYnVpbGRlci5ibG9jayhzeW1ib2xzLCBjaGlsZHJlbiwgbG9jKTtcbiAgICBsZXQgbmFtZWRCbG9jayA9IHRoaXMuYnVpbGRlci5uYW1lZEJsb2NrKFNvdXJjZVNsaWNlLnN5bnRoZXRpYygnZGVmYXVsdCcpLCBibG9jaywgbG9jKTsgLy8gQlVJTERFUi5zaW1wbGVOYW1lZEJsb2NrKCdkZWZhdWx0JywgY2hpbGRyZW4sIHN5bWJvbHMsIGxvYyk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoW25hbWVkQmxvY2tdLCBuYW1lZEJsb2NrLmxvYyksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZWRCbG9ja3MoXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBibG9ja3M6IFByZXNlbnRBcnJheTxBU1R2Mi5OYW1lZEJsb2NrPixcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoYmxvY2tzLCBTcGFuTGlzdC5yYW5nZShibG9ja3MpKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==