{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/babylonian-programming-editor/worker/ast-worker.js"],"names":["deepCopy","generateLocationMap","astForCode","codeForAst","assignIds","applyReplacements","applyProbes","applyExamples","applyInstances","applyBasicModifications","applyTracker","applyContext","Performance","onmessage","msg","step","code","annotations","customInstances","sourceUrl","replacementUrls","JSON","parse","data","payload","ast","_sourceUrl","originalAst","replacements","probes","loadableCode","instances","examples","context","executableCode","stop","respond","id","e","console","error","postMessage"],"mappings":";;;;;;AAEEA,c,eAAAA,Q;AACAC,yB,eAAAA,mB;AACAC,gB,eAAAA,U;AACAC,gB,eAAAA,U;AACAC,e,eAAAA,S;AACAC,uB,eAAAA,iB;AACAC,iB,eAAAA,W;AACAC,mB,eAAAA,a;AACAC,oB,eAAAA,c;AACAC,6B,eAAAA,uB;AACAC,kB,eAAAA,Y;AACAC,kB,eAAAA,Y;;AAEKC,iB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAKQC,YAAY,gBAAeC,GAAf,EAAoB;;AAE7C;AACAF,oBAAYG,IAAZ,CAAiB,OAAjB;;AAEA,cAAM;AACJC,cADI;AAEJC,qBAFI;AAGJC,yBAHI;AAIJC,mBAJI;AAKJC,yBALI,KAKgBC,KAAKC,KAAL,CAAWR,IAAIS,IAAJ,CAASC,OAApB,CALtB;;AAOA;AACA,YAAI;AACF,gBAAMC,MAAMH,MAAMN,IAAN,CAAZ;;AAEA;AACAJ,sBAAYG,IAAZ,CAAiB,WAAjB;;AAEAU,cAAIC,UAAJ,GAAiBP,SAAjB;AACA,gBAAMV,wBAAwBgB,GAAxB,EAA6BL,eAA7B,CAAN;AACA,gBAAMO,cAAc3B,SAASyB,GAAT,CAApB;AACAxB,8BAAoBwB,GAApB;;AAEA;AACApB,4BAAkBoB,GAAlB,EAAuBR,YAAYW,YAAnC;AACAtB,sBAAYmB,GAAZ,EAAiBR,YAAYY,MAA7B;;AAEA;AACA,cAAIC,eAAe3B,WAAWsB,GAAX,CAAnB;;AAEA;AACAjB,yBAAeiB,GAAf,EAAoBR,YAAYc,SAAhC,EAA2Cb,eAA3C;AACAX,wBAAckB,GAAd,EAAmBR,YAAYe,QAA/B;;AAEA;AACA,gBAAMrB,aAAac,GAAb,EAAkBR,YAAYgB,OAA9B,EAAuCb,eAAvC,CAAN;;AAEA;AACA,cAAIc,iBAAiB/B,WAAWsB,GAAX,CAArB;;AAEA;AACAK,yBAAepB,aAAaoB,YAAb,CAAf;AACAI,2BAAiBxB,aAAawB,cAAb,CAAjB;;AAEA;AACAtB,sBAAYuB,IAAZ;;AAEA;AACA,iBAAOC,QAAQtB,IAAIS,IAAJ,CAASc,EAAjB,EAAqBV,WAArB,EAAkCG,YAAlC,EAAgDI,cAAhD,CAAP;AACD,SArCD,CAqCE,OAAOI,CAAP,EAAU;AACVC,kBAAQC,KAAR,CAAcF,CAAd;AACA,iBAAOF,QAAQtB,IAAIS,IAAJ,CAASc,EAAjB,CAAP;AACD;AACF,O;;AAED;;;AAGA,YAAMD,UAAU,CAACC,EAAD,EAAKZ,MAAM,IAAX,EAAiBK,eAAe,IAAhC,EAAsCI,cAAtC,KACdO,YAAY;AACVJ,YAAIA,EADM;AAEVb,iBAAS;AACPC,eAAKA,GADE;AAEPK,wBAAcA,YAFP;AAGPI,0BAAgBA;AAHT;AAFC,OAAZ,CADF;;AAWA;;;;;;;;;;;;;;;;AAGA,YAAMZ,QAASN,IAAD,IACZZ,UAAUF,WAAWc,IAAX,CAAV,CADF","file":"ast-worker.js","sourcesContent":["// Custom imports\nimport {\n  deepCopy,\n  generateLocationMap,\n  astForCode,\n  codeForAst,\n  assignIds,\n  applyReplacements,\n  applyProbes,\n  applyExamples,\n  applyInstances,\n  applyBasicModifications,\n  applyTracker,\n  applyContext,\n} from \"../utils/ast.js\";\nimport Performance from \"../utils/performance.js\";\n\n/**\n * Receive message from the main thread\n */\nexport default onmessage = async function(msg) {\n  \n  // Performance\n  Performance.step(\"parse\");\n  \n  const {\n    code, \n    annotations, \n    customInstances, \n    sourceUrl,\n    replacementUrls } = JSON.parse(msg.data.payload);\n\n  // Process the code\n  try {\n    const ast = parse(code);\n    \n    // Performance\n    Performance.step(\"transform\");\n    \n    ast._sourceUrl = sourceUrl;\n    await applyBasicModifications(ast, replacementUrls);\n    const originalAst = deepCopy(ast);\n    generateLocationMap(ast);\n\n    // Apply Probes\n    applyReplacements(ast, annotations.replacements);\n    applyProbes(ast, annotations.probes);\n    \n    // Generate the code for module loading, but not for direct execution\n    let loadableCode = codeForAst(ast);\n    \n    // Add trackers for all examples\n    applyInstances(ast, annotations.instances, customInstances);\n    applyExamples(ast, annotations.examples);\n    \n    // Apply context\n    await applyContext(ast, annotations.context, replacementUrls);\n\n    // Generate executable code\n    let executableCode = codeForAst(ast);\n    \n    // Insert tracker codes\n    loadableCode = applyTracker(loadableCode);\n    executableCode = applyTracker(executableCode);\n    \n    // Performance\n    Performance.stop();\n\n    // Send result\n    return respond(msg.data.id, originalAst, loadableCode, executableCode);\n  } catch (e) {\n    console.error(e);\n    return respond(msg.data.id);\n  }\n};\n\n/**\n * Sends a response to the main thread\n */\nconst respond = (id, ast = null, loadableCode = null, executableCode) =>\n  postMessage({\n    id: id,\n    payload: {\n      ast: ast,\n      loadableCode: loadableCode,\n      executableCode: executableCode\n    }\n  });\n  \n\n/**\n * Parses code and returns the corresponding AST\n */\nconst parse = (code) =>\n  assignIds(astForCode(code));\n\n"]}