From 2c2cf76a0e7716a85d69e728acaa4e262ed4e4c3 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Mon, 9 Nov 2020 19:20:55 +0000 Subject: [PATCH] fixed serviceworker with workbox --- package.json | 2 + src/components/serviceworker/notifications.js | 45 ---------------- src/scripts/site.js | 6 ++- src/serviceworker.js | 48 +++++++++++++++++- webpack.common.js | 5 ++ yarn.lock | Bin 575730 -> 595454 bytes 6 files changed, 59 insertions(+), 47 deletions(-) delete mode 100644 src/components/serviceworker/notifications.js diff --git a/package.json b/package.json index 33a2b20e58..6c8c698c80 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,8 @@ "webpack-dev-server": "^3.11.0", "webpack-merge": "^4.2.2", "webpack-stream": "^6.1.0", + "workbox-core": "^5.1.4", + "workbox-webpack-plugin": "^5.1.4", "worker-plugin": "^5.0.0" }, "dependencies": { diff --git a/src/components/serviceworker/notifications.js b/src/components/serviceworker/notifications.js deleted file mode 100644 index 51623b56f7..0000000000 --- a/src/components/serviceworker/notifications.js +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-env serviceworker */ -(function () { - 'use strict'; - - let connectionManager; - - function getApiClient(serverId) { - if (connectionManager) { - return Promise.resolve(connectionManager.getApiClient(serverId)); - } - return Promise.reject(); - } - - function executeAction(action, data, serverId) { - return getApiClient(serverId).then(function (apiClient) { - switch (action) { - case 'cancel-install': - return apiClient.cancelPackageInstallation(data.id); - case 'restart': - return apiClient.restartServer(); - default: - clients.openWindow('/'); - return Promise.resolve(); - } - }); - } - - /* eslint-disable-next-line no-restricted-globals -- self is valid in a serviceworker environment */ - self.addEventListener('notificationclick', function (event) { - const notification = event.notification; - notification.close(); - - const data = notification.data; - const serverId = data.serverId; - const action = event.action; - - if (!action) { - clients.openWindow('/'); - event.waitUntil(Promise.resolve()); - return; - } - - event.waitUntil(executeAction(action, data, serverId)); - }, false); -})(); diff --git a/src/scripts/site.js b/src/scripts/site.js index d4b4dab527..4df280bbae 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -225,7 +225,11 @@ function registerServiceWorker() { /* eslint-disable compat/compat */ if (navigator.serviceWorker && window.appMode !== 'cordova' && window.appMode !== 'android') { try { - navigator.serviceWorker.register('serviceworker.js'); + navigator.serviceWorker.register('/serviceworker.js').then(() => + console.log('serviceWorker registered') + ).catch(error => + console.log('error registering serviceWorker: ' + error) + ); } catch (err) { console.error('error registering serviceWorker: ' + err); } diff --git a/src/serviceworker.js b/src/serviceworker.js index 2210183148..49ae921b70 100644 --- a/src/serviceworker.js +++ b/src/serviceworker.js @@ -1,2 +1,48 @@ /* eslint-env serviceworker */ -importScripts('components/serviceworker/notifications.js'); + +/* eslint-disable-next-line import/namespace,import/named */ +import { skipWaiting, clientsClaim } from 'workbox-core'; + +skipWaiting(); +clientsClaim(); + +function getApiClient(serverId) { + return Promise.resolve(window.connectionManager.getApiClient(serverId)); +} + +function executeAction(action, data, serverId) { + return getApiClient(serverId).then(function (apiClient) { + switch (action) { + case 'cancel-install': + return apiClient.cancelPackageInstallation(data.id); + case 'restart': + return apiClient.restartServer(); + default: + clients.openWindow('/'); + return Promise.resolve(); + } + }); +} + +/* eslint-disable-next-line no-restricted-globals -- self is valid in a serviceworker environment */ +self.addEventListener('notificationclick', function (event) { + const notification = event.notification; + notification.close(); + + const data = notification.data; + const serverId = data.serverId; + const action = event.action; + + if (!action) { + clients.openWindow('/'); + event.waitUntil(Promise.resolve()); + return; + } + + event.waitUntil(executeAction(action, data, serverId)); +}, false); + +// this is needed by the webpack Workbox plugin +// this plugin is not fully supported in webpack v5. pecaching is disabled until version 6 of this plugin is released +/* eslint-disable-next-line no-restricted-globals,no-undef */ +//workbox.precaching.precacheAndRoute(self.__WB_MANIFEST); diff --git a/webpack.common.js b/webpack.common.js index db163219cd..c9263fa842 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -2,6 +2,7 @@ const path = require('path'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const packageConfig = require('./package.json'); +const WorkboxPlugin = require('workbox-webpack-plugin'); module.exports = { context: path.resolve(__dirname, 'src'), @@ -32,6 +33,10 @@ module.exports = { } } ] + }), + new WorkboxPlugin.InjectManifest({ + swSrc: path.resolve(__dirname, 'src/serviceworker.js'), + swDest: 'serviceworker.js' }) ], output: { diff --git a/yarn.lock b/yarn.lock index f07c654badf4d916ebbb7022183d0734f6325173..9dab54e7567df6c096f20aaa6d8bc18bfb29e3f5 100644 GIT binary patch delta 14375 zcmbVzX|N<&bzZ!s-+LOEfthZ4nT@&hkDbtktYJb8gQCa&LD{>q20EWi8A{!;qzQ_DkIT;6)?!JY3u z^NSz4boVK1gl+5`;lX72!Iz#~eksk|`6s{r`)}TZ@3?;B@J{}v@S_)XWEnxED6rJN zMIFzMXV=|NT-v#ry0tkIJUU%-L>-gI%(0^_-o`2%j}?YiX;ooJ#EA+ciK@y=EQfiS zP)LP90*PJpot?{rQj{#}rEb8c$s%dY>?V;UDr0kOS#&+uT%_u`%G8v~bezsrY6Yql zsS{y-Hq6SkX)vq{^YKKXv${1OW=oA~UM}}7E~S)i-hAYd>#Lng=6E!~x5$+UpZ-_- zHxru^Ai-+I5qV4>Q@#KM;t7#O3PuFSQw%L*ni6PCf&h|$1eIZFiDD>s>*w|_-zJrM zK3V0t+L+DLIGwMy$O3J{PAF9DppmnfrCNQunvyz`5Hk*p1A&YrH>0%B3OY845n6QxH;t=4os{Lcyq!rEfXea|K!ii*&DsJ8aq4p3*N!g z?x(-L8;q=U<*fo`dH*}2LARWL@SLECG^-*SBh0Ic!Xk-KcvWQKs!{~22ofc!GPN9@ zT&_7Gq!FE%+?gf=MQS*%sfMNSJ);rHH>tRgpR_t9i<&yAf!&@Ba=p2wOo_M?Dr9HQ zWYR4J5|wgU>gNriA7tkYRV<}j5l>l9oLMFa=bJEb=a+x)clO^pGJCzT6|{O|%@`aF zOa&i-^D%o9eCv7sm|T{gxVU`kTgT|(>p*GAyXEo=wZDu7vV@28W}*yuT+q`s+)d)W4$^e&M9q+z>-XLg?sz$kf4 zGRM?)&v?##At=`BAsG})fo90-uJiKt&E|vG+*RuOA@KC{+SBujA}}(^^DOv$N@6|t z!K;)a(L9z|icxqO34*Ur*Bb0zsGzW(Tg*dFCz2%-(>AuL4vLAn&bSnemf}lX zA8CesWIH2cpn-0PV~RcI@7In0=&kipcnl5IN)&QwI?RsSX~A0XbiQZ|3r@t;f-@>uTI9%BKB5;hvs_d+O5<|U9?F5< z@+YY$moI$dVEN&1?EAJwi!1xVpdyTqrl{A&Bj1P!&qQAPmwRv7qV5D=`ENS`dpzo+ z;7Tz^>nmrf>QNtoQ9AkvBL$o~TswH~vCr+^ynX9$@dT*qZ+s&JXa-*C-D3$t731ki zq&WCXDu`t9$erSBrEs6tSh_2=2VLH2+asx%Km#*j3awdg5)3x7Gd41j0==?UVWI$cKjWRdIU0acINSQY?&3rM|EyeX_E}+*7VtcNc{bbV$ zgi_Nx|Mi>y?hS{h4teE^?%TYu-g|hx&O6eT3qSIo@P$z+aJ3AGAYg*xSP{S#AS@D* zv_dc>#+VWaOuAP3;A(XovWh6Jf<>#C6!eOj?pi`jYA^7JN>#eNDfA-|Iw$HlhzKU2 zNx8Vl=et&vst6+^mzeaKaITzU#bBjfs-SE&W7%%$Bin~d>Q62%_3ypu&Y%CASI7%+ znQt7PEcds*ReCd?IU^)HN3z-P17fh|cl3!+F2M>24vG$LpSI@I#h#^u_u(O4KvwWlbi9)gwespfEtLNHA< z1BS_$EK*?NQ=(6$Tjff%JxELOvJfEnOn)&}l99GnFf!%HsH4w&(}~zr1WncJ?#rLs zy7nd{&3m4SJr5=-91|zi*47($b|Hm0T0Z-k!z;I79EQ&wD6Dk1ezbk;$^Pi_r$2M; zr_SW{o}rImffuk=kdk9*PNgI`NLqk@0mwis!wNDZ67VmPmn2$JT{63S>FvQrjS@x+ zy%3dxCRdMlV%@0K#(W`I1K7UO=<=nHU40waj&o!~w&J-H?wI24+acw?`q;sGhj%{q z_@#{}?rs)db#r3^_U*lCbvi1|aU!L#go;&8;xPre3XNov0Wd)GNaSdVmpmwZ@oDlX zx@cS3dNd%8RD;YG?08bEVyngDsrxdsdu4CEbx=;$*EDE!ot2LpqpXRF$G>UV>P|atyD!ul@4QrKftm z*|d>B1#MJUaFB@w=Q(^U;N5ZbiHV`U2nN(GqBp%JyI!^mIOgXoXW~1W@L_L6cPaz!$@XSmX&Cc#qNu_ z?aR$!uomm6i8K}I(`Kg5lhO1-R4BGu91Pi!97l@_`R*eJi=Y22$={n|oK?Z-0LGM&%xe<%w_} zbZx|PgcOmN0X)(qmUvF$Sb#!Ur3eA@EC3{kO5msk_r;x^D-9x(B~YV14m(tDG#kmG zN+YUH3)!59cuO5qsRqf)ELI9N?PMsgnOr*(tjAC#mW(tV9>Kk5f=rUlW>CNhH~S5~ z?o1$|I(hoDTgewL963m{-Pb;TA?p6-&h~B`RPK$y_C0^L{sivn^biD0lPpA11`Hq3 zA{GIOuq*@=2B`?CBE%IAi7xpswy)H=BBv2!>?Ev4&{pQPdC(}8B2qj~bQ_SSr|Ok? zYr(g*j;!fIUz-ZW(juB~<9VBnmMAU9XTxT@nCuTa3t?1q^lmu8I@6Q(h3y|*cSC=& zduhjWIX`)6>&X4YyS5)E{dl?x__QFC1A=H)v}&l4iFRYdNgyL+@T4Ox`lg!UbTutj z+o_(_q4LD6WTC~JFB;{N(MS##4GlE>zIScE_wkFPx#gHgBQ#LV{u)jCA>z9HfEiEk zcZc0qe{28JI}t?_DhKw>flLtT7*QYyQDg{SB(Mho8CH@J?_bcT%}$i6k|-K0#M4@+ zUkkHQyI(I$^8s`7WGZey`t#cz+r9nIb}qXgneH6_EFcm1PWTHbonNDL27CcY2|UZw ziY&uvgU^$BL?X;mGL1-z!0^42PiHjvNq;=o*+6$(o2N4vxEZxv3hT`}8^M9{0AXAT zjWT007Rp&!x*=&fhixRdaj9*^>XTNbV$X8Ta;AW%PP8kQQ8m*n_d+*MKK$kFU&=kY zfh=!5?>?{Xhh1W8XE$?(H@(eo;!nU0U=+T;U}*v}HK3IkkDic32%;3t@uWhk03k?G z1yLlLbJ2UZFXPIv-wx%ojSA5pAZI95)N+y4ghI0&A*r~gk*R6k$=dT|bdfd|g>r-G z>QS{*9H!eg?iU;3Ff|^|yEUYff3;9Z_ z*Kt^`rb}(Mh;g*vPb4i3lJAnkr>ecgq=ic3Ze%hJmvh;ekuh44fQeHYBWoxBXM5)_ zerEf|q5Fq7cAj-F{Ku^)PJVo2XZ~{+eEi~mF|-qN-R{msaM9kry}-@@c}L3(@I!*E zh#b#DSb=Ry07MxMtBNEj6eeYF*R{FcD`_FFKPaSYnSx!e#ceIElp>REMwb_Y(`zT# zWEkuTx7u@tD@?O;E6_F&(RY-jT`EN7l%+@W`1T+4H_+x*xf=|D^lvU);Lk ze)#X~?B4zx7x%pTqX9emI;+6_Lk8*VNMeCe^YUIwmN4)uv`9z{CIrt{$t(ew2sFiU z%sLx!f9*&6k2O<7EnE*a3k$N@O{J5uS~S-VNsCBTuLYArbk?t^eI+4hii5g7rs`^Z zIHH-(NaT4wHAmIfWY)n-Lm$>tMlTk%BTA7?aGsa?>M!j4&r5qAV{*)$d~vz+>({o3 z6aEW3pZ&7?;;$W~6NbH}4M5Jbe{TR*nqmc20$0lm0D}}@*GMp1j-hF=S6PKAh9Oze z-MYMW>8V_=!y^^v;`s&>SK8ei<>Z2VI~H%pPQD}U{_8#Ww>rB?_lL&rBjm zEdtrG_1O!_lmB4se)Qd!m}BuCC_*vI(hq~~OP}0*3aAj6UAYoP0@GzBN}(wVLjd7; zK@=b(0l)`PRfZGeB_M)4hPuX*#TcWbT%{=|O?^Y3tj zXcyDDg<0g{tyZ)?M0zur9EHqGEVH1;wc?^O$=G6u9+nxS?xN)OHTOF|*uUm}{!_b; z?|Dv+xPH?5k3PGReNw4k;t0Unb%*5*vIn_!D8X8Y9 zvPVi}OrqKR}Qnib6`Wm$`0XhKRvzC$x?Qp^RKspY5NaMk_N#}D=% z?;{JcJRrcqk$Bt!^W`sH_}q`)aO2Q204yO#*4@`Wu^m16)Q>M@zT^Jg)*nns6E zBXp@w*UBnWrz+7_BCV$f>BMl7N@+?gf(y||RTQRx3`1#=sZ_>wt5vF*RXI^hWw|Uf z&xiRA8I8x2l`!1-M;=)Yzi{#7&%eI+es%{4zms?Uuf1P*<29d8J*8*-Oykz`3~+a} z`=5Sp=jQv*lP&%{oZACNk3co+i=&XN1gKkNI6#Gf)n!>yBud4Us;VR}vy?*61d@H$ zDvP_pYRe)6yvC;jqGUaiiT+tRzv_J=Q z@nCVB$n?ZxsV_B)rq@uB_YcmL6&?}0n9%CF9C+GpC}NGSlhK*v0C zZt}>1LJ1zZ=xbZiH3@sFq1DWNDp(C4u^v(CpSU1%EJ1J-@GwYV;G{YDBd`oWWuAe2 z5kNBpN7Bz*YNXYj0*yAwrAvu;YmyTOwmhnt1GzYbTs@cxNJ*tL;fissY|^q;Oq%7Y zK+mZVq7#!;z5}Huu|l#=(6Qo035eEe)aF15hs&@1?wfCV1v{Vf?Rc5;)EuoCJIeQT zucI2u{oQwLKl6g`SyoF|l6p}UFqg*~pVQo$`Si7V~R}l&*wsYG~emyf@8xf-OBAtDADeRWbAG?m4C5LeZ1C&V@L0TNSI zY!V!2Dr~I>)jUF@vV3M-h|wbh*-0~BPXb91Wiy$!7PWI-GE$_gQ_*&x`~22ZYwq`v z{l^|fP)zn1A`dwbC!aak|Faj~3AIxhpZQ5oUhoC?h|9ns58L}k?r*C5 zyScN)Ah~`1ai72yd<|eE5R9aVi~x6rpge99TnCGQ6I3BDq2YiLpbbw0bumBhnw>gZ zGjyh>nQX;m6=xbyiL{n((nKbbhgdMx7gSmdk?b@|LQFxoJc>Y?eY+BUyxMS}((oh6BBiq%2#nwZwEOA`hq2Nw0t^~yy26-{EhuL?eDKyQ1``uyc_dXll5Ze ziWyxi=I(%xB3IWJm?sg^1}HNEEa7Phq9GI+d6EOwfSM4ZIf3Kd=bqcWQtM_#9`$5~ z*UfpVRH>63>r@?alwg$sGbNS$AgmWkv{a~(d70F4j}SY9W+;!6X@0UuW)&tq7P>Z$ zCKf$B5jjiKvvGIpLtEFL@tP#=V`tY=6HD~bi%Vb)-?Bjt!rY1;yngb-&+dOx-053$ z_xryCbjr8Cx4-+IImql_7z0RiY5|12(8GpkByKys|R{kIVmQsvZICdN|~w~;i6_Gq~LVWiY_dQEHk-0!>V>9 zG0Bz-lNQIDv^3Y#9=m*a-X?$aP=(8alpnC3PnI71L2-$R1CDW1nnCn{6|R= zbaBX(=)U&vff$l&iS!_%jF?JQ!o`R-%*Q3Go{wM)1-hZSsi$qy&g!#;k_>2rm|0MS zx-PX4Z$;@vyOl6%3UvB29~eDo8YqfPUvCQIrvuNfIqXuU>p|pog1_j9wn{-9^6$gupnF z9JlA=Y1w`G@9kWf8PqqUTA;7 z6CnOWW&p2vzS@g6;G76JFNS4R28%KccvMgX3XT#OR!QJwL1a{g^m&t7D9O!Ot2JaM z)6zsOM;pn&L@nT=T1>S{1Tl!j!n~3$*GNnZ#DJL0mFJTbN5^~7i4(6yPRB8!Tccz`bQwX*fO}P;p4eN_^ zUTGpv8{(-957P#4%~11rm(3+XJrBstIGeQ|PH#No-L;XpTrIW-^}0PQH;G;?Iu(NH@qCf*H^-(hX*Nm5YBnh|)fdC22UopLHSD!G@PP1qCdBKF zStT8J+tKbWaNqIGy|>=p=%9hVA8*!g{aMGbdrI@?T1HlH@(R%FZi+P=TNkU>tqk6( zRR_d+)%h~@%~dPPJ(X>L8*sbUuioI*z5RL2`szD9mhDN>{{}C&_rF24SJ4PYeU5E4 zs`X3>MtsWVy8D&4@4e0a&%d{Gt+?8=|5guXt`?tz(%?cM!odnZuY1sfGf)o+jC=U^ z53VeK^?MiG6KVhO_PwYEUgP7M)oZ-jyP@6R1f=n+IX?u#kRJqBL%sv_SDo>6XGVJ7 z&A}qyu5Yg%JX>|ol|5Z{ewB=59jq2OJ_y>DIj}c;iDxaRZ##dlHfI3e7$f8u=4}t` zuHDe)0?jlvct0AT-rO-{ud@GuRRc6JH19P7U>k7{oY#Zb!KAn6RnN(}_uO8&bf_d~ zo-`2WZ08|g1~CHKeY~!fb8lF^01gWLrDphjKo6eBsDJ;PKj=pkd-~wFP7NqibXN;eJX#JC6H~ZNq8Z|Hcgu292YDpGYWKP$XmwkR-?|ix^r#03!i*LHfW8$VGP` z49vr+pYkRmBa+^Qyu-EGw!? z6PRKZ5?Uh!O6GwqG@>Pvh2B!kU|A9=LL#{pdtycl zLDqPR3L)O4XFBc+TmQj+_V-J(JoHLRW2d*YDRJpvLkGR?S=9- zS*nQ0sTcZ;p^m~vtHpaAo3D#T?)3o=(7{>-XK3W!M>Z63@6?7m0FUy}>%~dHrSZUm zs{%s`Q0P)ov^8$$6bFZ^mJo_X(@2ix9a)@7WnzlNax^k%*}#%6(O+G=eR_)b;L!&= zhKGCB|7S0?_9;IzJG$SSK3wC*>2~jbXhY}sPi|}4%#ynU?u3hyUu%UzV6B~Mf4onV;-!e&&iV7_oDi2i&Xkj7* zxR4}=5Cz~$a7$m^zUclK12#@p#+_^jT7Jw~a+E7m{c*HGDH&xpj3jb0nUU~3A@@7& zcF0(ytMTcWk2JE;es;nYNEtU;BV8S5|9ROnOTX+{u$$ERe>)6hr3GVm)6hQ}iBS9FD5r#mRC z!x%Ylr40!4Mwy<|02<^y3TJ)V_FKF}z(RXaJHbjkUk9Gnobq|s$& zR6wA(WOoX*43o%2Bc8~wXZm+B&BLW`o=Sap@rK}c2RCGg$~*Mo2{Hs&1qdk?!Vm@d zpXe3R7zK(Neg(sCBdOKv6_(Fh@OuEI)1b>*ds3V>iF{Ab_iee%7fPa34CI4Q#%krF zi)MBn;=03zsusCYrdjC%9axB)!3j6v^#;EfjkK}J#XQqL+xPk7-h`m{dD1hV0AhJy z?%`TFvxW7_^D6P4-OvXRBrF5O4xlSuQe;3sf|lDUCHL4zrU+giSB?)7TL(uC>9b%b5My71!5FRFcR5K*CKkU zlu8swLxvXPrCPr3lb2^Z{{Pa)^x>*Vof*h=W{`y{J0BJ&hE%6b-7o4Uia%td!;k&`8m#}*8G7DZF%Vh)O9fsMIsHHAq|if zz&HoLm6Byb2EQo+KwqQPNwefYbjU?&!ysdY8#%Sq6k?dqQ`35cDe=u#e3%`mQZr5I zLp%-2HFBJ*Mybp&5z}H;j0w_2Z#+xQv{)e9O(8++g@B_2z(c1*G($~!klPKj6v*F~yF}JW50l`tX!f62m0|H}cmw{*j z7MH+W0xq}EaRGoxw`RKmK47=590KJcx065uF%h?`QUVHmx2MknflUQ