{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eventsourcing/src/external/babel-plugin-doit-this-ref.js"],"names":["GLOBAL_THIS_REPLACEMENT","param","types","t","template","traverse","visitor","Program","program","file","DOIT_MATCHER","MODULE_MATCHER","filename","log","window","__pluginDoitThisRefs__","test","codeId","replace","match","thisVarDeclaration","unshiftContainer","ThisExpression","path","findParent","parent","isObjectMethod","isClassMethod","isFunctionDeclaration","isFunctionExpression","replaceWith","identifier"],"mappings":";;;;;;AAAA,YAAMA,0BAA0B,iBAAhC;;yBAEe,UAASC,KAAT,EAAgB;AAC7B,YAAI,EAAEC,OAAOC,CAAT,EAAYC,QAAZ,EAAsBC,QAAtB,KAAoCJ,KAAxC;AACA,eAAO;AACLK,mBAAS;AACNC,oBAAQC,OAAR,EAAiB,EAAEC,IAAF,EAAjB,EAA2B;AAC1B,oBAAMC,eAAe,0BAArB;AACA,oBAAMC,iBAAiB,MAAvB;AACA,kBAAIC,WAAWH,KAAKI,GAAL,CAASD,QAAxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEC;AACA;AACA;;AAED;AACA,kBAAGE,OAAOC,sBAAP,IAAiCL,aAAaM,IAAb,CAAkBJ,QAAlB,CAAjC,IAAgE,CAACD,eAAeK,IAAf,CAAoBJ,QAApB,CAApE,EAAmG;;AAEjG,oBAAIK,SAASL,SAASM,OAAT,CAAiBR,YAAjB,EAA8B,EAA9B,CAAkC;AAAlC,iBAAb,CACA,IAAIE,SAASO,KAAT,CAAe,eAAf,CAAJ,EAAqC;AACnC;;AAEA;AACD,iBAJD,MAIO;AACLF,2BAASA,OAAOC,OAAP,CAAe,MAAf,EAAsB,GAAtB,CAA2B;AAA3B,mBAAT;AACD;;AAGD;AACA;AACA;AACA,sBAAME,qBAAqBhB,SAAU,OAAMJ,uBAAwB,qCAAoCiB,MAAO,IAAnF,CAA3B;AACAT,wBAAQa,gBAAR,CAAyB,MAAzB,EAAiCD,oBAAjC;AACD;AACF,aArCM;AAsCPE,2BAAeC,IAAf,EAAqB;AACnB;AACA,kBAAGA,KAAKC,UAAL,CAAgBC,UAAUtB,EAAEuB,cAAF,CAAiBD,MAAjB,KAC3BtB,EAAEwB,aAAF,CAAgBF,MAAhB,CAD2B,IAE3BtB,EAAEyB,qBAAF,CAAwBH,MAAxB,CAF2B,IAG3BtB,EAAE0B,oBAAF,CAAuBJ,MAAvB,CAHC,CAAH,EAIG;AACHF,mBAAKO,WAAL,CAAiB3B,EAAE4B,UAAF,CAAa/B,uBAAb,CAAjB;AACD;AA9CM;AADJ,SAAP;AAkDD,O","file":"babel-plugin-doit-this-ref.js","sourcesContent":["const GLOBAL_THIS_REPLACEMENT = '__global_this__';\n\nexport default function(param) {\n  let { types: t, template, traverse, } = param;\n  return {\n    visitor: {\n       Program(program, { file }) {\n        const DOIT_MATCHER = /^workspace(async)?(js)?:/;\n        const MODULE_MATCHER = /.js$/;\n        let filename = file.log.filename;\n        \n        // BEGIN Test Data\n        // filename = \"workspacejs:foobar\"\n        // if (window.__pluginDoitThisRefs__) {\n        //   window.__pluginDoitThisRefs__ = {}\n        // }\n        // window.__pluginDoitThisRefs__[\"foobar\"] = {a:3, b:4};\n        // END Test Data\n        \n         // if (filename.match(\".babylonian\")) {\n         //   debugger\n         // }\n         \n        // <browse://src/client/bound-eval.js> knows about this, should we define the \"magic name\" here or there? #SWA\n        if(window.__pluginDoitThisRefs__ && DOIT_MATCHER.test(filename) && !MODULE_MATCHER.test(filename)) {\n        \n          var codeId = filename.replace(DOIT_MATCHER,\"\") // workspace: becomes workspacejs... e.g. and we are only interested in the id ...\n          if (filename.match(/\\.babylonian$/)) {\n            // #BackwardCompapitibily\n            \n            // do nothing.... \n          } else {\n            codeId = codeId.replace(/\\/.*/,\"/\") // strip encoded path\n          }\n          \n          \n          // console.log(\"boundEval this: \" + globalThis + \" codeId: \" + codeId)\n          // var thisVarDeclaration = t.variableDeclaration(\"var\",\n          //                             [ t.variableDeclarator(t.identifier(GLOBAL_THIS_REPLACEMENT)) ])\n          const thisVarDeclaration = template(`var ${GLOBAL_THIS_REPLACEMENT} = window.__pluginDoitThisRefs__[\"${codeId}\"]`)\n          program.unshiftContainer('body', thisVarDeclaration());\n        }\n      },\n      ThisExpression(path) {\n        // are we in a 'this'-capturing scope?\n        if(path.findParent(parent => t.isObjectMethod(parent) ||\n          t.isClassMethod(parent) ||\n          t.isFunctionDeclaration(parent) ||\n          t.isFunctionExpression(parent)\n        )) return;\n        path.replaceWith(t.identifier(GLOBAL_THIS_REPLACEMENT));\n      }\n    }\n  };\n}"]}