UNPKG

@effectful/transducers-loose

Version:

@effectful/transducers built with faster generators

547 lines (546 loc) 15.7 kB
"use strict"; exports.__esModule = true; exports.convertCtrl = exports.color = void 0; exports.copyComment = copyComment; exports.fin = exports.default = void 0; exports.markNodeType = markNodeType; exports.output = exports.opts = void 0; exports.setComment = setComment; exports.setEndComment = setEndComment; exports.toConsole = void 0; exports.toStr = toStr; var Kit = require("./kit"); var _scope = require("./scope"); var Trace = require("./trace"); var _core = require("./core"); var _generator = require("@babel/generator"); var M = require("@effectful/es-rt/opts/loose"); const BROWSER_DEBUG = Trace.BROWSER_DEBUG; const opts = exports.opts = { color: true }; function markNodeType(s) { var i, ti, markNodeType = M.generator(), loop, r, p; markNodeType.step = markNodeType_1; markNodeType.$step = 3; return markNodeType; function markNodeType_1(p) { for (;;) { switch (markNodeType.$cur = markNodeType.$step) { case 3: loop = M.iterator(s); markNodeType.$step = 4; markNodeType.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.enter) { ti = (0, _core.typeInfo)(i); if (ti.kind === "ctrl") { (i.value.comments || (i.value.comments = [])).unshift({ txt: (0, _core.symName)(i.type), style: styles.nodetype }); } else { if (i.value.comments != null && i.value.comments.length) { (i.value.comments || (i.value.comments = [])).unshift({ txt: (0, _core.symName)(i.type).match(/[A-Z]/g).join(""), style: styles.nodetype }); } } } markNodeType.$step = 4; markNodeType.value = i; return markNodeType; } else { markNodeType.$step = 0; markNodeType.value = void 0; markNodeType.done = true; return markNodeType; } case 0: markNodeType.$step = 0; markNodeType.value = p; markNodeType.done = true; return markNodeType; case 1: markNodeType.$step = 0; throw p; default: throw new Error("invalid state"); } } } } const convertCtrl = exports.convertCtrl = Kit.pipe(_core.resetFieldInfo, markNodeType, Array.from, function convertCtrl(s) { var walk = function walk1(sw) { var i, fld, ti, lab, stmt, _walk = M.generator(), loop, r, p; _walk.step = walk_1; _walk.$step = 3; return _walk; function walk_1(p) { var a; for (;;) { switch (_walk.$cur = _walk.$step) { case 3: loop = M.iterator(sw); _walk.$step = 4; _walk.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.enter) { fld = i.value.fieldInfo || {}; ti = (0, _core.typeInfo)(i); if (ti.kind === "ctrl") { s.peel(i); lab = s.label(); stmt = !fld.expr; a = s.enter(i.pos, stmt ? _core.Tag.BlockStatement : _core.Tag.SequenceExpression, { comments: i.value.comments }); _walk.$step = 5; _walk.value = a; return _walk; } else { _walk.$step = 12; _walk.$step = 12; continue; } } else { _walk.$step = 12; _walk.$step = 12; continue; } } else { _walk.$step = 0; _walk.value = void 0; _walk.done = true; return _walk; } case 5: a = s.enter(stmt ? _core.Tag.body : _core.Tag.expressions, _core.Tag.Array); _walk.$step = 6; _walk.value = a; return _walk; case 6: if (!i.leave) { _walk.$step = 7; _walk.$step = 7; continue; } else { _walk.$step = 10; _walk.$step = 10; continue; } case 7: if (s.curLev() != null) { a = s.enter(_core.Tag.push, Kit.Subst); _walk.$step = 8; _walk.value = a; return _walk; } else { _walk.$step = 10; _walk.$step = 10; continue; } case 8: a = walk(s.one()); _walk.$step = 9; return _walk.$delegate(a); case 9: a = s.leave(); _walk.$step = 7; return _walk.$delegate(a); case 10: a = lab(); _walk.$step = 11; return _walk.$delegate(a); case 11: Kit.skip(s.leave()); _walk.$step = 4; _walk.$step = 4; continue; case 12: _walk.$step = 4; _walk.value = i; return _walk; case 0: _walk.$step = 0; _walk.value = p; _walk.done = true; return _walk; case 1: _walk.$step = 0; throw p; case 2: return _walk.$redir(p); default: throw new Error("invalid state"); } } } }; s = Kit.auto(s); return walk(s); }, Kit.completeSubst, Array.from, Kit.adjustFieldType); const color = exports.color = BROWSER_DEBUG ? function color(s) { var i, j, _j, _color = M.generator(), loop, _loop, loop1, r, p; _color.step = color_1; _color.$step = 3; return _color; function color_1(p) { for (;;) { switch (_color.$cur = _color.$step) { case 3: if (!opts.color) { _color.$step = 5; return _color.$delegate(s); } else { loop = M.iterator(s); _color.$step = 4; _color.$step = 4; continue; } case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.enter && i.value.comments) { _loop = M.iterator(i.value.comments); for (; !(_loop = _loop.step()).done;) { j = _loop.value; if (j.style != null && (0, _core.typeInfo)(i).kind === "node") { j.txt = `%c${j.txt}%c`; j.args = [j.style, ""]; } } } if (i.leave && i.value.tcomments) { loop1 = M.iterator(i.value.tcomments); for (; !(loop1 = loop1.step()).done;) { _j = loop1.value; if (_j.style != null && (0, _core.typeInfo)(i).kind === "node") { _j.txt = `%c${_j.txt}%c`; _j.args = [_j.style, ""]; } } } _color.$step = 4; _color.value = i; return _color; } else { _color.$step = 0; _color.value = void 0; _color.done = true; return _color; } case 0: _color.$step = 0; _color.value = p; _color.done = true; return _color; case 1: _color.$step = 0; throw p; case 5: _color.$step = 0; _color.$step = 0; p = r; continue; case 2: return _color.$redir(p); default: throw new Error("invalid state"); } } } } : s => s; function getArgs(s) { var i, j, k, _j, _k, getArgs = M.generator(), loop, _loop, loop1, loop2, loop3, r, p; getArgs.step = getArgs_1; getArgs.$step = 3; return getArgs; function getArgs_1(p) { for (;;) { switch (getArgs.$cur = getArgs.$step) { case 3: loop = M.iterator(s); getArgs.$step = 4; getArgs.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.enter && i.value.comments) { _loop = M.iterator(i.value.comments); getArgs.$step = 5; getArgs.$step = 5; continue; } else { getArgs.$step = 7; getArgs.$step = 7; continue; } } else { getArgs.$step = 0; getArgs.value = void 0; getArgs.done = true; return getArgs; } case 5: if (!(_loop = _loop.step()).done) { j = _loop.value; if (j.args) { loop1 = M.iterator(j.args); getArgs.$step = 6; getArgs.$step = 6; continue; } else { getArgs.$step = 5; getArgs.$step = 5; continue; } } else { getArgs.$step = 7; getArgs.$step = 7; continue; } case 6: if (!(loop1 = loop1.step()).done) { k = loop1.value; getArgs.$step = 6; getArgs.value = k; return getArgs; } else { getArgs.$step = 5; getArgs.$step = 5; continue; } case 7: if (i.leave && i.value.tcomments) { loop2 = M.iterator(i.value.tcomments); getArgs.$step = 8; getArgs.$step = 8; continue; } else { getArgs.$step = 4; getArgs.$step = 4; continue; } case 8: if (!(loop2 = loop2.step()).done) { _j = loop2.value; if (_j.args) { loop3 = M.iterator(_j.args); getArgs.$step = 9; getArgs.$step = 9; continue; } else { getArgs.$step = 8; getArgs.$step = 8; continue; } } else { getArgs.$step = 4; getArgs.$step = 4; continue; } case 9: if (!(loop3 = loop3.step()).done) { _k = loop3.value; getArgs.$step = 9; getArgs.value = _k; return getArgs; } else { getArgs.$step = 8; getArgs.$step = 8; continue; } case 0: getArgs.$step = 0; getArgs.value = p; getArgs.done = true; return getArgs; case 1: getArgs.$step = 0; throw p; default: throw new Error("invalid state"); } } } } function applyComments(s) { var i, node, applyComments = M.generator(), loop, r, p; applyComments.step = applyComments_1; applyComments.$step = 3; return applyComments; function applyComments_1(p) { for (;;) { switch (applyComments.$cur = applyComments.$step) { case 3: loop = M.iterator(s); applyComments.$step = 4; applyComments.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; node = i.value.node; if (i.enter && node != null) { if (i.value.comments != null && i.value.comments.length) { (node.leadingComments || (node.leadingComments = [])).push({ type: "CommentBlock", value: i.value.comments.map(v => v.txt).join("|") }); } if (i.value.tcomments != null && i.value.tcomments.length) { (node.trailingComments || (node.trailingComments = [])).push({ type: "CommentBlock", value: i.value.tcomments.map(v => v.txt).join("|") }); } } applyComments.$step = 4; applyComments.value = i; return applyComments; } else { applyComments.$step = 0; applyComments.value = void 0; applyComments.done = true; return applyComments; } case 0: applyComments.$step = 0; applyComments.value = p; applyComments.done = true; return applyComments; case 1: applyComments.$step = 0; throw p; default: throw new Error("invalid state"); } } } } const toConsole = exports.toConsole = Kit.curry(function toConsole(tag, s) { var root, name, col, args; s = Kit.auto(s); root = s.first.value; name = (0, _core.symName)(s.first.type).match(/[A-Z]/g).join(""); if (root.funcId) name += ":" + root.funcId.id; if (BROWSER_DEBUG && opts.color) (tag[0] === "+" ? console.group : console.groupCollapsed)(`dump %c${tag} %c${name}`, "color:orange;font-size:large", "color:coral");else console.log(`dump ${tag}`); col = Kit.pipe(convertCtrl, color, _scope.tempNames, Array.from, applyComments, Array.from)(s); args = Array.from(getArgs(col)); (0, _core.consume)(Trace.verify(col)); console.log((0, _generator.default)(col[0].value.node).code, ...args); if (BROWSER_DEBUG) console.groupEnd(); }); const fin = exports.fin = Kit.pipe(_core.removeNulls, _scope.tempNames, convertCtrl, Array.from, applyComments, Array.from); function toStr(s, opts = {}) { return (0, _generator.default)((0, _core.consume)(Kit.repos(s, _core.Tag.top)).top, opts).code; } const output = exports.output = Kit.curry(function dump(tag, s) { var sa, sl, opts, dest, _s; sa = Kit.toArray(s); sl = Kit.auto(Kit.clone(sa)); opts = sl.opts || {}; dest = void 0; if (BROWSER_DEBUG) { dest = "console"; } else { dest = `dump-${tag}.js`; if (opts.dump) { if (opts.dump.substr) { if (opts.dump === "console") { dest = opts.dump; } else { dest = opts.dump + dest; } } else { _s = opts.dump[tag]; if (_s == null && _s.substr) { dest = _s; } } } } if (dest === "console") { toConsole(tag, sl); } else { require("fs").writeFileSync(dest, toStr(sl)); } return sa; }); var _default = exports.default = output; function setComment(i, txt, style = "none") { style = style.substr && styles[style] || style; (i.value.comments || (i.value.comments = [])).push({ txt, style }); return i; } function setEndComment(i, txt, style = "none") { style = style.substr && styles[style] || style; (i.value.tcomments || (i.value.tcomments = [])).push({ txt, style }); return i; } function copyComment(f, t) { if (f.value.comments != null) (t.value.comments || (t.value.comments = [])).push(...f.value.comments); if (f.value.tcomments != null) (t.value.tcomments || (t.value.tcomments = [])).push(...f.value.tcomments); return t; } const styles = { large: "font-size:xx-large;color:orange", hl: "font-size:large;color:navy;", small: "font-size:large;color:navy;", smallH: "font-size:large;color:orange;font-weight:bolder", nodetype: "font-size:xx-small;color:green;font-weight:bolder", none: "" };