From 8659d5e6680826cdca8cd45f15e7d425ac5d6e5d Mon Sep 17 00:00:00 2001 From: Aji Kamaludin Date: Sun, 22 Aug 2021 18:55:02 +0700 Subject: [PATCH] register service worker PWA --- public/logo192.png | Bin 5347 -> 6433 bytes public/logo512.png | Bin 9664 -> 20144 bytes public/manifest.json | 8 +- src/index.js | 5 +- src/service-worker.js | 72 ++++++++++++++++ src/serviceWorkerRegistration.js | 137 +++++++++++++++++++++++++++++++ 6 files changed, 217 insertions(+), 5 deletions(-) mode change 100644 => 100755 public/logo192.png mode change 100644 => 100755 public/logo512.png create mode 100644 src/service-worker.js create mode 100644 src/serviceWorkerRegistration.js diff --git a/public/logo192.png b/public/logo192.png old mode 100644 new mode 100755 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..d9e896c811f3b0d153738b9ac370ed618ea5304f GIT binary patch literal 6433 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 MqM!+{lCuo^AG}ZGj{pDw literal 5347 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 X@eDJUQo;Ye2mwlRs1w;vHkepEjq+#d= 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 literal 9664 zcmYj%RZtvEu=T>?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/manifest.json b/public/manifest.json index 080d6c7..3ee2a3b 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "kasirAja", + "name": "kasirAja POS", "icons": [ { "src": "favicon.ico", @@ -19,7 +19,7 @@ } ], "start_url": ".", - "display": "standalone", - "theme_color": "#000000", + "display": "fullscreen", + "theme_color": "#ff0000", "background_color": "#ffffff" } diff --git a/src/index.js b/src/index.js index ef2edf8..43568f0 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; +import * as serviceWorkerRegistration from './serviceWorkerRegistration'; import reportWebVitals from './reportWebVitals'; ReactDOM.render( @@ -11,7 +12,9 @@ ReactDOM.render( document.getElementById('root') ); +serviceWorkerRegistration.register(); + // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); +reportWebVitals(); \ No newline at end of file diff --git a/src/service-worker.js b/src/service-worker.js new file mode 100644 index 0000000..0f1e0ce --- /dev/null +++ b/src/service-worker.js @@ -0,0 +1,72 @@ +/* eslint-disable no-restricted-globals */ + +// This service worker can be customized! +// See https://developers.google.com/web/tools/workbox/modules +// for the list of available Workbox modules, or add any other +// code you'd like. +// You can also remove this file if you'd prefer not to use a +// service worker, and the Workbox build step will be skipped. + +import { clientsClaim } from 'workbox-core'; +import { ExpirationPlugin } from 'workbox-expiration'; +import { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching'; +import { registerRoute } from 'workbox-routing'; +import { StaleWhileRevalidate } from 'workbox-strategies'; + +clientsClaim(); + +// Precache all of the assets generated by your build process. +// Their URLs are injected into the manifest variable below. +// This variable must be present somewhere in your service worker file, +// even if you decide not to use precaching. See https://cra.link/PWA +precacheAndRoute(self.__WB_MANIFEST); + +// Set up App Shell-style routing, so that all navigation requests +// are fulfilled with your index.html shell. Learn more at +// https://developers.google.com/web/fundamentals/architecture/app-shell +const fileExtensionRegexp = new RegExp('/[^/?]+\\.[^/]+$'); +registerRoute( + // Return false to exempt requests from being fulfilled by index.html. + ({ request, url }) => { + // If this isn't a navigation, skip. + if (request.mode !== 'navigate') { + return false; + } // If this is a URL that starts with /_, skip. + + if (url.pathname.startsWith('/_')) { + return false; + } // If this looks like a URL for a resource, because it contains // a file extension, skip. + + if (url.pathname.match(fileExtensionRegexp)) { + return false; + } // Return true to signal that we want to use the handler. + + return true; + }, + createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html') +); + +// An example runtime caching route for requests that aren't handled by the +// precache, in this case same-origin .png requests like those from in public/ +registerRoute( + // Add in any other file extensions or routing criteria as needed. + ({ url }) => url.origin === self.location.origin && url.pathname.endsWith('.png'), // Customize this strategy as needed, e.g., by changing to CacheFirst. + new StaleWhileRevalidate({ + cacheName: 'images', + plugins: [ + // Ensure that once this runtime cache reaches a maximum size the + // least-recently used images are removed. + new ExpirationPlugin({ maxEntries: 50 }), + ], + }) +); + +// This allows the web app to trigger skipWaiting via +// registration.waiting.postMessage({type: 'SKIP_WAITING'}) +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +// Any other custom service worker logic can go here. diff --git a/src/serviceWorkerRegistration.js b/src/serviceWorkerRegistration.js new file mode 100644 index 0000000..2262ecd --- /dev/null +++ b/src/serviceWorkerRegistration.js @@ -0,0 +1,137 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://cra.link/PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then((registration) => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://cra.link/PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch((error) => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then((response) => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then((registration) => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log('No internet connection found. App is running in offline mode.'); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then((registration) => { + registration.unregister(); + }) + .catch((error) => { + console.error(error.message); + }); + } +}