ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
236 lines (230 loc) • 22.5 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,
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;
let parts = original.split('.');
let thisHead = false;
if (parts[0] === 'this') {
thisHead = true;
parts = parts.slice(1);
}
return {
type: "PathExpression",
original,
this: thisHead,
parts,
data: false,
loc: buildLoc(loc || null)
};
}
function buildLiteral(type, value, loc) {
return {
type,
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,
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,
column
};
}
const SYNTHETIC = exports.SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } };
function buildLoc(...args) {
if (args.length === 1) {
let 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 {
let [startLine, startColumn, endLine, endColumn, source] = args;
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() {
return buildLiteral('UndefinedLiteral', undefined);
},
null() {
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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cG9ydCAqIGFzIEFTVCBmcm9tICcuL3R5cGVzL25vZGVzJztcbmZ1bmN0aW9uIGJ1aWxkTXVzdGFjaGUocGF0aCwgcGFyYW1zLCBoYXNoLCByYXcsIGxvYykge1xuICAgIGlmICghQVNULmlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgICBwYXRoID0gYnVpbGRQYXRoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIk11c3RhY2hlU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGVzY2FwZWQ6ICFyYXcsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQmxvY2socGF0aCwgcGFyYW1zLCBoYXNoLCBwcm9ncmFtLCBpbnZlcnNlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgcHJvZ3JhbTogcHJvZ3JhbSB8fCBudWxsLFxuICAgICAgICBpbnZlcnNlOiBpbnZlcnNlIHx8IG51bGwsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudE1vZGlmaWVyKHBhdGgsIHBhcmFtcywgaGFzaCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJFbGVtZW50TW9kaWZpZXJTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhcnRpYWwobmFtZSwgcGFyYW1zLCBoYXNoLCBpbmRlbnQsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUGFydGlhbFN0YXRlbWVudFwiLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBpbmRlbnQ6IGluZGVudCB8fCAnJyxcbiAgICAgICAgc3RyaXA6IHsgb3BlbjogZmFsc2UsIGNsb3NlOiBmYWxzZSB9LFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZENvbW1lbnQodmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQ29tbWVudFN0YXRlbWVudFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTXVzdGFjaGVDb21tZW50KHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIk11c3RhY2hlQ29tbWVudFN0YXRlbWVudFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ29uY2F0KHBhcnRzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbmNhdFN0YXRlbWVudFwiLFxuICAgICAgICBwYXJ0czogcGFydHMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudCh0YWcsIGF0dHJpYnV0ZXMsIG1vZGlmaWVycywgY2hpbGRyZW4sIGNvbW1lbnRzLCBsb2MpIHtcbiAgICAvLyB0aGlzIGlzIHVzZWQgZm9yIGJhY2t3YXJkcyBjb21wYXQgcHJpb3IgdG8gYGNvbW1lbnRzYCBiZWluZyBhZGRlZCB0byB0aGUgQVNUXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1lbnRzKSkge1xuICAgICAgICBsb2MgPSBjb21tZW50cztcbiAgICAgICAgY29tbWVudHMgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJFbGVtZW50Tm9kZVwiLFxuICAgICAgICB0YWc6IHRhZyB8fCBcIlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzIHx8IFtdLFxuICAgICAgICBibG9ja1BhcmFtczogW10sXG4gICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzIHx8IFtdLFxuICAgICAgICBjb21tZW50czogY29tbWVudHMgfHwgW10sXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRBdHRyKG5hbWUsIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkF0dHJOb2RlXCIsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRUZXh0KGNoYXJzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlRleHROb2RlXCIsXG4gICAgICAgIGNoYXJzOiBjaGFycyB8fCBcIlwiLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG4vLyBFeHByZXNzaW9uc1xuZnVuY3Rpb24gYnVpbGRTZXhwcihwYXRoLCBwYXJhbXMsIGhhc2gsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiU3ViRXhwcmVzc2lvblwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGF0aChvcmlnaW5hbCwgbG9jKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gJ3N0cmluZycpIHJldHVybiBvcmlnaW5hbDtcbiAgICBsZXQgcGFydHMgPSBvcmlnaW5hbC5zcGxpdCgnLicpO1xuICAgIGxldCB0aGlzSGVhZCA9IGZhbHNlO1xuICAgIGlmIChwYXJ0c1swXSA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHRoaXNIZWFkID0gdHJ1ZTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQYXRoRXhwcmVzc2lvblwiLFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgdGhpczogdGhpc0hlYWQsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRMaXRlcmFsKHR5cGUsIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWw6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG4vLyBNaXNjZWxsYW5lb3VzXG5mdW5jdGlvbiBidWlsZEhhc2gocGFpcnMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSGFzaFwiLFxuICAgICAgICBwYWlyczogcGFpcnMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGFpcihrZXksIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkhhc2hQYWlyXCIsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQcm9ncmFtKGJvZHksIGJsb2NrUGFyYW1zLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlByb2dyYW1cIixcbiAgICAgICAgYm9keTogYm9keSB8fCBbXSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IGJsb2NrUGFyYW1zIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFNvdXJjZShzb3VyY2UpIHtcbiAgICByZXR1cm4gc291cmNlIHx8IG51bGw7XG59XG5mdW5jdGlvbiBidWlsZFBvc2l0aW9uKGxpbmUsIGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtblxuICAgIH07XG59XG5leHBvcnQgY29uc3QgU1lOVEhFVElDID0geyBzb3VyY2U6ICcoc3ludGhldGljKScsIHN0YXJ0OiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9LCBlbmQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbmZ1bmN0aW9uIGJ1aWxkTG9jKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgbGV0IGxvYyA9IGFyZ3NbMF07XG4gICAgICAgIGlmIChsb2MgJiYgdHlwZW9mIGxvYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBidWlsZFNvdXJjZShsb2Muc291cmNlKSxcbiAgICAgICAgICAgICAgICBzdGFydDogYnVpbGRQb3NpdGlvbihsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiksXG4gICAgICAgICAgICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGxvYy5lbmQubGluZSwgbG9jLmVuZC5jb2x1bW4pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFNZTlRIRVRJQztcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBbc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uLCBzb3VyY2VdID0gYXJncztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2Uoc291cmNlKSxcbiAgICAgICAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pLFxuICAgICAgICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGVuZExpbmUsIGVuZENvbHVtbilcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbXVzdGFjaGU6IGJ1aWxkTXVzdGFjaGUsXG4gICAgYmxvY2s6IGJ1aWxkQmxvY2ssXG4gICAgcGFydGlhbDogYnVpbGRQYXJ0aWFsLFxuICAgIGNvbW1lbnQ6IGJ1aWxkQ29tbWVudCxcbiAgICBtdXN0YWNoZUNvbW1lbnQ6IGJ1aWxkTXVzdGFjaGVDb21tZW50LFxuICAgIGVsZW1lbnQ6IGJ1aWxkRWxlbWVudCxcbiAgICBlbGVtZW50TW9kaWZpZXI6IGJ1aWxkRWxlbWVudE1vZGlmaWVyLFxuICAgIGF0dHI6IGJ1aWxkQXR0cixcbiAgICB0ZXh0OiBidWlsZFRleHQsXG4gICAgc2V4cHI6IGJ1aWxkU2V4cHIsXG4gICAgcGF0aDogYnVpbGRQYXRoLFxuICAgIGNvbmNhdDogYnVpbGRDb25jYXQsXG4gICAgaGFzaDogYnVpbGRIYXNoLFxuICAgIHBhaXI6IGJ1aWxkUGFpcixcbiAgICBsaXRlcmFsOiBidWlsZExpdGVyYWwsXG4gICAgcHJvZ3JhbTogYnVpbGRQcm9ncmFtLFxuICAgIGxvYzogYnVpbGRMb2MsXG4gICAgcG9zOiBidWlsZFBvc2l0aW9uLFxuICAgIHN0cmluZzogbGl0ZXJhbCgnU3RyaW5nTGl0ZXJhbCcpLFxuICAgIGJvb2xlYW46IGxpdGVyYWwoJ0Jvb2xlYW5MaXRlcmFsJyksXG4gICAgbnVtYmVyOiBsaXRlcmFsKCdOdW1iZXJMaXRlcmFsJyksXG4gICAgdW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKCdVbmRlZmluZWRMaXRlcmFsJywgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIG51bGwoKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwoJ051bGxMaXRlcmFsJywgbnVsbCk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGxpdGVyYWwodHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCh0eXBlLCB2YWx1ZSk7XG4gICAgfTtcbn0iXX0=