ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
199 lines • 21.7 kB
JavaScript
import * as HBS from '../types/nodes';
function unreachable() {
throw new Error('unreachable');
}
export default 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9nZW5lcmF0aW9uL3ByaW50LmpzIl0sIm5hbWVzIjpbIkhCUyIsInVucmVhY2hhYmxlIiwiRXJyb3IiLCJidWlsZCIsImFzdCIsIm91dHB1dCIsInR5cGUiLCJjaGFpbkJsb2NrIiwiYm9keSIsImJ1aWxkRWFjaCIsImpvaW4iLCJwdXNoIiwidGFnIiwiYXR0cmlidXRlcyIsImxlbmd0aCIsIm1vZGlmaWVycyIsImNvbW1lbnRzIiwiYXBwbHkiLCJjaGlsZHJlbiIsIm5hbWUiLCJ2YWx1ZSIsInBhcnRzIiwiZm9yRWFjaCIsIm5vZGUiLCJvcmlnaW5hbCIsImNoYXJzIiwiY29tcGFjdEpvaW4iLCJwYXRoUGFyYW1zIiwibGluZXMiLCJvcGVuQmxvY2siLCJwcm9ncmFtIiwiaW52ZXJzZSIsImNsb3NlQmxvY2siLCJTdHJpbmciLCJwYWlycyIsIm1hcCIsInBhaXIiLCJrZXkiLCJjb21wYWN0IiwiYXJyYXkiLCJuZXdBcnJheSIsImEiLCJhc3RzIiwicGF0aCIsImlzTGl0ZXJhbCIsInBhcmFtcyIsImhhc2giLCJkZWxpbWl0ZXIiLCJibG9ja1BhcmFtcyIsImJsb2NrIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUtBLEdBQVosTUFBcUIsZ0JBQXJCO0FBQ0EsU0FBU0MsV0FBVCxHQUF1QjtBQUNuQixVQUFNLElBQUlDLEtBQUosQ0FBVSxhQUFWLENBQU47QUFDSDtBQUNELGVBQWUsU0FBU0MsS0FBVCxDQUFlQyxHQUFmLEVBQW9CO0FBQy9CLFFBQUksQ0FBQ0EsR0FBTCxFQUFVO0FBQ04sZUFBTyxFQUFQO0FBQ0g7QUFDRCxRQUFNQyxTQUFTLEVBQWY7QUFDQSxZQUFRRCxJQUFJRSxJQUFaO0FBQ0ksYUFBSyxTQUFMO0FBQ0k7QUFDSSxvQkFBTUMsYUFBYUgsSUFBSSxTQUFKLEtBQWtCQSxJQUFJSSxJQUFKLENBQVMsQ0FBVCxDQUFyQztBQUNBLG9CQUFJRCxVQUFKLEVBQWdCO0FBQ1pBLCtCQUFXLFNBQVgsSUFBd0IsSUFBeEI7QUFDSDtBQUNE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QUEyQkQsWUFBWUMsS0FBWixDQUEzQixFQUErQyxJQUEvQyxFQUFxRHZDLElBQXJELENBQTBELEVBQTFELENBQVA7QUFDSDtBQUNELFNBQVNzQixVQUFULENBQW9CaUIsS0FBcEIsRUFBMkI7QUFDdkIsV0FBTyxDQUFDLEtBQUQsRUFBUTlDLE1BQU04QyxNQUFNTixJQUFaLENBQVIsRUFBMkIsSUFBM0IsRUFBaUNqQyxJQUFqQyxDQUFzQyxFQUF0QyxDQUFQO0FBQ0giLCJmaWxlIjoibGliL2dlbmVyYXRpb24vcHJpbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBIQlMgZnJvbSAnLi4vdHlwZXMvbm9kZXMnO1xuZnVuY3Rpb24gdW5yZWFjaGFibGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bnJlYWNoYWJsZScpO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGQoYXN0KSB7XG4gICAgaWYgKCFhc3QpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICBzd2l0Y2ggKGFzdC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1Byb2dyYW0nOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWluQmxvY2sgPSBhc3RbJ2NoYWluZWQnXSAmJiBhc3QuYm9keVswXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhaW5CbG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjaGFpbkJsb2NrWydjaGFpbmVkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYnVpbGRFYWNoKGFzdC5ib2R5KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChib2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbGVtZW50Tm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnPCcsIGFzdC50YWcpO1xuICAgICAgICAgICAgaWYgKGFzdC5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCcgJywgYnVpbGRFYWNoKGFzdC5hdHRyaWJ1dGVzKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFzdC5tb2RpZmllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBidWlsZEVhY2goYXN0Lm1vZGlmaWVycykuam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3QuY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBidWlsZEVhY2goYXN0LmNvbW1lbnRzKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0LnB1c2goJz4nKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgYnVpbGRFYWNoKGFzdC5jaGlsZHJlbikpO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goJzwvJywgYXN0LnRhZywgJz4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBdHRyTm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3QubmFtZSwgJz0nKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYnVpbGQoYXN0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChhc3QudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCdcIicsIHZhbHVlLCAnXCInKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnXCInKTtcbiAgICAgICAgICAgIGFzdC5wYXJ0cy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChub2RlLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChidWlsZChub2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnXCInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3QuY2hhcnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJ3t7JywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlQ29tbWVudFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7eyEtLScsIGFzdC52YWx1ZSwgJy0tfX0nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0VsZW1lbnRNb2RpZmllclN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7eycsIHBhdGhQYXJhbXMoYXN0KSwgJ319J10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYXRoRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3Qub3JpZ2luYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N1YkV4cHJlc3Npb24nOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCcoJywgcGF0aFBhcmFtcyhhc3QpLCAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW5MaXRlcmFsJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFzdC52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChhc3RbJ2NoYWluZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKFsne3tlbHNlICcsIHBhdGhQYXJhbXMoYXN0KSwgJ319J10uam9pbignJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gob3BlbkJsb2NrKGFzdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGJ1aWxkKGFzdC5wcm9ncmFtKSk7XG4gICAgICAgICAgICAgICAgaWYgKGFzdC5pbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXN0LmludmVyc2VbJ2NoYWluZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgne3tlbHNlfX0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGJ1aWxkKGFzdC5pbnZlcnNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXN0WydjaGFpbmVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChjbG9zZUJsb2NrKGFzdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChsaW5lcy5qb2luKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFydGlhbFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7ez4nLCBwYXRoUGFyYW1zKGFzdCksICd9fSddKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQ29tbWVudFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyc8IS0tJywgYXN0LnZhbHVlLCAnLS0+J10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChgXCIke2FzdC52YWx1ZX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ051bWJlckxpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKFN0cmluZyhhc3QudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdVbmRlZmluZWRMaXRlcmFsJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTnVsbExpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCdudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSGFzaCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYXN0LnBhaXJzLm1hcChwYWlyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkKHBhaXIpO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSGFzaFBhaXInOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGAke2FzdC5rZXl9PSR7YnVpbGQoYXN0LnZhbHVlKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xufVxuZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgIGNvbnN0IG5ld0FycmF5ID0gW107XG4gICAgYXJyYXkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBhICE9PSAndW5kZWZpbmVkJyAmJiBhICE9PSBudWxsICYmIGEgIT09ICcnKSB7XG4gICAgICAgICAgICBuZXdBcnJheS5wdXNoKGEpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0FycmF5O1xufVxuZnVuY3Rpb24gYnVpbGRFYWNoKGFzdHMpIHtcbiAgICByZXR1cm4gYXN0cy5tYXAoYnVpbGQpO1xufVxuZnVuY3Rpb24gcGF0aFBhcmFtcyhhc3QpIHtcbiAgICBsZXQgcGF0aDtcbiAgICBzd2l0Y2ggKGFzdC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnU3ViRXhwcmVzc2lvbic6XG4gICAgICAgIGNhc2UgJ0VsZW1lbnRNb2RpZmllclN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChIQlMuaXNMaXRlcmFsKGFzdC5wYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXN0LnBhdGgudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aCA9IGJ1aWxkKGFzdC5wYXRoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYXJ0aWFsU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHBhdGggPSBidWlsZChhc3QubmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB1bnJlYWNoYWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdEpvaW4oW3BhdGgsIGJ1aWxkRWFjaChhc3QucGFyYW1zKS5qb2luKCcgJyksIGJ1aWxkKGFzdC5oYXNoKV0sICcgJyk7XG59XG5mdW5jdGlvbiBjb21wYWN0Sm9pbihhcnJheSwgZGVsaW1pdGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhY3QoYXJyYXkpLmpvaW4oZGVsaW1pdGVyIHx8ICcnKTtcbn1cbmZ1bmN0aW9uIGJsb2NrUGFyYW1zKGJsb2NrKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYmxvY2sucHJvZ3JhbS5ibG9ja1BhcmFtcztcbiAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYCBhcyB8JHtwYXJhbXMuam9pbignICcpfXxgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIG9wZW5CbG9jayhibG9jaykge1xuICAgIHJldHVybiBbJ3t7IycsIHBhdGhQYXJhbXMoYmxvY2spLCBibG9ja1BhcmFtcyhibG9jayksICd9fSddLmpvaW4oJycpO1xufVxuZnVuY3Rpb24gY2xvc2VCbG9jayhibG9jaykge1xuICAgIHJldHVybiBbJ3t7LycsIGJ1aWxkKGJsb2NrLnBhdGgpLCAnfX0nXS5qb2luKCcnKTtcbn0iXX0=