{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/demo/lively-continuous-editor-plugin.js"],"names":["generateUUID","uuid","expressions","statements","declarations","declarators","assignments","functions","loops","babel","types","t","template","transformFromAst","traverse","log","begin","end","logstatement","checkRuntime","name","visitor","Program","path","idcounter","enter","node","traceid","BinaryExpression","push","CallExpression","UnaryExpression","UpdateExpression","VariableDeclarator","FunctionDeclaration","FunctionExpression","ClassMethod","ExpressionStatement","AssignmentExpression","ForStatement","WhileStatement","astsrc","JSON","stringify","window","lastastsrc","programast","parse","astid","__tr_ast_registry__","node_map","trace_counter","unshiftContainer","ASTID","stringLiteral","forEach","ea","insertBefore","NODEID","numericLiteral","insertAfter","replaceWith","EXPSTATE","init","expression","get","body","NODEIDX","BLOCK"],"mappings":"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","file":"lively-continuous-editor-plugin.js","sourcesContent":["import { uuid as generateUUID } from 'utils'; \n\nvar expressions\nvar statements\nvar declarations\nvar declarators\nvar assignments\nvar functions\nvar loops\n\nexport default function (babel) {\n  const { types: t, template, transformFromAst, traverse } = babel;\n  let log = template(\"_tr_(NODEID,() => EXPSTATE)\")\n  let begin = template(\"_tr_begin_(NODEID)\")\n  let end = template(\"_tr_end_(NODEID)\")\n  let logstatement = template(\"_tr_log_(NODEID)\")\n\n  let checkRuntime = template('if (performance.now() - _tr_time > _tr_time_max) throw new Error(\"Run to long! Endless loop?\");')\n\n  return {\n    name: \"ast-transform\", // not required\n    visitor: { \n      Program(path) {\n        var idcounter = 0;\n\n        expressions = []\n        statements = []\n        declarations = []\n        declarators = []\n        assignments = []\n        functions = []\n        loops = []\n        \n        path.traverse({\n        \tenter(path) { \n        \t\tpath.node.traceid = idcounter++;\n\n\t\t\t    },\n        \tBinaryExpression(path) {expressions.push(path) },\n        \tCallExpression(path) {expressions.push(path)}, \n        \tUnaryExpression(path) {expressions.push(path)},\n        \tUpdateExpression(path) {expressions.push(path)},\n        \tVariableDeclarator(path) { declarators.push(path) },\n        \tFunctionDeclaration(path) { functions.push(path) },\n        \tFunctionExpression(path) { functions.push(path) },\n\n        \tClassMethod(path) { functions.push(path) },\n        \tExpressionStatement(path) {statements.push(path) },\n          AssignmentExpression(path) { assignments.push(path) },\n        \t\n        \tForStatement(path) { loops.push(path) },\n        \tWhileStatement(path) { loops.push(path) },\n        \t\n        \t/* ... */\n        });\n\n\n        var astsrc= JSON.stringify(path.node)\n        window.lastastsrc = astsrc\n        var programast = JSON.parse(astsrc)\n        programast.astid = generateUUID()\n    \t\tif (!window.__tr_ast_registry__) window.__tr_ast_registry__ = {};\n    \t\twindow.__tr_ast_registry__[programast.astid]=programast\n    \n    \t\tprogramast.node_map = []\n\n    \t\ttraverse({\"type\": \"File\", \"program\": programast}, {\n      \t\t\tenter(path) {\n      \t\t\t  // console.log(\"enter \" + path.node.type)\n      \t\t\t\tprogramast.node_map[path.node.traceid] = path.node\n      \t\t\t\tpath.node.trace_counter = 0;\n      \t\t\t},\n    \t\t})\t\n\t\t\t\n\t      path.unshiftContainer('body', template(`\n\t        var __tr_ast__ = window.__tr_ast_registry__[ASTID]\n\n          var _tr_time = performance.now();\n          var _tr_time_max = 1000;\n\t  \t\t  function _tr_(id, exp) {\n            var astnode =  __tr_ast__ .node_map[id]\n  \t  \t\t  // console.log(\"enter \" + astnode.type )\n\n\t  \t\t\t  var callnode = {parent: __tr_current__, id: id, children: []}\n\t\t\t\t    callnode.parent.children.push(callnode)\n\t  \t\t\t  __tr_current__=callnode\n\t  \t\t\t  \n  \t  \t\t\tvar value = exp()\n\n            callnode.id = id\n  \t  \t\t\tcallnode.value = value;\n  \t  \t\t\t\n  \t  \t\t\t__tr_current__ = callnode.parent\n  \t  \t\t\t\n  \t  \t\t\treturn value\n    \t  \t};\n    \t  \t\n    \t  \t\n    \t  \t\n    \t  \tfunction _tr_log_(id) {\n            var astnode =  __tr_ast__ .node_map[id]\n            // console.log(\"logst \" + astnode.type )\n            \n            var callnode = {parent: __tr_current__, id: id, children: []}\n\t\t\t\t    callnode.parent.children.push(callnode)\n    \t  \t\t\n    \t  \t};\n    \t  \t\n    \t  \tfunction _tr_begin_(id) {\n            var astnode =  __tr_ast__ .node_map[id]\n            // console.log(\"begin \" + astnode.type )\n            \n            var callnode = {parent: __tr_current__, id: id, children: []}\n\t\t\t\t    callnode.parent.children.push(callnode)\n\t  \t\t\t  __tr_current__=callnode\n    \t  \t};\n    \t  \t\n    \t  \t// var value = exp()\n    \t  \t\n    \t  \tfunction _tr_end_(id) {\n  \t  \t\t\t__tr_current__ = __tr_current__.parent\n\n    \t  \t};\n    \t  \tvar __tr_root__  = { children: [] };\n    \t  \t__tr_ast__.calltrace = __tr_root__;\n    \t  \twindow.__tr_last_ast__ = __tr_ast__;\n    \t  \tvar __tr_current__=__tr_root__`)({ASTID: t.stringLiteral(programast.astid)}));\n\t  \t\n        statements.forEach(ea => {\n       \t\tea.insertBefore(begin({\n        \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        \t}));\n        \tea.insertAfter(end({\n        \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        \t}));\n        });\n\n        // declarations.forEach(ea => {\n       \t// \tea.insertBefore(begin({\n        // \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        // \t}))\n        // \tea.insertAfter(end({\n        // \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        // \t}))\n        // })\n     \n        assignments.forEach(ea => {\n        \tea.replaceWith(log({\n        \t  NODEID: t.numericLiteral(ea.node.traceid),\n        \t\tEXPSTATE: ea\n        \t}));\n        });\n     \n        declarators.forEach(ea => {\n        \tif (ea.node.init) {\n          \tea.node.init  = log({\n          \t  NODEID: t.numericLiteral(ea.node.traceid),\n          \t\tEXPSTATE: ea.node.init\n          \t}).expression; // no statement here\n        \t}\n        });\n\n        // declarators.forEach(ea => {\n        // \tif (ea.node.init) {\n        //   \tea.get(\"init\").replaceWith(log({\n        //   \t  NODEID: t.numericLiteral(ea.node.traceid),\n        //   \t\tEXPSTATE: ea.node.init\n        //   \t}));\n        // \t}\n        // });\n        \n        loops.forEach(ea => {\n       \t\tea.insertBefore(begin({\n        \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        \t}))\n        \tea.insertAfter(end({\n        \t\tNODEID: t.numericLiteral(ea.node.traceid)\n        \t}))\n        })\n\n        loops.forEach(ea => {\n            ea.get('body').unshiftContainer('body', checkRuntime())\n        })\n\n        functions.forEach(ea => {\n        \tvar body = ea.get('body');\n        \tbody.replaceWith(template(\"{ return _tr_( NODEIDX , () => BLOCK)}\")({\n        \t  NODEIDX: t.numericLiteral(ea.node.traceid), BLOCK: body}))\n        });\n\n        functions.forEach(ea => {\n            ea.get('body').unshiftContainer('body', checkRuntime())\n        })\n\n        expressions.forEach(ea => {\n        \tea.replaceWith(log({\n        \t  NODEID: t.numericLiteral(ea.node.traceid),\n        \t\tEXPSTATE: ea\n        \t}))\n        })\n      } \n    }\n  };\n}"]}