{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/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","opts","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,6BAArB;AACA,oBAAMC,iBAAiB,MAAvB;;AAEA,kBAAIC,QAAJ;AACA,kBAAIH,KAAKI,GAAT,EAAc;AACZD,2BAAWH,KAAKI,GAAL,CAASD,QAApB,CADY,CACiB;AAC9B,eAFD,MAEO;AACLA,2BAAWH,KAAKK,IAAL,CAAUF,QAArB,CADK,CAC0B;AAChC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEC;AACA;AACA;;AAED;AACA,kBAAGG,OAAOC,sBAAP,IAAiCN,aAAaO,IAAb,CAAkBL,QAAlB,CAAjC,IAAgE,CAACD,eAAeM,IAAf,CAAoBL,QAApB,CAApE,EAAmG;;AAEjG,oBAAIM,SAASN,SAASO,OAAT,CAAiBT,YAAjB,EAA8B,EAA9B,CAAkC;AAAlC,iBAAb,CACA,IAAIE,SAASQ,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,qBAAqBjB,SAAU,OAAMJ,uBAAwB,qCAAoCkB,MAAO,IAAnF,CAA3B;AACAV,wBAAQc,gBAAR,CAAyB,MAAzB,EAAiCD,oBAAjC;AACD;AACF,aA3CM;AA4CPE,2BAAeC,IAAf,EAAqB;AACnB;AACA,kBAAGA,KAAKC,UAAL,CAAgBC,UAAUvB,EAAEwB,cAAF,CAAiBD,MAAjB,KAC3BvB,EAAEyB,aAAF,CAAgBF,MAAhB,CAD2B,IAE3BvB,EAAE0B,qBAAF,CAAwBH,MAAxB,CAF2B,IAG3BvB,EAAE2B,oBAAF,CAAuBJ,MAAvB,CAHC,CAAH,EAIG;AACHF,mBAAKO,WAAL,CAAiB5B,EAAE6B,UAAF,CAAahC,uBAAb,CAAjB;AACD;AApDM;AADJ,SAAP;AAwDD,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         \n        let filename \n        if (file.log) {\n          filename = file.log.filename // #Deprecated #babel\n        } else {\n          filename = file.opts.filename; // babel7\n        }\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}"]}