ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
245 lines (237 loc) • 22.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SYNTHETIC = undefined;
var _nodes = require("./types/nodes");
var AST = _interopRequireWildcard(_nodes);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function buildMustache(path, params, hash, raw, loc) {
if (!AST.isLiteral(path)) {
path = buildPath(path);
}
return {
type: "MustacheStatement",
path: path,
params: params || [],
hash: hash || buildHash([]),
escaped: !raw,
loc: buildLoc(loc || null)
};
}
function buildBlock(path, params, hash, program, inverse, loc) {
return {
type: "BlockStatement",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
program: program || null,
inverse: inverse || null,
loc: buildLoc(loc || null)
};
}
function buildElementModifier(path, params, hash, loc) {
return {
type: "ElementModifierStatement",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
loc: buildLoc(loc || null)
};
}
function buildPartial(name, params, hash, indent, loc) {
return {
type: "PartialStatement",
name: name,
params: params || [],
hash: hash || buildHash([]),
indent: indent || '',
strip: { open: false, close: false },
loc: buildLoc(loc || null)
};
}
function buildComment(value, loc) {
return {
type: "CommentStatement",
value: value,
loc: buildLoc(loc || null)
};
}
function buildMustacheComment(value, loc) {
return {
type: "MustacheCommentStatement",
value: value,
loc: buildLoc(loc || null)
};
}
function buildConcat(parts, loc) {
return {
type: "ConcatStatement",
parts: parts || [],
loc: buildLoc(loc || null)
};
}
function buildElement(tag, attributes, modifiers, children, comments, loc) {
// this is used for backwards compat prior to `comments` being added to the AST
if (!Array.isArray(comments)) {
loc = comments;
comments = [];
}
return {
type: "ElementNode",
tag: tag || "",
attributes: attributes || [],
blockParams: [],
modifiers: modifiers || [],
comments: comments || [],
children: children || [],
loc: buildLoc(loc || null)
};
}
function buildAttr(name, value, loc) {
return {
type: "AttrNode",
name: name,
value: value,
loc: buildLoc(loc || null)
};
}
function buildText(chars, loc) {
return {
type: "TextNode",
chars: chars || "",
loc: buildLoc(loc || null)
};
}
// Expressions
function buildSexpr(path, params, hash, loc) {
return {
type: "SubExpression",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
loc: buildLoc(loc || null)
};
}
function buildPath(original, loc) {
if (typeof original !== 'string') return original;
var parts = original.split('.');
var thisHead = false;
if (parts[0] === 'this') {
thisHead = true;
parts = parts.slice(1);
}
return {
type: "PathExpression",
original: original,
this: thisHead,
parts: parts,
data: false,
loc: buildLoc(loc || null)
};
}
function buildLiteral(type, value, loc) {
return {
type: type,
value: value,
original: value,
loc: buildLoc(loc || null)
};
}
// Miscellaneous
function buildHash(pairs, loc) {
return {
type: "Hash",
pairs: pairs || [],
loc: buildLoc(loc || null)
};
}
function buildPair(key, value, loc) {
return {
type: "HashPair",
key: key,
value: value,
loc: buildLoc(loc || null)
};
}
function buildProgram(body, blockParams, loc) {
return {
type: "Program",
body: body || [],
blockParams: blockParams || [],
loc: buildLoc(loc || null)
};
}
function buildSource(source) {
return source || null;
}
function buildPosition(line, column) {
return {
line: line,
column: column
};
}
var SYNTHETIC = exports.SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } };
function buildLoc() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 1) {
var loc = args[0];
if (loc && typeof loc === 'object') {
return {
source: buildSource(loc.source),
start: buildPosition(loc.start.line, loc.start.column),
end: buildPosition(loc.end.line, loc.end.column)
};
} else {
return SYNTHETIC;
}
} else {
var startLine = args[0],
startColumn = args[1],
endLine = args[2],
endColumn = args[3],
source = args[4];
return {
source: buildSource(source),
start: buildPosition(startLine, startColumn),
end: buildPosition(endLine, endColumn)
};
}
}
exports.default = {
mustache: buildMustache,
block: buildBlock,
partial: buildPartial,
comment: buildComment,
mustacheComment: buildMustacheComment,
element: buildElement,
elementModifier: buildElementModifier,
attr: buildAttr,
text: buildText,
sexpr: buildSexpr,
path: buildPath,
concat: buildConcat,
hash: buildHash,
pair: buildPair,
literal: buildLiteral,
program: buildProgram,
loc: buildLoc,
pos: buildPosition,
string: literal('StringLiteral'),
boolean: literal('BooleanLiteral'),
number: literal('NumberLiteral'),
undefined: function () {
return buildLiteral('UndefinedLiteral', undefined);
},
null: function () {
return buildLiteral('NullLiteral', null);
}
};
function literal(type) {
return function (value) {
return buildLiteral(type, value);
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9idWlsZGVycy5qcyJdLCJuYW1lcyI6WyJBU1QiLCJidWlsZE11c3RhY2hlIiwicGF0aCIsInBhcmFtcyIsImhhc2giLCJyYXciLCJsb2MiLCJpc0xpdGVyYWwiLCJidWlsZFBhdGgiLCJ0eXBlIiwiYnVpbGRIYXNoIiwiZXNjYXBlZCIsImJ1aWxkTG9jIiwiYnVpbGRCbG9jayIsInByb2dyYW0iLCJpbnZlcnNlIiwiYnVpbGRFbGVtZW50TW9kaWZpZXIiLCJidWlsZFBhcnRpYWwiLCJuYW1lIiwiaW5kZW50Iiwic3RyaXAiLCJvcGVuIiwiY2xvc2UiLCJidWlsZENvbW1lbnQiLCJ2YWx1ZSIsImJ1aWxkTXVzdGFjaGVDb21tZW50IiwiYnVpbGRDb25jYXQiLCJwYXJ0cyIsImJ1aWxkRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiIsImNvbW1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmxvY2tQYXJhbXMiLCJidWlsZEF0dHIiLCJidWlsZFRleHQiLCJjaGFycyIsImJ1aWxkU2V4cHIiLCJvcmlnaW5hbCIsInNwbGl0IiwidGhpc0hlYWQiLCJzbGljZSIsInRoaXMiLCJkYXRhIiwiYnVpbGRMaXRlcmFsIiwicGFpcnMiLCJidWlsZFBhaXIiLCJrZXkiLCJidWlsZFByb2dyYW0iLCJib2R5IiwiYnVpbGRTb3VyY2UiLCJzb3VyY2UiLCJidWlsZFBvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIlNZTlRIRVRJQyIsInN0YXJ0IiwiZW5kIiwiYXJncyIsImxlbmd0aCIsInN0YXJ0TGluZSIsInN0YXJ0Q29sdW1uIiwiZW5kTGluZSIsImVuZENvbHVtbiIsIm11c3RhY2hlIiwiYmxvY2siLCJwYXJ0aWFsIiwiY29tbWVudCIsIm11c3RhY2hlQ29tbWVudCIsImVsZW1lbnQiLCJlbGVtZW50TW9kaWZpZXIiLCJhdHRyIiwidGV4dCIsInNleHByIiwiY29uY2F0IiwicGFpciIsImxpdGVyYWwiLCJwb3MiLCJzdHJp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LEFBTUYsQUFDVDtxQkFQVyxBQU9NLEFBQ2pCO1VBUlcsQUFRTCxBQUNOO1VBVFcsQUFTTCxBQUNOO1dBVlcsQUFVSixBQUNQO1VBWFcsQUFXTCxBQUNOO1lBWlcsQUFZSCxBQUNSO1VBYlcsQUFhTCxBQUNOO1VBZFcsQUFjTCxBQUNOO2FBZlcsQUFlRixBQUNUO2FBaEJXLEFBZ0JGLEFBQ1Q7U0FqQlcsQUFpQk4sQUFDTDtTQWxCVyxBQWtCTixBQUNMO1lBQVEsUUFuQkcsQUFtQkgsQUFBUSxBQUNoQjthQUFTLFFBcEJFLEFBb0JGLEFBQVEsQUFDakI7WUFBUSxRQXJCRyxBQXFCSCxBQUFRLEFBQ2hCO0FBdEJXLDJCQXNCQyxBQUNSO2VBQU8sYUFBQSxBQUFhLG9CQUFwQixBQUFPLEFBQWlDLEFBQzNDO0FBeEJVLEFBeUJYO0FBekJXLHNCQXlCSixBQUNIO2VBQU8sYUFBQSxBQUFhLGVBQXBCLEFBQU8sQUFBNEIsQUFDdEM7QUEzQkwsQUFBZTtBQUFBLEFBQ1g7O0FBNEJKLFNBQUEsQUFBUyxRQUFULEFBQWlCLE1BQU0sQUFDbkI7V0FBTyxVQUFBLEFBQVUsT0FBTyxBQUNwQjtlQUFPLGFBQUEsQUFBYSxNQUFwQixBQUFPLEFBQW1CLEFBQzdCO0FBRkQsQUFHSCIsImZpbGUiOiJsaWIvYnVpbGRlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBU1QgZnJvbSAnLi90eXBlcy9ub2Rlcyc7XG5mdW5jdGlvbiBidWlsZE11c3RhY2hlKHBhdGgsIHBhcmFtcywgaGFzaCwgcmF3LCBsb2MpIHtcbiAgICBpZiAoIUFTVC5pc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgICAgcGF0aCA9IGJ1aWxkUGF0aChwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJNdXN0YWNoZVN0YXRlbWVudFwiLFxuICAgICAgICBwYXRoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBlc2NhcGVkOiAhcmF3LFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEJsb2NrKHBhdGgsIHBhcmFtcywgaGFzaCwgcHJvZ3JhbSwgaW52ZXJzZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJCbG9ja1N0YXRlbWVudFwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIHByb2dyYW06IHByb2dyYW0gfHwgbnVsbCxcbiAgICAgICAgaW52ZXJzZTogaW52ZXJzZSB8fCBudWxsLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEVsZW1lbnRNb2RpZmllcihwYXRoLCBwYXJhbXMsIGhhc2gsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYXJ0aWFsKG5hbWUsIHBhcmFtcywgaGFzaCwgaW5kZW50LCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlBhcnRpYWxTdGF0ZW1lbnRcIixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgaW5kZW50OiBpbmRlbnQgfHwgJycsXG4gICAgICAgIHN0cmlwOiB7IG9wZW46IGZhbHNlLCBjbG9zZTogZmFsc2UgfSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDb21tZW50KHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbW1lbnRTdGF0ZW1lbnRcIixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZE11c3RhY2hlQ29tbWVudCh2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnRcIixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZENvbmNhdChwYXJ0cywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJDb25jYXRTdGF0ZW1lbnRcIixcbiAgICAgICAgcGFydHM6IHBhcnRzIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEVsZW1lbnQodGFnLCBhdHRyaWJ1dGVzLCBtb2RpZmllcnMsIGNoaWxkcmVuLCBjb21tZW50cywgbG9jKSB7XG4gICAgLy8gdGhpcyBpcyB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0IHByaW9yIHRvIGBjb21tZW50c2AgYmVpbmcgYWRkZWQgdG8gdGhlIEFTVFxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21tZW50cykpIHtcbiAgICAgICAgbG9jID0gY29tbWVudHM7XG4gICAgICAgIGNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRWxlbWVudE5vZGVcIixcbiAgICAgICAgdGFnOiB0YWcgfHwgXCJcIixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IFtdLFxuICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycyB8fCBbXSxcbiAgICAgICAgY29tbWVudHM6IGNvbW1lbnRzIHx8IFtdLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4gfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQXR0cihuYW1lLCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJBdHRyTm9kZVwiLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkVGV4dChjaGFycywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJUZXh0Tm9kZVwiLFxuICAgICAgICBjaGFyczogY2hhcnMgfHwgXCJcIixcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuLy8gRXhwcmVzc2lvbnNcbmZ1bmN0aW9uIGJ1aWxkU2V4cHIocGF0aCwgcGFyYW1zLCBoYXNoLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlN1YkV4cHJlc3Npb25cIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhdGgob3JpZ2luYWwsIGxvYykge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdzdHJpbmcnKSByZXR1cm4gb3JpZ2luYWw7XG4gICAgbGV0IHBhcnRzID0gb3JpZ2luYWwuc3BsaXQoJy4nKTtcbiAgICBsZXQgdGhpc0hlYWQgPSBmYWxzZTtcbiAgICBpZiAocGFydHNbMF0gPT09ICd0aGlzJykge1xuICAgICAgICB0aGlzSGVhZCA9IHRydWU7XG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUGF0aEV4cHJlc3Npb25cIixcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIHRoaXM6IHRoaXNIZWFkLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTGl0ZXJhbCh0eXBlLCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9yaWdpbmFsOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuLy8gTWlzY2VsbGFuZW91c1xuZnVuY3Rpb24gYnVpbGRIYXNoKHBhaXJzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkhhc2hcIixcbiAgICAgICAgcGFpcnM6IHBhaXJzIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhaXIoa2V5LCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJIYXNoUGFpclwiLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShib2R5LCBibG9ja1BhcmFtcywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQcm9ncmFtXCIsXG4gICAgICAgIGJvZHk6IGJvZHkgfHwgW10sXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRTb3VyY2Uoc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSB8fCBudWxsO1xufVxuZnVuY3Rpb24gYnVpbGRQb3NpdGlvbihsaW5lLCBjb2x1bW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsaW5lLFxuICAgICAgICBjb2x1bW5cbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IFNZTlRIRVRJQyA9IHsgc291cmNlOiAnKHN5bnRoZXRpYyknLCBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSwgZW5kOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9IH07XG5mdW5jdGlvbiBidWlsZExvYyguLi5hcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGxldCBsb2MgPSBhcmdzWzBdO1xuICAgICAgICBpZiAobG9jICYmIHR5cGVvZiBsb2MgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2UobG9jLnNvdXJjZSksXG4gICAgICAgICAgICAgICAgc3RhcnQ6IGJ1aWxkUG9zaXRpb24obG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4pLFxuICAgICAgICAgICAgICAgIGVuZDogYnVpbGRQb3NpdGlvbihsb2MuZW5kLmxpbmUsIGxvYy5lbmQuY29sdW1uKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTWU5USEVUSUM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgW3N0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbiwgc291cmNlXSA9IGFyZ3M7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2U6IGJ1aWxkU291cmNlKHNvdXJjZSksXG4gICAgICAgICAgICBzdGFydDogYnVpbGRQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKSxcbiAgICAgICAgICAgIGVuZDogYnVpbGRQb3NpdGlvbihlbmRMaW5lLCBlbmRDb2x1bW4pXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG11c3RhY2hlOiBidWlsZE11c3RhY2hlLFxuICAgIGJsb2NrOiBidWlsZEJsb2NrLFxuICAgIHBhcnRpYWw6IGJ1aWxkUGFydGlhbCxcbiAgICBjb21tZW50OiBidWlsZENvbW1lbnQsXG4gICAgbXVzdGFjaGVDb21tZW50OiBidWlsZE11c3RhY2hlQ29tbWVudCxcbiAgICBlbGVtZW50OiBidWlsZEVsZW1lbnQsXG4gICAgZWxlbWVudE1vZGlmaWVyOiBidWlsZEVsZW1lbnRNb2RpZmllcixcbiAgICBhdHRyOiBidWlsZEF0dHIsXG4gICAgdGV4dDogYnVpbGRUZXh0LFxuICAgIHNleHByOiBidWlsZFNleHByLFxuICAgIHBhdGg6IGJ1aWxkUGF0aCxcbiAgICBjb25jYXQ6IGJ1aWxkQ29uY2F0LFxuICAgIGhhc2g6IGJ1aWxkSGFzaCxcbiAgICBwYWlyOiBidWlsZFBhaXIsXG4gICAgbGl0ZXJhbDogYnVpbGRMaXRlcmFsLFxuICAgIHByb2dyYW06IGJ1aWxkUHJvZ3JhbSxcbiAgICBsb2M6IGJ1aWxkTG9jLFxuICAgIHBvczogYnVpbGRQb3NpdGlvbixcbiAgICBzdHJpbmc6IGxpdGVyYWwoJ1N0cmluZ0xpdGVyYWwnKSxcbiAgICBib29sZWFuOiBsaXRlcmFsKCdCb29sZWFuTGl0ZXJhbCcpLFxuICAgIG51bWJlcjogbGl0ZXJhbCgnTnVtYmVyTGl0ZXJhbCcpLFxuICAgIHVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCgnVW5kZWZpbmVkTGl0ZXJhbCcsIHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBudWxsKCkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKCdOdWxsTGl0ZXJhbCcsIG51bGwpO1xuICAgIH1cbn07XG5mdW5jdGlvbiBsaXRlcmFsKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH07XG59Il19