bitbox-compiler
Version:
bitbox /unbox
656 lines (548 loc) • 73.7 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _event = require('./event');
var _event2 = _interopRequireDefault(_event);
var _node = require('./node');
var _node2 = _interopRequireDefault(_node);
var _jsBeautify = require('js-beautify');
var _jsBeautify2 = _interopRequireDefault(_jsBeautify);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function Printer(parent) {
this.parent = parent;
this.content = '';
this.spacer = '';
this.indent = parent ? parent.indent : '';
this.isFirstItem = true;
}
Printer.prototype.addSpace = function (space) {
this.spacer += space;
if (space.indexOf("\n") !== -1) {
this.indent = /[^\n]*$/.exec(space)[0];
} else {
this.indent += space;
}
};
Printer.prototype.add = function (data, ignoreComma) {
this.content += this.spacer;
this.spacer = '';
this.content += data;
};
var Parser = function () {
function Parser() {
var _this = this;
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
_classCallCheck(this, Parser);
(0, _event2.default)(this);
this.token = {};
this.chars = [];
this.index = [];
this.attrs = [];
this.props = {};
this.nodes = [];
this.text = [];
this.tree = {};
this.result = '';
this.node = {};
this.token = { '<': 1, '</': 1 };
var elements = [];
var printer = new Printer(null);
//this.on('run', () => {
printer = new Printer(null);
var i = 0;
var isnode = false;
//})
this.on('open', function (name, node) {
i++;
if (name === '___bitbox') node.component = { key: node.attrs[0].key, attr: node.attrs };else node.component = node.parent.component;
if (node.tag && node.tag.endsWith('=>')) {
node.return = true;
}
elements.unshift([name, node.attrs]);
printer = new Printer(printer);
isnode = true;
});
this.on('text', function (text) {
var lines = text.split("\n");
var isFirst = true;
lines.forEach(function (line) {
var lineMatch = /^(\s*)(.*?)(\s*)$/.exec(line);
var preSpace = lineMatch[1],
mainText = lineMatch[2],
postSpace = lineMatch[3];
if (!isFirst) printer.addSpace("\n");
if (mainText.length > 0) {
var fc = mainText[0];
if (isnode === true && (fc === '`' || fc === "'" || fc === '"')) {
printer.add(mainText);
} else {
printer.add(mainText);
}
}
isFirst = false;
});
});
this.on('close', function (name, node) {
isnode = false;
var element = elements.shift();
var content = printer.content;
printer = printer.parent;
node.content = content;
if (typeof _node2.default[name] === 'function') printer.add(_node2.default[name](node));else printer.add(_node2.default.tag(node));
i--;
//if (i === 0) this.emit('done')
});
this.on('self-closing', function (name, node) {
if (typeof _node2.default[name] === 'function') printer.add(_node2.default[name](node));else printer.add(_node2.default.selfClosing(node));
//if (i === 0) this.emit('done')
});
this.on('done', function () {
//console.log('parser-done', printer.content);
//printer.content = printer.content.replace(/^\s*\n/gm, '\n')
_this.compiled = printer.content;
_this.write(_this.compiled);
printer = new Printer(null);
});
this.extract();
}
_createClass(Parser, [{
key: 'balanced',
value: function balanced() {
var result = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var pairs = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];
var s = result.out ? result.out : result.input;
var c = 0,
_o = [],
_c = [],
_x = [],
st = '<',
canclose = -1,
openat = 0,
sp = [],
sub = s,
pair = false,
openpos = 0,
closepos = 0,
subs = '',
isopen = false,
eqpos = 0,
element = {},
keys = [],
key = undefined;
var open = pairs.map(function (p) {
return p.charAt(0);
});
var close = pairs.map(function (p) {
return p.charAt(1);
});
var openMatch = null;
var closeMatch = null;
var currentOpen = false;
var subcopy = s;
var values = [];
result.pairs = {};
result.error = false;
result.return = false;
//result.attr = result.attr ? result.attr : {}
result.out = '';
result.props = result.props ? result.props : [];
var tagreg = /^<([^\(\s\=\/\>]+)/;
var tagmatch = tagreg.exec(s);
if (tagmatch) {
//console.log('tagmatch', tagmatch)
var name = tagmatch[1].split(':');
result.name = name[0];
if (result.name.indexOf('[') > -1) {
var rn = result.name.replace(/\[/g, '.').replace(/\]/g, '.');
subcopy = s = s.replace(result.name, rn);
result.comprop = '' + result.name;
result.name = rn;
}
if (result.name.indexOf('.') > -1) {
//result.name = result.name.split('.')[0]
result.dotprop = '' + result.name;
}
result.key = name[1] || null;
}
for (var i = 0; i < s.length; i++) {
var ch = s.charAt(i);
result.pos = i;
if (ch === st && s.charAt(i + 1) !== '/' && canclose === -1) {
canclose = i;
openat = i;
//let s1 = s.substr(i+1).split(' ').shift()
//result.name = s1.replace('=','').replace('>','')
}
if (canclose > -1) {
if (!currentOpen) {
var oi = open.indexOf(ch);
if (oi > -1) {
openMatch = ch;
closeMatch = close[oi];
}
}
if (ch === openMatch) {
currentOpen = openMatch;
c++;
_o.push(i);
if (!isopen) {
var s1 = s.substring(0, i);
var tst = s1.replace(/\s+/g, ' ').split(' ');
var pk = tst.pop();
key = pk.length ? pk : tst.pop() + ' ';
//console.log('OPEN', result.name, key, openMatch)
keys.unshift(key);
}
isopen = true;
} else if (ch === closeMatch) {
c--;
_c.push(i);
if (c === 0) {
var _key = keys.shift();
var rel = _key.endsWith('=') ? 'assign' : 'invoke';
if (_key.indexOf('<') === 0) {
result.box = true;
_key = _key.substr(1);
rel = 'def';
}
var type = openMatch + closeMatch;
currentOpen = false;
openMatch = null;
closeMatch = null;
isopen = false;
openpos = _o.shift();
closepos = _c.pop();
var value = s.substring(openpos, closepos + 1);
//console.log('CLOSE'.bgRed, result.name.bgGreen, key.bgBlue, value.bgGreen)
result.__i = result.props.push({
key: _key.trim().replace('=', ''),
value: value, type: type, rel: rel
});
subcopy = subcopy.replace(_key + value, result.__i);
//console.log('CLOSE', result.name, key, type, value)
//console.log('SUBCOPY', subcopy)
_o = [];
_c = [];
} else {
//openpos = _o.shift()
//closepos = _c.pop()
//console.log('ERROR', key)
//console.log('RESULT', result)
// result.error = {
// type: 'unbalanced',
// input: s.substring(openpos, closepos + 1)
// }
// return result
}
if (c < 0) {
result.error = 'c < 0';
return result;
}
}
if (ch === '>') {
if (c === 0) {
if (s[i - 1] === '=') result.return = true;
if (s[i - 1] === '/') result.selfClosing = true;
var tag = s.substring(canclose, i + 1);
result.tag = tag;
//console.log(result.name.bgRed + tag.bgYellow)
subcopy = subcopy.substring(openat + 1, i);
//console.log('subcopy>>>>>>>>', subcopy)
subcopy = subcopy.split('>').shift().trim();
if (result.return || result.selfClosing) subcopy = subcopy.substring(0, subcopy.length - 1).trim();
canclose = 0;
result.out = subcopy.replace(/\s+/g, ' ').trim();
return result;
} else {
//console.log('\nIGNORE '.red, s.substring(openat, i).bgYellow + '>'.bgRed)
}
}
}
}
if (c === 0) return result;
result.error = 'c !== 0';
return result;
}
}, {
key: 'extract',
value: function extract() {
var _this2 = this;
var i = 0,
node = null,
roots = 0,
frompos = 0;
this.on('<', function (pos, tok) {
var str = _this2.string(pos);
if (str.indexOf('</') === 0) return;
var innerpos = pos + tok.length;
var innerstr = str.slice(innerpos);
var props = {};
var a = str;
var b = null;
if (a.length) {
b = _this2.balanced({ input: a, __i: 0 }, ['()', '{}', '[]']);
b.out = b.out.replace(/([\w\-]+)\s?=?\s?['"`]([^'`"]+)["'`]/g, function (match, key, value) {
var type = 'static';
if (key === 'class') {
value = '{' + value.split(' ').map(function (c) {
return '\'' + c + '\': true';
}).join(', ') + '}';
type = '{}';
}
b.__i = b.props.push({ key: key, value: value, type: type, rel: 'assign' });
return b.__i;
});
frompos = pos + b.pos;
if (b.out.startsWith(b.name)) b.out = b.out.substr(b.name.length);
b.out = b.out.trim();
var c = b.out.split(' ').map(function (i) {
var index = parseInt(i);
if (index) {
return b.props[index - 1];
} else if (i.length) {
var reg = /[^A-Za-z0-9-]/;
var v = i.split('=');
if (v.length === 2) {
return { key: v[0], value: v[1], type: 'value' };
}
if (i.indexOf('...') === 0) return { key: i, type: 'spread' };
if (i.startsWith('+') || i.startsWith('-')) return { key: i.substr(1), value: i[0] === '+' ? 1 : 0, type: '10' };
return { key: i, value: i, type: 'keyed' };
} else {
return null;
}
});
b.props = c;
}
if (b && b.name && !b.error) {
(function () {
var tag = b.tag || '';
var name = b.name;
var key = b.key;
var attrs = b.props;
var props = {};
attrs.forEach(function (attr, i) {
if (attr) if (attr.key === ':' + key) delete b.props[i];else props[attr.key] = attr.type === 'static' ? '\'' + attr.value + '\'' : attr.value;
});
var parent = _this2.index[_this2.index.length - 1] ? _this2.index[_this2.index.length - 1] : 'root';
node = { i: i, tag: tag, name: name, key: key, attrs: attrs, props: props, parent: parent, start: { pos: pos, tok: tok } };
node.type = b.selfClosing ? 'self-closing' : 'normal';
node.box = b.box;
node.name = node.name ? node.name.match(/([a-z-0-9.]+)/)[1] : node.name;
node.camelName = _this2.toCamel(node.name);
node.comprop = b.comprop;
node.dotprop = b.dotprop;
//console.log('node', node)
if (_this2.text.length) {
var text = _this2.text.pop();
if (text) _this2.emit('text', _this2.string(text, pos));
}
_this2.node = node;
if (b.selfClosing) {
node.body = null;
_this2.emit('self-closing', name, node);
_this2.emit('node', node);
} else {
_this2.index.push(node);
_this2.emit('open', name, node);
_this2.text.push(pos + tag.length);
}
i++;
})();
}
});
this.on('</', function (pos, tok) {
var start = _this2.index.pop();
if (start) {
var close = _this2.string(pos, pos + tok.length + start.name.length + 1);
if (close === '</' + start.name + '>') {
i--;
node = start;
} else {
node = null;
_this2.index.push(start);
}
}
if (node) {
node.body = _this2.string(node.start.pos + node.tag.length, pos);
if (node.box) {
//node.returning = 1
var retreg = /(.+return([^<\/>]+)<\/>)/gm;
var isret = retreg.exec(node.body + '</>');
if (isret) {
node.returning = isret[2].trim();
}
}
node.end = { pos: pos, tok: tok };
node.type = 'normal';
if (_this2.text.length) {
var text = _this2.text.pop();
if (text) _this2.emit('text', _this2.string(text, pos));
}
_this2.text.push(pos + tok.length + node.name.length + 1);
_this2.emit('close', node.name, node);
_this2.emit('node', node);
}
});
}
}, {
key: 'toCamel',
value: 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);
}
}, {
key: 'exprattr',
value: function exprattr(str) {
str = str.replace(/\n/g, ' ').replace(/\t/g, '').trim();
var re = /((\w+\.)+)?(\w+)\s?(\([^)]+\))/gi; ///(\w+)\s?(\([^)]+\))([\s\/\>])/gi;
var exprs = [];
var result = str.replace(re, function (m, obj, iobj, type, expr, s) {
exprs.push({ type: type, expr: expr, obj: obj });
return '';
});
return { result: result, exprs: exprs };
}
}, {
key: 'string',
value: function string(a, b) {
if (typeof a === 'string') {
this._string = a; //.replace(/\n/g, ' ').replace(/\t/g, '').trim()
this.result = this._string;
return this._string;
}
return this._string.slice(a, b);
}
}, {
key: 'update',
value: function update(payload, value) {
var _this3 = this;
var diff = {};
if (value && typeof payload === 'string') {
var key = payload;
payload = {};
payload[key] = value;
}
if (payload && (typeof payload === 'undefined' ? 'undefined' : _typeof(payload)) === 'object') {
Object.keys(payload).map(function (k) {
if (_this3[k] !== payload[k]) {
diff[k] = {
old: _this3[k],
new: payload[k]
};
_this3[k] = payload[k];
}
});
}
this.emit('update', payload, diff);
}
}, {
key: 'run',
value: function run() {
var _this4 = this;
this.chars = [];
this.index = [];
this.attrs = [];
this.props = {};
this.nodes = [];
this.text = [];
this.tree = {};
this.result = '';
this.compiled = '';
this.emit('run', this.token);
var string = this.string(0);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
var _loop = function _loop() {
var char = _step.value;
var index = _this4.chars.push(char) - 2;
if (char !== '"' && char !== '`' && char !== '\'') {
Object.keys(_this4.token).forEach(function (token) {
var s = _this4.string(index).startsWith(token);
if (s === true) {
_this4.emit(token, index, token);
}
});
}
};
for (var _iterator = string[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
_loop();
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
this.emit('done');
return this.compiled;
}
}, {
key: 'fromString',
value: function fromString(content, fn) {
this.fn = fn;
this.source = content;
//let a = content //.replace(/\s+/g, ' ') //.trim()
//let eqreg = /(\s+)?(\=)(\s+)?/g
//a = a.replace(eqreg, '=')
this.string(content);
this.emit('ready');
return this.run();
}
}, {
key: 'parse',
value: function parse(content, fn) {
_node2.default.clearMeta();
_node2.default.boxes = [];
this.fn = fn;
//let eqreg = /(\s+)?(\=)(\s+)?/g
//content = content.replace(eqreg, '=')
this.source = content;
this.string(content);
this.emit('ready');
this.run();
//this.compiled = this.compiled.replace(/^\s*[\r\n]/gm, '')
if (typeof fn === 'function') return fn.call(null, this.source, this.compiled);
return (0, _jsBeautify2.default)(this.compiled, {
indent_with_tabs: true,
indent_size: 4
});
//return this.compiled
}
}, {
key: 'transform',
value: function transform(code) {
return {
code: this.parse('<mod>' + code + '</mod>'),
node: this.node
};
}
}, {
key: 'write',
value: function write(content) {
if (typeof this.fn === 'function') this.fn.call(null, this.source, content);
}
}]);
return Parser;
}();
exports.default = Parser;
//# sourceMappingURL=data:application/json;base64,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O2tCQUFOLE1BQU0iLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9ic2VydmUgICAgICBmcm9tICcuL2V2ZW50J1xuaW1wb3J0IHRyYW5zZm9ybSAgICBmcm9tICcuL25vZGUnXG5pbXBvcnQgYmVhdXRpZnkgICAgIGZyb20gJ2pzLWJlYXV0aWZ5J1xuXG5mdW5jdGlvbiBQcmludGVyKHBhcmVudCkge1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuY29udGVudCA9ICcnO1xuICAgIHRoaXMuc3BhY2VyID0gJyc7XG4gICAgdGhpcy5pbmRlbnQgPSBwYXJlbnQgPyBwYXJlbnQuaW5kZW50IDogJyc7XG4gICAgdGhpcy5pc0ZpcnN0SXRlbSA9IHRydWU7XG59XG5cblByaW50ZXIucHJvdG90eXBlLmFkZFNwYWNlID0gZnVuY3Rpb24gKHNwYWNlKSB7XG4gICAgdGhpcy5zcGFjZXIgKz0gc3BhY2U7XG4gICAgaWYgKHNwYWNlLmluZGV4T2YoXCJcXG5cIikgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuaW5kZW50ID0gL1teXFxuXSokLy5leGVjKHNwYWNlKVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluZGVud