ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
211 lines (206 loc) • 21.6 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = build;
var _nodes = require('../types/nodes');
var HBS = _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 unreachable() {
throw new Error('unreachable');
}
function build(ast) {
if (!ast) {
return '';
}
var output = [];
switch (ast.type) {
case 'Program':
{
var chainBlock = ast['chained'] && ast.body[0];
if (chainBlock) {
chainBlock['chained'] = true;
}
var body = buildEach(ast.body).join('');
output.push(body);
}
break;
case 'ElementNode':
output.push('<', ast.tag);
if (ast.attributes.length) {
output.push(' ', buildEach(ast.attributes).join(' '));
}
if (ast.modifiers.length) {
output.push(' ', buildEach(ast.modifiers).join(' '));
}
if (ast.comments.length) {
output.push(' ', buildEach(ast.comments).join(' '));
}
output.push('>');
output.push.apply(output, buildEach(ast.children));
output.push('</', ast.tag, '>');
break;
case 'AttrNode':
output.push(ast.name, '=');
var value = build(ast.value);
if (ast.value.type === 'TextNode') {
output.push('"', value, '"');
} else {
output.push(value);
}
break;
case 'ConcatStatement':
output.push('"');
ast.parts.forEach(function (node) {
if (node.type === 'StringLiteral') {
output.push(node.original);
} else {
output.push(build(node));
}
});
output.push('"');
break;
case 'TextNode':
output.push(ast.chars);
break;
case 'MustacheStatement':
{
output.push(compactJoin(['{{', pathParams(ast), '}}']));
}
break;
case 'MustacheCommentStatement':
{
output.push(compactJoin(['{{!--', ast.value, '--}}']));
}
break;
case 'ElementModifierStatement':
{
output.push(compactJoin(['{{', pathParams(ast), '}}']));
}
break;
case 'PathExpression':
output.push(ast.original);
break;
case 'SubExpression':
{
output.push('(', pathParams(ast), ')');
}
break;
case 'BooleanLiteral':
output.push(ast.value ? 'true' : 'false');
break;
case 'BlockStatement':
{
var lines = [];
if (ast['chained']) {
lines.push(['{{else ', pathParams(ast), '}}'].join(''));
} else {
lines.push(openBlock(ast));
}
lines.push(build(ast.program));
if (ast.inverse) {
if (!ast.inverse['chained']) {
lines.push('{{else}}');
}
lines.push(build(ast.inverse));
}
if (!ast['chained']) {
lines.push(closeBlock(ast));
}
output.push(lines.join(''));
}
break;
case 'PartialStatement':
{
output.push(compactJoin(['{{>', pathParams(ast), '}}']));
}
break;
case 'CommentStatement':
{
output.push(compactJoin(['<!--', ast.value, '-->']));
}
break;
case 'StringLiteral':
{
output.push('"' + ast.value + '"');
}
break;
case 'NumberLiteral':
{
output.push(String(ast.value));
}
break;
case 'UndefinedLiteral':
{
output.push('undefined');
}
break;
case 'NullLiteral':
{
output.push('null');
}
break;
case 'Hash':
{
output.push(ast.pairs.map(function (pair) {
return build(pair);
}).join(' '));
}
break;
case 'HashPair':
{
output.push(ast.key + '=' + build(ast.value));
}
break;
}
return output.join('');
}
function compact(array) {
var newArray = [];
array.forEach(function (a) {
if (typeof a !== 'undefined' && a !== null && a !== '') {
newArray.push(a);
}
});
return newArray;
}
function buildEach(asts) {
return asts.map(build);
}
function pathParams(ast) {
var path = void 0;
switch (ast.type) {
case 'MustacheStatement':
case 'SubExpression':
case 'ElementModifierStatement':
case 'BlockStatement':
if (HBS.isLiteral(ast.path)) {
return String(ast.path.value);
}
path = build(ast.path);
break;
case 'PartialStatement':
path = build(ast.name);
break;
default:
return unreachable();
}
return compactJoin([path, buildEach(ast.params).join(' '), build(ast.hash)], ' ');
}
function compactJoin(array, delimiter) {
return compact(array).join(delimiter || '');
}
function blockParams(block) {
var params = block.program.blockParams;
if (params.length) {
return ' as |' + params.join(' ') + '|';
}
return null;
}
function openBlock(block) {
return ['{{#', pathParams(block), blockParams(block), '}}'].join('');
}
function closeBlock(block) {
return ['{{/', build(block.path), '}}'].join('');
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9nZW5lcmF0aW9uL3ByaW50LmpzIl0sIm5hbWVzIjpbIkhCUyIsInVucmVhY2hhYmxlIiwiRXJyb3IiLCJidWlsZCIsImFzdCIsIm91dHB1dCIsInR5cGUiLCJjaGFpbkJsb2NrIiwiYm9keSIsImJ1aWxkRWFjaCIsImpvaW4iLCJwdXNoIiwidGFnIiwiYXR0cmlidXRlcyIsImxlbmd0aCIsIm1vZGlmaWVycyIsImNvbW1lbnRzIiwiYXBwbHkiLCJjaGlsZHJlbiIsIm5hbWUiLCJ2YWx1ZSIsInBhcnRzIiwiZm9yRWFjaCIsIm5vZGUiLCJvcmlnaW5hbCIsImNoYXJzIiwiY29tcGFjdEpvaW4iLCJwYXRoUGFyYW1zIiwibGluZXMiLCJvcGVuQmxvY2siLCJwcm9ncmFtIiwiaW52ZXJzZSIsImNsb3NlQmxvY2siLCJTdHJpbmciLCJwYWlycyIsIm1hcCIsInBhaXIiLCJrZXkiLCJjb21wYWN0IiwiYXJyYXkiLCJuZXdBcnJheSIsImEiLCJhc3RzIiwicGF0aCIsImlzTGl0ZXJhbCIsInBhcmFtcyIsImhhc2giLCJkZWxpbWl0ZXIiLCJibG9ja1BhcmFtcyIsImJsb2NrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsQUFBTzs7SUFBUCxBQUFZLEFBQVM7Ozs7QUFDckIsU0FBQSxBQUFTLGNBQWMsQUFDbkI7VUFBTSxJQUFBLEFBQUksTUFBVixBQUFNLEFBQVUsQUFDbkI7QUFDRDtBQUFlLFNBQUEsQUFBUyxNQUFULEFBQWUsS0FBSyxBQUMvQjtRQUFJLENBQUosQUFBSyxLQUFLLEFBQ047ZUFBQSxBQUFPLEFBQ1Y7QUFDRDtRQUFNLFNBQU4sQUFBZSxBQUNmO1lBQVEsSUFBUixBQUFZLEFBQ1I7YUFBQSxBQUFLLEFBQ0Q7QUFDSTtvQkFBTSxhQUFhLElBQUEsQUFBSSxjQUFjLElBQUEsQUFBSSxLQUF6QyxBQUFxQyxBQUFTLEFBQzlDO29CQUFBLEFBQUksWUFBWSxBQUNaOytCQUFBLEFBQVcsYUFBWCxBQUF3QixBQUMzQjtBQUNEO29CQUFNLE9BQU8s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QSxBQUFLLEFBQ0Q7bUJBQU8sTUFBTSxJQUFiLEFBQU8sQUFBVSxBQUNqQjtBQUNKO0FBQ0k7bUJBZFIsQUFjUSxBQUFPLEFBRWY7O1dBQU8sWUFBWSxDQUFBLEFBQUMsTUFBTSxVQUFVLElBQVYsQUFBYyxRQUFkLEFBQXNCLEtBQTdCLEFBQU8sQUFBMkIsTUFBTSxNQUFNLElBQTFELEFBQVksQUFBd0MsQUFBVSxRQUFyRSxBQUFPLEFBQXNFLEFBQ2hGOztBQUNELFNBQUEsQUFBUyxZQUFULEFBQXFCLE9BQXJCLEFBQTRCLFdBQVcsQUFDbkM7V0FBTyxRQUFBLEFBQVEsT0FBUixBQUFlLEtBQUssYUFBM0IsQUFBTyxBQUFpQyxBQUMzQzs7QUFDRCxTQUFBLEFBQVMsWUFBVCxBQUFxQixPQUFPLEFBQ3hCO1FBQU0sU0FBUyxNQUFBLEFBQU0sUUFBckIsQUFBNkIsQUFDN0I7UUFBSSxPQUFKLEFBQVcsUUFBUSxBQUNmO3lCQUFlLE9BQUEsQUFBTyxLQUF0QixBQUFlLEFBQVksT0FDOUI7QUFDRDtXQUFBLEFBQU8sQUFDVjs7QUFDRCxTQUFBLEFBQVMsVUFBVCxBQUFtQixPQUFPLEFBQ3RCO1dBQU8sQ0FBQSxBQUFDLE9BQU8sV0FBUixBQUFRLEFBQVcsUUFBUSxZQUEzQixBQUEyQixBQUFZLFFBQXZDLEFBQStDLE1BQS9DLEFBQXFELEtBQTVELEFBQU8sQUFBMEQsQUFDcEU7O0FBQ0QsU0FBQSxBQUFTLFdBQVQsQUFBb0IsT0FBTyxBQUN2QjtXQUFPLENBQUEsQUFBQyxPQUFPLE1BQU0sTUFBZCxBQUFRLEFBQVksT0FBcEIsQUFBMkIsTUFBM0IsQUFBaUMsS0FBeEMsQUFBTyxBQUFzQyxBQUNoRCIsImZpbGUiOiJsaWIvZ2VuZXJhdGlvbi9wcmludC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEhCUyBmcm9tICcuLi90eXBlcy9ub2Rlcyc7XG5mdW5jdGlvbiB1bnJlYWNoYWJsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVhY2hhYmxlJyk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZChhc3QpIHtcbiAgICBpZiAoIWFzdCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnUHJvZ3JhbSc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhaW5CbG9jayA9IGFzdFsnY2hhaW5lZCddICYmIGFzdC5ib2R5WzBdO1xuICAgICAgICAgICAgICAgIGlmIChjaGFpbkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYWluQmxvY2tbJ2NoYWluZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBidWlsZEVhY2goYXN0LmJvZHkpLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0VsZW1lbnROb2RlJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCc8JywgYXN0LnRhZyk7XG4gICAgICAgICAgICBpZiAoYXN0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBidWlsZEVhY2goYXN0LmF0dHJpYnV0ZXMpLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXN0Lm1vZGlmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgnICcsIGJ1aWxkRWFjaChhc3QubW9kaWZpZXJzKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFzdC5jb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgnICcsIGJ1aWxkRWFjaChhc3QuY29tbWVudHMpLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnPicpO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCBidWlsZEVhY2goYXN0LmNoaWxkcmVuKSk7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnPC8nLCBhc3QudGFnLCAnPicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0F0dHJOb2RlJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFzdC5uYW1lLCAnPScpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBidWlsZChhc3QudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGFzdC52YWx1ZS50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJ1wiJywgdmFsdWUsICdcIicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCdcIicpO1xuICAgICAgICAgICAgYXN0LnBhcnRzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKG5vZGUub3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGJ1aWxkKG5vZGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCdcIicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFzdC5jaGFycyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVzdGFjaGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGNvbXBhY3RKb2luKFsne3snLCBwYXRoUGFyYW1zKGFzdCksICd9fSddKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVzdGFjaGVDb21tZW50U3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJ3t7IS0tJywgYXN0LnZhbHVlLCAnLS19fSddKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJ3t7JywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFzdC5vcmlnaW5hbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU3ViRXhwcmVzc2lvbic6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJygnLCBwYXRoUGFyYW1zKGFzdCksICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXN0LnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGFzdFsnY2hhaW5lZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goWyd7e2Vsc2UgJywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChvcGVuQmxvY2soYXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goYnVpbGQoYXN0LnByb2dyYW0pKTtcbiAgICAgICAgICAgICAgICBpZiAoYXN0LmludmVyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhc3QuaW52ZXJzZVsnY2hhaW5lZCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCd7e2Vsc2V9fScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goYnVpbGQoYXN0LmludmVyc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhc3RbJ2NoYWluZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGNsb3NlQmxvY2soYXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGxpbmVzLmpvaW4oJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYXJ0aWFsU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJ3t7PicsIHBhdGhQYXJhbXMoYXN0KSwgJ319J10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdDb21tZW50U3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJzwhLS0nLCBhc3QudmFsdWUsICctLT4nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N0cmluZ0xpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGBcIiR7YXN0LnZhbHVlfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTnVtYmVyTGl0ZXJhbCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goU3RyaW5nKGFzdC52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1VuZGVmaW5lZExpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCd1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdOdWxsTGl0ZXJhbCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJ251bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIYXNoJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChhc3QucGFpcnMubWFwKHBhaXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGQocGFpcik7XG4gICAgICAgICAgICAgICAgfSkuam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIYXNoUGFpcic6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYCR7YXN0LmtleX09JHtidWlsZChhc3QudmFsdWUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59XG5mdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKGEgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGEgIT09ICd1bmRlZmluZWQnICYmIGEgIT09IG51bGwgJiYgYSAhPT0gJycpIHtcbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goYSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV3QXJyYXk7XG59XG5mdW5jdGlvbiBidWlsZEVhY2goYXN0cykge1xuICAgIHJldHVybiBhc3RzLm1hcChidWlsZCk7XG59XG5mdW5jdGlvbiBwYXRoUGFyYW1zKGFzdCkge1xuICAgIGxldCBwYXRoO1xuICAgIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnTXVzdGFjaGVTdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdTdWJFeHByZXNzaW9uJzpcbiAgICAgICAgY2FzZSAnRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgaWYgKEhCUy5pc0xpdGVyYWwoYXN0LnBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhc3QucGF0aC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoID0gYnVpbGQoYXN0LnBhdGgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BhcnRpYWxTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgcGF0aCA9IGJ1aWxkKGFzdC5uYW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVucmVhY2hhYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wYWN0Sm9pbihbcGF0aCwgYnVpbGRFYWNoKGFzdC5wYXJhbXMpLmpvaW4oJyAnKSwgYnVpbGQoYXN0Lmhhc2gpXSwgJyAnKTtcbn1cbmZ1bmN0aW9uIGNvbXBhY3RKb2luKGFycmF5LCBkZWxpbWl0ZXIpIHtcbiAgICByZXR1cm4gY29tcGFjdChhcnJheSkuam9pbihkZWxpbWl0ZXIgfHwgJycpO1xufVxuZnVuY3Rpb24gYmxvY2tQYXJhbXMoYmxvY2spIHtcbiAgICBjb25zdCBwYXJhbXMgPSBibG9jay5wcm9ncmFtLmJsb2NrUGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBgIGFzIHwke3BhcmFtcy5qb2luKCcgJyl9fGA7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gb3BlbkJsb2NrKGJsb2NrKSB7XG4gICAgcmV0dXJuIFsne3sjJywgcGF0aFBhcmFtcyhibG9jayksIGJsb2NrUGFyYW1zKGJsb2NrKSwgJ319J10uam9pbignJyk7XG59XG5mdW5jdGlvbiBjbG9zZUJsb2NrKGJsb2NrKSB7XG4gICAgcmV0dXJuIFsne3svJywgYnVpbGQoYmxvY2sucGF0aCksICd9fSddLmpvaW4oJycpO1xufSJdfQ==