@effectful/transducers-loose
Version:
@effectful/transducers built with faster generators
541 lines (537 loc) • 16.1 kB
JavaScript
;
exports.__esModule = true;
exports.all = exports.BROWSER_DEBUG = void 0;
exports.ccg = ccg;
exports.cg = cg;
exports.cleanComments = cleanComments;
exports.opts = exports.lazy = exports.default = void 0;
exports.setSymComments = setSymComments;
exports.verify = verify;
var _generator = require("@babel/generator");
var T = require("@babel/types");
var _core = require("./core");
var M = require("@effectful/es-rt/opts/loose");
const MAX_TRACE_CODE_LEN = 40;
const BROWSER_DEBUG = exports.BROWSER_DEBUG = typeof window !== "undefined" && window.chrome;
const enterStyles = "background: #222; color: #bada55;font-size:1.5em";
const leaveStyles = "color: #ee5757; background: black";
const newTagStyle = "color:purple;font-size:large";
const positionStyle = "color:gray;text-decoration:underline";
const dirStyle = "font-size:x-large;font-weight:bolder";
const opts = exports.opts = {
color: true
};
/**
* outputs short description of AST node
*/
function cg(ast, opts = {}) {
var res;
if (ast == null) {
// console.error("<NULL>")
return "<NULL>";
}
try {
if (Array.isArray(ast)) {
ast = ast.length > 0 && T.isExpression(ast[0]) ? T.sequenceExpression(ast) : T.blockStatement(ast);
}
res = (0, _generator.default)(ast, opts, "").code;
} catch (e) {
if (ast.type != null) console.log("ERROR:", e.stack);
}
if (res != null) {
return res;
}
return "!!" + opts.compact ? JSON.stringify(ast, defaultReplacer) : JSON.stringify(ast, defaultReplacer, 2);
}
function defaultReplacer(n, v) {
return n === "leadingComments" || n === "trailingComments" ? void 0 : v;
}
/**
* same as `cg` but using compact syntax
*/
function ccg(ast) {
return cg(ast, {
compact: true
});
}
if (BROWSER_DEBUG) {
global.cg = cg;
global.ccg = ccg;
}
function verify(s) {
var stack,
i,
ti,
ctrlPos,
f,
keys,
k,
_keys,
_f,
verify = M.generator(),
loop,
r,
p;
verify.step = verify_1;
verify.$step = 3;
return verify;
function verify_1(p) {
for (;;) {
switch (verify.$cur = verify.$step) {
case 3:
stack = [];
loop = M.iterator((0, _core.resetFieldInfo)(s));
verify.$step = 4;
verify.$step = 4;
continue;
case 4:
if (!(loop = loop.step()).done) {
i = loop.value;
ti = (0, _core.typeInfo)(i);
ctrlPos = (0, _core.symInfo)(i.pos).kind === "ctrl";
if (i.enter && stack.length) {
[f, keys] = stack[stack.length - 1];
if (f.type === _core.Tag.Array) {
if (!ctrlPos) {}
} else {
if (keys != null && !ctrlPos) {
k = void 0;
while ((k = keys.shift()) != null) {
if (_core.Tag[k] === i.pos) {
break;
}
}
}
}
}
if (i.enter && i.value.fieldInfo != null) {
if (i.type === _core.Tag.Array) {}
}
if (i.enter && !i.leave) {
_keys = T.VISITOR_KEYS[(0, _core.symName)(i.type)];
stack.push([i, _keys && [..._keys]]);
}
if (!i.enter && i.leave) {
[_f] = stack.pop();
if (ti.kind !== "ctrl") {}
}
verify.$step = 4;
verify.value = i;
return verify;
} else {
verify.$step = 0;
verify.value = void 0;
verify.done = true;
return verify;
}
case 0:
verify.$step = 0;
verify.value = p;
verify.done = true;
return verify;
case 1:
verify.$step = 0;
throw p;
default:
throw new Error("invalid state");
}
}
}
}
function pad(s) {
if (s.length % 2) s += " ";
const sps = Array(Math.max(20 - s.length / 2, 2)).join(" ");
return sps + s + sps;
}
const traceImpl = BROWSER_DEBUG ? browserTraceImpl : traceNodeImpl;
function traceNodeImpl(prefix, s) {
var level,
x,
term,
i,
dir,
clevel,
descr,
n,
node,
comments,
commentsTxt,
t,
loc,
f,
_s,
e,
traceNodeImpl = M.generator(),
loop,
r,
p;
traceNodeImpl.step = traceNodeImpl_1;
traceNodeImpl.$step = 3;
return traceNodeImpl;
function traceNodeImpl_1(p) {
for (;;) {
switch (traceNodeImpl.$cur = traceNodeImpl.$step) {
case 3:
level = 0;
x = 0;
term = require("terminal-kit").terminal;
loop = M.iterator(s);
traceNodeImpl.$step = 4;
traceNodeImpl.$step = 4;
continue;
case 4:
if (!(loop = loop.step()).done) {
i = loop.value;
if (i.enter) {
level++;
}
dir = term.bold(i.leave ? i.enter ? "|" : "/" : "\\");
clevel = s.level ? `/${s.level}` : "";
descr = `${term.green((0, _core.symName)(i.pos))}:${i.type.ctrl ? term.green((0, _core.symName)(i.type)) : term.green.bold((0, _core.symName)(i.type))}[${level}${clevel}]`;
n = "";
({
node
} = i.value);
comments = [];
commentsTxt = "";
t = [].concat(i.value.comments || [], i.value.tcomments || []);
if (t.length) {
if (comments.length) {
commentsTxt = term.bold("[") + comments.join(" ") + term.bold("]");
}
}
if (node != null && i.type !== _core.Tag.Array && (0, _core.symKind)(i.type) !== "ctrl") {
n = ccg(node);
if (n.length > MAX_TRACE_CODE_LEN) {
n = n.substr(0, MAX_TRACE_CODE_LEN) + "...";
}
n = term.yellow(n);
({
loc
} = node);
if (loc != null) {
({
source: f,
start: _s,
end: e
} = loc);
n += term.blue(` @${f || "?"}-${_s.line}:${_s.column}..${e.line}:${e.column}`);
} else {
n += term.bold(" @new");
}
}
console.log(prefix, Array(level).join(" "), dir, `${descr}@${x}`, commentsTxt, n);
traceNodeImpl.$step = 5;
traceNodeImpl.value = i;
return traceNodeImpl;
} else {
console.log(prefix, "len:", x);
traceNodeImpl.$step = 0;
traceNodeImpl.value = void 0;
traceNodeImpl.done = true;
return traceNodeImpl;
}
case 5:
if (i.leave) {
level--;
}
x++;
traceNodeImpl.$step = 4;
traceNodeImpl.$step = 4;
continue;
case 0:
traceNodeImpl.$step = 0;
traceNodeImpl.value = p;
traceNodeImpl.done = true;
return traceNodeImpl;
case 1:
traceNodeImpl.$step = 0;
throw p;
default:
throw new Error("invalid state");
}
}
}
}
function browserTraceImpl(prefix, s) {
var level,
x,
first,
i,
name,
styles,
dir,
clevel,
tp,
descr,
idtxt,
ldescr,
n,
node,
comments,
commentsTxt,
t,
pstyle,
j,
mod,
_s,
loc,
f,
s1,
e,
browserTraceImpl = M.generator(),
loop,
_loop,
r,
p;
browserTraceImpl.step = browserTraceImpl_1;
browserTraceImpl.$step = 3;
return browserTraceImpl;
function browserTraceImpl_1(p) {
for (;;) {
switch (browserTraceImpl.$cur = browserTraceImpl.$step) {
case 3:
level = 0;
x = 0;
first = true;
loop = M.iterator(s);
browserTraceImpl.$step = 4;
browserTraceImpl.$step = 4;
continue;
case 4:
if (!(loop = loop.step()).done) {
i = loop.value;
if (first) {
first = false;
name = (0, _core.symName)(i.type);
if (i.value.funcId) {
name += ":" + i.value.id;
}
console.log(`%c${pad(prefix + " " + name.match(/[A-Z]/g).join(""))}%c`, `background:#2B81AF;color:#fff;font-size:xx-large;
text-shadow:rgba(0, 0, 0, 0.5) 2px 2px 1px`, "");
}
styles = [];
if (i.enter) {
level++;
}
dir = i.enter && i.leave ? "\u21c4" : i.enter ? "\u2192" : "\u2190";
clevel = s.level ? `/${s.level}` : "";
tp = i.pos === i.type ? (0, _core.symName)(i.type) : `${(0, _core.symName)(i.pos)}:${(0, _core.symName)(i.type)}`;
descr = `${prefix}${tp}[${level}${clevel}]`;
idtxt = i.value.id ? `-${i.value.id}` : "";
ldescr = void 0;
if (i.pos === i.type) {
ldescr = `${prefix}%c${(0, _core.symName)(i.type)}%c[${level}${clevel}]`;
styles.push((0, _core.symKind)(i.type) === "ctrl" ? "color:navy;font-size:large" : "color:steelblue", "");
} else {
ldescr = `${prefix}%c${(0, _core.symName)(i.pos)}:%c${(0, _core.symName)(i.type)}%c[${level}${clevel}]`;
styles.push((0, _core.symKind)(i.pos) === "ctrl" ? "color:olive;font-size:large" : "color:green");
styles.push((0, _core.symKind)(i.type) === "ctrl" ? "color:navy;font-size:large" : "color:steelblue", "");
}
if (i.enter && !i.leave && console.group != null) {
if (x === 0 && i.value.collapsed !== false || i.value.collapsed) {
console.groupCollapsed(descr);
} else {
console.group(descr);
}
}
n = "";
({
node
} = i.value);
comments = [];
commentsTxt = "";
t = [].concat(i.value.comments || [], i.value.tcomments || []);
if (t.length) {
pstyle = "color:green;font-size:large";
styles.push(pstyle);
_loop = M.iterator(t);
for (; !(_loop = _loop.step()).done;) {
j = _loop.value;
comments.push(`%c${j.txt}%c`);
mod = !i.enter ? "font-size:small;font-style:italic" : "font-weight:bolder;font-size:large";
_s = `${j.style || ""}${mod}`;
styles.push(_s, "");
}
if (comments.length) {
commentsTxt = "%c[" + comments.join(" ") + "%c]%c";
styles.push(pstyle, "");
}
}
if (node != null && i.type !== _core.Tag.Array && (0, _core.symKind)(i.type) !== "ctrl") {
n = ccg(node);
if (n.length > MAX_TRACE_CODE_LEN) {
n = n.substr(0, MAX_TRACE_CODE_LEN) + "...";
}
n = `%c ${n} %c`;
styles.push(i.enter ? enterStyles : leaveStyles, "");
({
loc
} = node);
if (loc != null) {
({
source: f,
start: s1,
end: e
} = loc);
n += ` %c@${f || "?"}-${s1.line}:${s1.column}..${e.line}:${e.column}%c`;
styles.push(positionStyle, "");
} else {
n += " %c@new%c";
styles.push(newTagStyle, "");
}
}
console.log(`%c${dir}%c ${ldescr}@${x}${idtxt}${commentsTxt} ${n}`, dirStyle, "", ...styles, i.value);
browserTraceImpl.$step = 5;
browserTraceImpl.value = i;
return browserTraceImpl;
} else {
console.log(`${prefix}: len: ${x}`);
browserTraceImpl.$step = 0;
browserTraceImpl.value = void 0;
browserTraceImpl.done = true;
return browserTraceImpl;
}
case 5:
if (i.leave) {
if (!i.enter && console.group != null) {
console.groupEnd();
}
level--;
}
x++;
browserTraceImpl.$step = 4;
browserTraceImpl.$step = 4;
continue;
case 0:
browserTraceImpl.$step = 0;
browserTraceImpl.value = p;
browserTraceImpl.done = true;
return browserTraceImpl;
case 1:
browserTraceImpl.$step = 0;
throw p;
default:
throw new Error("invalid state");
}
}
}
}
function traceAllImpl(prefix, s) {
return [...(prefix[0] === "!" ? traceImpl(prefix, s) : verify(traceImpl(prefix, s)))];
}
function traceArgs(impl) {
return function traceImpl(prefix, s) {
if (prefix == null || prefix.substr == null) {
if (s == null) s = prefix;
prefix = "";
}
if (prefix.length) prefix += ":";
if (s == null || s[Symbol.iterator] == null) return s => impl(prefix, s);
return impl(prefix, s);
};
}
function cleanComments(s) {
var i,
cleanComments = M.generator(),
loop,
r,
p;
cleanComments.step = cleanComments_1;
cleanComments.$step = 3;
return cleanComments;
function cleanComments_1(p) {
for (;;) {
switch (cleanComments.$cur = cleanComments.$step) {
case 3:
loop = M.iterator(s);
cleanComments.$step = 4;
cleanComments.$step = 4;
continue;
case 4:
if (!(loop = loop.step()).done) {
i = loop.value;
if (i.enter) {
i.value.comments = null;
i.value.tcomments = null;
if (i.value.node) {
i.value.node.leadingComments = null;
i.value.node.trailingComments = null;
}
}
cleanComments.$step = 4;
cleanComments.value = i;
return cleanComments;
} else {
cleanComments.$step = 0;
cleanComments.value = void 0;
cleanComments.done = true;
return cleanComments;
}
case 0:
cleanComments.$step = 0;
cleanComments.value = p;
cleanComments.done = true;
return cleanComments;
case 1:
cleanComments.$step = 0;
throw p;
default:
throw new Error("invalid state");
}
}
}
}
function setSymComments(s) {
var i,
c,
setSymComments = M.generator(),
loop,
r,
p;
setSymComments.step = setSymComments_1;
setSymComments.$step = 3;
return setSymComments;
function setSymComments_1(p) {
for (;;) {
switch (setSymComments.$cur = setSymComments.$step) {
case 3:
loop = M.iterator(s);
setSymComments.$step = 4;
setSymComments.$step = 4;
continue;
case 4:
if (!(loop = loop.step()).done) {
i = loop.value;
if (i.enter && i.value.sym && i.value.sym.id) {
c = i.value.comments || (i.value.comments = []);
c.push({
txt: i.value.sym.id
});
}
setSymComments.$step = 4;
setSymComments.value = i;
return setSymComments;
} else {
setSymComments.$step = 0;
setSymComments.value = void 0;
setSymComments.done = true;
return setSymComments;
}
case 0:
setSymComments.$step = 0;
setSymComments.value = p;
setSymComments.done = true;
return setSymComments;
case 1:
setSymComments.$step = 0;
throw p;
default:
throw new Error("invalid state");
}
}
}
}
const lazy = exports.lazy = traceArgs(traceImpl);
const all = exports.all = traceArgs(traceAllImpl);
var _default = exports.default = lazy;