UNPKG

bitbox-compiler

Version:

bitbox /unbox

537 lines (438 loc) 60.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _dom = require('./dom'); var _dom2 = _interopRequireDefault(_dom); var _source = require('./source'); var _source2 = _interopRequireDefault(_source); var _import2 = require('./nodes/import'); var _import3 = _interopRequireDefault(_import2); var _export2 = require('./nodes/export'); var _export3 = _interopRequireDefault(_export2); var _script = require('./nodes/script'); var _script2 = _interopRequireDefault(_script); var _style = require('./nodes/style'); var _style2 = _interopRequireDefault(_style); var _mod = require('./nodes/mod'); var _mod2 = _interopRequireDefault(_mod); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var config = { h: 'bitbox.h', element: 'bitbox.element' }; var entityMap = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': '&quot;', "'": '&#39;', "/": '&#x2F;' }; function escapeHtml(string) { return String(string).replace(/[&<>"'\/]/g, function (s) { return entityMap[s]; }); } var scope = 'box'; var index = []; var boxname = ''; var LINE_COMMENT = /^\s*\/\/.*$/gm; var JS_COMMENT = /\/\*[^\x00]*?\*\//gm; var meta = {}; var nodes = { clearMeta: function clearMeta() { meta = { import: {}, export: {}, local: {} }; }, mustreturn: false, lastNode: null, methods: [], pairs: {}, routes: [], init: [], inlineThunks: [], body: '', observableKeys: [], delegateKeys: [], box: [], imports: [], exports: [], boxes: [], keys: {}, bits: [], import: function _import(node) { return (0, _import3.default)(node, meta.import); }, export: _export3.default, script: _script2.default, //mod: modNode, style: _style2.default, styles: [], inits: [], convertprops: convertprops, objectToArray: function objectToArray(obj) { return Object.keys(obj).map(function toItem(k) { return obj[k]; }); }, selfClosing: function selfClosing(node) { node.content = -1; return this.tag(node); }, text: function text(_text) { //console.log('text', text) var p = _extends({}, _text.props); p = '{ ' + convertprops(p) + ' }'; var t = _text.body.trim(); //replace(/\`/g, '') if (t.startsWith('`') && t.endsWith('`')) return "$tree.push(bitbox.text(" + p + ", " + _text.body + "));";else return "$tree.push(bitbox.text(" + p + ", `" + _text.body.replace(/\`/g, '\`') + "`));"; }, tag: function tag(node) { //console.log('tag-node: ' + node.name, node.body) this.lastNode = node; var isnative = _dom2.default[node.name] === node.name ? true : false; var mustreturn = false; var outerexpr = ''; var innerexpr = ''; var innerexprclose = ''; var outerexprclose = ''; var isInlineThunk = false; if (!node.object) node.object = {}; node.object.attributes = [].concat(_toConsumableArray(node.attrs)); if (node.attrs.length) { for (var ei in node.attrs) { var prop = node.attrs[ei]; if (prop) { if (prop.rel && prop.rel === 'def') { node.jsname = toCamel(node.name); node.type = 'box'; this.boxes.push(node); var _args = prop.value.trim(); _args = _args ? _args.substr(0, _args.length - 1) + ')' : null; node.args = _args; var newbox = ['', '']; if (node.parent === 'root' || node.parent.name === 'mod') { //newbox = [`box.set(`, `)`] } else { newbox = [node.parent.name + '.' + toCamel(node.name) + ' = ', '']; //newbox = [``, ``] } var _export = ''; var _boxset = ''; if (node.parent === 'root' || node.parent.name === 'mod') { //__source__(node); if (node.props.set || node.props.box) { _boxset = '\nbox(' + toCamel(node.name) + ');'; delete node.props.set; delete node.props.box; } if (node.props.export) { _export = '\nexport '; if (node.props.default) _export = _export + 'default '; delete node.props.export; delete node.props.default; } } var bits = this.bits.filter(function (value, index, self) { return self.indexOf(value) === index; }).map(function (b) { return b[0] + ': ' + b[1]; }).join(','); this.bits = []; // box(${ toCamel(node.name) }, { ${bits} }); outerexpr += '\n\t\t\t\t\t\t/** ' + node.name + ' box */\n\t\t\t\t\t\t' + _export + newbox[0] + ' function ' + toCamel(node.name) + _args + ' {'; if (node.parent === 'root') { var loads = Object.keys(meta.local).map(function (load) { return 'new bitbox(' + node.jsname + '$box, ' + load + ')'; }); outerexpr += ''; outerexpr += this.inits.join('\n') + '\n'; outerexpr += loads.join('\n') + '\n'; this.keys = {}; this.inits = []; outerexpr = outerexpr.replace(/this\$box/g, node.jsname + '$box'); node.content = node.content.replace(/this\$box/g, node.jsname + '$box'); } outerexprclose = outerexprclose + ('}' + newbox[1] + _boxset); delete node.props[prop.key]; } switch (prop.key) { case 'from': node.props.from = '\'' + node.props.from.replace(/['"`]/g, '') + '/' + node.name + '!box\''; meta.import[toCamel(node.name)] = node.props.from; //.replace(/['"`]/g, '') this.imports.push('import { ' + toCamel(node.name) + ' } from ' + node.props.from); delete node.props.from; break; case 'text': if (prop.value) node.content = '`' + node.content + '`'; delete node.props.text; break; case 'if': outerexpr += 'if ' + prop.value + ' {'; outerexprclose = '}'; delete node.props.if; break; case 'for': if (prop.rel === 'invoke') { innerexpr += 'for ' + prop.value + ' {'; innerexprclose = '}'; delete node.props.for; } break; case 'switch': innerexpr += 'switch ' + prop.value + ' {'; innerexprclose = '}'; break; case 'each': if (prop.obj) { innerexpr += prop.obj + 'forEach(' + prop.value + ' => {'; innerexprclose = '});'; } else { var parts = prop.value.replace('(', '').replace(')', '').split(','); var ctx = parts.shift().trim(); var arg = parts.join(','); innerexpr += 'box.each(' + ctx + ', (' + arg + ') => {'; innerexprclose = '});'; } break; case 'map': innerexpr += (prop.obj || 'box.') + 'map( ' + prop.value + ' => {'; innerexprclose = '});'; break; } if (prop.key.endsWith('.map')) { innerexpr += prop.key + '(' + prop.value + ' => {'; innerexprclose = '});'; delete node.props[prop.key]; } if (prop.key.endsWith('.each')) { innerexpr += prop.key.replace('.each', '.forEach') + '(' + prop.value + ' => {'; innerexprclose = '});'; delete node.props[prop.key]; } if (prop.rel === 'invoke') { node.invoke = node.name + '.' + prop.key + prop.value; //console.log('node.invoke', node.props) var imet = prop.key === 'color' || prop.key === 'style' ? 'bitbox.' + prop.key : prop.key; node.props[prop.key] = '' + toCamel(imet) + prop.value; //delete node.props[prop.key] } } } } // if (node.props.style) { // node.props.style = normalizeStyle(node.props.style) // } if (node.return) { var n = '' + node.content; if (node.content.trim().indexOf('...') === 0) n = '' + node.content; node.content = n.indexOf('$tree') === 0 ? n : '$tree.push(' + n + ');'; } if (node.props.case) { var caseex = 'case ' + node.props.case + ':'; node.props.key = '\'case-' + node.props.case.replace(/['"`]/g, '') + '\''; if (node.props.case === true) { var keys = Object.keys(node.props); var caseval = keys[keys.indexOf('case') + 1]; node.props.key = caseval; delete node.props[caseval]; if (caseval === 'default') caseex = 'default:';else caseex = 'case \'' + caseval + '\':'; } outerexpr = '' + caseex; outerexprclose = 'break;'; delete node.props.case; } var attrs = node.props ? '' + convertprops(node.props) : ''; var bodyornode = ''; var bodyornodeend = ''; var name = node.name; if (node.type !== 'box') { if (node.name === 'mod') { bodyornode = ''; bodyornodeend = ''; } else { name = '' + toCamel(node.name); if (node.content === -1) { node.content = ''; if (node.invoke_zz) {} else { if (meta.local[name + '__s']) {} else { var __bind = '{}'; //node.props.bind || node.props.bit || 'this' var key = name; if (node.key) { node.props.module = '"' + node.key + '"'; __bind = '' + node.key; this.bits.push([node.key, name]); } //delete node.props.bind //delete node.props.bit var treectx = '$tree.push'; //node.parent.box ? 'this.tree' : '$tree' var isnew = false; if (node.props.new) { isnew = true; delete node.props.new; } if (node.props.return) { treectx = 'return'; delete node.props.return; } var p = _extends({}, node.props); attrs = p ? '' + convertprops(p) : ''; var a = '{ ' + attrs + ' }'; node.object.key = key; node.object.props = '{' + attrs + '}'; var nn = node.comprop || node.dotprop || name; var bxname = nn === 'element' ? '' + config.element : nn; //isnative || if (isnew) bodyornode = treectx + '(' + config.h + '(\'' + bxname + '\', ' + a + '));';else bodyornode = treectx + '(' + bxname + '(' + a + '));'; } } bodyornodeend = ''; } else { if (meta.local[name + '__s']) {} else { var _bind = '{}'; //node.props.bind || node.props.bit || 'this' var _key = name; if (node.key) { node.props.module = '"' + node.key + '"'; _bind = '' + node.key; this.bits.push([node.key, name]); } //delete node.props.bind //delete node.props.bit var _treectx = '$tree.push'; //node.parent.box ? 'this.tree' : '$tree' var _isnew = false; if (node.props.new) { _isnew = true; delete node.props.new; } if (node.props.return) { _treectx = 'return'; delete node.props.return; } var _p = _extends({}, node.props); attrs = _p ? '' + convertprops(_p) : ''; var _a = '{ ' + attrs + ' }'; var _nn = node.comprop || node.dotprop || name; var _bxname = _nn === 'element' ? '' + config.element : _nn; if (_isnew) bodyornode = _treectx + '(' + config.h + '(\'' + _bxname + '\', ' + _a + ', ($tree => {';else bodyornode = _treectx + '(' + _bxname + '(' + _a + ', ($tree => {'; bodyornodeend = 'return $tree })([]) ));'; } } } } else { if (node.returning) { bodyornode = '/** returning **/\n'; bodyornodeend = ''; } else { var _p2 = _extends({}, node.parent.props, node.props); delete _p2['export']; delete _p2['default']; delete _p2[node.parent.name]; attrs = _p2 ? ', {' + convertprops(_p2) + ' }' : ''; name = '\'' + node.name + '\''; var nargs = node.args.replace('(', '').replace(')', '').split(','); var en = node.props.register ? typeof node.props.register === 'string' && node.props.register.indexOf('-') > -1 ? node.props.register : '\'' + node.name + '-box\'' : '\'' + node.name + '\''; bodyornode = 'const $tree = [];'; bodyornodeend = 'return $tree.pop();'; (0, _source2.default)({ js: ('' + outerexpr + bodyornode + innerexpr + node.content + innerexprclose + bodyornodeend + outerexprclose).trim(), source: '' + node.tag + node.body + '</' + node.name + '>', name: '' + node.name }); } } index[node.i] = typeof index[node.i] !== 'undefined' ? index[node.i] + 1 : 1; var args = ''; //keyvars.length ? `let { ${ keyvars.join(`, `) } } = props;` : `` var isbody = false; var ret = '' + outerexpr + bodyornode + args + innerexpr + node.content + innerexprclose + bodyornodeend + outerexprclose; return ret.trim().replace(/\n\n/g, '\n'); }, isString: function isString(str) { var strreg = /['"`]([^'`"]+)["'`]/g; return strreg.exec(str.trim()); } }; exports.default = nodes; function normalizeStyle(subject) { var pxkeys = ['width', 'height', 'left', 'top', 'right', 'bottom', 'padding-', 'margin-', 'font-size', 'border-radius']; var result = subject.replace(/(\w+[-]?\w+)\s?[:]\s?([^,\[\{\}]+)?(\[([^\]]+)\])?/g, function (_, key) { var value = arguments.length <= 2 || arguments[2] === undefined ? "" : arguments[2]; var __ = arguments[3]; var pos = arguments.length <= 4 || arguments[4] === undefined ? "" : arguments[4]; key = key.trim(); if (value) value = value.trim(); var sub = key.split('-')[0] + '-'; var ispx = pxkeys.indexOf(sub); if (ispx < 0) ispx = pxkeys.indexOf(key); if (ispx > -1 && value[0] !== '"' && value[0] !== '\'') { if (!value.length && pos.length) { value = pos.trim(); value = value.split(','); value = value.map(function (x) { x = x.trim(); if (x.endsWith('%')) return '(' + x.substr(0, x.length - 1) + ') + "% "';else return parseInt(x) >= 0 ? '(' + x + ') + "px "' : '' + x; }).join(' + '); } else if (value.endsWith('%')) { value = '(' + value.substr(0, value.length - 1) + ') + "%"'; } else { value = parseInt(value) >= 0 ? '(' + value + ') + "px"' : '' + value; } } else if (value.length && pos.length) value = value + __; key = toCamel(key); if (parseInt(value) >= 0) value = '\'' + value + '\''; //console.log('res > ', { key, value }, parseInt(value)) return key + ': ' + value; }); //console.log('normalizeStyle >> result', result, '\n\n') return result; } function convertprops(p) { var a = arguments.length <= 1 || arguments[1] === undefined ? ': ' : arguments[1]; var b = arguments.length <= 2 || arguments[2] === undefined ? ', ' : arguments[2]; var props = _extends({}, p); var keys = Object.keys(props); var result = []; var events = []; var rest = []; keys.forEach(function (key) { var value = props[key]; if (key.indexOf('on-') === 0) { events.push('' + key.replace('on-', '') + a + (value === key ? toCamel(value) : value)); delete props[key]; } else if (key === 'on') { var v = value.substr(1, value.length - 2); if (v) { events.push('' + v); delete props[key]; } else { result.push('on'); } } else if (key === 'class') { if (value.indexOf('[') === 0) { var parts = value.substr(1, value.length - 2).split(','); value = '{ ' + parts.map(function (p) { return p + ': true'; }).join(', ') + ' }'; } result.push('' + key + a + value); } else if (key === 'style') { result.push('' + key + a + value); } else if (key.indexOf('...') === 0) { result.push('' + toCamel(key)); } else { if (key === value) result.push('' + toCamel(key));else result.push('' + toCamel(key) + a + value); } }); if (events.length) result.push('on' + a + ' { ' + events.join(b) + ' }'); return result.join(b); } function toCamel(subj, all) { if (subj && subj.indexOf('-') > -1) { var parts = subj.split('-'); subj = parts.map(function (p, i) { return !all && i === 0 ? p : p.substr(0, 1).toUpperCase() + p.substr(1); }).join(''); } return !all ? subj : subj.substr(0, 1).toUpperCase() + subj.substr(1); } //# sourceMappingURL=data:application/json;base64,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LENBQUMsR0FBSSxDQUFDLEdBQUssS0FBSyxDQUFJLENBQUE7R0FDL0M7RUFDRCxDQUFDLENBQUE7O0FBRUYsS0FBSSxNQUFNLENBQUMsTUFBTSxFQUNoQixNQUFNLENBQUMsSUFBSSxRQUFPLENBQUMsV0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFNLENBQUE7O0FBRWhELFFBQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUVyQjs7QUFFRCxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQzNCLEtBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDbkMsTUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFBRSxVQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUUsQ0FBQyxDQUFFLENBQUE7R0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0VBQ3hIO0FBQ0QsUUFBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUUsQ0FBQTtDQUN6RSIsImZpbGUiOiJub2RlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSBcdFx0XHRmcm9tICcuL2RvbSdcbmltcG9ydCBfX3NvdXJjZV9fIFx0ZnJvbSAnLi9zb3VyY2UnXG5cbmltcG9ydCBpbXBvcnROb2RlIFx0ZnJvbSAnLi9ub2Rlcy9pbXBvcnQnXG5pbXBvcnQgZXhwb3J0Tm9kZSBcdGZyb20gJy4vbm9kZXMvZXhwb3J0J1xuaW1wb3J0IHNjcmlwdE5vZGUgXHRmcm9tICcuL25vZGVzL3NjcmlwdCdcbmltcG9ydCBzdHlsZU5vZGUgXHRmcm9tICcuL25vZGVzL3N0eWxlJ1xuaW1wb3J0IG1vZE5vZGUgXHRcdGZyb20gJy4vbm9kZXMvbW9kJ1xuXG5jb25zdCBjb25maWcgPSB7XG5cdGg6ICdiaXRib3guaCcsXG5cdGVsZW1lbnQ6ICdiaXRib3guZWxlbWVudCdcbn1cblxudmFyIGVudGl0eU1hcCA9IHtcbiAgICBcIiZcIjogXCImYW1wO1wiLFxuICAgIFwiPFwiOiBcIiZsdDtcIixcbiAgICBcIj5cIjogXCImZ3Q7XCIsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OycsXG4gICAgXCIvXCI6ICcmI3gyRjsnXG4gIH07XG5cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbChzdHJpbmcpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBlbnRpdHlNYXBbc107XG4gICAgfSk7XG4gIH1cblxubGV0IHNjb3BlID0gJ2JveCdcbmxldCBpbmRleCA9IFtdXG5sZXQgYm94bmFtZSA9ICcnXG5jb25zdCBMSU5FX0NPTU1FTlQgPSAvXlxccypcXC9cXC8uKiQvZ207XG5jb25zdCBKU19DT01NRU5UID0gL1xcL1xcKlteXFx4MDBdKj9cXCpcXC8vZ207XG5sZXQgbWV0YSA9IHsgfVxuXG5sZXQgbm9kZXMgPSB7XG5cdGNsZWFyTWV0YTogKCkgPT4ge1xuXHRcdG1ldGEgPSB7IGltcG9ydDoge30sIGV4cG9ydDoge30sIGxvY2FsOiB7fSB9XG5cdH0sXG5cdG11c3RyZXR1cm46IGZhbHNlLFxuXHRsYXN0Tm9kZTogbnVsbCxcblx0bWV0aG9kczogW10sXG5cdHBhaXJzOiB7fSxcblx0cm91dGVzOiBbXSxcblx0aW5pdDogW10sXG5cdGlubGluZVRodW5rczogW10sXG5cdGJvZHk6ICcnLFxuXHRvYnNlcnZhYmxlS2V5czogW10sXG5cdGRlbGVnYXRlS2V5czogW10sXG5cdGJveDogW10sXG5cdGltcG9ydHM6IFtdLFxuXHRleHBvcnRzOiBbXSxcblx0Ym94ZXM6IFtdLFxuXHRrZXlzOiB7fSxcblx0Yml0czogW10sXG5cblx0aW1wb3J0OiAobm9kZSkgPT4gaW1wb3J0Tm9kZShub2RlLCBtZXRhLmltcG9ydCksXG5cdGV4cG9ydDogZXhwb3J0Tm9kZSxcblx0c2NyaXB0OiBzY3JpcHROb2RlLFxuXHQvL21vZDogbW9kTm9kZSxcblx0c3R5bGU6IHN0eWxlTm9kZSxcblxuXHRzdHlsZXM6IFtdLFxuXHRpbml0czogW10sXG5cdGNvbnZlcnRwcm9wcyxcblx0b2JqZWN0VG9BcnJheShvYmopIHtcblx0ICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiB0b0l0ZW0oaykge1xuXHQgICAgICAgIHJldHVybiBvYmpba107XG5cdCAgICB9KTtcblx0fSxcblxuXG5cdHNlbGZDbG9zaW5nKG5vZGUpIHtcblx0XHRub2RlLmNvbnRlbnQgPSAtMVxuXHRcdHJldHVybiB0aGlzLnRhZyhub2RlKVxuXHR9LFxuXG5cdHRleHQ6ICh0ZXh0KSA9PiB7XG5cdFx0Ly9jb25zb2xlLmxvZygndGV4dCcsIHRleHQpXG5cdFx0bGV0IHAgPSB7IC4uLnRleHQucHJvcHMgfVxuXHRcdHAgPSBgeyAke2NvbnZlcnRwcm9wcyhwKX0gfWBcblxuXHRcdGNvbnN0IHQgPSB0ZXh0LmJvZHkudHJpbSgpOyAvL3JlcGxhY2UoL1xcYC9nLCAnJylcblx0XHRpZiAodC5zdGFydHNXaXRoKCdgJykgJiYgdC5lbmRzV2l0aCgnYCcpKVxuXHRcdFx0cmV0dXJuIFwiJHRyZWUucHVzaChiaXRib3gudGV4dChcIiArIHAgKyBcIiwgXCIgKyB0ZXh0LmJvZHkgKyBcIikpO1wiXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFwiJHRyZWUucHVzaChiaXRib3gudGV4dChcIiArIHAgKyBcIiwgYFwiICsgKHRleHQuYm9keS5yZXBsYWNlKC9cXGAvZywgJ1xcYCcpKSArIFwiYCkpO1wiXG5cdH0sXG5cblx0dGFnKG5vZGUpIHtcblxuXHRcdC8vY29uc29sZS5sb2coJ3RhZy1ub2RlOiAnICsgbm9kZS5uYW1lLCBub2RlLmJvZHkpXG5cdFx0dGhpcy5sYXN0Tm9kZSA9IG5vZGVcblx0XHRsZXQgaXNuYXRpdmUgPSBkb21bbm9kZS5uYW1lXSA9PT0gbm9kZS5uYW1lID8gdHJ1ZSA6IGZhbHNlXG5cdFx0bGV0IG11c3RyZXR1cm4gPSBmYWxzZVxuXHRcdGxldCBvdXRlcmV4cHIgPSAnJ1xuXHRcdGxldCBpbm5lcmV4cHIgPSAnJ1xuXHRcdGxldCBpbm5lcmV4cHJjbG9zZSA9ICcnXG5cdFx0bGV0IG91dGVyZXhwcmNsb3NlID0gJydcblx0XHRsZXQgaXNJbmxpbmVUaHVuayA9IGZhbHNlXG5cblx0XHRpZiAoIW5vZGUub2JqZWN0KVxuXHRcdFx0bm9kZS5vYmplY3QgPSB7fVxuXG5cdFx0bm9kZS5vYmplY3QuYXR0cmlidXRlcyA9IFsuLi5ub2RlLmF0dHJzXVxuXHRcdGlmIChub2RlLmF0dHJzLmxlbmd0aCkge1xuXHRcdFx0Zm9yKGxldCBlaSBpbiBub2RlLmF0dHJzKSB7XG5cdFx0XHRcdGxldCBwcm9wID0gbm9kZS5hdHRyc1tlaV1cblx0XHRcdFx0aWYgKHByb3ApIHtcblx0XHRcdFx0XHRpZiAocHJvcC5yZWwgJiYgcHJvcC5yZWwgPT09ICdkZWYnKSB7XG5cblx0XHRcdFx0XHRcdG5vZGUuanNuYW1lID0gdG9DYW1lbChub2RlLm5hbWUpXG5cblx0XHRcdFx0XHRcdG5vZGUudHlwZSA9ICdib3gnXG5cdFx0XHRcdFx0XHR0aGlzLmJveGVzLnB1c2gobm9kZSlcblxuXHRcdFx0XHRcdFx0bGV0IGFyZ3MgPSBwcm9wLnZhbHVlLnRyaW0oKVxuXHRcdFx0XHRcdFx0YXJncyA9IGFyZ3MgPyBgJHsgYXJncy5zdWJzdHIoMCwgYXJncy5sZW5ndGggLSAxKSB9KWAgOiBudWxsXG5cdFx0XHRcdFx0XHRub2RlLmFyZ3MgPSBhcmdzXG5cdFx0XHRcdFx0XHRsZXQgbmV3Ym94ID0gW2BgLGBgXVxuXHRcdFx0XHRcdFx0aWYgKG5vZGUucGFyZW50ID09PSAncm9vdCcgfHwgbm9kZS5wYXJlbnQubmFtZSA9PT0gJ21vZCcpIHtcblx0XHRcdFx0XHRcdFx0Ly9uZXdib3ggPSBbYGJveC5zZXQoYCwgYClgXVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bmV3Ym94ID0gW2Ake25vZGUucGFyZW50Lm5hbWV9LiR7IHRvQ2FtZWwobm9kZS5uYW1lKSB9ID0gYCwgYGBdXG5cdFx0XHRcdFx0XHRcdC8vbmV3Ym94ID0gW2BgLCBgYF1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGV0IF9leHBvcnQgPSBgYDtcblx0XHRcdFx0XHRcdGxldCBfYm94c2V0ID0gYGA7XG5cdFx0XHRcdFx0XHRpZiAobm9kZS5wYXJlbnQgPT09ICdyb290JyB8fCBub2RlLnBhcmVudC5uYW1lID09PSAnbW9kJykge1xuXHRcdFx0XHRcdFx0XHQvL19fc291cmNlX18obm9kZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLnByb3BzLnNldCB8fCBub2RlLnByb3BzLmJveCkge1xuXHRcdFx0XHRcdFx0XHRcdF9ib3hzZXQgPSBgXFxuYm94KCR7dG9DYW1lbChub2RlLm5hbWUpfSk7YFxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBub2RlLnByb3BzLnNldFxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBub2RlLnByb3BzLmJveFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLnByb3BzLmV4cG9ydCkge1xuXHRcdFx0XHRcdFx0XHRcdF9leHBvcnQgPSBgXFxuZXhwb3J0IGBcblx0XHRcdFx0XHRcdFx0XHRpZiAobm9kZS5wcm9wcy5kZWZhdWx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0X2V4cG9ydCA9IGAke19leHBvcnR9ZGVmYXVsdCBgXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG5vZGUucHJvcHMuZXhwb3J0XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG5vZGUucHJvcHMuZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJpdHMgPSB0aGlzLmJpdHMuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4KS5tYXAoYiA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBgJHtiWzBdfTogJHtiWzFdfWBcblx0XHRcdFx0XHRcdH0pLmpvaW4oJywnKVxuXHRcdFx0XHRcdFx0dGhpcy5iaXRzID0gW11cblxuXHRcdFx0XHRcdFx0Ly8gYm94KCR7IHRvQ2FtZWwobm9kZS5uYW1lKSB9LCB7ICR7Yml0c30gfSk7XG5cdFx0XHRcdFx0XHRvdXRlcmV4cHIgKz0gYFxuXHRcdFx0XHRcdFx0LyoqICR7bm9kZS5uYW1lfSBib3ggKi9cblx0XHRcdFx0XHRcdCR7X2V4cG9ydH0ke25ld2JveFswXX0gZnVuY3Rpb24gJHsgdG9DYW1lbChub2RlLm5hbWUpIH0keyBhcmdzIH0ge2BcblxuXHRcdFx0XHRcdFx0XHRpZiAobm9kZS5wYXJlbnQgPT09ICdyb290Jykge1xuXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbG9hZHMgPSBPYmplY3Qua2V5cyhtZXRhLmxvY2FsKS5tYXAobG9hZCA9PiBgbmV3IGJpdGJveCgke25vZGUuanNuYW1lfSRib3gsICR7bG9hZH0pYClcblx0XHRcdFx0XHRcdFx0XHRvdXRlcmV4cHIgKz0gYGBcblx0XHRcdFx0XHRcdFx0XHRvdXRlcmV4cHIgKz0gYCR7IHRoaXMuaW5pdHMuam9pbignXFxuJyl9XFxuYFxuXHRcdFx0XHRcdFx0XHRcdG91dGVyZXhwciArPSBgJHsgbG9hZHMuam9pbignXFxuJyl9XFxuYFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMua2V5cyA9IHt9XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5pbml0cyA9IFtdXG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJleHByID0gb3V0ZXJleHByLnJlcGxhY2UoL3RoaXNcXCRib3gvZywgYCR7bm9kZS5qc25hbWV9JGJveGApXG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5jb250ZW50ID0gbm9kZS5jb250ZW50LnJlcGxhY2UoL3RoaXNcXCRib3gvZywgYCR7bm9kZS5qc25hbWV9JGJveGApXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0b3V0ZXJleHByY2xvc2UgPSBvdXRlcmV4cHJjbG9zZSArIGB9JHtuZXdib3hbMV19JHtfYm94c2V0fWBcblx0XHRcdFx0XHRcdGRlbGV0ZSBub2RlLnByb3BzW3Byb3Aua2V5XVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN3aXRjaChwcm9wLmtleSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZnJvbSc6XG5cdFx0XHRcdFx0XHRcdG5vZGUucHJvcHMuZnJvbSA9IGAnJHtub2RlLnByb3BzLmZyb20ucmVwbGFjZSgvWydcImBdL2csICcnKX0vJHtub2RlLm5hbWV9IWJveCdgXG5cdFx0XHRcdFx0XHRcdG1ldGEuaW1wb3J0W3RvQ2FtZWwobm9kZS5uYW1lKV0gPSBub2RlLnByb3BzLmZyb20gLy8ucmVwbGFjZSgvWydcImBdL2csICcnKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmltcG9ydHMucHVzaChgaW1wb3J0IHsgJHt0b0NhbWVsKG5vZGUubmFtZSl9IH0gZnJvbSAke25vZGUucHJvcHMuZnJvbX1gKVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgbm9kZS5wcm9wcy5mcm9tXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0XHRcdFx0XHRpZiAocHJvcC52YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHRub2RlLmNvbnRlbnQgPSBgXFxgJHtub2RlLmNvbnRlbnR9XFxgYFxuXHRcdFx0XHRcdFx0XHRkZWxldGUgbm9kZS5wcm9wcy50ZXh0XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2lmJzpcblx0XHRcdFx0XHRcdFx0b3V0ZXJleHByICs9IGBpZiAkeyBwcm9wLnZhbHVlIH0ge2Bcblx0XHRcdFx0XHRcdFx0b3V0ZXJleHByY2xvc2UgPSBgfWBcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG5vZGUucHJvcHMuaWZcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZm9yJzpcblx0XHRcdFx0XHRcdFx0aWYgKHByb3AucmVsID09PSAnaW52b2tlJykge1xuXHRcdFx0XHRcdFx0XHRcdGlubmVyZXhwciArPSBgZm9yICR7IHByb3AudmFsdWUgfSB7YFxuXHRcdFx0XHRcdFx0XHRcdGlubmVyZXhwcmNsb3NlID0gYH1gXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG5vZGUucHJvcHMuZm9yXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc3dpdGNoJzpcblx0XHRcdFx0XHRcdFx0aW5uZXJleHByICs9IGBzd2l0Y2ggJHsgcHJvcC52YWx1ZSB9IHtgXG5cdFx0XHRcdFx0XHRcdGlubmVyZXhwcmNsb3NlID0gYH1gXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2VhY2gnOlxuXHRcdFx0XHRcdFx0XHRpZiAocHJvcC5vYmopIHtcblx0XHRcdFx0XHRcdFx0XHRpbm5lcmV4cHIgKz0gYCR7IHByb3Aub2JqIH1mb3JFYWNoKCR7IHByb3AudmFsdWUgfSA9PiB7YFxuXHRcdFx0XHRcdFx0XHRcdGlubmVyZXhwcmNsb3NlID0gYH0pO2Bcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJ0cyA9IHByb3AudmFsdWUucmVwbGFjZSgnKCcsICcnKS5yZXBsYWNlKCcpJywgJycpLnNwbGl0KCcsJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjdHggPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFyZyA9IHBhcnRzLmpvaW4oJywnKVxuXHRcdFx0XHRcdFx0XHRcdGlubmVyZXhwciArPSBgYm94LmVhY2goJHsgY3R4IH0sICgke2FyZ30pID0+IHtgXG5cdFx0XHRcdFx0XHRcdFx0aW5uZXJleHByY2xvc2UgPSBgfSk7YFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ21hcCc6XG5cdFx0XHRcdFx0XHRcdGlubmVyZXhwciArPSBgJHsgcHJvcC5vYmp8fCdib3guJyB9bWFwKCAkeyBwcm9wLnZhbHVlIH0gPT4ge2Bcblx0XHRcdFx0XHRcdFx0aW5uZXJleHByY2xvc2UgPSBgfSk7YFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByb3Aua2V5LmVuZHNXaXRoKCcubWFwJykpIHtcblx0XHRcdFx0XHRcdGlubmVyZXhwciArPSBgJHsgcHJvcC5rZXkgfSgkeyBwcm9wLnZhbHVlIH0gPT4ge2Bcblx0XHRcdFx0XHRcdGlubmVyZXhwcmNsb3NlID0gYH0pO2Bcblx0XHRcdFx0XHRcdGRlbGV0ZSBub2RlLnByb3BzW3Byb3Aua2V5XVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocHJvcC5rZXkuZW5kc1dpdGgoJy5lYWNoJykpIHtcblx0XHRcdFx0XHRcdGlubmVyZXhwciArPSBgJHsgcHJvcC5rZXkucmVwbGFjZSgnLmVhY2gnLCcuZm9yRWFjaCcpIH0oJHsgcHJvcC52YWx1ZSB9ID0+IHtgXG5cdFx0XHRcdFx0XHRpbm5lcmV4cHJjbG9zZSA9IGB9KTtgXG5cdFx0XHRcdFx0XHRkZWxldGUgbm9kZS5wcm9wc1twcm9wLmtleV1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcC5yZWwgPT09ICdpbnZva2UnKSB7XG5cdFx0XHRcdFx0XHRub2RlLmludm9rZSA9IGAkeyBub2RlLm5hbWUgfS4keyBwcm9wLmtleSB9JHsgcHJvcC52YWx1ZSB9YFxuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZygnbm9kZS5pbnZva2UnLCBub2RlLnByb3BzKVxuXHRcdFx0XHRcdFx0Y29uc3QgaW1ldCA9IHByb3Aua2V5ID09PSAnY29sb3InIHx8IHByb3Aua2V5ID09PSAnc3R5bGUnXG5cdFx0XHRcdFx0XHRcdD8gYGJpdGJveC4ke3Byb3Aua2V5fWBcblx0XHRcdFx0XHRcdFx0OiBwcm9wLmtleVxuXHRcdFx0XHRcdFx0bm9kZS5wcm9wc1twcm9wLmtleV0gPSBgJHt0b0NhbWVsKGltZXQpfSR7IHByb3AudmFsdWUgfWBcblx0XHRcdFx0XHRcdC8vZGVsZXRlIG5vZGUucHJvcHNbcHJvcC5rZXldXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBpZiAobm9kZS5wcm9wcy5zdHlsZSkge1xuXHRcdC8vIFx0bm9kZS5wcm9wcy5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKG5vZGUucHJvcHMuc3R5bGUpXG5cdFx0Ly8gfVxuXG5cdFx0aWYgKG5vZGUucmV0dXJuKSB7XG5cdFx0XHRsZXQgbiA9IGAkeyBub2RlLmNvbnRlbnQgfWBcblx0XHRcdGlmIChub2RlLmNvbnRlbnQudHJpbSgpLmluZGV4T2YoJy4uLicpID09PSAwKVxuXHRcdFx0XHRuID0gYCR7IG5vZGUuY29udGVudCB9YFxuXHRcdFx0bm9kZS5jb250ZW50ID0gbi5pbmRleE9mKCckdHJlZScpID09PSAwID8gbiA6IGAkdHJlZS5wdXNoKCR7IG4gfSk7YFxuXHRcdH1cblxuXHRcdGlmIChub2RlLnByb3BzLmNhc2UpIHtcblx0XHRcdGxldCBjYXNlZXggPSBgY2FzZSAkeyBub2RlLnByb3BzLmNhc2UgfTpgXG5cdFx0XHRub2RlLnByb3BzLmtleSA9IGAnY2FzZS0keyBub2RlLnByb3BzLmNhc2UucmVwbGFjZSgvWydcImBdL2csICcnKSB9J2Bcblx0XHRcdGlmIChub2RlLnByb3BzLmNhc2UgPT09IHRydWUpIHtcblx0XHRcdFx0bGV0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlLnByb3BzKVxuXHRcdFx0XHRsZXQgY2FzZXZhbCA9IGtleXNba2V5cy5pbmRleE9mKCdjYXNlJykgKyAxXVxuXHRcdFx0XHRub2RlLnByb3BzLmtleSA9IGNhc2V2YWxcblx0XHRcdFx0ZGVsZXRlIG5vZGUucHJvcHNbY2FzZXZhbF1cblx0XHRcdFx0aWYgKGNhc2V2YWwgPT09ICdkZWZhdWx0Jylcblx0XHRcdFx0XHRjYXNlZXggPSBgZGVmYXVsdDpgXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRjYXNlZXggPSBgY2FzZSAnJHsgY2FzZXZhbCB9JzpgXG5cdFx0XHR9XG5cdFx0XHRvdXRlcmV4cHIgPSBgJHsgY2FzZWV4IH1gXG5cdFx0XHRvdXRlcmV4cHJjbG9zZSA9IGBicmVhaztgXG5cdFx0XHRk