{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-jsx/src/components/tools/lively-ast-inspector.js"],"names":["Morph","sortAlphaNum","babelDefault","loc","range","types","t","babel","AstInspector","initialize","windowTitle","registerButtons","lively","html","registerKeys","container","get","inspect","obj","targetObject","oldViewState","getViewState","innerHTML","content","display","root","appendChild","updatePatterns","childNodes","setViewState","connectEditor","editor","lcm","livelyCodeMirror","on","cm","astCapabilities","then","ac","node","getOutermostPathContainingSelectionWithMinimalSelectionRange","programPath","firstSelection","pathKeys","getPathKeys","selectPath","keyPath","selection","classList","remove","element","expandPath","scrollIntoView","behavior","block","inline","add","key","expandElement","getChild","getChildren","find","child","babelPath","keys","path","unshift","inList","listKey","parentPath","configuration","preferences","hidesLocationData","hidesTypeProperty","hidesDefaultProperties","hidesOptionalProperties","hidesUnknownProperties","hidesFunctions","hidesProto","getElementType","isNode","Array","isArray","getRenderCall","type","expanded","options","elementTemplate","pattern","target","renderCall","render","isExpanded","renderAstNode","append","expansionIndicatorTemplate","keyTemplate","labelTemplate","attachHandlers","contentTemplate","classifications","astNodeKeyClassifications","console","log","classification","isVisibleAstNodeKey","renderObject","summaryTemplate","objectPreview","allKeys","forEach","renderArray","length","renderValue","value","entries","json","JSON","stringify","isLocationKey","str","isTypeKey","has","fields","NODE_FIELDS","visitorKeys","VISITOR_KEYS","Set","includes","field","optional","default","trimLen","i","remaining","replacement","Object","getOwnPropertyNames","sort","kind","symbol","cssClass","onmouseenter","evt","onHoverStart","onmouseleave","onHoverEnd","querySelectorAll","expandNode","onclick","onSelect","selectedNode","showElement","dispatchEvent","CustomEvent","detail","object","hoverMarker","clear","currentEditor","start","end","markText","asCM","css","onContextMenu","shiftKey","preventDefault","stopPropagation","setExpandStateForAllNodes","expandedness","recursion","captureViewState","state","applyViewState","children","filter","ea","contains","c","collapseElement","result","push","querySelector","livelyExample","url","lively4url","src","fetch","r","text","ast","toAST","program","livelyMigrate","other"],"mappings":";;;;;;;;;;;;;;;;AAAOA,W;;AACEC,kB,oBAAAA,Y;;AACFC,kB;;AAEEC,S,qBAAAA,G;AAAKC,W,qBAAAA,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADd,YAAM,EAAEC,OAAOC,CAAT,KAAeJ,aAAaK,KAAlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGe,YAAMC,YAAN,SAA2BR,KAA3B,CAAiC;;AAE9C,cAAMS,UAAN,GAAmB;AACjB,eAAKC,WAAL,GAAmB,eAAnB;AACA,eAAKC,eAAL;;AAEAC,iBAAOC,IAAP,CAAYC,YAAZ,CAAyB,IAAzB;AACD;;AAED,YAAIC,SAAJ,GAAgB;AAAE,iBAAO,KAAKC,GAAL,CAAS,YAAT,CAAP;AAAgC;;AAElDC,gBAAQC,GAAR,EAAa;AACX,cAAI,CAACA,GAAL,EAAU;;AAEV,cAAI,KAAKC,YAAT,EAAuB;AACrB,gBAAIC,eAAe,KAAKC,YAAL,EAAnB;AACD;;AAED,eAAKF,YAAL,GAAoBD,GAApB;AACA,eAAKH,SAAL,CAAeO,SAAf,GAA2B,EAA3B;;AAEA,gBAAMC,UAAU,KAAKC,OAAL,CAAaN,GAAb,EAAkB,IAAlB,EAAwB,IAAxB,CAAhB;AACA,eAAKO,IAAL,GAAYF,OAAZ;AACA,eAAKR,SAAL,CAAeW,WAAf,CAA2BH,OAA3B;AACA,eAAKI,cAAL,CAAoB,KAAKZ,SAAL,CAAea,UAAf,CAA0B,CAA1B,CAApB;;AAEA,cAAIR,YAAJ,EAAkB;AAChB,iBAAKS,YAAL,CAAkBT,YAAlB;AACD;AACD,iBAAOG,OAAP;AACD;;AAEDO,sBAAcC,MAAd,EAAsB;AACpB,eAAKA,MAAL,GAAcA,MAAd;AACA,gBAAMC,MAAMD,OAAOE,gBAAP,EAAZ;AACAD,cAAID,MAAJ,CAAWG,EAAX,CAAc,gBAAd,EAAiCC,EAAD,IAAQ;AACtCH,gBAAII,eAAJ,CAAoBD,EAApB,EAAwBE,IAAxB,CAA6BC,MAAM;AACjC,oBAAMC,OAAOD,GAAGE,4DAAH,CAAgEF,GAAGG,WAAnE,EAAgFH,GAAGI,cAAnF,CAAb;AACA,oBAAMC,WAAW,KAAKC,WAAL,CAAiBL,IAAjB,CAAjB;AACA,mBAAKM,UAAL,CAAgBF,QAAhB;AACD,aAJD;AAKD,WAND;AAOD;;AAEDE,mBAAWC,OAAX,EAAoB;AAClB,cAAI,KAAKC,SAAT,EAAoB;AAClB,iBAAKA,SAAL,CAAeC,SAAf,CAAyBC,MAAzB,CAAgC,UAAhC;AACD;;AAED,gBAAMC,UAAU,KAAKC,UAAL,CAAgBL,OAAhB,CAAhB;AACA,cAAI,CAACI,OAAL,EAAc;;AAEdA,kBAAQE,cAAR,CAAuB,EAACC,UAAU,MAAX,EAAmBC,OAAO,OAA1B,EAAmCC,QAAQ,OAA3C,EAAvB;AACA,eAAKR,SAAL,GAAiBG,OAAjB;AACA,eAAKH,SAAL,CAAeC,SAAf,CAAyBQ,GAAzB,CAA6B,UAA7B;AACD;;AAEDL,mBAAWL,OAAX,EAAoB;AAClB,cAAIP,OAAO,KAAKd,IAAhB;AACA,cAAI,CAACc,IAAL,EAAW,OAAO,IAAP;AACX,eAAK,MAAMkB,GAAX,IAAkBX,OAAlB,EAA2B;AACzB,iBAAKY,aAAL,CAAmBnB,IAAnB;AACAA,mBAAO,KAAKoB,QAAL,CAAcpB,IAAd,EAAoBkB,GAApB,CAAP;AACA,gBAAI,CAAClB,IAAL,EAAW,OAAO,IAAP;AACZ;AACD,eAAKmB,aAAL,CAAmBnB,IAAnB;AACA,iBAAOA,IAAP;AACD;;AAEDoB,iBAAST,OAAT,EAAkBO,GAAlB,EAAuB;AACrB,iBAAO,KAAKG,WAAL,CAAiBV,OAAjB,EAA0BW,IAA1B,CAA+BC,SAASA,MAAML,GAAN,KAAcA,GAAtD,CAAP;AACD;;AAEDb,oBAAYmB,SAAZ,EAAuB;AACrB,gBAAMC,OAAO,EAAb;AACA,cAAIC,OAAOF,SAAX;AACA,aAAG;AACD,gBAAIN,MAAMQ,KAAKR,GAAf;AACAO,iBAAKE,OAAL,CAAaT,GAAb;AACA,gBAAIQ,KAAKE,MAAT,EAAiBH,KAAKE,OAAL,CAAaD,KAAKG,OAAlB;AAClB,WAJD,QAIUH,OAAOA,KAAKI,UAJtB;AAKA,iBAAOL,IAAP;AACD;;AAEH;;AAEE,YAAIM,aAAJ,GAAoB;AAClB,iBAAO,KAAKA,aAAL,IAAsB1D,OAAO2D,WAAP,CAAmBvD,GAAnB,CAAuB,oBAAvB,CAA7B;AACD;;AAED,YAAIwD,iBAAJ,GAAwB;AAAE,iBAAO,IAAP;AAAc;AACxC,YAAIC,iBAAJ,GAAwB;AAAE,iBAAO,IAAP;AAAc;AACxC,YAAIC,sBAAJ,GAA6B;AAAE,iBAAO,IAAP;AAAc;AAC7C,YAAIC,uBAAJ,GAA8B;AAAE,iBAAO,KAAP;AAAe;AAC/C,YAAIC,sBAAJ,GAA6B;AAAE,iBAAO,IAAP;AAAc;AAC7C,YAAIC,cAAJ,GAAqB;AAAE,iBAAO,IAAP;AAAc;AACrC,YAAIC,UAAJ,GAAiB;AAAE,iBAAO,IAAP;AAAc;;AAEnC;;AAEEC,uBAAe7D,GAAf,EAAoB;AAClB,cAAIA,OAAO,IAAX,EAAiB,OAAO,OAAP;AACjB,cAAIZ,EAAE0E,MAAF,CAAS9D,GAAT,CAAJ,EAAmB,OAAO,SAAP;AACnB,cAAI+D,MAAMC,OAAN,CAAchE,GAAd,CAAJ,EAAwB,OAAO,OAAP;AACxB,cAAI,OAAOA,GAAP,KAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,UAA9C,EAA0D,OAAO,QAAP;AAC1D,iBAAO,OAAP;AACD;;AAEDiE,sBAAcC,IAAd,EAAoB;AAClB,iBAAQ,SAAQA,IAAK,EAArB;AACD;;AAED5D,gBAAQN,GAAR,EAAamE,QAAb,EAAuB5B,GAAvB,EAA4B6B,UAAU,EAAtC,EAA0C;AACxC,gBAAMpC,UAAU,KAAKqC,eAAL,EAAhB;AACArC,kBAAQO,GAAR,GAAcA,GAAd;AACAP,kBAAQoC,OAAR,GAAkBA,OAAlB;AACApC,kBAAQsC,OAAR,GAAmB,QAAO/B,OAAO,EAAG,EAApC;AACAP,kBAAQuC,MAAR,GAAiBvE,GAAjB;AACAgC,kBAAQkC,IAAR,GAAe,KAAKL,cAAL,CAAoB7D,GAApB,CAAf;AACAgC,kBAAQwC,UAAR,GAAqB,KAAKP,aAAL,CAAmBjC,QAAQkC,IAA3B,CAArB;AACA,eAAKO,MAAL,CAAYzC,OAAZ,EAAqBmC,QAArB;AACA,iBAAOnC,OAAP;AACD;;AAEH;;AAEEyC,eAAOzC,OAAP,EAAgBmC,QAAhB,EAA0B;AACxBnC,kBAAQ5B,SAAR,GAAoB,EAApB;AACA4B,kBAAQ0C,UAAR,GAAqBP,QAArB;AACA,eAAKnC,QAAQwC,UAAR,IAAsB,aAA3B,EAA0CxC,OAA1C;AACD;;AAED2C,sBAAc3C,OAAd,EAAuB;AACrB,gBAAMuC,SAASvC,QAAQuC,MAAvB;AACAvC,kBAAQ4C,MAAR,CAAe,KAAKC,0BAAL,CAAgC7C,QAAQ0C,UAAxC,CAAf;AACA1C,kBAAQ4C,MAAR,CAAe,KAAKE,WAAL,CAAiB9C,OAAjB,CAAf;AACAA,kBAAQ4C,MAAR,CAAe,KAAKG,aAAL,CAAmBR,OAAOL,IAA1B,CAAf;AACA,eAAKc,cAAL,CAAoBhD,OAApB;AACA,cAAIA,QAAQ0C,UAAZ,EAAwB;AACtB,kBAAMrE,UAAU,KAAK4E,eAAL,EAAhB;AACA,kBAAMC,kBAAkB,KAAKC,yBAAL,CAA+BZ,MAA/B,CAAxB;AACAa,oBAAQC,GAAR,CAAYH,eAAZ;AACA,iBAAK,MAAM3C,GAAX,IAAkB2C,eAAlB,EAAmC;AACjC,oBAAMI,iBAAiBJ,gBAAgB3C,GAAhB,CAAvB;AACA,kBAAI,KAAKgD,mBAAL,CAAyBD,cAAzB,CAAJ,EAA8C;AAC5CjF,wBAAQuE,MAAR,CAAe,KAAKtE,OAAL,CAAaiE,OAAOhC,GAAP,CAAb,EAA0B,KAA1B,EAAiCA,GAAjC,EAAsC,EAAE+C,cAAF,EAAtC,CAAf;AACD;AACF;AACDtD,oBAAQ4C,MAAR,CAAevE,OAAf;AACD;AACF;;AAEDmF,qBAAaxD,OAAb,EAAsB;AACpB,gBAAMuC,SAASvC,QAAQuC,MAAvB;AACAvC,kBAAQ4C,MAAR,CAAe,KAAKC,0BAAL,CAAgC7C,QAAQ0C,UAAxC,CAAf;AACA1C,kBAAQ4C,MAAR,CAAe,KAAKE,WAAL,CAAiB9C,OAAjB,CAAf;AACA,cAAI,CAACA,QAAQ0C,UAAb,EAAyB;AACvB1C,oBAAQ4C,MAAR,+DACc,QADd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAEE,KAAKa,eAAL,CAAqB,KAAKC,aAAL,CAAmBnB,MAAnB,CAArB,CAFF,gEAGc,QAHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKD;AACD,eAAKS,cAAL,CAAoBhD,OAApB;AACA,cAAIA,QAAQ0C,UAAZ,EAAwB;AACtB,kBAAMrE,UAAU,KAAK4E,eAAL,EAAhB;AACA,iBAAKU,OAAL,CAAapB,MAAb,EAAqBqB,OAArB,CAA6BrD,OAAO;AAClClC,sBAAQuE,MAAR,CAAe,KAAKtE,OAAL,CAAaiE,OAAOhC,GAAP,CAAb,EAA0B,KAA1B,EAAiCA,GAAjC,CAAf;AACD,aAFD;AAGAP,oBAAQ4C,MAAR,CAAevE,OAAf;AACD;AACF;;AAEDwF,oBAAY7D,OAAZ,EAAqB;AACnB,cAAI,CAACA,QAAQuC,MAAR,CAAeuB,MAApB,EAA4B,OAAO,KAAKC,WAAL,CAAiB/D,OAAjB,CAAP;AAC5BA,kBAAQ4C,MAAR,CAAe,KAAKC,0BAAL,CAAgC7C,QAAQ0C,UAAxC,CAAf;AACA1C,kBAAQ4C,MAAR,CAAe,KAAKE,WAAL,CAAiB9C,OAAjB,CAAf;AACA,cAAI,CAACA,QAAQ0C,UAAb,EAAyB;AACvB1C,oBAAQ4C,MAAR,CAAe,KAAKa,eAAL,CAAsB,IAAGzD,QAAQuC,MAAR,CAAeuB,MAAO,YAA/C,CAAf;AACD;AACD,eAAKd,cAAL,CAAoBhD,OAApB;AACA,cAAIA,QAAQ0C,UAAZ,EAAwB;AACtB,kBAAMrE,UAAU,KAAK4E,eAAL,EAAhB;AACA,iBAAK,MAAM,CAAC1C,GAAD,EAAMyD,KAAN,CAAX,IAA2BhE,QAAQuC,MAAR,CAAe0B,OAAf,EAA3B,EAAqD;AACnD5F,sBAAQuE,MAAR,CAAe,KAAKtE,OAAL,CAAa0F,KAAb,EAAoB,KAApB,EAA2BzD,GAA3B,CAAf;AACD;AACDP,oBAAQ4C,MAAR,CAAevE,OAAf;AACD;AACF;;AAED0F,oBAAY/D,OAAZ,EAAqB;AACnB,gBAAMkE,OAAOC,KAAKC,SAAL,CAAepE,QAAQuC,MAAvB,CAAb;AACAvC,kBAAQxB,WAAR,CAAoB,KAAKqE,0BAAL,CAAgC,QAAhC,CAApB;AACA7C,kBAAQ4C,MAAR,CAAe,KAAKE,WAAL,CAAiB9C,OAAjB,CAAf;AACAA,kBAAQxB,WAAR,+DAAgC,WAAhC,+BAA6C0F,IAA7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;;AAEDG,sBAAcC,GAAd,EAAmB;AACjB,iBAAOA,QAAQ,KAAR,IACIA,QAAQ,OADZ,IAEIA,QAAQ,KAFnB;AAGD;;AAEDC,kBAAUD,GAAV,EAAe;AACb,iBAAOA,OAAO,MAAd;AACD;;AAEDf,4BAAoBD,cAApB,EAAoC;AAClC,cAAIA,eAAekB,GAAf,CAAmB,UAAnB,CAAJ,EAAoC,OAAO,CAAC,KAAKlD,iBAAb;AACpC,cAAIgC,eAAekB,GAAf,CAAmB,MAAnB,CAAJ,EAAgC,OAAO,CAAC,KAAKjD,iBAAb;AAChC,cAAI+B,eAAekB,GAAf,CAAmB,SAAnB,CAAJ,EAAmC,OAAO,CAAC,KAAK9C,sBAAb;AACnC,cAAI4B,eAAekB,GAAf,CAAmB,UAAnB,KAAkC,KAAK7C,cAA3C,EAA2D,OAAO,KAAP;AAC3D,cAAI2B,eAAekB,GAAf,CAAmB,SAAnB,KAAiC,KAAKhD,sBAA1C,EAAkE,OAAO,KAAP;AAClE,cAAI8B,eAAekB,GAAf,CAAmB,UAAnB,KAAkC,KAAK/C,uBAA3C,EAAoE,OAAO,KAAP;AACpE,iBAAO,IAAP;AACD;;AAED0B,kCAA0B9D,IAA1B,EAAgC;AAC9B,gBAAM6D,kBAAkB,EAAxB;AACA,gBAAMS,UAAU,KAAKA,OAAL,CAAatE,IAAb,CAAhB;;AAEA,gBAAMoF,SAASrH,EAAEsH,WAAF,CAAcrF,KAAK6C,IAAnB,CAAf;AACA,gBAAMyC,cAAcvH,EAAEwH,YAAF,CAAevF,KAAK6C,IAApB,CAApB;AACAyB,kBAAQC,OAAR,CAAgBrD,OAAO;AACrB2C,4BAAgB3C,GAAhB,IAAuB,IAAIsE,GAAJ,EAAvB;AACA,gBAAI,KAAKR,aAAL,CAAmB9D,GAAnB,CAAJ,EAA6B,OAAO2C,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,UAAzB,CAAP;AAC7B,gBAAI,KAAKiE,SAAL,CAAehE,GAAf,CAAJ,EAAyB,OAAO2C,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,MAAzB,CAAP;AACzB,kBAAM0D,QAAQ3E,KAAKkB,GAAL,CAAd;AACA,gBAAI,OAAOyD,KAAP,KAAiB,UAArB,EAAiCd,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,UAAzB;AACjC,gBAAIqE,eAAeA,YAAYG,QAAZ,CAAqBvE,GAArB,CAAnB,EAA8C2C,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,SAAzB;;AAE9C,kBAAMyE,QAAQN,UAAUA,OAAOlE,GAAP,CAAxB;AACA,gBAAIwE,KAAJ,EAAW;AACT,kBAAIA,MAAMC,QAAV,EAAoB9B,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,UAAzB;AACpB,kBAAIyE,MAAME,OAAN,KAAkBjB,KAAtB,EAA6Bd,gBAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,SAAzB;AAC7B;AACD;;AAED4C,4BAAgB3C,GAAhB,EAAqBD,GAArB,CAAyB,SAAzB;AACD,WAhBD;AAiBA,iBAAO4C,eAAP;AACD;;AAEDQ,sBAAc1F,GAAd,EAAmB;AACjB,gBAAMkH,UAAU,EAAhB;AACA,gBAAMpE,OAAO,KAAK6C,OAAL,CAAa3F,GAAb,CAAb;AACA,cAAIsG,MAAM,EAAV;AACA,cAAIa,IAAI,CAAR;AACA,eAAK,IAAIA,IAAI,CAAb,EAAgBA,IAAIrE,KAAKgD,MAAzB,EAAiCqB,GAAjC,EAAsC;AACpC,kBAAM5E,MAAMO,KAAKqE,CAAL,CAAZ;AACA,gBAAIA,CAAJ,EAAOb,OAAO,IAAP;AACP,gBAAIA,IAAIR,MAAJ,GAAaoB,OAAjB,EAA0B;AACxB,oBAAME,YAAYtE,KAAKgD,MAAL,GAAcqB,CAAhC;AACA,oBAAME,cAAe,QAAOD,SAAU,EAAtC;AACA,kBAAIA,aAAa,CAAb,IAAkB7E,IAAIuD,MAAJ,GAAauB,YAAYvB,MAA/C,EAAuD;AACrDQ,uBAAO/D,GAAP;AACD,eAFD,MAEO;AACL+D,uBAAOe,WAAP;AACD;AACD;AACD;AACDf,mBAAO/D,GAAP;AACD;AACD,iBAAO+D,GAAP;AACD;;AAEDX,gBAAQ3F,GAAR,EAAa;AACX,cAAI,EAAE,OAAOA,GAAP,KAAe,QAAjB,CAAJ,EAAgC,OAAO,EAAP;AAChC,gBAAM8C,OAAOwE,OAAOC,mBAAP,CAA2BvH,GAA3B,CAAb;AACA,iBAAO8C,KAAK0E,IAAL,CAAUzI,YAAV,CAAP;AACD;;AAED8F,mCAA2B4C,IAA3B,EAAiC;AAC/B,cAAIC,MAAJ;AACA,cAAID,SAAS,IAAb,EAAmB;AACjBC,qBAAS,QAAT;AACD,WAFD,MAEO,IAAID,SAAS,KAAb,EAAoB;AACzBC,qBAAS,QAAT;AACD,WAFM,MAEA;AACLA,qBAASD,IAAT;AACD;;AAED,+EAAmB,QAAnB,+GACW,QADX,oHAEgB,eAFhB,+BAEiCC,MAFjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKD;;AAEDrD,0BAAkB;AAChB,8EAAkB,SAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;;AAEDU,sBAAc1E,OAAd,EAAuB;AACrB,yEAAa,SAAb,oCAA6B,gBAA7B,yDACKA,OADL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGD;;AAEDyE,oBAAY9C,OAAZ,EAAqB;AACnB,gBAAMO,MAAMP,QAAQO,GAApB;AACA,cAAIA,OAAO,IAAX,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACjB,gBAAM+C,iBAAiBtD,QAAQoC,OAAR,CAAgBkB,cAAvC;AACA,cAAIqC,WAAW,iBAAf;AACA,cAAIrC,cAAJ,EAAoB;AAClB,gBAAIA,eAAekB,GAAf,CAAmB,SAAnB,CAAJ,EAAmCmB,YAAY,UAAZ;AACpC;AACD,4EAAoBA,QAApB,uDACGpF,GADH,uGAEc,QAFd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAID;;AAED0C,0BAAkB;AAChB,4EAAgB,SAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;;AAEDQ,wBAAgBpF,OAAhB,EAAyB;AACvB,+EAAmB,aAAnB,yDACKA,OADL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGD;;AAEH;;AAEE2E,uBAAehD,OAAf,EAAwB;AACtBA,kBAAQ4F,YAAR,GAAuBC,OAAO;AAC5B,iBAAKC,YAAL,CAAkB9F,OAAlB;AACD,WAFD;AAGAA,kBAAQ+F,YAAR,GAAuBF,OAAO;AAC5B,iBAAKG,UAAL,CAAgBhG,OAAhB;AACD,WAFD;AAGAA,kBAAQiG,gBAAR,CAAyB,SAAzB,EAAoCrC,OAApC,CAA4CsC,cAAc;AACxDA,uBAAWC,OAAX,GAAqBN,OAAO;AAC1B,mBAAKpD,MAAL,CAAYzC,OAAZ,EAAqB,CAACA,QAAQ0C,UAA9B;AACD,aAFD;AAGD,WAJD;AAKD;;AAED;;;AAGA0D,iBAASpG,OAAT,EAAkB;AAChB,gBAAMhC,MAAMgC,QAAQuC,MAApB;AACA,cAAI,KAAK8D,YAAT,EAAuB;AACrB,iBAAKA,YAAL,CAAkBvG,SAAlB,CAA4BC,MAA5B,CAAmC,UAAnC;AACD;AACD,eAAKsG,YAAL,GAAoBrG,OAApB;AACA,eAAKqG,YAAL,CAAkBvG,SAAlB,CAA4BQ,GAA5B,CAAgC,UAAhC;;AAEA,eAAKT,SAAL,GAAiB7B,GAAjB;AACAN,iBAAO4I,WAAP,CAAmBtI,GAAnB;AACA,eAAKuI,aAAL,CAAmB,IAAIC,WAAJ,CAAgB,eAAhB,EAAiC,EAACC,QAAQ,EAACpH,MAAMW,OAAP,EAAgB0G,QAAQ1I,GAAxB,EAAT,EAAjC,CAAnB;AACD;;AAED8H,qBAAa9F,OAAb,EAAsB;AACpB,cAAI,KAAKnB,MAAL,IAAemB,QAAQuC,MAAR,CAAetF,GAAlC,EAAuC;AACrC,gBAAI,KAAK0J,WAAT,EAAsB,KAAKA,WAAL,CAAiBC,KAAjB;AACtB,kBAAM3H,KAAK,KAAKJ,MAAL,CAAYgI,aAAZ,EAAX;AACA,kBAAMC,QAAQ7J,IAAI+C,QAAQuC,MAAR,CAAetF,GAAf,CAAmB6J,KAAvB,CAAd;AACA,kBAAMC,MAAM9J,IAAI+C,QAAQuC,MAAR,CAAetF,GAAf,CAAmB8J,GAAvB,CAAZ;AACA,iBAAKJ,WAAL,GAAmB1H,GAAG+H,QAAH,CAAYF,MAAMG,IAAN,EAAZ,EAA0BF,IAAIE,IAAJ,EAA1B,EAAsC,EAACC,KAAK,wBAAN,EAAtC,CAAnB;AACA9D,oBAAQC,GAAR,CAAYpG,GAAZ;AACD;AACF;;AAED+I,mBAAWhG,OAAX,EAAoB;AAClB,cAAI,KAAKnB,MAAL,IAAemB,QAAQuC,MAAR,CAAetF,GAAlC,EAAuC;AACrC,gBAAI,KAAK0J,WAAT,EAAsB,KAAKA,WAAL,CAAiBC,KAAjB;AACvB;AACF;;AAEDO,sBAActB,GAAd,EAAmB;AACjB,cAAI,KAAK5H,YAAL,IAAqB,CAAC4H,IAAIuB,QAA9B,EAAwC;AACtCvB,gBAAIwB,cAAJ;AACAxB,gBAAIyB,eAAJ;AACA,mBAAO,KAAP;AACD;AACF;;AAEH;;AAEEC,kCAA0BC,YAA1B,EAAwC;AACtC,gBAAMjJ,OAAO,KAAKV,SAAL,CAAea,UAAf,CAA0B,CAA1B,CAAb;AACA,gBAAM+I,YAAY,CAACpI,IAAD,EAAOmI,YAAP,KAAwB;AACxCnI,iBAAKqD,UAAL,GAAkB8E,YAAlB;AACA,iBAAK9G,WAAL,GAAmBkD,OAAnB,CAA2BhD,SAAS6G,UAAU7G,KAAV,EAAiB4G,YAAjB,CAApC;AACD,WAHD;;AAKAC,oBAAUlJ,IAAV,EAAgBiJ,YAAhB;AACA;AACD;;AAEDrJ,uBAAe;AACb,iBAAO,KAAKuJ,gBAAL,CAAsB,KAAK7J,SAAL,CAAea,UAAf,CAA0B,CAA1B,CAAtB,CAAP;AACD;;AAEDC,qBAAagJ,KAAb,EAAoB;AAClB,iBAAO,KAAKC,cAAL,CAAoB,KAAK/J,SAAL,CAAea,UAAf,CAA0B,CAA1B,CAApB,EAAkDiJ,KAAlD,CAAP;AACD;;AAEDC,uBAAevI,IAAf,EAAqBsI,KAArB,EAA4B;AAC1B,eAAKnH,aAAL,CAAmBnB,IAAnB;;AAEA,gBAAMwI,WAAW,KAAKnH,WAAL,CAAiBrB,IAAjB,CAAjB;AACAwI,mBAASC,MAAT,CAAgBC,MACZA,GAAGjI,SAAH,CAAakI,QAAb,CAAsB,SAAtB,CADJ;;AAGAL,gBAAME,QAAN,CAAejE,OAAf,CAAwBmE,MAAM;AAC5B,kBAAMnH,QAAQiH,SAASlH,IAAT,CAAesH,KAAKA,EAAE3F,OAAF,IAAayF,GAAGzF,OAApC,CAAd;AACA,gBAAI1B,KAAJ,EAAW,KAAKgH,cAAL,CAAoBhH,KAApB,EAA2BmH,EAA3B;AACV,WAHH;AAIC;;AAGHvH,sBAAcR,OAAd,EAAuB;AACrB,cAAI,CAACA,QAAQ0C,UAAb,EAAyB,KAAKD,MAAL,CAAYzC,OAAZ,EAAqB,IAArB;AAC1B;;AAEDkI,wBAAgBlI,OAAhB,EAAyB;AACvB,cAAIA,QAAQ0C,UAAZ,EAAwB,KAAKD,MAAL,CAAYzC,OAAZ,EAAqB,KAArB;AACzB;;AAED0H,yBAAiBrI,IAAjB,EAAuB;AACrB,gBAAM8I,SAAS;AACb7F,qBAASjD,KAAKiD,OADD;AAEbuF,sBAAU;AAFG,WAAf;;AAKA,eAAKnH,WAAL,CAAiBrB,IAAjB,EACGyI,MADH,CACUC,MAAMA,GAAGrF,UADnB,EAEGkB,OAFH,CAEWmE,MAAM;AACXI,mBAAON,QAAP,CAAgBO,IAAhB,CAAqB,KAAKV,gBAAL,CAAsBK,EAAtB,CAArB;AACD,WAJL;AAKA,iBAAOI,MAAP;AACD;;AAED1J,uBAAeY,IAAf,EAAqB;AACnB,cAAI,CAACA,KAAKkD,MAAV,EAAkB;AAChBlD,iBAAKiD,OAAL,GAAe,UAAf;AACD;AACF,eAAK5B,WAAL,CAAiBrB,IAAjB,EAAuBuE,OAAvB,CAAgCmE,MAAM;AACjC,iBAAKtJ,cAAL,CAAoBsJ,EAApB;AACJ,WAFD;AAGA;;AAGF;;AAECrH,oBAAYrB,IAAZ,EAAiB;AACf,cAAIA,KAAKgJ,aAAT,EAAwB;AACtB,kBAAMhK,UAAUgB,KAAKgJ,aAAL,CAAmB,UAAnB,CAAhB;AACA,gBAAIhK,OAAJ,EAAa;AACX,qBAAOA,QAAQK,UAAf;AACD;AACF;AACD,iBAAO,EAAP;AACD;;AAEH;;AAEE,cAAM4J,aAAN,GAAsB;AACpB,gBAAMC,MAAMC,aAAa,+CAAzB;AACA,gBAAMC,MAAM,MAAMC,MAAMH,GAAN,EAAWpJ,IAAX,CAAgBwJ,KAAKA,EAAEC,IAAF,EAArB,CAAlB;AACA,gBAAMC,MAAMJ,IAAIK,KAAJ,EAAZ;AACA,eAAK/K,OAAL,CAAa8K,IAAIE,OAAjB;AACD;;AAED,cAAMC,aAAN,CAAoBC,KAApB,EAA2B;AACzB,eAAKlL,OAAL,CAAakL,MAAMhL,YAAnB;AACA,eAAKU,YAAL,CAAkBsK,MAAM9K,YAAN,EAAlB;AACD;AAvd6C;;yBAA3Bb,Y","file":"lively-ast-inspector.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { sortAlphaNum } from 'src/client/sort.js';\nimport babelDefault from 'systemjs-babel-build';\nconst { types: t } = babelDefault.babel;\nimport { loc, range } from 'src/client/utils.js';\n\nexport default class AstInspector extends Morph {\n  \n  async initialize() {\n    this.windowTitle = \"AST Inspector\";\n    this.registerButtons()\n\n    lively.html.registerKeys(this);\n  }\n  \n  get container() { return this.get(\"#container\"); }\n  \n  inspect(obj) {\n    if (!obj) return;\n    \n    if (this.targetObject) {\n      var oldViewState = this.getViewState();\n    }\n    \n    this.targetObject = obj;\n    this.container.innerHTML = \"\";\n    \n    const content = this.display(obj, true, null);\n    this.root = content;\n    this.container.appendChild(content);\n    this.updatePatterns(this.container.childNodes[0])\n    \n    if (oldViewState) {\n      this.setViewState(oldViewState)\n    }\n    return content;\n  }\n  \n  connectEditor(editor) {\n    this.editor = editor;\n    const lcm = editor.livelyCodeMirror();\n    lcm.editor.on(\"cursorActivity\", (cm) => {\n      lcm.astCapabilities(cm).then(ac => {\n        const node = ac.getOutermostPathContainingSelectionWithMinimalSelectionRange(ac.programPath, ac.firstSelection);\n        const pathKeys = this.getPathKeys(node);\n        this.selectPath(pathKeys);\n      });\n    })\n  }\n  \n  selectPath(keyPath) {\n    if (this.selection) {\n      this.selection.classList.remove(\"selected\");\n    }\n    \n    const element = this.expandPath(keyPath);\n    if (!element) return;\n    \n    element.scrollIntoView({behavior: \"auto\", block: \"start\", inline: \"start\"});\n    this.selection = element;\n    this.selection.classList.add(\"selected\");\n  }\n\n  expandPath(keyPath) {\n    let node = this.root;\n    if (!node) return null;\n    for (const key of keyPath) {\n      this.expandElement(node);\n      node = this.getChild(node, key);\n      if (!node) return null;\n    }\n    this.expandElement(node);\n    return node;\n  }\n\n  getChild(element, key) {\n    return this.getChildren(element).find(child => child.key === key);\n  }\n  \n  getPathKeys(babelPath) {\n    const keys = [];\n    let path = babelPath;\n    do {\n      let key = path.key;\n      keys.unshift(key);\n      if (path.inList) keys.unshift(path.listKey);\n    } while ((path = path.parentPath));\n    return keys;\n  }\n\n/*MD # Configuration MD*/\n  \n  get configuration() {\n    return this.configuration || lively.preferences.get(\"AstInspectorConfig\");\n  }\n  \n  get hidesLocationData() { return true; }\n  get hidesTypeProperty() { return true; }\n  get hidesDefaultProperties() { return true; }\n  get hidesOptionalProperties() { return false; }\n  get hidesUnknownProperties() { return true; }\n  get hidesFunctions() { return true; }\n  get hidesProto() { return true; }\n\n/*MD # Displaying MD*/\n\n  getElementType(obj) {\n    if (obj == null) return \"Value\";\n    if (t.isNode(obj)) return \"AstNode\";\n    if (Array.isArray(obj)) return \"Array\";\n    if (typeof obj === \"object\" || typeof obj === \"function\") return \"Object\";\n    return \"Value\";\n  }\n\n  getRenderCall(type) {\n    return `render${type}`;\n  }\n  \n  display(obj, expanded, key, options = {}) {\n    const element = this.elementTemplate();\n    element.key = key;\n    element.options = options;\n    element.pattern = `NAME ${key || ''}`;\n    element.target = obj;\n    element.type = this.getElementType(obj);\n    element.renderCall = this.getRenderCall(element.type);\n    this.render(element, expanded);\n    return element;\n  }\n    \n/*MD # Rendering MD*/\n\n  render(element, expanded) {\n    element.innerHTML = '';\n    element.isExpanded = expanded;\n    this[element.renderCall || \"renderValue\"](element);\n  }\n\n  renderAstNode(element) {\n    const target = element.target;\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    element.append(this.labelTemplate(target.type));\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      const classifications = this.astNodeKeyClassifications(target);\n      console.log(classifications);\n      for (const key in classifications) {\n        const classification = classifications[key];\n        if (this.isVisibleAstNodeKey(classification)) {\n          content.append(this.display(target[key], false, key, { classification }))\n        }\n      }\n      element.append(content);\n    }\n  }\n  \n  renderObject(element) {\n    const target = element.target;\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    if (!element.isExpanded) {\n      element.append(\n        <span class=\"syntax\">&#123;</span>,\n        this.summaryTemplate(this.objectPreview(target)),\n        <span class=\"syntax\">&#125;</span>,\n      );\n    }\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      this.allKeys(target).forEach(key => {\n        content.append(this.display(target[key], false, key))\n      });\n      element.append(content);\n    }\n  }\n\n  renderArray(element) {\n    if (!element.target.length) return this.renderValue(element);\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    if (!element.isExpanded) {\n      element.append(this.summaryTemplate(`[${element.target.length} elements]`));\n    }\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      for (const [key, value] of element.target.entries()) {\n        content.append(this.display(value, false, key));\n      }\n      element.append(content);\n    }\n  }\n\n  renderValue(element) {\n    const json = JSON.stringify(element.target);\n    element.appendChild(this.expansionIndicatorTemplate(\"\\u2002\"));\n    element.append(this.keyTemplate(element));\n    element.appendChild(<span class='attrValue'>{json}</span>);\n  }\n  \n  isLocationKey(str) {\n    return str === \"loc\"\n            || str === \"start\"\n            || str === \"end\";\n  }\n\n  isTypeKey(str) {\n    return str == \"type\";\n  }\n\n  isVisibleAstNodeKey(classification) {\n    if (classification.has(\"location\")) return !this.hidesLocationData;\n    if (classification.has(\"type\")) return !this.hidesTypeProperty;\n    if (classification.has(\"unknown\")) return !this.hidesUnknownProperties;\n    if (classification.has(\"function\") && this.hidesFunctions) return false;\n    if (classification.has(\"default\") && this.hidesDefaultProperties) return false;\n    if (classification.has(\"optional\") && this.hidesOptionalProperties) return false;\n    return true;\n  }\n\n  astNodeKeyClassifications(node) {\n    const classifications = {};\n    const allKeys = this.allKeys(node);\n    \n    const fields = t.NODE_FIELDS[node.type];\n    const visitorKeys = t.VISITOR_KEYS[node.type];\n    allKeys.forEach(key => {\n      classifications[key] = new Set();\n      if (this.isLocationKey(key)) return classifications[key].add(\"location\");\n      if (this.isTypeKey(key)) return classifications[key].add(\"type\");\n      const value = node[key];\n      if (typeof value === \"function\") classifications[key].add(\"function\");\n      if (visitorKeys && visitorKeys.includes(key)) classifications[key].add(\"visited\");\n      \n      const field = fields && fields[key];\n      if (field) {\n        if (field.optional) classifications[key].add(\"optional\");\n        if (field.default === value) classifications[key].add(\"default\");\n        return;\n      }\n\n      classifications[key].add(\"unknown\");\n    });\n    return classifications;\n  }\n  \n  objectPreview(obj) {\n    const trimLen = 30;\n    const keys = this.allKeys(obj);\n    let str = '';\n    let i = 0;\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (i) str += ', ';\n      if (str.length > trimLen) {\n        const remaining = keys.length - i;\n        const replacement = `... +${remaining}`;\n        if (remaining == 1 && key.length < replacement.length) {\n          str += key;\n        } else {\n          str += replacement;\n        }\n        break;\n      }\n      str += key;\n    }\n    return str;\n  }\n  \n  allKeys(obj) {\n    if (!(typeof obj === 'object')) return [];\n    const keys = Object.getOwnPropertyNames(obj);\n    return keys.sort(sortAlphaNum);\n  }\n  \n  expansionIndicatorTemplate(kind) {\n    let symbol;\n    if (kind === true) {\n      symbol = \"\\u25bc\";\n    } else if (kind === false) {\n      symbol = \"\\u25b6\";\n    } else {\n      symbol = kind;\n    }\n\n    return <span class='syntax'>\n      <a class='expand'>\n        <span style='font-size:9pt'>{symbol}</span>\n      </a>\n    </span>;\n  }\n\n  elementTemplate() {\n    return <div class=\"element\"></div>;\n  }\n  \n  labelTemplate(content) {\n    return <a id='tagname' class='tagname expand'>\n        {content}\n      </a>\n  }\n\n  keyTemplate(element) {\n    const key = element.key;\n    if (key == null) return <span></span>;\n    const classification = element.options.classification;\n    let cssClass = 'attrName expand';\n    if (classification) {\n      if (classification.has(\"visited\")) cssClass += \" visited\";\n    }\n    return <span class={cssClass}>\n      {key}\n      <span class=\"syntax\">:</span> \n    </span>;\n  }\n\n  contentTemplate() {\n    return <span id='content'></span>;\n  }\n\n  summaryTemplate(content) {\n    return <span class='expand more'>\n        {content}\n      </span>\n  }\n  \n/*MD # Handlers MD*/\n  \n  attachHandlers(element) {\n    element.onmouseenter = evt => {\n      this.onHoverStart(element);\n    }\n    element.onmouseleave = evt => {\n      this.onHoverEnd(element);\n    }\n    element.querySelectorAll(\".expand\").forEach(expandNode => {\n      expandNode.onclick = evt => {\n        this.render(element, !element.isExpanded);\n      }\n    });\n  }\n  \n  /*\n   * called, when selecting a subobject \n   */\n  onSelect(element) {\n    const obj = element.target;\n    if (this.selectedNode) {\n      this.selectedNode.classList.remove(\"selected\");\n    }\n    this.selectedNode = element;\n    this.selectedNode.classList.add(\"selected\");\n  \n    this.selection = obj;\n    lively.showElement(obj);\n    this.dispatchEvent(new CustomEvent(\"select-object\", {detail: {node: element, object: obj}}));\n  }\n  \n  onHoverStart(element) {\n    if (this.editor && element.target.loc) {\n      if (this.hoverMarker) this.hoverMarker.clear();\n      const cm = this.editor.currentEditor();\n      const start = loc(element.target.loc.start);\n      const end = loc(element.target.loc.end);\n      this.hoverMarker = cm.markText(start.asCM(), end.asCM(), {css: \"background-color: #fe3\"});\n      console.log(loc);\n    }\n  }\n  \n  onHoverEnd(element) {\n    if (this.editor && element.target.loc) {\n      if (this.hoverMarker) this.hoverMarker.clear();\n    }\n  }\n  \n  onContextMenu(evt) {\n    if (this.targetObject && !evt.shiftKey) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      return false;\n    }\n  }\n\n/*MD # View State MD*/\n  \n  setExpandStateForAllNodes(expandedness) {\n    const root = this.container.childNodes[0];\n    const recursion = (node, expandedness) => {\n      node.isExpanded = expandedness;\n      this.getChildren().forEach(child => recursion(child, expandedness))\n    };\n    \n    recursion(root, expandedness);\n    // Do we need to render?\n  }\n  \n  getViewState() {\n    return this.captureViewState(this.container.childNodes[0])\n  }\n  \n  setViewState(state) {\n    return this.applyViewState(this.container.childNodes[0], state)\n  }\n  \n  applyViewState(node, state) {\n    this.expandElement(node)\n    \n    const children = this.getChildren(node);\n    children.filter(ea =>\n        ea.classList.contains(\"element\"));\n      \n    state.children.forEach( ea => {\n      const child = children.find( c => c.pattern == ea.pattern)\n      if (child) this.applyViewState(child, ea) \n      })\n    }\n  \n  \n  expandElement(element) {\n    if (!element.isExpanded) this.render(element, true);\n  }\n\n  collapseElement(element) {\n    if (element.isExpanded) this.render(element, false);\n  }\n  \n  captureViewState(node) {\n    const result = {\n      pattern: node.pattern,\n      children: [],\n    }\n    \n    this.getChildren(node)\n      .filter(ea => ea.isExpanded)\n      .forEach(ea => {\n          result.children.push(this.captureViewState(ea))        \n        });\n    return result;\n  }\n  \n  updatePatterns(node) {\n    if (!node.target) {\n      node.pattern = \"NOTARGET\"\n    }\n   this.getChildren(node).forEach( ea => {\n        this.updatePatterns(ea);\n   })\n  }\n  \n  \n /*MD # Utils MD*/\n  \n  getChildren(node){\n    if (node.querySelector) {\n      const content = node.querySelector(\"#content\")\n      if (content) {\n        return content.childNodes\n      }\n    }\n    return []\n  }\n  \n/*MD # Lively Integration MD*/\n  \n  async livelyExample() {\n    const url = lively4url + \"/src/components/tools/lively-ast-inspector.js\";\n    const src = await fetch(url).then(r => r.text());\n    const ast = src.toAST();\n    this.inspect(ast.program);\n  }\n  \n  async livelyMigrate(other) {\n    this.inspect(other.targetObject);\n    this.setViewState(other.getViewState());\n  }\n}"]}