123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.BuildElement = exports.Builder = void 0;
- var _util = require("@glimmer/util");
- var _slice = require("../source/slice");
- var _spanList = require("../source/span-list");
- var ASTv2 = _interopRequireWildcard(require("./api"));
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
- 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; }
- var __rest = void 0 && (void 0).__rest || function (s, e) {
- var t = {};
- for (var p in s) {
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
- }
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
- }
- return t;
- };
- var Builder = /*#__PURE__*/function () {
- function Builder() {}
- var _proto = Builder.prototype; // TEMPLATE //
- _proto.template = function template(symbols, body, loc) {
- return new ASTv2.Template({
- table: symbols,
- body: body,
- loc: loc
- });
- } // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //
- ;
- _proto.block = function block(symbols, body, loc) {
- return new ASTv2.Block({
- scope: symbols,
- body: body,
- loc: loc
- });
- };
- _proto.namedBlock = function namedBlock(name, block, loc) {
- return new ASTv2.NamedBlock({
- name: name,
- block: block,
- attrs: [],
- componentArgs: [],
- modifiers: [],
- loc: loc
- });
- };
- _proto.simpleNamedBlock = function simpleNamedBlock(name, block, loc) {
- return new BuildElement({
- selfClosing: false,
- attrs: [],
- componentArgs: [],
- modifiers: [],
- comments: []
- }).named(name, block, loc);
- };
- _proto.slice = function slice(chars, loc) {
- return new _slice.SourceSlice({
- loc: loc,
- chars: chars
- });
- };
- _proto.args = function args(positional, named, loc) {
- return new ASTv2.Args({
- loc: loc,
- positional: positional,
- named: named
- });
- };
- _proto.positional = function positional(exprs, loc) {
- return new ASTv2.PositionalArguments({
- loc: loc,
- exprs: exprs
- });
- };
- _proto.namedArgument = function namedArgument(key, value) {
- return new ASTv2.NamedArgument({
- name: key,
- value: value
- });
- };
- _proto.named = function named(entries, loc) {
- return new ASTv2.NamedArguments({
- loc: loc,
- entries: entries
- });
- };
- _proto.attr = function attr(_ref, loc) {
- var name = _ref.name,
- value = _ref.value,
- trusting = _ref.trusting;
- return new ASTv2.HtmlAttr({
- loc: loc,
- name: name,
- value: value,
- trusting: trusting
- });
- };
- _proto.splatAttr = function splatAttr(symbol, loc) {
- return new ASTv2.SplatAttr({
- symbol: symbol,
- loc: loc
- });
- };
- _proto.arg = function arg(_ref2, loc) {
- var name = _ref2.name,
- value = _ref2.value,
- trusting = _ref2.trusting;
- return new ASTv2.ComponentArg({
- name: name,
- value: value,
- trusting: trusting,
- loc: loc
- });
- } // EXPRESSIONS //
- ;
- _proto.path = function path(head, tail, loc) {
- return new ASTv2.PathExpression({
- loc: loc,
- ref: head,
- tail: tail
- });
- };
- _proto.self = function self(loc) {
- return new ASTv2.ThisReference({
- loc: loc
- });
- };
- _proto.at = function at(name, symbol, loc) {
- // the `@` should be included so we have a complete source range
- false && (0, _util.assert)(name[0] === '@', "call builders.at() with a string that starts with '@'");
- return new ASTv2.ArgReference({
- loc: loc,
- name: new _slice.SourceSlice({
- loc: loc,
- chars: name
- }),
- symbol: symbol
- });
- };
- _proto.freeVar = function freeVar(_ref3) {
- var name = _ref3.name,
- context = _ref3.context,
- symbol = _ref3.symbol,
- loc = _ref3.loc;
- false && (0, _util.assert)(name !== 'this', "You called builders.freeVar() with 'this'. Call builders.this instead");
- false && (0, _util.assert)(name[0] !== '@', "You called builders.freeVar() with '" + name + "'. Call builders.at('" + name + "') instead");
- return new ASTv2.FreeVarReference({
- name: name,
- resolution: context,
- symbol: symbol,
- loc: loc
- });
- };
- _proto.localVar = function localVar(name, symbol, isTemplateLocal, loc) {
- false && (0, _util.assert)(name !== 'this', "You called builders.var() with 'this'. Call builders.this instead");
- false && (0, _util.assert)(name[0] !== '@', "You called builders.var() with '" + name + "'. Call builders.at('" + name + "') instead");
- return new ASTv2.LocalVarReference({
- loc: loc,
- name: name,
- isTemplateLocal: isTemplateLocal,
- symbol: symbol
- });
- };
- _proto.sexp = function sexp(parts, loc) {
- return new ASTv2.CallExpression({
- loc: loc,
- callee: parts.callee,
- args: parts.args
- });
- };
- _proto.deprecatedCall = function deprecatedCall(arg, callee, loc) {
- return new ASTv2.DeprecatedCallExpression({
- loc: loc,
- arg: arg,
- callee: callee
- });
- };
- _proto.interpolate = function interpolate(parts, loc) {
- (0, _util.assertPresent)(parts);
- return new ASTv2.InterpolateExpression({
- loc: loc,
- parts: parts
- });
- };
- _proto.literal = function literal(value, loc) {
- return new ASTv2.LiteralExpression({
- loc: loc,
- value: value
- });
- } // STATEMENTS //
- ;
- _proto.append = function append(_ref4, loc) {
- var table = _ref4.table,
- trusting = _ref4.trusting,
- value = _ref4.value;
- return new ASTv2.AppendContent({
- table: table,
- trusting: trusting,
- value: value,
- loc: loc
- });
- };
- _proto.modifier = function modifier(_ref5, loc) {
- var callee = _ref5.callee,
- args = _ref5.args;
- return new ASTv2.ElementModifier({
- loc: loc,
- callee: callee,
- args: args
- });
- };
- _proto.namedBlocks = function namedBlocks(blocks, loc) {
- return new ASTv2.NamedBlocks({
- loc: loc,
- blocks: blocks
- });
- };
- _proto.blockStatement = function blockStatement(_a, loc) {
- var symbols = _a.symbols,
- program = _a.program,
- _a$inverse = _a.inverse,
- inverse = _a$inverse === void 0 ? null : _a$inverse,
- call = __rest(_a, ["symbols", "program", "inverse"]);
- var blocksLoc = program.loc;
- var blocks = [this.namedBlock(_slice.SourceSlice.synthetic('default'), program, program.loc)];
- if (inverse) {
- blocksLoc = blocksLoc.extend(inverse.loc);
- blocks.push(this.namedBlock(_slice.SourceSlice.synthetic('else'), inverse, inverse.loc));
- }
- return new ASTv2.InvokeBlock({
- loc: loc,
- blocks: this.namedBlocks(blocks, blocksLoc),
- callee: call.callee,
- args: call.args
- });
- };
- _proto.element = function element(options) {
- return new BuildElement(options);
- };
- return Builder;
- }();
- exports.Builder = Builder;
- var BuildElement = /*#__PURE__*/function () {
- function BuildElement(base) {
- this.base = base;
- this.builder = new Builder();
- }
- var _proto2 = BuildElement.prototype;
- _proto2.simple = function simple(tag, body, loc) {
- return new ASTv2.SimpleElement((0, _util.assign)({
- tag: tag,
- body: body,
- componentArgs: [],
- loc: loc
- }, this.base));
- };
- _proto2.named = function named(name, block, loc) {
- return new ASTv2.NamedBlock((0, _util.assign)({
- name: name,
- block: block,
- componentArgs: [],
- loc: loc
- }, this.base));
- };
- _proto2.selfClosingComponent = function selfClosingComponent(callee, loc) {
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc: loc,
- callee: callee,
- // point the empty named blocks at the `/` self-closing tag
- blocks: new ASTv2.NamedBlocks({
- blocks: [],
- loc: loc.sliceEndChars({
- skipEnd: 1,
- chars: 1
- })
- })
- }, this.base));
- };
- _proto2.componentWithDefaultBlock = function componentWithDefaultBlock(callee, children, symbols, loc) {
- var block = this.builder.block(symbols, children, loc);
- var namedBlock = this.builder.namedBlock(_slice.SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc: loc,
- callee: callee,
- blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)
- }, this.base));
- };
- _proto2.componentWithNamedBlocks = function componentWithNamedBlocks(callee, blocks, loc) {
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc: loc,
- callee: callee,
- blocks: this.builder.namedBlocks(blocks, _spanList.SpanList.range(blocks))
- }, this.base));
- };
- return BuildElement;
- }();
- exports.BuildElement = BuildElement;
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9idWlsZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFNLE9BQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLE9BQUEsR0FBQSxDQUFBOztBQUFBLE1BQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUEsQ0FDRTs7QUFERixFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBR0UsU0FBQSxRQUFBLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBR2lCO0FBRWYsV0FBTyxJQUFJLEtBQUssQ0FBVCxRQUFBLENBQW1CO0FBQ3hCLE1BQUEsS0FBSyxFQURtQixPQUFBO0FBRXhCLE1BQUEsSUFGd0IsRUFBQSxJQUFBO0FBR3hCLE1BQUEsR0FBQSxFQUFBO0FBSHdCLEtBQW5CLENBQVA7QUFSSixHQUFBLENBZUU7QUFmRjs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxLQUFBLEdBaUJFLFNBQUEsS0FBQSxDQUFBLE9BQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxFQUEyRTtBQUN6RSxXQUFPLElBQUksS0FBSyxDQUFULEtBQUEsQ0FBZ0I7QUFDckIsTUFBQSxLQUFLLEVBRGdCLE9BQUE7QUFFckIsTUFBQSxJQUZxQixFQUFBLElBQUE7QUFHckIsTUFBQSxHQUFBLEVBQUE7QUFIcUIsS0FBaEIsQ0FBUDtBQWxCSixHQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLFVBQUEsR0F5QkUsU0FBQSxVQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQWlFO0FBQy9ELFdBQU8sSUFBSSxLQUFLLENBQVQsVUFBQSxDQUFxQjtBQUMxQixNQUFBLElBRDBCLEVBQUEsSUFBQTtBQUUxQixNQUFBLEtBRjBCLEVBQUEsS0FBQTtBQUcxQixNQUFBLEtBQUssRUFIcUIsRUFBQTtB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LE9BQUEsQ0FBQSx3QkFBQSxHQXdFRSxTQUFBLHdCQUFBLENBQUEsTUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBR2lCO0FBRWYsV0FBTyxJQUFJLEtBQUssQ0FBVCxlQUFBLENBQ0wsa0JBQ0U7QUFDRSxNQUFBLEdBREYsRUFBQSxHQUFBO0FBRUUsTUFBQSxNQUZGLEVBQUEsTUFBQTtBQUdFLE1BQUEsTUFBTSxFQUFFLEtBQUEsT0FBQSxDQUFBLFdBQUEsQ0FBQSxNQUFBLEVBQWlDLG1CQUFBLEtBQUEsQ0FBakMsTUFBaUMsQ0FBakM7QUFIVixLQURGLEVBTUUsS0FQSixJQUNFLENBREssQ0FBUDtBQTdFSixHQUFBOztBQUFBLFNBQUEsWUFBQTtBQUFBLENBQUEsRUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJlc2VudEFycmF5IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGFzc2VydFByZXNlbnQsIGFzc2lnbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBTb3VyY2VTbGljZSB9IGZyb20gJy4uL3NvdXJjZS9zbGljZSc7XG5pbXBvcnQgeyBTb3VyY2VTcGFuIH0gZnJvbSAnLi4vc291cmNlL3NwYW4nO1xuaW1wb3J0IHsgU3Bhbkxpc3QgfSBmcm9tICcuLi9zb3VyY2Uvc3Bhbi1saXN0JztcbmltcG9ydCB7IEJsb2NrU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgU3ltYm9sVGFibGUgfSBmcm9tICcuLi9zeW1ib2wtdGFibGUnO1xuaW1wb3J0ICogYXMgQVNUdjIgZnJvbSAnLi9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxQYXJ0cyB7XG4gIGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGU7XG4gIGFyZ3M6IEFTVHYyLkFyZ3M7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcbiAgLy8gVEVNUExBVEUgLy9cblxuICB0ZW1wbGF0ZShcbiAgICBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsXG4gICAgYm9keTogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGVtcGxhdGUoe1xuICAgICAgdGFibGU6IHN5bWJvbHMsXG4gICAgICBib2R5LFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSU5URVJOQUwgKHRoZXNlIG5vZGVzIGNhbm5vdCBiZSByZWFjaGVkIHdoZW4gZG9pbmcgZ2VuZXJhbC1wdXJwb3NlIHZpc2l0aW5nKSAvL1xuXG4gIGJsb2NrKHN5bWJvbHM6IEJsb2NrU3ltYm9sVGFibGUsIGJvZHk6IEFTVHYyLkNvbnRlbnROb2RlW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkJsb2NrKHtcbiAgICAgIHNjb3BlOiBzeW1ib2xzLFxuICAgICAgYm9keSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5OYW1lZEJsb2NrKHtcbiAgICAgIG5hbWUsXG4gICAgICBibG9jayxcbiAgICAgIGF0dHJzOiBbXSxcbiAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgbW9kaWZpZXJzOiBbXSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIHNpbXBsZU5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZEVsZW1lbnQoe1xuICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgYXR0cnM6IFtdLFxuICAgICAgY29tcG9uZW50QXJnczogW10sXG4gICAgICBtb2RpZmllcnM6IFtdLFxuICAgICAgY29tbWVudHM6IFtdLFxuICAgIH0pLm5hbWVkKG5hbWUsIGJsb2NrLCBsb2MpO1xuICB9XG5cbiAgc2xpY2UoY2hhcnM6IHN0cmluZywgbG9jOiBTb3VyY2VTcGFuKTogU291cmNlU2xpY2Uge1xuICAgIHJldHVybiBuZXcgU291cmNlU2xpY2Uoe1xuICAgICAgbG9jLFxuICAgICAgY2hhcnMsXG4gICAgfSk7XG4gIH1cblxuICBhcmdzKFxuICAgIHBvc2l0aW9uYWw6IEFTVHYyLlBvc2l0aW9uYWxBcmd1bWVudHMsXG4gICAgbmFtZWQ6IEFTVHYyLk5hbWVkQXJndW1lbnRzLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5BcmdzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkFyZ3Moe1xuICAgICAgbG9jLFxuICAgICAgcG9zaXRpb25hbCxcbiAgICAgIG5hbWVkLFxuICAgIH0pO1xuICB9XG5cbiAgcG9zaXRpb25hbChleHByczogQVNUdjIuRXhwcmVzc2lvbk5vZGVbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGV4cHJzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRBcmd1bWVudChrZXk6IFNvdXJjZVNsaWNlLCB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBBU1R2Mi5OYW1lZEFyZ3VtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnQoe1xuICAgICAgbmFtZToga2V5LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBuYW1lZChlbnRyaWVzOiBBU1R2Mi5OYW1lZEFyZ3VtZW50W10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQXJndW1lbnRzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGVudHJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBhdHRyKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSHRtbEF0dHIge1xuICAgIHJldHVybiBuZXcgQVNUdjIuSHRtbEF0dHIoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgfSk7XG4gIH1cblxuICBzcGxhdEF0dHIoc3ltYm9sOiBudW1iZXIsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLlNwbGF0QXR0ciB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5TcGxhdEF0dHIoe1xuICAgICAgc3ltYm9sLFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgYXJnKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQ29tcG9uZW50QXJnIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNvbXBvbmVudEFyZyh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICB0cnVzdGluZyxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVYUFJFU1NJT05TIC8vXG5cbiAgcGF0aChoZWFkOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSwgdGFpbDogU291cmNlU2xpY2VbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUGF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuUGF0aEV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcmVmOiBoZWFkLFxuICAgICAgdGFpbCxcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGYobG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuVmFyaWFibGVSZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGhpc1JlZmVyZW5jZSh7XG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBhdChuYW1lOiBzdHJpbmcsIHN5bWJvbDogbnVtYmVyLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgLy8gdGhlIGBAYCBzaG91bGQgYmUgaW5jbHVkZWQgc28gd2UgaGF2ZSBhIGNvbXBsZXRlIHNvdXJjZSByYW5nZVxuICAgIGFzc2VydChuYW1lWzBdID09PSAnQCcsIGBjYWxsIGJ1aWxkZXJzLmF0KCkgd2l0aCBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICdAJ2ApO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcmdSZWZlcmVuY2Uoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZTogbmV3IFNvdXJjZVNsaWNlKHsgbG9jLCBjaGFyczogbmFtZSB9KSxcbiAgICAgIHN5bWJvbCxcbiAgICB9KTtcbiAgfVxuXG4gIGZyZWVWYXIoe1xuICAgIG5hbWUsXG4gICAgY29udGV4dCxcbiAgICBzeW1ib2wsXG4gICAgbG9jLFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbnRleHQ6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uO1xuICAgIHN5bWJvbDogbnVtYmVyO1xuICAgIGxvYzogU291cmNlU3BhbjtcbiAgfSk6IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUgIT09ICd0aGlzJyxcbiAgICAgIGBZb3UgY2FsbGVkIGJ1aWxkZXJzLmZyZWVWYXIoKSB3aXRoICd0aGlzJy4gQ2FsbCBidWlsZGVycy50aGlzIGluc3RlYWRgXG4gICAgKTtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lWzBdICE9PSAnQCcsXG4gICAgICBgWW91IGNhbGxlZCBidWlsZGVycy5mcmVlVmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uoe1xuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdXRpb246IGNvbnRleHQsXG4gICAgICBzeW1ib2wsXG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBsb2NhbFZhcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3ltYm9sOiBudW1iZXIsXG4gICAgaXNUZW1wbGF0ZUxvY2FsOiBib29sZWFuLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgYXNzZXJ0KG5hbWUgIT09ICd0aGlzJywgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAndGhpcycuIENhbGwgYnVpbGRlcnMudGhpcyBpbnN0ZWFkYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgbmFtZVswXSAhPT0gJ0AnLFxuICAgICAgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKHtcbiAgICAgIGxvYyxcbiAgICAgIG5hbWUsXG4gICAgICBpc1RlbXBsYXRlTG9jYWwsXG4gICAgICBzeW1ib2wsXG4gICAgfSk7XG4gIH1cblxuICBzZXhwKHBhcnRzOiBDYWxsUGFydHMsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkNhbGxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGNhbGxlZTogcGFydHMuY2FsbGVlLFxuICAgICAgYXJnczogcGFydHMuYXJncyxcbiAgICB9KTtcbiAgfVxuXG4gIGRlcHJlY2F0ZWRDYWxsKFxuICAgIGFyZzogU291cmNlU2xpY2UsXG4gICAgY2FsbGVlOiBBU1R2Mi5GcmVlVmFyUmVmZXJlbmNlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGFyZyxcbiAgICAgIGNhbGxlZSxcbiAgICB9KTtcbiAgfVxuXG4gIGludGVycG9sYXRlKHBhcnRzOiBBU1R2Mi5FeHByZXNzaW9uTm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24ge1xuICAgIGFzc2VydFByZXNlbnQocGFydHMpO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcGFydHMsXG4gICAgfSk7XG4gIH1cblxuICBsaXRlcmFsKHZhbHVlOiBzdHJpbmcsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogc3RyaW5nIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bWJlciwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBudW1iZXIgfTtcbiAgbGl0ZXJhbCh2YWx1ZTogYm9vbGVhbiwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBib29sZWFuIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bGwsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogbnVsbCB9O1xuICBsaXRlcmFsKHZhbHVlOiB1bmRlZmluZWQsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIGxpdGVyYWwoXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbjtcbiAgbGl0ZXJhbChcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jOiBTb3VyY2VTcGFuXG4gICk6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RBVEVNRU5UUyAvL1xuXG4gIGFwcGVuZChcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRydXN0aW5nLFxuICAgICAgdmFsdWUsXG4gICAgfTogeyB0YWJsZTogU3ltYm9sVGFibGU7IHRydXN0aW5nOiBib29sZWFuOyB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUgfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQXBwZW5kQ29udGVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcHBlbmRDb250ZW50KHtcbiAgICAgIHRhYmxlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vZGlmaWVyKHsgY2FsbGVlLCBhcmdzIH06IENhbGxQYXJ0cywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuRWxlbWVudE1vZGlmaWVyIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkVsZW1lbnRNb2RpZmllcih7XG4gICAgICBsb2MsXG4gICAgICBjYWxsZWUsXG4gICAgICBhcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRCbG9ja3MoYmxvY2tzOiBBU1R2Mi5OYW1lZEJsb2NrW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQmxvY2tzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2tzKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrcyxcbiAgICB9KTtcbiAgfVxuXG4gIGJsb2NrU3RhdGVtZW50KFxuICAgIHtcbiAgICAgIHN5bWJvbHMsXG4gICAgICBwcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IG51bGwsXG4gICAgICAuLi5jYWxsXG4gICAgfToge1xuICAgICAgc3ltYm9sczogU3ltYm9sVGFibGU7XG4gICAgICBwcm9ncmFtOiBBU1R2Mi5CbG9jaztcbiAgICAgIGludmVyc2U/OiBBU1R2Mi5CbG9jayB8IG51bGw7XG4gICAgfSAmIENhbGxQYXJ0cyxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQmxvY2sge1xuICAgIGxldCBibG9ja3NMb2MgPSBwcm9ncmFtLmxvYztcbiAgICBsZXQgYmxvY2tzOiBQcmVzZW50QXJyYXk8QVNUdjIuTmFtZWRCbG9jaz4gPSBbXG4gICAgICB0aGlzLm5hbWVkQmxvY2soU291cmNlU2xpY2Uuc3ludGhldGljKCdkZWZhdWx0JyksIHByb2dyYW0sIHByb2dyYW0ubG9jKSxcbiAgICBdO1xuICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICBibG9ja3NMb2MgPSBibG9ja3NMb2MuZXh0ZW5kKGludmVyc2UubG9jKTtcbiAgICAgIGJsb2Nrcy5wdXNoKHRoaXMubmFtZWRCbG9jayhTb3VyY2VTbGljZS5zeW50aGV0aWMoJ2Vsc2UnKSwgaW52ZXJzZSwgaW52ZXJzZS5sb2MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUJsb2NrKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrczogdGhpcy5uYW1lZEJsb2NrcyhibG9ja3MsIGJsb2Nrc0xvYyksXG4gICAgICBjYWxsZWU6IGNhbGwuY2FsbGVlLFxuICAgICAgYXJnczogY2FsbC5hcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgZWxlbWVudChvcHRpb25zOiBCdWlsZEJhc2VFbGVtZW50KTogQnVpbGRFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkRWxlbWVudChvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQmFzZUVsZW1lbnQge1xuICBzZWxmQ2xvc2luZzogYm9vbGVhbjtcbiAgYXR0cnM6IEFTVHYyLkh0bWxPclNwbGF0QXR0cltdO1xuICBjb21wb25lbnRBcmdzOiBBU1R2Mi5Db21wb25lbnRBcmdbXTtcbiAgbW9kaWZpZXJzOiBBU1R2Mi5FbGVtZW50TW9kaWZpZXJbXTtcbiAgY29tbWVudHM6IEFTVHYyLkdsaW1tZXJDb21tZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEVsZW1lbnQge1xuICByZWFkb25seSBidWlsZGVyOiBCdWlsZGVyO1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBiYXNlOiBCdWlsZEJhc2VFbGVtZW50KSB7XG4gICAgdGhpcy5idWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgfVxuXG4gIHNpbXBsZSh0YWc6IFNvdXJjZVNsaWNlLCBib2R5OiBBU1R2Mi5Db250ZW50Tm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5TaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLlNpbXBsZUVsZW1lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb21wb25lbnRBcmdzOiBbXSxcbiAgICAgICAgICBsb2MsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuYW1lZChuYW1lOiBTb3VyY2VTbGljZSwgYmxvY2s6IEFTVHYyLkJsb2NrLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5OYW1lZEJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2soXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgICAgIGxvYyxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNlbGZDbG9zaW5nQ29tcG9uZW50KGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkludm9rZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnZva2VDb21wb25lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBsb2MsXG4gICAgICAgICAgY2FsbGVlLFxuICAgICAgICAgIC8vIHBvaW50IHRoZSBlbXB0eSBuYW1lZCBibG9ja3MgYXQgdGhlIGAvYCBzZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgYmxvY2tzOiBuZXcgQVNUdjIuTmFtZWRCbG9ja3Moe1xuICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIGxvYzogbG9jLnNsaWNlRW5kQ2hhcnMoeyBza2lwRW5kOiAxLCBjaGFyczogMSB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpdGhEZWZhdWx0QmxvY2soXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBjaGlsZHJlbjogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBzeW1ib2xzOiBCbG9ja1N5bWJvbFRhYmxlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5JbnZva2VDb21wb25lbnQge1xuICAgIGxldCBibG9jayA9IHRoaXMuYnVpbGRlci5ibG9jayhzeW1ib2xzLCBjaGlsZHJlbiwgbG9jKTtcbiAgICBsZXQgbmFtZWRCbG9jayA9IHRoaXMuYnVpbGRlci5uYW1lZEJsb2NrKFNvdXJjZVNsaWNlLnN5bnRoZXRpYygnZGVmYXVsdCcpLCBibG9jaywgbG9jKTsgLy8gQlVJTERFUi5zaW1wbGVOYW1lZEJsb2NrKCdkZWZhdWx0JywgY2hpbGRyZW4sIHN5bWJvbHMsIGxvYyk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoW25hbWVkQmxvY2tdLCBuYW1lZEJsb2NrLmxvYyksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZWRCbG9ja3MoXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBibG9ja3M6IFByZXNlbnRBcnJheTxBU1R2Mi5OYW1lZEJsb2NrPixcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoYmxvY2tzLCBTcGFuTGlzdC5yYW5nZShibG9ja3MpKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|