{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/src/client/reactive/babel-plugin-databindings/post-process.js"],"names":["FLAG_SHOULD_NOT_REWRITE_IDENTIFIER","FLAG_GENERATED_SCOPE_OBJECT","babel","types","t","template","transformFromAst","traverse","getIdentifierForExplicitScopeObject","localIdentifier","parentWithScope","findParent","par","scope","hasOwnBinding","node","name","value","bindings","scopeName","Object","keys","find","key","path","id","uniqueIdentifier","identifier","generateUidIdentifier","push","kind","init","objectExpression","objectProperty","booleanLiteral","visitor","Program","enter","ppath","state","StringLiteral","identifierPath","parentPath","get","scopeIdentifier","replaceWith"],"mappings":";;;;;;AAAQA,wC,iEAAAA,kC;AAAoCC,iC,iEAAAA,2B;;;;;;;;;;;AAAAA,sE;;;;;;;;;;;;;AAApCD,6E;;;;;;;;yBAEO,UAAUE,KAAV,EAAiB;AAC9B,cAAM,EAAEC,OAAOC,CAAT,EAAYC,QAAZ,EAAsBC,gBAAtB,EAAwCC,QAAxC,KAAqDL,KAA3D;;AAEA,iBAASM,mCAAT,CAA6CC,eAA7C,EAA8D;AAC5D,cAAIC,kBAAkBD,gBAAgBE,UAAhB,CAA2BC,OAAOA,IAAIC,KAAJ,CAAUC,aAAV,CAAwBL,gBAAgBM,IAAhB,CAAqBC,IAArB,IAA6BP,gBAAgBM,IAAhB,CAAqBE,KAA1E,CAAlC,CAAtB;;AAEA,cAAIC,WAAWR,gBAAgBG,KAAhB,CAAsBK,QAArC;AACA,cAAIC,YAAYC,OAAOC,IAAP,CAAYH,QAAZ,EAAsBI,IAAtB,CAA2BC,OAAO;AAChD,mBAAOL,SAASK,GAAT,EAAcC,IAAd,IAAsBN,SAASK,GAAT,EAAcC,IAAd,CAAmBT,IAAzC,IAAiDG,SAASK,GAAT,EAAcC,IAAd,CAAmBT,IAAnB,CAAwBU,EAAzE,IAA+EP,SAASK,GAAT,EAAcC,IAAd,CAAmBT,IAAnB,CAAwBU,EAAxB,CAA2BxB,2BAA3B,CAAtF,CADgD,CAC+F;AAChJ,WAFe,CAAhB;;AAIA,cAAIyB,gBAAJ;AACA,cAAIP,SAAJ,EAAe;AACbO,+BAAmBtB,EAAEuB,UAAF,CAAaR,SAAb,CAAnB;AACD,WAFD,MAEO;AACLO,+BAAmBhB,gBAAgBG,KAAhB,CAAsBe,qBAAtB,CAA4C,OAA5C,CAAnB;AACAF,6BAAiBzB,2BAAjB,IAAgD,IAAhD;;AAEAS,4BAAgBG,KAAhB,CAAsBgB,IAAtB,CAA2B;AACzBC,oBAAM,KADmB;AAEzBL,kBAAIC,gBAFqB;AAGzBK,oBAAM3B,EAAE4B,gBAAF,CAAmB,CAAC5B,EAAE6B,cAAF,CAAiB7B,EAAEuB,UAAF,CAAa,SAAb,CAAjB,EAA0CvB,EAAE8B,cAAF,CAAiB,IAAjB,CAA1C,CAAD,CAAnB;AAHmB,aAA3B;AAKD;AACDR,2BAAiB1B,kCAAjB,IAAuD,IAAvD;AACA,iBAAO0B,gBAAP;AACD;;AAED,eAAO;AACLV,gBAAM,2BADD;AAELmB,mBAAS;AACPC,qBAAS;AACPC,oBAAMC,KAAN,EAAaC,KAAb,EAAoB;AAClBD,sBAAM/B,QAAN,CAAe;AACbiC,gCAAchB,IAAd,EAAoB;AAClB,wBAAGA,KAAKT,IAAL,CAAUE,KAAV,KAAoB,sBAAvB,EAA+C;AAC7C,4BAAMwB,iBAAiBjB,KAAKkB,UAAL,CAAgBA,UAAhB,CAA2BC,GAA3B,CAA+B,oBAA/B,CAAvB;AACA,4BAAMC,kBAAkBpC,oCAAoCiC,cAApC,CAAxB;AACAjB,2BAAKqB,WAAL,CAAiBD,eAAjB;AACD;AACF;AAPY,iBAAf;AASD;AAXM;AADF;AAFJ,SAAP;AAkBD,O","file":"post-process.js","sourcesContent":["import {FLAG_SHOULD_NOT_REWRITE_IDENTIFIER, FLAG_GENERATED_SCOPE_OBJECT} from 'src/client/reactive/babel-plugin-active-expression-rewriting/index.js'\n\nexport default function (babel) {\n  const { types: t, template, transformFromAst, traverse } = babel;\n\n  function getIdentifierForExplicitScopeObject(localIdentifier) {\n    let parentWithScope = localIdentifier.findParent(par => par.scope.hasOwnBinding(localIdentifier.node.name || localIdentifier.node.value));\n    \n    let bindings = parentWithScope.scope.bindings;\n    let scopeName = Object.keys(bindings).find(key => {\n      return bindings[key].path && bindings[key].path.node && bindings[key].path.node.id && bindings[key].path.node.id[FLAG_GENERATED_SCOPE_OBJECT]; // should actually be IS_EXPLICIT_SCOPE_OBJECT\n    });\n\n    let uniqueIdentifier;\n    if (scopeName) {\n      uniqueIdentifier = t.identifier(scopeName);\n    } else {\n      uniqueIdentifier = parentWithScope.scope.generateUidIdentifier('scope');\n      uniqueIdentifier[FLAG_GENERATED_SCOPE_OBJECT] = true;\n\n      parentWithScope.scope.push({\n        kind: 'let',\n        id: uniqueIdentifier,\n        init: t.objectExpression([t.objectProperty(t.identifier(\"isScope\"), t.booleanLiteral(true))])\n      });\n    }\n    uniqueIdentifier[FLAG_SHOULD_NOT_REWRITE_IDENTIFIER] = true;\n    return uniqueIdentifier;\n  }\n  \n  return {\n    name: \"data-binding-post-process\",\n    visitor: {\n      Program: {\n        enter(ppath, state) {\n          ppath.traverse({\n            StringLiteral(path) {\n              if(path.node.value === \"__localScopeObject__\") {\n                const identifierPath = path.parentPath.parentPath.get(\"properties.2.value\");\n                const scopeIdentifier = getIdentifierForExplicitScopeObject(identifierPath);\n                path.replaceWith(scopeIdentifier);\n              }\n            }\n          });\n        }\n      }\n    }\n  };\n}"]}