From f6a554c8977a46b5a3880e7353efb5b8464f1f79 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Sat, 29 Feb 2020 21:58:18 +0100 Subject: [PATCH] Improves implementation documentation. --- README.md | 40 +++++++++++++++++++++++++++++------- docs/exported/main/Main.png | Bin 46806 -> 14031 bytes docs/main.plantuml | 12 ++++++----- webview/package.json | 3 ++- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c9fd0d5..a3415eb 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,13 @@ [![](https://img.shields.io/twitter/follow/hediet_dev.svg?style=social)](https://twitter.com/intent/follow?screen_name=hediet_dev) -See the [extension](extension) directory for the extension readme. +See [here](./extension/README.md) for the readme of the extension. You can get the extension in the [marketplace](https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer). ![](./docs/doubly-linked-list-reverse-demo.gif) +This readme extends the [readme](./extension/README.md) of the extension with implementation details. + ## Build Instructions - Clone the repository @@ -15,19 +17,43 @@ You can get the extension in the [marketplace](https://marketplace.visualstudio. ## Dev Instructions -This project uses yarn workspaces. +This project uses yarn workspaces and consists of the sub-projects _data-extraction_, _extension_ and _webview_. +To setup a dev environment, follow these steps: - Clone the repository - Run `yarn` in the repository root -- Run `yarn build` initially (or `yarn dev` for every project) -- Run `yarn dev` for the project you are working on. +- Run `yarn build` initially (or `yarn dev` for every sub-project) +- Run `yarn dev` for the sub-project (i.e. in its folder) you are working on. -For the UI, `yarn dev` will start a webserver that you can access on port 8080. -You can use VS Code do launch and debug the extension. -Chose `Run Extension (Dev UI)` as debug configuration so that the extension loads the UI from the webpack server. +For the _webview_ project, `yarn dev` will serve the react application on port 8080. +Certain query parameters need to be so that the UI can connect to the debug visualizer extension. + +You can use VS Code to launch and debug the extension. +Chose the preconfigured `Run Extension (Dev UI)` as debug configuration +so that the extension loads the UI from the webpack server. +Otherwise, the extension will start a webserver on its own, hosting the `dist` folder of the _webview_ project. ## Publish Instructions - Follow the Build Instructions - `cd extension` - `yarn pub` + +## Architecture + +![](./docs/exported/main/Main.png) + +### webview + +Provides the UI and is hosted inside a webview in VS Code. + +### extension + +Creates the webview in VS Code, hosts a webserver and a websocket server. +The webserver serves the _webview_ project that is loaded by the webview. +After the webview is loaded, it connects to the websocket server. +The websocket server is used to evaluate expressions and is secured by a random token. + +### data-extraction + +Provides types and a JS runtime for data extraction. diff --git a/docs/exported/main/Main.png b/docs/exported/main/Main.png index 0c1c34a66f2f4b57f583f4c7b4598ab93aca37a6..51b000a9c84e68c6e80bab43855933e16f4c2120 100644 GIT binary patch literal 14031 zcmZvDbyQSQ_qK(A(kac*jYuO6(hMy~h=3p=F{HH8A=02QbT>#NA>9Z=3L-Fsba#Gd z^nHKdZ>{g+k72DlbMHO(oW1vXo@YNdR2?dh{eb+zty{OS6%}MPZ{51Xck9+|8jL&O z$WQBjQSgt|`I(-xnZ1MiTXPHNTk__1=8h)L=C5f@-DxeIogGBDxgFk`*g3n{zU4Br zx5a-fObM=#YNf5`{NLlZZiCCbgWE<++0Q)23f#G~PZI(sNax`w<0PjEva>6%2^mSZ z8*Nv|3L8Y5HtmaAeSLP4W&3(H>^I9^Q+Fi7<<(++iCYwfGCjZM9DBP(kndD-Oi7k* z)VI5K$0WFAno8)b&Ji!Y*CmO(g9HbOx_;cgD_Z)5h3d#^p_m;r$4@|S+ON)^-IqRi z&v!&-n$_TI!jSfDj*7c?x!ap4O^hU0*eFjpcCK~=qv21_$0L2;hT2BRAe(+BXCBs= zJXWo&%voD9xoq{Lkv+CaC@rPBO+!KHHK`CUx}i`oK7=RnM|mo1XI@fXvG|XMXxftF zIl>N7f6qI9-Q6PtVnC!ejG1e_Z(AKOuWwAJEl^&YT$3!KL$zlWT=geSbXkjqk!>2h_C&WvpE`0Pt=X( zX8-h|0=m$txr}q$xtKakutq3s9Q&GY>l0e0bNpw`9`Y1J25T$JnWU1(y7^C-i?2Vo z4N703EjA*CS;#t6Zr$RmRg{&|emA|9^3YIQK6Pgnf@2b)o6_H4*u4=98z|JR52cud zkaaJR>$bDVjI9=K@N;d{y~~n{cp17^xYx^pL2fpD+D6JPqc0@|p~akL3(5aTdumCa zzOOEu*(2lRo4exVi1>4u@!>wsY|BobxL4Tvx`@tAp;pU5nU*&+ZwC_+fR{27%0wH0 zCk>+mA1u)SeqeNl;z|Ge7^xQ;*AeFsi?%Jx*p}iC#()Gki^AHlsAsJ{HwAq?e2arG zjj@)GbY|qpK9sEz3uMoL5HW*8Q^~Hj)}H&pJ~CtdB|*em&d(h?B~ zNkUwlwvG<015Y}Hy0iB!x~$aHfnp;q$GysWB5QWFpTR<%rN8iKXws6BlD>Sw^k(Dc z{u2TQEfyBb|CDy~do%&EYNy>LIy(Bk|Lya8H<&|&@>r07Rb4p8)_c4Qj7>TC@%_?> zkdXJ{t-eplBbZ`C>4Wg3580s!OY#G2uJlkIc4=Cu=kaD}L`2|$ww_)Oz6=H!eHbAm zKpkF8lEn#CRS38d8+3cSsjpv+*7ONg;1XQy8}8myH_a%nCtjC(aJ$); z>xfSCRzKhPa4n6I3NqfV`Z^&`&l>^ujqmNj%$_IL7u}IR6x>rqg*O&PeyH@uq=_%rZ@h~TR_n=qd zZt%YO_>4zPuB&m^<8bcsekda*8Koe&S4F4Q$#x`!Eo2~x-)EZ7{$2+}01sC-2#f3% zXY`YktqWyE_&jH*&=Xn;I(K*DHg|%vJBwCKwy}pf)8|g#J)gftww=*|4`&uMS;m;7abIiihA@8^+w1n?2KQM$|!8*GM()RQ0 z4;=wb3uXgd9Fwr{FOJF_1RvXQ$e+WmkAG5QWAm1Ti91tHhny)gn$If`<0=U?8~{BrWp)@Hkhi@%&VEKq0a(DPACTp7>q>O2?GLoI9Zx9GwgtK8^&Fh5%c>a`BC!z zKB0pA{R)V5z|qFs&iKYob_t;)?5lQ?99mMjf&I8ed)YOM7nP2!rQ5doGG^YE={!jY zS=*#N+V?rll>j?$UOUK>?-hi0Wac07kPgVW=nCcO_LO*+TYK!fScts-gu(Uc>hQ{g zAKqSaad8aF9tS_)D1USD#9UKnt=N;g$3jA&tgNLoc}qumv{W+I=Z`jQh1>Xg(sz5+ z^SH2#q;=4bskNKH?h7Lsq1y--=Zt=x@bN^ewzD8ZRCrhbo+lpjg{N2aqA28!<~?i~ zv&u{VC%<39SC)M@$JYu^x&o$WRfP@W?K3^_rKk1bk9R_5_UVWMp52rW9L2if?#Gki zU|bfCj_OJ_5umGxpCTRnH&(M-wR8miLG9b>4CSU^n7H+afNLyvUujvsiBxNWdvPL6T%S3&v+285G1kKF{aU;9w$Lzxxxgt~V%#$C*$IGRR@eu>qwryovr zzm!Zxy^M*v9ldDZhLIukg7IIiBVslsef66|O(zCx3Ln51bXMLW}NgCjrN+7jQ z(i=F$3?86SWTo0O&OPFoBWW#JlC3qw`gI4Lz4=54Obd}(OC_)Fa!F+R3yig0WcIp( z@N}d@DAlb$m|Su1=41D@PIVgHo`KB?DSPl*Nw?7BNZp&1)dU<_+a>TfWSh5li5#7=I@@{8nkA~6e#gOy2 zCwcE}-UqBI!|)MG?cB|NzM)5o zkpA$tet>I+%isMd|Bh5c%In6ew;LedDZOAqZnp?B>0y1ny&pVH9zS}Vykqs?;<5F_ogy_-)IFe;+_cM~9Lpn^D`C zlMN%BpyiG@!e09L*Q@Pp+U)U8OeaCFhbl;>*n(k^(xsQzh^>;%5botr(#ULTYM}yk znsiP}{OQ06G57rd`k<+>u+e(=4f<0eMrnN`c+zbyiZXkN*9q^;+@uqH@h*adm?FcJ zG7PHjW(ci)0@e4DUmT{Vr1qK_=Q9V%Rla5b*mpA7cVOp09UTi9-fg zUU;`x@795U?6@6^zkvCS1A)kgIUQAW!7`URC|kr$^9NgDDSOu^_f;I?b%DvnTrR zC{?944dLm0g09SbYwRFcm!}0GTb=&DZ2tTSM&NX$b{3TGFF*u$a_s_7Eq+Ni#{zuE z0xfyw-i5YRYnJa&F}6MgrgvazlLW=b9sa zKl7!(nkX?yO-(hZd0XK=>v6pK6AbeqRn>F@LEg&Ga-_3eSYFzt*IQDUb>%{Z*V(@9 zOpW5rP_m%?>F&bk)*K?Q2In=+6vJ)4zH*ax*Uc%DggW0FAIrydpMMU+&(A$NY;0^2 zFW-NSN>H&oW`a)CR$>pi9-_k;l!M!I0zzJ$-bY7QUaPOKFKgTn!+9gvlp=a;WNQ?v zRT+uOQg4d*;y19bChuDEUtQ$o<%Jg*&Mz*S@sU66lT=kw(mZ#U3Bqa( z3>7a?6D_lc5~Q+-~qE+6LRCNCm4b@KJu zGuFGM#tzT?PrvZKc|0FQm>A`GvR&=WQAt3~A6Q~-$Es27um954UC_!`*-pj$Xqb+h zn_E{`cj|@kvAUR{23<^ATBO$&LBG4IcJv>ti#o>z?=NLMpCYTGcPi?JlM1$4j1 zXizyMg<}Z{3Py|+ZJIihG-97kMHLouNO`Kiu)@nB>Kz?LAQ(!hgdFCR_-)8js`;1% zb!>`UD+=oYG*KdWvOghTRUwoyXbPv2@G<& z#elle#7v|6f#*&WGqH^-p?XeS9FZ&m0m0)ZvdGP!mGpFU9jqcY6C7)L4izvWERF() zN-IGTk%rt{Ijkoig=HP2#!3tXBg}f0EysvzO6s5dn=~Dm=2gNamhN-=-;M4<-=ac7 z95+MN@LM0Rju(-3VIrTpZb~-fAKl9UN5<7Hb{IiQNyjyhpc*N4KezohpvqGxQ0C3#(%)U$x%Rz8h`y%{BD5Va;2z zA%0mL8gWsl6%||hWEUPK!i@kH)z`7sMSthc9#6QuJp`XV+ZRG{-(Sj+&}8d(ljq{9 zrM`tluJw+Mie19}!mr^vgX0rO=k=8D&pj?f_lv*hB!qmVdg?k|W%WqY^h*1^%}e}N zEH0y+{1v{ZVfQ@D&kxu3`{^)GTOJFJ6)7SE*jRVeGFhTSS`a_|WEA-0aAn=a;-B>% zO7)F5;8-H z1b^rx2T5laDO+91qQa{BHJQqr&#(az<)hWXjq^X^vN3x_3%&?E=J5wbt`9DWVH1FF zTb+E$sn@$`w5(!^;1X$dA*^IRCv_@ysOgA!Gth|`urnuJ^pO5YSil#tS0FFy1LWE_LP=UTdHEK?Bk%#&DhvA7n#=2+a{2hu7Cs~aY z0k^CU->*=U+ra%(l3=y&;EOmb# zP1Lc)At=P2XXRRMB^9}<_ZO9Ta46Hu&iq8IdJJF)VUCQj;K8t-U3Q+aT09ufEl5)S zX1Whg;NZ1FFdTmKihPkJZ?8G|5a4W*AH-T>4>|Z%g*kLeti96&)*97QbaZUYyFe-H z@M0Uh*nQl=R69Mb&mO_?iED6L(~5l27^IOs9`8IcCag23X1$SNR>hBWJiAwQe7ex6 z*t%4JnE6y??xTTaY$gEA((6mCpxm6DogrEhxs3(By$Tqgf7(t(a${{M_+`1uISCS3 zMWbc_pKt8nA#3aO*{Yt@=H`nFMa&cWezZPKOwdx&6-)SvN&Y|2&1v2x zn%Stza+BbC^jJ0I3kE4mp;6=+Q6juvwRuyF73yxh{6023c0qa8g>BDP5 z6?=4xt_75msLt@TmYL0D`{w9`SsnIVYdxKQ1>*Ki|9<|6EWvLZB`+Rmm6WfS%X-Z= zxP*KsnrP>1tQ-i&Rm>QgWL??clqMv2V9ufa+vmA_^HB2$Ay+f#9dYgWyVBh{=BYwbbsUq@`1jm z0fSN(8d_MO4F^q!qk|M=!c`;K>CaH8Y(+g9keSX>1X zZn#bv1zcH3&8ta^qSEWkkzA@cCQa0Re{D1mRLB%QD*|jFV6MrR26pGXJFiGnm?0!3 z{j5v7(Sx&XdVj+=BK@=SkF2dbqAoz?Cb zdi|s&`ac%Iyc`d-@q*_5AiS$Et>5P%fGyZQw@QTsRPju< z=@VMc;<%yRdrT~?KoPaF%Y^?77`$oFQjA4 z`NWek9V*$0Rhp$Gdet1Ev@+o&jRE6;A$W(g0i*|vl%ejTt$i^U^B-mg^YHc0{q7TL zH$WA>!K38r>$!QHCiGELHH{%IlK_r1dgQgbIO{Zr<^slZy!7%pb%bQki9~TgyNMFz z<1e`H7>V*+b2D-Utah~nz@Xk0C{TV$dP>YJHwcIr59uR?ZW3md4Og?k^`d9>?BWu~ z>xcALOtfwNa>(}#xZZ;H-uG&2VsN;jFRrD)jBgH50w%`IG2M~JO^6=wRd!Pr4yymk zEID{~5rRChKIq1j+vXRQ|x1-mDH70jnYT;Gdv_7jGUMry-{RLMohGdKd7!fBMf z`7hN-@7Bh>F`R#bu@(}S+5rjVNUMGBO;-q2ROfr%VJX-^D_ zG@bI0Kw`Sq3|M_&sp+%pgQIMEgOugCJt)p&z1>P0ylB6$qE~tWh-#-I_dLPTN^=L` znUszP*XJegLD`)SsJi`Qonn<5(6fp#1mRCG3s&feLcqoeE}Q|%8zu*wIO#`IaU+P? z!D|sxtlkreUyB1qd+vz&f~XuIX}U9iR);Gn^FYrOekJwc{+|0Nj5h5mxXdxQ+B2pj z9>8RNhCag24Adj#^&*ZjDnQXKbb1bmp8P|ghYM$7z${_N zB1ZkYDrF8CNr&;^)*~rFtiBFGnNi!88609WTaF>_KA$5T5V z8Q1ZHMdmmoA z1;Eb}eq}IpTz6s;=46TKlzFrMsC!Sw);cQ)!cs_4saEF{dw+Ia8vfWu!qfFPe%ox7 zj#!D zUbehjJNfD4FIK#*e>`4ts8-iZc+N6CVmmH3<>_UA1rK-Qbr#Omp#9Jg zmijhnxhHIzqE3L0?ha_7^jh*IspPsI+UdAe35<;aL9okHA)qQuC?$=?x+Yh4IuIrRd>iFKI$lP{%^o*^R;PnBq!1sI5qY;5 zT+troVqbUx{2ME@L>@%#FarzWc@ENt%e?`hxse~ha zMYsbi5Jy)hTF1bmSTr_$ZjodL*-+e>BrmNFPwG26%Ww!aefjQ6p#{@H4HOS&kiW(X zQb1PJQ=au-2YoG8qPJentGeYpdd-||+qE%*I`EE&O#7^uPJ5$xvRzh0y_`Jw`4l4B zv5ICvpA`yfm72pzphQ3mYpTziH>G~43X3cU+Jh{RBxs>D#Xl>N5+{Q%NDj7RP77{M zP7Rz)&~spg`>GfTsX7W6Yf;ECbuD&ZCzU+tim`64&>dppbB{X_ww-H;oGBa#bc8!1 zWb+`n$2W=mV8WN-az_4*pW9xqWPnhZP-t467JOj!XJsB$cr1{@ZHpKmF}T*m!|@P9 zNM~+#ZlL!PF{ji{*C1azaaOd<2?MSA1^n?wj{BJbJybrD8mJ7Fv9Yni!SWs+4GN9E zH_f%Rf{5;qWd49k3-_#TY-}Krh!$Vpti3YsAQpCZ3Vv&%W+BHV1uGqFd0brF9iTNt zQj1~Tmr+tu+WFlS&CJT$+lQ49Hd|wx3~-)kUSsc_J#MxahK3(8uABG!*fmpodKCCt z`}-dTTZZz#Wr5Q8isl*ACN?<3UX;%pKkJKQHPh6p4LyyfPkZNiQxl7&JV$V+#_3O= zxc4tO+-IWx;9+QJno{7rF@wju!>2IQZ<<>P9A82+4GrN zxq?B3P)hhT0(FEAHUt+oMRuuB;o+r6YvDAb5lb;ZASUzQKhVK|PVzalKA@$@{3O{czcs016F}qo0i4msZUR9b)8+4MK33307Ie&8~uJMiT( zPL#(Bc_07O#E_I}uWx85zKcFlVtgY`psW-Vj7{;e19asMw=Vh{8@UIoWRDE!A|rob zWN-}=u!JcjW-m`waIy@mz@?>0eD-?@;)34Cycu|uXG9JpL!dEsVkTbFJppQr)o89s zP#}RqT0=uan1ZTmL~?R6SgTW#T$f7OI&nID-vvy?qk_`X1f=E%O)-kWR|R_JP-W!3 z;DPRL^yt0C?uV+xWOhI+Qn0lx(SCbSY{CvBfAabkgVedMCQgW~`f)7K1`?Oa>MUfE)`q8~K%^}{Wfvrb z*#_~yWrRA&`{;j2>m|kz(Rk@2U4Wg?Y@SPlXmR+AC;x%{`DO6F)|u3^h3Om(I4A`L zT26UwLd*1P#`g9*mzQ2^bNz|jk(9y+l~UKO>G2|6?!B@lJ{GWCD-5iJ8gaXvyUzv| zYY6g~h;3N$<@Cy5wZ^e(Es=GEzkui?CYo1Xv_D6_X2RNk?7F#gALlZ@Q0T>ZLJ%A- z-XtjQGy0jQjQizf>CZfi4Hr!juqud5TMM}?e8N2dx$#?ku0*)bB55SJ#L0mUGm<5b zA3c``w4|XDgIc`MPoItt565~~(dR_m_ZjG{tgH}X%n}k3F#G#+F>{pG8AAL8diA^v zB_w|H^RF;|e4=`~GP&c)UJ32xMQ&LiLe0h0!bCOjM zwKcXgL88sg&253!HK>98>j1I~(9>=&^J~8idAAs$%dlMM*!eyrJlsiRgeQZpa1Ieg z`0kbbCoj{QGO1>W>0(!BCSM4$pZf$Q%)h0F%Ic^FW07T6Y)?+>)yI4N{Q3f@I3HS& zi@bNf2E-}GUcZ=D`h}OrC&T2617?}g6 z>V+7wQvo22tQoDR@1$99WWYn}A)VcihEN3N6H*rBsH#J__6YQZfb!GR(}SUUtoE7W zDm>crW-g6hM97kLI{bOE3e&MT>Uvs^j*jzkkFf3!OnY)TyvjCSD)T-Lu>CpODn&7( zSw&jH#mZ{3gKEl%w38K(>u1Z$|EnU&U<5-H@&4PHQ-$L?dr=d2{{!2VUkB` z!$br@H%31S^k+YH6lCNc15dz45zS}_XoMWnLFa+4#wL(G8bajT7Ec{PP=En}mXGS+Yx*vCZ3ozQac1++ z1O_GP8&YPwpP|~!{HXJ23d(#aLE~v#-_G-uQx9Tojh$Ab>OQ#t>rb#g`M_i|tKk}1 zQJx*d*Ag#NYH&OoS^*L39F4qhtDLUrMaBaTjrGX(k}eWRV~iyJx8L?RoqmHccmtBL zB?$^Qev<S;FufkqPZm8i51IPu5siscupntTH(&EGoKt=MFHwJayat zRck+|Q}n#rKD=1M@?m!jwr4`r1i1=m*3V9*NM6*m68*wLHCP(6B)rf0SXeB9CS2mt z;cAtOU4nh_cBZDJxtV%zdU~2sV)zrM^*B?l@(+SAt%LexM}fiqwBzbjz|BFczcvDt zf62;$Vdhh{tws~Yt@l(YRq33I16>st+fR>pt`9Nq^V z@FIPc=5;@1M>jV&6<g_9+{kIu+b_`9LLP@K z%}B5lEG$H)rrJdaxvU|cokhzr4t`>Z3nRos*v+5;)w-1 z=RfQxP9^M^eT@8k7!P(fEV3u}j6XP)yY0Np{vK3oH!Gc8S9iLcX#9Ne?tL7}I*UQ_ z@wWI`$fr8<{)A@li==9nCr=23n;IL{-Oa<7@}JAR@RQ4Q5Dm*o)v2yoU$u2U z1?1LB5D-KrK>Yh9dJr~WmY8pVT11O0RGZW9v^Fa2wDJled#_SWQu2LVh$2mNK)^kf zBqa?gVbe@upUb+>H2fWyP)T+5;g4jzRh^1iF&4sq29tG-jU&lDJUmJbYKJxr3OTKV z%)kGqsqt0_z&@J}%oQbNWf=x8E}REpJ$`5pA2-o`wVCA7pfRU**#0G~M<5+88jMRb zG%yhNpmvOEWMqV&pWlLWAJFP>bz3jx8C8vvpd13eu=q$ub1_b;XI3Jh4|A-M)gB2r z_XR5IVc(aO`)l-hjp*pMU*|(vN=r-W{H%rs2UV3ioYOM|&ALCO2-uS6-YU!E;%Uwj`q zJ-yG7k+>ggK+|q(JBnaAzQz0EY=_6%#zrUpd(udzzMou$V?Xw50&S;cM6UOOYfw_Da-IA z6SAC2%ZO@|FZ?zWlEL#lA+lD5oxeDlw9Kg)K^t&4vv?C{yszlo&r!Q*#1gYlmNirV zhg_uTRmQU11ho%H_vsIyVC}+_oH>i5^Vjk6e~0M~!9KgX{ey8^13mPH=#`NUWWULg z*;`1y0xu%QrF)#6qL$Bb#N$g3bGE44gRl+i9hVo{gF%mpm6#uf?0EnFmf?=glGK@n zU9fXv>Bx4JZgXLw($w>5{5Ohl?IM$cdl9C~rIAPS8e2j+)toN1$Gh}kGh2jywR@1t z`{q-f5e*g9*4i2?W2&e-L3C9W-`dJ;E^S71j8M}+B_C!X6j*c=Y$+uK)SNyltD_*5?T=YdW6JRsAuy*a+4)nqEFkHeXvx>NXQBKU#YQ zz$rZ3hYv@4c!4bun?fKYX>x2VeaZb`#mYH2$Lj28QTadRu8#K%+yR+yg;y46@i4!F3H02oKVySes;&6o|ROZ^#2 ziRHQhXztnNz!%=rp59(e_qY>{IAnk@>9Sc+3=@$dxfyh_H2X4SB0SbQytww`Wjbh^ zs#6i6!F0AK`g?m@IWXzJ3)lHvH7Eq!r^knWUl~l!c@iETj-SYum4x2yXM<*si3ZpS z*Nd;RpZhi4EZ=&_UU_?a2bP&l&&ivTHMwTM<0TkWcG|Ij@WT-o+{Zh%oV*oKk zBDKA%^BtUuWyoru( z2ypkl{|Ue|c&x_QH=|%`qI`Dkece`fnpz^1?2?m!PwmsjH4}igAhLYX9^BIjabIvb zRRp>{n8a@t?AMkpn8BV`K(i{eUB4C40YfnfY1nx*g76P57DlkgC*kAu8|dlyjQsg0 ziBse*(6Xm<@5uXzweE&%ctL8A&D7Jo#@77JFwLqNjK$Zn>ChnuF9_$NV&OTa8w}5nxa!b6EFb3A_=3#&@?=W&STd`xbO3HxFIWQsiKYi# zQtR^tCCk4aa(y=FXSFo3r$1g5IS6tlp%Q_JSuAX{Vt5NccxL9j^78WR?CiqAutgA4 zWB;{+TU7xo_(1{63a;@=p9@;SF4)oCod+6h78cTJef|By*C2k4;Ke_0OUd^!{Xbst zZW>5{WoT>;6&?~Q-q{O&An0H#D|-*YMo=*pDk|0@x3Xbp;s%U=4r&3_lM(r3A^txTL8&dfB6i2*Xgoy}4ze{{m6$&;bCNA68ERta!QqO?Ss7S@h|t>Rt3}r5B2< z)C6DgjENZ2m7@4q@4i;EB#y&8N3q-}R}$t^Mh9_OQTC1ZIcPlZh$BirE4mM~MM3VS zqa#|P=oG7HBZdp#zqcyPq!Sh-@AjkZeK?7iC*|+MSxtnmJGotmZtbiXg<9gU9Xn8jTN+AW9c$!^-Q87Y^VncD32fj7V?69ad`%Ut z%rR@abfjTVJW|I#`M}D$mRsRiEs{H7(k3&9!);IIKDCmf%vK`GW4u6 zuG#16Vplj|21Mf%4g-OQrMS(@i@egC&B=UgX*nfJA+)o_4wVQFs*SxxUX}-IK*bRO zi}*FBuVe`W812|OL{-2FgMKUFUEcuU<||==y2Rr`6f{{dJjEkO0Y z8-Ds#3YBiF+VIkVz@9lS7PRKv6x6D2G5s||gIxb#=?Gir+x#DUGb-b(1YyV^jK5b< zfP+GpnDa(C{>Sjk z%UXJ97Rvda(L_y;xP}wFEA#JcLar^IU?lmRC0{Oq!7b&s)N;1B20$U%1G~Q}3G+Z| zT|+mY^^-3T{^wlp{UuCP@#K4fdMY6O{MY@NseCQLfVV{z)u)^eUM;(&_zWsrD*eju F{{S|r9L@j$ literal 46806 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 [debug-visualizer]: "Uses RPC contracts, connects using websockets" -[debug-visualizer] ..> [debug-visualizer-webview]: "Opens Webview in VS Code" +[webview] ..> [extension]: "Uses RPC contracts, connects using websockets" +[extension] ..> [webview]: "Loads into a Webview in VS Code" -[debug-visualizer] ..> [data-extraction]: "Injects Runtime into JavaScript applications" +[extension] ..> [data-extraction]: "Injects Runtime into JavaScript applications" + +[webview] ..> [data-extraction]: "Uses common types" @enduml \ No newline at end of file diff --git a/webview/package.json b/webview/package.json index f1ac8c8..d72a6c5 100644 --- a/webview/package.json +++ b/webview/package.json @@ -25,7 +25,8 @@ "vis-network": "^7.3.6", "vis-data": "^6.4.1", "react-plotly.js": "^2.4.0", - "plotly.js": "^1.52.2" + "plotly.js": "^1.52.2", + "@hediet/debug-visualizer-data-extraction": "*" }, "devDependencies": { "@types/plotly.js": "1.44.28",