123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- "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;
- };
- class Builder {
- // TEMPLATE //
- template(symbols, body, loc) {
- return new ASTv2.Template({
- table: symbols,
- body,
- loc
- });
- } // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //
- block(symbols, body, loc) {
- return new ASTv2.Block({
- scope: symbols,
- body,
- loc
- });
- }
- namedBlock(name, block, loc) {
- return new ASTv2.NamedBlock({
- name,
- block,
- attrs: [],
- componentArgs: [],
- modifiers: [],
- loc
- });
- }
- simpleNamedBlock(name, block, loc) {
- return new BuildElement({
- selfClosing: false,
- attrs: [],
- componentArgs: [],
- modifiers: [],
- comments: []
- }).named(name, block, loc);
- }
- slice(chars, loc) {
- return new _slice.SourceSlice({
- loc,
- chars
- });
- }
- args(positional, named, loc) {
- return new ASTv2.Args({
- loc,
- positional,
- named
- });
- }
- positional(exprs, loc) {
- return new ASTv2.PositionalArguments({
- loc,
- exprs
- });
- }
- namedArgument(key, value) {
- return new ASTv2.NamedArgument({
- name: key,
- value
- });
- }
- named(entries, loc) {
- return new ASTv2.NamedArguments({
- loc,
- entries
- });
- }
- attr({
- name,
- value,
- trusting
- }, loc) {
- return new ASTv2.HtmlAttr({
- loc,
- name,
- value,
- trusting
- });
- }
- splatAttr(symbol, loc) {
- return new ASTv2.SplatAttr({
- symbol,
- loc
- });
- }
- arg({
- name,
- value,
- trusting
- }, loc) {
- return new ASTv2.ComponentArg({
- name,
- value,
- trusting,
- loc
- });
- } // EXPRESSIONS //
- path(head, tail, loc) {
- return new ASTv2.PathExpression({
- loc,
- ref: head,
- tail
- });
- }
- self(loc) {
- return new ASTv2.ThisReference({
- loc
- });
- }
- 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,
- name: new _slice.SourceSlice({
- loc,
- chars: name
- }),
- symbol
- });
- }
- freeVar({
- name,
- context,
- symbol,
- 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,
- resolution: context,
- symbol,
- loc
- });
- }
- 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,
- name,
- isTemplateLocal,
- symbol
- });
- }
- sexp(parts, loc) {
- return new ASTv2.CallExpression({
- loc,
- callee: parts.callee,
- args: parts.args
- });
- }
- deprecatedCall(arg, callee, loc) {
- return new ASTv2.DeprecatedCallExpression({
- loc,
- arg,
- callee
- });
- }
- interpolate(parts, loc) {
- (0, _util.assertPresent)(parts);
- return new ASTv2.InterpolateExpression({
- loc,
- parts
- });
- }
- literal(value, loc) {
- return new ASTv2.LiteralExpression({
- loc,
- value
- });
- } // STATEMENTS //
- append({
- table,
- trusting,
- value
- }, loc) {
- return new ASTv2.AppendContent({
- table,
- trusting,
- value,
- loc
- });
- }
- modifier({
- callee,
- args
- }, loc) {
- return new ASTv2.ElementModifier({
- loc,
- callee,
- args
- });
- }
- namedBlocks(blocks, loc) {
- return new ASTv2.NamedBlocks({
- loc,
- blocks
- });
- }
- blockStatement(_a, loc) {
- var {
- symbols,
- program,
- inverse = null
- } = _a,
- call = __rest(_a, ["symbols", "program", "inverse"]);
- let blocksLoc = program.loc;
- let 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,
- blocks: this.namedBlocks(blocks, blocksLoc),
- callee: call.callee,
- args: call.args
- });
- }
- element(options) {
- return new BuildElement(options);
- }
- }
- exports.Builder = Builder;
- class BuildElement {
- constructor(base) {
- this.base = base;
- this.builder = new Builder();
- }
- simple(tag, body, loc) {
- return new ASTv2.SimpleElement((0, _util.assign)({
- tag,
- body,
- componentArgs: [],
- loc
- }, this.base));
- }
- named(name, block, loc) {
- return new ASTv2.NamedBlock((0, _util.assign)({
- name,
- block,
- componentArgs: [],
- loc
- }, this.base));
- }
- selfClosingComponent(callee, loc) {
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc,
- 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));
- }
- componentWithDefaultBlock(callee, children, symbols, loc) {
- let block = this.builder.block(symbols, children, loc);
- let namedBlock = this.builder.namedBlock(_slice.SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc,
- callee,
- blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)
- }, this.base));
- }
- componentWithNamedBlocks(callee, blocks, loc) {
- return new ASTv2.InvokeComponent((0, _util.assign)({
- loc,
- callee,
- blocks: this.builder.namedBlocks(blocks, _spanList.SpanList.range(blocks))
- }, this.base));
- }
- }
- exports.BuildElement = BuildElement;
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9idWlsZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT00sTUFBQSxPQUFBLENBQWM7QUFDbEI7QUFFQSxFQUFBLFFBQVEsQ0FBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLEdBQUEsRUFHUztBQUVmLFdBQU8sSUFBSSxLQUFLLENBQVQsUUFBQSxDQUFtQjtBQUN4QixNQUFBLEtBQUssRUFEbUIsT0FBQTtBQUFBLE1BQUEsSUFBQTtBQUd4QixNQUFBO0FBSHdCLEtBQW5CLENBQVA7QUFSZ0IsR0FBQSxDQWVsQjs7O0FBRUEsRUFBQSxLQUFLLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBQXNFO0FBQ3pFLFdBQU8sSUFBSSxLQUFLLENBQVQsS0FBQSxDQUFnQjtBQUNyQixNQUFBLEtBQUssRUFEZ0IsT0FBQTtBQUFBLE1BQUEsSUFBQTtBQUdyQixNQUFBO0FBSHFCLEtBQWhCLENBQVA7QUFLRDs7QUFFRCxFQUFBLFVBQVUsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBdUQ7QUFDL0QsV0FBTyxJQUFJLEtBQUssQ0FBVCxVQUFBLENBQXFCO0FBQUEsTUFBQSxJQUFBO0FBQUEsTUFBQSxLQUFBO0FBRzFCLE1BQUEsS0FBSyxFQUhxQixFQUFBO0FBSTFCLE1BQUEsYUFBYSxFQUphLEVBQUE7QUFLMUIsTUFBQSxTQUFTLEVBTGlCLEVBQUE7QUFNMUIsTUFBQTtBQU4wQixLQUFyQixDQUFQO0FBUUQ7O0FBRUQsRUFBQSxnQkFBZ0IsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBdUQ7QUFDckUsV0FBTyxJQUFBLFlBQUEsQ0FBaUI7QUFDdEIsTUFBQSxXQUFXLEVBRFcsS0FBQTtBQUV0QixNQUFBLEtBQUssRUFGaUIsRUFBQTtBQUd0QixNQUFBLGFB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QUEsR0FBQSxFQUlSO0FBRWYsUUFBSSxLQUFLLEdBQUcsS0FBQSxPQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsRUFBQSxRQUFBLEVBQVosR0FBWSxDQUFaO0FBQ0EsUUFBSSxVQUFVLEdBQUcsS0FBQSxPQUFBLENBQUEsVUFBQSxDQUF3QixtQkFBQSxTQUFBLENBQXhCLFNBQXdCLENBQXhCLEVBQUEsS0FBQSxFQUhGLEdBR0UsQ0FBakIsQ0FIZSxDQUd5RTs7QUFFeEYsV0FBTyxJQUFJLEtBQUssQ0FBVCxlQUFBLENBQ0wsa0JBQ0U7QUFBQSxNQUFBLEdBQUE7QUFBQSxNQUFBLE1BQUE7QUFHRSxNQUFBLE1BQU0sRUFBRSxLQUFBLE9BQUEsQ0FBQSxXQUFBLENBQXlCLENBQXpCLFVBQXlCLENBQXpCLEVBQXVDLFVBQVUsQ0FBakQsR0FBQTtBQUhWLEtBREYsRUFNRSxLQVBKLElBQ0UsQ0FESyxDQUFQO0FBVUQ7O0FBRUQsRUFBQSx3QkFBd0IsQ0FBQSxNQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFHUDtBQUVmLFdBQU8sSUFBSSxLQUFLLENBQVQsZUFBQSxDQUNMLGtCQUNFO0FBQUEsTUFBQSxHQUFBO0FBQUEsTUFBQSxNQUFBO0FBR0UsTUFBQSxNQUFNLEVBQUUsS0FBQSxPQUFBLENBQUEsV0FBQSxDQUFBLE1BQUEsRUFBaUMsbUJBQUEsS0FBQSxDQUFqQyxNQUFpQyxDQUFqQztBQUhWLEtBREYsRUFNRSxLQVBKLElBQ0UsQ0FESyxDQUFQO0FBVUQ7O0FBdkZzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJlc2VudEFycmF5IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGFzc2VydFByZXNlbnQsIGFzc2lnbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBTb3VyY2VTbGljZSB9IGZyb20gJy4uL3NvdXJjZS9zbGljZSc7XG5pbXBvcnQgeyBTb3VyY2VTcGFuIH0gZnJvbSAnLi4vc291cmNlL3NwYW4nO1xuaW1wb3J0IHsgU3Bhbkxpc3QgfSBmcm9tICcuLi9zb3VyY2Uvc3Bhbi1saXN0JztcbmltcG9ydCB7IEJsb2NrU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgU3ltYm9sVGFibGUgfSBmcm9tICcuLi9zeW1ib2wtdGFibGUnO1xuaW1wb3J0ICogYXMgQVNUdjIgZnJvbSAnLi9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxQYXJ0cyB7XG4gIGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGU7XG4gIGFyZ3M6IEFTVHYyLkFyZ3M7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcbiAgLy8gVEVNUExBVEUgLy9cblxuICB0ZW1wbGF0ZShcbiAgICBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUsXG4gICAgYm9keTogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGVtcGxhdGUoe1xuICAgICAgdGFibGU6IHN5bWJvbHMsXG4gICAgICBib2R5LFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSU5URVJOQUwgKHRoZXNlIG5vZGVzIGNhbm5vdCBiZSByZWFjaGVkIHdoZW4gZG9pbmcgZ2VuZXJhbC1wdXJwb3NlIHZpc2l0aW5nKSAvL1xuXG4gIGJsb2NrKHN5bWJvbHM6IEJsb2NrU3ltYm9sVGFibGUsIGJvZHk6IEFTVHYyLkNvbnRlbnROb2RlW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkJsb2NrKHtcbiAgICAgIHNjb3BlOiBzeW1ib2xzLFxuICAgICAgYm9keSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5OYW1lZEJsb2NrKHtcbiAgICAgIG5hbWUsXG4gICAgICBibG9jayxcbiAgICAgIGF0dHJzOiBbXSxcbiAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgbW9kaWZpZXJzOiBbXSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIHNpbXBsZU5hbWVkQmxvY2sobmFtZTogU291cmNlU2xpY2UsIGJsb2NrOiBBU1R2Mi5CbG9jaywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZEVsZW1lbnQoe1xuICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgYXR0cnM6IFtdLFxuICAgICAgY29tcG9uZW50QXJnczogW10sXG4gICAgICBtb2RpZmllcnM6IFtdLFxuICAgICAgY29tbWVudHM6IFtdLFxuICAgIH0pLm5hbWVkKG5hbWUsIGJsb2NrLCBsb2MpO1xuICB9XG5cbiAgc2xpY2UoY2hhcnM6IHN0cmluZywgbG9jOiBTb3VyY2VTcGFuKTogU291cmNlU2xpY2Uge1xuICAgIHJldHVybiBuZXcgU291cmNlU2xpY2Uoe1xuICAgICAgbG9jLFxuICAgICAgY2hhcnMsXG4gICAgfSk7XG4gIH1cblxuICBhcmdzKFxuICAgIHBvc2l0aW9uYWw6IEFTVHYyLlBvc2l0aW9uYWxBcmd1bWVudHMsXG4gICAgbmFtZWQ6IEFTVHYyLk5hbWVkQXJndW1lbnRzLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5BcmdzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkFyZ3Moe1xuICAgICAgbG9jLFxuICAgICAgcG9zaXRpb25hbCxcbiAgICAgIG5hbWVkLFxuICAgIH0pO1xuICB9XG5cbiAgcG9zaXRpb25hbChleHByczogQVNUdjIuRXhwcmVzc2lvbk5vZGVbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGV4cHJzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRBcmd1bWVudChrZXk6IFNvdXJjZVNsaWNlLCB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBBU1R2Mi5OYW1lZEFyZ3VtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnQoe1xuICAgICAgbmFtZToga2V5LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBuYW1lZChlbnRyaWVzOiBBU1R2Mi5OYW1lZEFyZ3VtZW50W10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQXJndW1lbnRzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQXJndW1lbnRzKHtcbiAgICAgIGxvYyxcbiAgICAgIGVudHJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBhdHRyKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSHRtbEF0dHIge1xuICAgIHJldHVybiBuZXcgQVNUdjIuSHRtbEF0dHIoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgfSk7XG4gIH1cblxuICBzcGxhdEF0dHIoc3ltYm9sOiBudW1iZXIsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLlNwbGF0QXR0ciB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5TcGxhdEF0dHIoe1xuICAgICAgc3ltYm9sLFxuICAgICAgbG9jLFxuICAgIH0pO1xuICB9XG5cbiAgYXJnKFxuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRydXN0aW5nLFxuICAgIH06IHsgbmFtZTogU291cmNlU2xpY2U7IHZhbHVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgdHJ1c3Rpbmc6IGJvb2xlYW4gfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQ29tcG9uZW50QXJnIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNvbXBvbmVudEFyZyh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICB0cnVzdGluZyxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVYUFJFU1NJT05TIC8vXG5cbiAgcGF0aChoZWFkOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSwgdGFpbDogU291cmNlU2xpY2VbXSwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuUGF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuUGF0aEV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcmVmOiBoZWFkLFxuICAgICAgdGFpbCxcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGYobG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuVmFyaWFibGVSZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgQVNUdjIuVGhpc1JlZmVyZW5jZSh7XG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBhdChuYW1lOiBzdHJpbmcsIHN5bWJvbDogbnVtYmVyLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgLy8gdGhlIGBAYCBzaG91bGQgYmUgaW5jbHVkZWQgc28gd2UgaGF2ZSBhIGNvbXBsZXRlIHNvdXJjZSByYW5nZVxuICAgIGFzc2VydChuYW1lWzBdID09PSAnQCcsIGBjYWxsIGJ1aWxkZXJzLmF0KCkgd2l0aCBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICdAJ2ApO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcmdSZWZlcmVuY2Uoe1xuICAgICAgbG9jLFxuICAgICAgbmFtZTogbmV3IFNvdXJjZVNsaWNlKHsgbG9jLCBjaGFyczogbmFtZSB9KSxcbiAgICAgIHN5bWJvbCxcbiAgICB9KTtcbiAgfVxuXG4gIGZyZWVWYXIoe1xuICAgIG5hbWUsXG4gICAgY29udGV4dCxcbiAgICBzeW1ib2wsXG4gICAgbG9jLFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbnRleHQ6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uO1xuICAgIHN5bWJvbDogbnVtYmVyO1xuICAgIGxvYzogU291cmNlU3BhbjtcbiAgfSk6IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uge1xuICAgIGFzc2VydChcbiAgICAgIG5hbWUgIT09ICd0aGlzJyxcbiAgICAgIGBZb3UgY2FsbGVkIGJ1aWxkZXJzLmZyZWVWYXIoKSB3aXRoICd0aGlzJy4gQ2FsbCBidWlsZGVycy50aGlzIGluc3RlYWRgXG4gICAgKTtcbiAgICBhc3NlcnQoXG4gICAgICBuYW1lWzBdICE9PSAnQCcsXG4gICAgICBgWW91IGNhbGxlZCBidWlsZGVycy5mcmVlVmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2Uoe1xuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdXRpb246IGNvbnRleHQsXG4gICAgICBzeW1ib2wsXG4gICAgICBsb2MsXG4gICAgfSk7XG4gIH1cblxuICBsb2NhbFZhcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3ltYm9sOiBudW1iZXIsXG4gICAgaXNUZW1wbGF0ZUxvY2FsOiBib29sZWFuLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgYXNzZXJ0KG5hbWUgIT09ICd0aGlzJywgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAndGhpcycuIENhbGwgYnVpbGRlcnMudGhpcyBpbnN0ZWFkYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgbmFtZVswXSAhPT0gJ0AnLFxuICAgICAgYFlvdSBjYWxsZWQgYnVpbGRlcnMudmFyKCkgd2l0aCAnJHtuYW1lfScuIENhbGwgYnVpbGRlcnMuYXQoJyR7bmFtZX0nKSBpbnN0ZWFkYFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKHtcbiAgICAgIGxvYyxcbiAgICAgIG5hbWUsXG4gICAgICBpc1RlbXBsYXRlTG9jYWwsXG4gICAgICBzeW1ib2wsXG4gICAgfSk7XG4gIH1cblxuICBzZXhwKHBhcnRzOiBDYWxsUGFydHMsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkNhbGxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkNhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGNhbGxlZTogcGFydHMuY2FsbGVlLFxuICAgICAgYXJnczogcGFydHMuYXJncyxcbiAgICB9KTtcbiAgfVxuXG4gIGRlcHJlY2F0ZWRDYWxsKFxuICAgIGFyZzogU291cmNlU2xpY2UsXG4gICAgY2FsbGVlOiBBU1R2Mi5GcmVlVmFyUmVmZXJlbmNlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIGFyZyxcbiAgICAgIGNhbGxlZSxcbiAgICB9KTtcbiAgfVxuXG4gIGludGVycG9sYXRlKHBhcnRzOiBBU1R2Mi5FeHByZXNzaW9uTm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24ge1xuICAgIGFzc2VydFByZXNlbnQocGFydHMpO1xuXG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24oe1xuICAgICAgbG9jLFxuICAgICAgcGFydHMsXG4gICAgfSk7XG4gIH1cblxuICBsaXRlcmFsKHZhbHVlOiBzdHJpbmcsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogc3RyaW5nIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bWJlciwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBudW1iZXIgfTtcbiAgbGl0ZXJhbCh2YWx1ZTogYm9vbGVhbiwgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBib29sZWFuIH07XG4gIGxpdGVyYWwodmFsdWU6IG51bGwsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogbnVsbCB9O1xuICBsaXRlcmFsKHZhbHVlOiB1bmRlZmluZWQsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uICYgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIGxpdGVyYWwoXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbjtcbiAgbGl0ZXJhbChcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jOiBTb3VyY2VTcGFuXG4gICk6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKHtcbiAgICAgIGxvYyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RBVEVNRU5UUyAvL1xuXG4gIGFwcGVuZChcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRydXN0aW5nLFxuICAgICAgdmFsdWUsXG4gICAgfTogeyB0YWJsZTogU3ltYm9sVGFibGU7IHRydXN0aW5nOiBib29sZWFuOyB2YWx1ZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUgfSxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuQXBwZW5kQ29udGVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5BcHBlbmRDb250ZW50KHtcbiAgICAgIHRhYmxlLFxuICAgICAgdHJ1c3RpbmcsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxvYyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vZGlmaWVyKHsgY2FsbGVlLCBhcmdzIH06IENhbGxQYXJ0cywgbG9jOiBTb3VyY2VTcGFuKTogQVNUdjIuRWxlbWVudE1vZGlmaWVyIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkVsZW1lbnRNb2RpZmllcih7XG4gICAgICBsb2MsXG4gICAgICBjYWxsZWUsXG4gICAgICBhcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgbmFtZWRCbG9ja3MoYmxvY2tzOiBBU1R2Mi5OYW1lZEJsb2NrW10sIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLk5hbWVkQmxvY2tzIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2tzKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrcyxcbiAgICB9KTtcbiAgfVxuXG4gIGJsb2NrU3RhdGVtZW50KFxuICAgIHtcbiAgICAgIHN5bWJvbHMsXG4gICAgICBwcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IG51bGwsXG4gICAgICAuLi5jYWxsXG4gICAgfToge1xuICAgICAgc3ltYm9sczogU3ltYm9sVGFibGU7XG4gICAgICBwcm9ncmFtOiBBU1R2Mi5CbG9jaztcbiAgICAgIGludmVyc2U/OiBBU1R2Mi5CbG9jayB8IG51bGw7XG4gICAgfSAmIENhbGxQYXJ0cyxcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQmxvY2sge1xuICAgIGxldCBibG9ja3NMb2MgPSBwcm9ncmFtLmxvYztcbiAgICBsZXQgYmxvY2tzOiBQcmVzZW50QXJyYXk8QVNUdjIuTmFtZWRCbG9jaz4gPSBbXG4gICAgICB0aGlzLm5hbWVkQmxvY2soU291cmNlU2xpY2Uuc3ludGhldGljKCdkZWZhdWx0JyksIHByb2dyYW0sIHByb2dyYW0ubG9jKSxcbiAgICBdO1xuICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICBibG9ja3NMb2MgPSBibG9ja3NMb2MuZXh0ZW5kKGludmVyc2UubG9jKTtcbiAgICAgIGJsb2Nrcy5wdXNoKHRoaXMubmFtZWRCbG9jayhTb3VyY2VTbGljZS5zeW50aGV0aWMoJ2Vsc2UnKSwgaW52ZXJzZSwgaW52ZXJzZS5sb2MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUJsb2NrKHtcbiAgICAgIGxvYyxcbiAgICAgIGJsb2NrczogdGhpcy5uYW1lZEJsb2NrcyhibG9ja3MsIGJsb2Nrc0xvYyksXG4gICAgICBjYWxsZWU6IGNhbGwuY2FsbGVlLFxuICAgICAgYXJnczogY2FsbC5hcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgZWxlbWVudChvcHRpb25zOiBCdWlsZEJhc2VFbGVtZW50KTogQnVpbGRFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkRWxlbWVudChvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQmFzZUVsZW1lbnQge1xuICBzZWxmQ2xvc2luZzogYm9vbGVhbjtcbiAgYXR0cnM6IEFTVHYyLkh0bWxPclNwbGF0QXR0cltdO1xuICBjb21wb25lbnRBcmdzOiBBU1R2Mi5Db21wb25lbnRBcmdbXTtcbiAgbW9kaWZpZXJzOiBBU1R2Mi5FbGVtZW50TW9kaWZpZXJbXTtcbiAgY29tbWVudHM6IEFTVHYyLkdsaW1tZXJDb21tZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEVsZW1lbnQge1xuICByZWFkb25seSBidWlsZGVyOiBCdWlsZGVyO1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBiYXNlOiBCdWlsZEJhc2VFbGVtZW50KSB7XG4gICAgdGhpcy5idWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgfVxuXG4gIHNpbXBsZSh0YWc6IFNvdXJjZVNsaWNlLCBib2R5OiBBU1R2Mi5Db250ZW50Tm9kZVtdLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5TaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLlNpbXBsZUVsZW1lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb21wb25lbnRBcmdzOiBbXSxcbiAgICAgICAgICBsb2MsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuYW1lZChuYW1lOiBTb3VyY2VTbGljZSwgYmxvY2s6IEFTVHYyLkJsb2NrLCBsb2M6IFNvdXJjZVNwYW4pOiBBU1R2Mi5OYW1lZEJsb2NrIHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLk5hbWVkQmxvY2soXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgIGNvbXBvbmVudEFyZ3M6IFtdLFxuICAgICAgICAgIGxvYyxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNlbGZDbG9zaW5nQ29tcG9uZW50KGNhbGxlZTogQVNUdjIuRXhwcmVzc2lvbk5vZGUsIGxvYzogU291cmNlU3Bhbik6IEFTVHYyLkludm9rZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIG5ldyBBU1R2Mi5JbnZva2VDb21wb25lbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBsb2MsXG4gICAgICAgICAgY2FsbGVlLFxuICAgICAgICAgIC8vIHBvaW50IHRoZSBlbXB0eSBuYW1lZCBibG9ja3MgYXQgdGhlIGAvYCBzZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgYmxvY2tzOiBuZXcgQVNUdjIuTmFtZWRCbG9ja3Moe1xuICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIGxvYzogbG9jLnNsaWNlRW5kQ2hhcnMoeyBza2lwRW5kOiAxLCBjaGFyczogMSB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpdGhEZWZhdWx0QmxvY2soXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBjaGlsZHJlbjogQVNUdjIuQ29udGVudE5vZGVbXSxcbiAgICBzeW1ib2xzOiBCbG9ja1N5bWJvbFRhYmxlLFxuICAgIGxvYzogU291cmNlU3BhblxuICApOiBBU1R2Mi5JbnZva2VDb21wb25lbnQge1xuICAgIGxldCBibG9jayA9IHRoaXMuYnVpbGRlci5ibG9jayhzeW1ib2xzLCBjaGlsZHJlbiwgbG9jKTtcbiAgICBsZXQgbmFtZWRCbG9jayA9IHRoaXMuYnVpbGRlci5uYW1lZEJsb2NrKFNvdXJjZVNsaWNlLnN5bnRoZXRpYygnZGVmYXVsdCcpLCBibG9jaywgbG9jKTsgLy8gQlVJTERFUi5zaW1wbGVOYW1lZEJsb2NrKCdkZWZhdWx0JywgY2hpbGRyZW4sIHN5bWJvbHMsIGxvYyk7XG5cbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoW25hbWVkQmxvY2tdLCBuYW1lZEJsb2NrLmxvYyksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuYmFzZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZWRCbG9ja3MoXG4gICAgY2FsbGVlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSxcbiAgICBibG9ja3M6IFByZXNlbnRBcnJheTxBU1R2Mi5OYW1lZEJsb2NrPixcbiAgICBsb2M6IFNvdXJjZVNwYW5cbiAgKTogQVNUdjIuSW52b2tlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gbmV3IEFTVHYyLkludm9rZUNvbXBvbmVudChcbiAgICAgIGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGxvYyxcbiAgICAgICAgICBjYWxsZWUsXG4gICAgICAgICAgYmxvY2tzOiB0aGlzLmJ1aWxkZXIubmFtZWRCbG9ja3MoYmxvY2tzLCBTcGFuTGlzdC5yYW5nZShibG9ja3MpKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5iYXNlXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|