{"version":3,"sources":["https://lively-kernel.org/lively4/rp19-jsx/src/client/reactive/rp19-jsx/babel-plugin-rp19-jsx.js"],"names":["types","t","template","traverse","GENERATED_IMPORT_IDENTIFIER","Symbol","addCustomTemplate","file","name","declar","declarations","identifier","addImport","inherits","jsx","visitor","Program","path","state","hasDirective","foundDirective","Directive","get","node","value","shouldTransform","rp19Directive","rp19Preference","Preferences","inWorkspace","opts","executedIn","inFile","Error","JSXElement","tagName","stringLiteral","newNode","callExpression","replaceWith"],"mappings":";;;;;qBAUe,UAAU,EAAEA,OAAOC,CAAT,EAAYC,QAAZ,EAAsBC,QAAtB,EAAV,EAA4C;AACzD,UAAMC,8BAA8BC,OAAO,6BAAP,CAApC;;AAEA;AACA,aAASC,iBAAT,CAA2BC,IAA3B,EAAiCC,IAAjC,EAAuC;AACrC,UAAIC,SAASF,KAAKG,YAAL,CAAkBF,IAAlB,CAAb;AACA,UAAIC,MAAJ,EAAY,OAAOA,MAAP;;AAEZ,UAAIE,aAAaJ,KAAKG,YAAL,CAAkBF,IAAlB,IAA0BD,KAAKK,SAAL,CAAe,UAAf,EAA2BJ,IAA3B,EAAiCA,IAAjC,CAA3C;AACAG,iBAAWP,2BAAX,IAA0C,IAA1C;AACA,aAAOO,UAAP;AACD;;AAED,WAAO;AACLE,gBAAUC,GADL;AAELC,eAAS;AACPC,gBAAQC,IAAR,EAAcC,KAAd,EAAqB;AACnB,mBAASC,YAAT,CAAsBF,IAAtB,EAA4BT,IAA5B,EAAkC;AAChC,gBAAIY,iBAAiB,KAArB;AACAH,iBAAKd,QAAL,CAAc;AACZkB,wBAAUJ,IAAV,EAAgB;AACd,oBAAGA,KAAKK,GAAL,CAAS,OAAT,EAAkBC,IAAlB,CAAuBC,KAAvB,KAAiChB,IAApC,EAA0C;AACxCY,mCAAiB,IAAjB;AACD;AACF;AALW,aAAd;AAOA,mBAAOA,cAAP;AACD;;AAED,mBAASK,eAAT,GAA2B;AACzB,kBAAMC,gBAAgBP,aAAaF,IAAb,EAAmB,cAAnB,CAAtB;AACA,kBAAMU,iBAAiBC,YAAYN,GAAZ,CAAgB,YAAhB,CAAvB;AACA,kBAAMO,cAAcX,MAAMY,IAAN,CAAWC,UAAX,KAA0B,WAA9C;AACA,kBAAMC,SAASd,MAAMY,IAAN,CAAWC,UAAX,KAA0B,MAAzC;;AAEA,gBAAIF,WAAJ,EAAiB;AACf,qBAAOF,cAAP;AACD,aAFD,MAEO,IAAIK,MAAJ,EAAY;AACjB,qBAAON,aAAP;AACD;AACD,kBAAM,IAAIO,KAAJ,CAAU,6BAAV,CAAN;AACD;;AAED,cAAI,CAACR,iBAAL,EAAwB;AAAE;AAAS;;AAEnC;AACAR,eAAKd,QAAL,CAAc;AACZ+B,uBAAWjB,IAAX,EAAiB;AACf,oBAAMkB,UAAUlC,EAAEmC,aAAF,CAAgBnB,KACCK,GADD,CACK,gBADL,EAECA,GAFD,CAEK,MAFL,EAEaC,IAFb,CAEkBf,IAFlC,CAAhB;AAGA,oBAAM6B,UAAUpC,EAAEqC,cAAF,CACdhC,kBAAkBY,MAAMX,IAAxB,EAA8B,SAA9B,CADc,EAEd,CAAC4B,OAAD,CAFc,CAAhB;;AAKAlB,mBAAKsB,WAAL,CAAiBF,OAAjB;AACD;AAXW,WAAd;AAaD;AA5CM;AAFJ,KAAP;AAiDD,G;;;;AAxEMvB,S;;AACAc,iB","file":"babel-plugin-rp19-jsx.js","sourcesContent":["import jsx from \"babel-plugin-syntax-jsx\";\nimport Preferences from 'src/client/preferences.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/#apij-sxidentifier\n */\nexport default function ({ types: t, template, traverse }) {\n  const GENERATED_IMPORT_IDENTIFIER = Symbol(\"generated import identifier\");\n\n  // #TODO: duplicate with aexpr transform -> extract it\n  function addCustomTemplate(file, name) {\n    let declar = file.declarations[name];\n    if (declar) return declar;\n\n    let identifier = file.declarations[name] = file.addImport(\"rp19-jsx\", name, name);\n    identifier[GENERATED_IMPORT_IDENTIFIER] = true;\n    return identifier;\n  }\n\n  return {\n    inherits: jsx,\n    visitor: {\n      Program(path, state) {\n        function hasDirective(path, name) {\n          let foundDirective = false;\n          path.traverse({\n            Directive(path) {\n              if(path.get(\"value\").node.value === name) {\n                foundDirective = true;\n              }\n            }\n          });\n          return foundDirective;\n        }\n\n        function shouldTransform() {\n          const rp19Directive = hasDirective(path, 'use rp19-jsx');\n          const rp19Preference = Preferences.get('UseRP19JSX');\n          const inWorkspace = state.opts.executedIn === 'workspace';\n          const inFile = state.opts.executedIn === 'file';\n\n          if (inWorkspace) {\n            return rp19Preference;\n          } else if (inFile) {\n            return rp19Directive;\n          }\n          throw new Error('This should not be possible');\n        }\n\n        if (!shouldTransform()) { return; }\n\n        // the transformation itself\n        path.traverse({\n          JSXElement(path) {\n            const tagName = t.stringLiteral(path\n                                            .get(\"openingElement\")\n                                            .get(\"name\").node.name)\n            const newNode = t.callExpression(\n              addCustomTemplate(state.file, \"element\"),\n              [tagName]\n            );\n\n            path.replaceWith(newNode);\n          }\n        });\n      }\n    }\n  };\n}\n"]}