UNPKG

ember-legacy-class-transform

Version:
211 lines (206 loc) 21.6 kB
'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==