@effectful/transducers-loose
Version:
@effectful/transducers built with faster generators
547 lines (546 loc) • 15.7 kB
JavaScript
"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: ""
};