UNPKG

bitbox-compiler

Version:

bitbox /unbox

656 lines (548 loc) 73.7 kB
'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