{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/client/reactive/rp19-jsx/babel-plugin-rp19-jsx.js"],"names":["jsx","Preferences","reactiveMorphVisitor","hasDirective","path","name","get","find","directive","node","shouldTransform","state","rp19Directive","rp19Preference","inFile","opts","executedIn","createAExprDirective","t","directiveLiteral","ensureAExprDirectiveExistance","pushContainer","types","inherits","visitor","Program","traverse"],"mappings":";;;;;;AAAOA,S;;AACAC,iB;;AACEC,0B,sCAAAA,oB;;;;AAET;;;;;;;;AAQA,YAAMC,eAAe,CAACC,IAAD,EAAOC,IAAP,KACnB,CAAC,CAACD,KAAKE,GAAL,CAAS,YAAT,EACCC,IADD,CACMC,aACJA,UAAUF,GAAV,CAAc,OAAd,EAAuBA,GAAvB,CAA2B,OAA3B,EAAoCG,IAApC,KAA6CJ,IAF/C,CADJ;;AAKA,YAAMK,kBAAkB,CAACN,IAAD,EAAOO,KAAP,KAAiB;AACvC,cAAMC,gBAAgBT,aAAaC,IAAb,EAAmB,iBAAnB,CAAtB;AACA,cAAMS,iBAAiBZ,YAAYK,GAAZ,CAAgB,YAAhB,CAAvB;AACA,cAAMQ,SAASH,MAAMI,IAAN,CAAWC,UAAX,KAA0B,MAAzC;;AAEA,YAAIF,MAAJ,EAAY;AACV,iBAAOF,aAAP;AACD,SAFD,MAEO;AACL,iBAAOC,cAAP;AACD;AACF,OAVD;;AAYA,YAAMI,uBAAuBC,KAC3BA,EAAEV,SAAF,CACEU,EAAEC,gBAAF,CACE,cADF,CADF,CADF;;AAOA,YAAMC,gCAAgC,CAAChB,IAAD,EAAOc,CAAP,KAAa;AACjD,YAAI,CAACf,aAAaC,IAAb,EAAmB,cAAnB,CAAL,EACEA,KAAKiB,aAAL,CAAmB,YAAnB,EAAiCJ,qBAAqBC,CAArB,CAAjC;AACH,OAHD;;yBAKe,CAAC,EAAEI,OAAOJ,CAAT,EAAD,MAAmB;AAChCK,kBAAUvB,GADsB;AAEhCwB,iBAAS;AACPC,kBAAQrB,IAAR,EAAcO,KAAd,EAAqB;AACnB,gBAAI,CAACD,gBAAgBN,IAAhB,EAAsBO,KAAtB,CAAL,EAAmC;AAAE;AAAS;AAC9CS,0CAA8BhB,IAA9B,EAAoCc,CAApC;AACAd,iBAAKsB,QAAL,CAAcxB,qBAAqBgB,CAArB,CAAd;AACD;AALM;AAFuB,OAAnB,C","file":"babel-plugin-rp19-jsx.js","sourcesContent":["import jsx from \"babel-plugin-syntax-jsx\";\nimport Preferences from 'src/client/preferences.js';\nimport { reactiveMorphVisitor } from 'src/client/reactive/rp19-jsx/rp19-jsx.js';\n\n/**\n * Resources for JSX Syntax\n * JSX babel Preset: https://github.com/babel/babel/blob/master/packages/babel-preset-react/src/index.js\n * JSX spec draft: https://github.com/facebook/jsx\n * JSX Syntax definition in babel: https://github.com/babel/babel/blob/master/packages/babel-types/src/definitions/jsx.js#L10\n * Babel nodes list: https://babeljs.io/docs/core-packages/babel-types/#api-jsxidentifier\n */\n\nconst hasDirective = (path, name) => \n  !!path.get('directives')\n    .find(directive =>\n      directive.get('value').get('value').node === name);\n\nconst shouldTransform = (path, state) => {\n  const rp19Directive = hasDirective(path, 'enable rp19-jsx');\n  const rp19Preference = Preferences.get('UseRP19JSX');\n  const inFile = state.opts.executedIn === 'file';\n\n  if (inFile) {\n    return rp19Directive;\n  } else {\n    return rp19Preference;\n  }\n}\n\nconst createAExprDirective = t =>\n  t.directive(\n    t.directiveLiteral(\n      'enable aexpr'\n    )\n  );\n\nconst ensureAExprDirectiveExistance = (path, t) => {\n  if (!hasDirective(path, 'enable aexpr'))\n    path.pushContainer('directives', createAExprDirective(t));\n}\n\nexport default ({ types: t }) => ({\n  inherits: jsx,\n  visitor: {\n    Program(path, state) {\n      if (!shouldTransform(path, state)) { return; }\n      ensureAExprDirectiveExistance(path, t);\n      path.traverse(reactiveMorphVisitor(t));\n    }\n  }\n});\n"]}