From 180b261e408f44c2bdd1a6d48938e338ffc5675f Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 13 Nov 2023 20:41:10 +0000 Subject: [PATCH] initial commit --- README.md | 38 ++++++++++++++++++++++++ bun.lockb | Bin 0 -> 113320 bytes package.json | 38 ++++++++++++++++++++++++ postcss.config.cjs | 6 ++++ src/app.d.ts | 9 ++++++ src/app.html | 12 ++++++++ src/app.postcss | 4 +++ src/lib/index.ts | 1 + src/lib/notif.ts | 6 ++++ src/routes/+layout.svelte | 5 ++++ src/routes/+page.svelte | 29 ++++++++++++++++++ src/routes/notif/+server.ts | 57 ++++++++++++++++++++++++++++++++++++ src/sw.js | 53 +++++++++++++++++++++++++++++++++ static/favicon.png | Bin 0 -> 15086 bytes svelte.config.js | 19 ++++++++++++ tailwind.config.ts | 23 +++++++++++++++ tsconfig.json | 17 +++++++++++ vite.config.ts | 7 +++++ 18 files changed, 324 insertions(+) create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/app.postcss create mode 100644 src/lib/index.ts create mode 100644 src/lib/notif.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+page.svelte create mode 100644 src/routes/notif/+server.ts create mode 100644 src/sw.js create mode 100644 static/favicon.png create mode 100644 svelte.config.js create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c91169 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..8f264b9dd730b8251bd19ea9dcb004d4f998e76d GIT binary patch literal 113320 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

e1gluAQ|Q*`i!dIK|Q$&id2;eJTL&G z2tWM&`NysLSEx0ohH5ShB*@>^o4IjFY_o5HG-}iqJQ15Z;T$AD{b;UtXh`_zY7s~S ztsZqRl^{V{$DJlN$Z9XUMAHpQdK)BSAo*6IIb2U%?oN|{zj?V(0yg-=%9s8Qwr%De z_b@ihcbGwCqKi4s6AEuvCSf+ftV91xEI;)w zm{mHZSv@}p2Wthky-E;>l&eZW}c!30Z5M;MdkRT6Xa#FRs!<=6Y655Df0}?bc z$to@V_GL9c8Zl5B@PjB(DjR!7XG=WG3pFestQIC7nHGUdp*FX}J@w3$mRd9hqp=>e zwxCI_$scN2WIxj!B;Yw{H2cE{h=v77<41(Q^91{kd3=W%Q#|%yX)x+O`M_ub5f?Fpf~tsnu8Ey~ znmm0b0r~u1QdCgHb_eo7edAUZnM|wPlH(W~)+^7NLyd$Mi7j0lkz#H^vjLRQ#XsE7 zCD_gDOUQ7%eQ(NnMuuqA>Ou0mAAkh2=nykH&oqzewDw#lv(0HPOhV32dmO(fSQRX0I$`K!VyFNQU5k)K2N^6f_C6 zg!f3z#f66ZUA7A$XKmz1-MhPi@cV_76$fXvTs( z9?~>}ga;(+JZDF}-jI2UCIQ`E)6(p_V3EtJS%o4y$R8Pd5G1HP+CtXe_j#pJk3<_! zC!Q}%pc~{ffo>rAolO?G1#A=7kDt50g1bwwi>Ozjh|EI;&>A%bHDH@y1>>)^{ksNO zEkGLj-|+dVw$a@6FSRhS-Q0;mAuhh~bYs1`-B$G%iC|GoZJ7T|D48INhLTRuf*}%; zlcv_(-c_?>R(vsgK+6ZhXbq5{I7D{TTq+=!Zv{veQ2Vz(`T?w%!AchG?*v8N8E%`_ zE{U`TpF*9YA+RBT^LTb+TS-a2DoBvOfo|3yLGzz;!=f#FVlzu&y$S+()cLNYrOEgj zm%c%;?gU6wVRi_%{(Y5=2>0>=%db%YViS*y6kn_L>nw+#Ar#U;*b*BULYw#I$uPbwVX!-owBk?ojg9OE{zxPPhAVEFS zd>Lx}_;OwjIkog&9oP-Eda&CmkRXd*scj;5dMcy-0E~tPM?aE3$&W+{KKL~C!tyPz zsB;YP9_aa8{N2&oV3gV7)HbGkw1NRzBgsVVN1ZSL`Jno7ICD;ewLVA*t2t`qK>LeL z*G4?bLd&xXXlzhF^uHN%@=Jv8r(G87K!R!xM%u45HZAkIe$_)l5aC12ht1x9pU)vb zK>geQz$^!gxc<#7X98P8`6~X;jg$ z`D@z-30lJkkN>r8g9ME~5CzE5G&mY2XR2iPlp7>y1p{n7@d^h0udN7}bvbaQ%zXiA zG^wjnRy5sm26OV{d%k~VWYB{v+{j+PJbmG3Z~+PGk?4Pyi~h`rhk*zi-~ zOao&(6I+ANSl6+F2I`8?`@&ONknkYZ=GlWvSB)+RPV&1ayYSMi3{u`1*jX;l(Cp%Nc7PgM>EI zGlO)fcd?1~z0!8(EYbkYjKD)C@G2w;a0@1r{E6G`WtJ%1yMdxxT7PW^Y{++ZWtZ50 zk7}?V&&LZSsQnx|IJewt@9~dVKG=F#Q^pBxucHV!sB-R>+4N@|jhW%=R?lH0mvpk3!Au z0|^gERDI75)-`x}f`qop=0WmzSAaj-Jna=}n$Y>>6p*0k7ViIjUV^28d{95?0xe6i zyj0OpRT_=xuu7o<4JZ%Np`M~@rScGa(uLhfLVYrX-oGV7NqcN>);=cYd1Lutb$SZY zp!!kbW_1-yKHCEl)PkX9{XWZ~*J&A~K`|`4x2umq8dN_}Qu^Ow+x27z_i%0@ zBS=v15BJvqq#%uh(9-*2@6Uqw(mm0a80wGQN{v;@%FJ>#%(FlPY>x33(x5u^AJ+b2 zAJZ{-D$#>#hai$|qVH(9MX( zrnOHYb#uS$3U5-i$SUT^KfbM6*MX#I6R zO=223J==9H*7MQ&kU#}^yBt<;nSRHJJQ2$O zLX+m#$Mq^+CAdam8epCn41FA`pIb8PVmEYppb-P50gw0abqNk8x)bgnX>TgNAeN6w zRMC2(4>3Fx`RM2yiH}3U0%#2q#wFxCe~5%=8cZDThyo+BfuD@1YksQhGDdhRkC~0I zY#~)QAKlc%pvE?29qQu#pJyM~T(cI^AX^_uHK=MTb()E#!PeF%==q?2ex1wkFsxcc zjg`;A9M*;yM z&?VSQ0Sx|ta&7dXtqvP#fZ8@_AgoJm+Xe#d2NqsqMRkh&4I~@9NN!$`_O{=yq1}no zEs)S!Ni9f_C*F6;zi0L_s|(hIP@D*!IKfx~<s)>FKGld$={8dDk@Xy61AG&Vj- zoHwesIuY58){lmeNebxivd-sroIHljUIE4shoZSyP*unzK3u+AUb9M*n*j}sk@sd3vMV;9VK{>X+&{%9Rc zGC>rrs!g~7`JwT&;_|lL&mL>e!~6i=qxyZtY&^RCm5si-uT8Kqq4pH-s-gl9H{Wgq zHd;>}4nGKj=_%pE{?m_yBIkUdcpy2yck;P}zQZ=8E~wAD&}?rBNsUE8BnP zImYj`pr=b!`%e<;B0l{u69yb;;EqnT+>ez<6)7=hO0}q3id)3>j3dw^eSj;dSK(Mn z?L$l}*6!aZAcuMi)Q`d#Hv=RnLWxpU6sw#*1wAcC5f`+^iPuN}_#_4Edw;b7RzFw^ z{#`c}GpcTSutz;b?;;nMT2*V*Q=m9eLrue$cE`n;)ou6gjlKj4)>oo8q7lJk_q}9=zD+n12mNmg_7fR}5N%h{l0!tSk{pkG$^8+jp`E@0W2c82`mkIhH4F}lb?#ruz z2X=izE5Wo81D%;+fIE@sN#B1GAt!^tWqy7;ZobXTX(-+s_}@ zL$JAw*fQ#hNlmwUVaVxceNc0#>s3)DsDK3Zr;efq;*L$r$rW_DGG!ZB zl=glv!*Z%cd-W=^=0{&bwnl5j5WBbqz}s37EbnbR`ch@Z+o?1O*xH>K>f#$hB<$Gs zWbe%{O6XYuZ3U1>@lzoBhZ3%Q&#q=6mf+q#^YJBykiknFbvGwDU$US^#MqBGipAf=}zYvc@d3d3uMcF=%_4aybMN<`4aX@Pd ziHyzK-h>g%RXLqnF$p$16oWKqv>9IO#}zn*Ee9lU9nJJY{M|`zB=`l!Z4Z4`RaSUs zfof5ByXlt|KpqBZU_ovAkMApEV^#>r{2+`=YrB`8h~yiAVIOe-KD-So)>+1 z(VH;Xu#H8xWMUX0p~|}B^IHLFOgAh(IB!c$6PbK{6-$M91|!39xPs;*6W9&%2@Zgt zXG1U+b|bI0%zgJ1U_+Blknr1MzdMUHOFrNF?0(!^kRV$_PcgBNE`&75ZpM#p9DI3g z<|#-+^Mik0+iCBHO=Fwb2EVo}h`7)*WaMwZdB}gQ+ZzY!Orl_LC`b9> zKn-S5tbSmMf%Sa!Uqe7XsD2=yK9Ha>nEqBj8l9#%*H z?SKAVKeb;}Gzo*(&i!3{SD=MiPd#y!@t=ce;eHMhOmV}wDn|H^kyH2ZyOR8s&^7L7 zxjOwKL1n@4RxTO-(z$b^_$FHqi!YB0_23Qj{UHxEQzucMm zVLVh1**~gg=zH3N@7I$5D*yEj#1-He$WpEL8;?2`h|gLJ=P18Tg7(wK_|>0z!#QLT zTdlorg?{M5W@%TdEqKbPd-zQ&{Psmlw90h0>PdNE+N4I<5zu1!3M$MfkcWDdIyVo=td?51}jhp043^<&W7Fk zlN?)&BO_8+*Y+TV5#ePjUy^^Yf?I&U2gy@`{=DcX9tEmabQz7Ec9kkqaPuO%`OxbI z-bNVD8Z|9?68a4a^j~&(1qTOG7Ah%`iJs5{k;4`J1O2=yiUDL#rN5?AQuw=E0d_=Y|&alo2WRrnf)1Ih6D- zY3c9nKzjP20(vb2Q_LL-tb}wR2l)Di1pbAFdIOM94-{bSLmMVzpvPYl(Pn*+igu(x z{bdnK7D#dna0~DafM1UUgpl2c3Vtquu>A8Ewx8|;&Y#W|P!FQ|U+MEBPo&b16D%!e zQ)CM2k5Cld{;CW0CSai+fH~CQ1zso?Vxax}=PyN}-2v%oN61&uPg4+u0bL4D$;kmE zcLf)+-=D56Q2*^}815Rp&klVQO8omp{CytanywTq7u=2XtN1&ik%ol*q|J{jxRlgu zBo{T+AL>yr`33~|d;WH#A1RQsK%MCO%gup-Zol11CQ;l%f4fRi(^d}qB{g1ae_}8y z9{y55AkqKVYm^ZG0Lo8yf%Vi>f3Y9++E0a}UIO~R)b|hde%uUI|Kk{6`Tu0xtTY!cV~^3MSkF{QMv%BAFh6 zQD7$E792oUpoZap8E+;?fwH6i(ox|TE-ZI=$pf-QZ&fL{6CqqjPsIO{$aQjL!bZITSf~dOmcdLE>GPK~Xt5enpdEy#D2#;rJt&G~BE;zMkQaNk4!y7c z7Y_8w9&n%?XpB~K|DGrH2b7S4dN5wfzvS^l4@maoSOGnEUx0GMemkH*3=4Ger;q~t z|3dW3oj~`?6__8OsS6^7Mh^Zh)U}M3g_J{BISI{u@8L+|#qz_<@)tYc>KKyZ&al+~RTchdSdjL|u>yJqL^a)CGX7~g2+4ms$9xuRL$p~o zRr(jYpY9u{L!PXGRU)(;`ijP1XvSyDz%hOT9){M9{_fA%XBtp4^tlG8G6N%x00ZbxkU5A19|I^&L zE;(-FQ215y0-EW}Y?4h?cB@~-?N(nVcH3*&bIH^1cMd5LlGUVB`)4bu5lIsuNP-{; zg6Pxh<8%M5-|ap=_is8IA35oxL-a$3IESR&Wlv1Yp~G;}pPqO>mdqdhsnX0+{9F|rIn}8Ht%bM$3xNG!@QH3uXn_||SbYvSi}!hM2t~oATYig*v1C{4 zReG_iTIx*6v5vJL(g0yG?40w{A3xQOX&E+P(YfA|u+n~@9>|cReQiMXA)Iv>_*tIe z)V*mP!xdM6<*E!?bg@#$6t_aZVpe@SI&p7{=@6!?ZsyCX5V9%TCbv`qSIMwE+H!u{77Uv8u$!jzo%Ii%APt})oAF}x zp+94@IBkB+3TXh#OG`B0v{%X08@n#vz!7S!9hvZsszJY9GkxE2QNbffP9W6A`0ea#q|H zXXtK!c)aX-FC%O0!{w;0YLJ=Sw-nv*W6yH`GdcEET5CY6BX!(fyDfQEC0Y^0m}qtb7j7o`{^ zvAfy#yDb4YI&{3sAZ}wlaLw|b)mEoRQj&5P$VmlVib$f77;D;nAfJpm|Dk7XxKyeT zSt^0PWNuq2JT@0md^{)3m6e$&5*a!biy3X5;p%f7)L_troR1(a=($P_f_cGBIEsP} ze94$sEY@{L(>i)ibu<=ZeGh1hKdc&vO;f@oTY3{Ae%GBgZ_l-dTTib!qq@GBt}yuZVSUiN%ko zc4Bn2j65>`0SO|r#R@r$20%Flm^}RJ9bX|UQJ-lvCs-z&E^m_1oc8+KsW4U(Edk1d z;coDJ?t+RXJHdG~)FyLL6O4-zBW<0RXT5}*au-R_zih6la1=4efZ$)v1RPo)(qbhM z&}1?(p)F1tBWeISCRq~-4ndnNR>a8W#GxH)N`+o+h>9ixmN5yId?v5J%^LuEUSM7r zrJ2Y;TJ*Mh*7S)?a;Xd6t1?ixH%^ZD-jqNvCh1mtLU@QKkkhjzdTR=nMlV1o1DK6+ z;|P3=?k|;5jnzOFvz}WMlvN|{gNBz}gM$Xf83Ggy_~a?JfCCvwpS$bc7|vMGY`!$? zw>@H~`_2AH1G34%CfU@rIlXQ=zi!=p&#H-YZ~{(4xC~*IPS5SIdm#Bx@2+%PLeA^c#5(|9H>IB^u2Fu=qWLacFS{;$4 zRqjc^k4aWR`eK+;O>gczWu2StIv9J*Pni7U7UyTsZH0 zxY;iVkF{UqA^Q7=UrJS{q;%YY{}Xu1Pk&4J1o|}qAzKy+rpDaG3iFjp;3*k%u;)S? zoCDBQ(BvATB?YTt(KCEWre7Gj4MIHc-RIt?hy)n6Z1wnOv7-n6nH~M+fX_I&~o|M-95mgkxV%F1Q_;eMR zt*6<}+C6c{R2i*U4a70)<7|ttS(_l3<%@ve9pY}l=eM>Zr#hgS()6x9Ve1~!qUO|} z&#%apa?f=Z191B<}!Iroy0+&@f`DoXd>eys#UB}S&vcsT#o)Zd= zHHUEM|D4aHI9VD@*Dja0*Yl4Nz#)Fhj~rS$7ybEm`1U3%q@*S4AEPr}{0^HZT^1{b z{lEW(KBk@L4~_m^-aJQQT!p>qGpn)eO@0@a@(Njc*V)rM!PLhr)hWGA(Q~wbuKQ>6 z((#yo$lX0{$NZP!{^f%A&$pL@6sp3SgTElVk4NLZRbL_LWoeW*P3Gf6+??x+d`s*vKj<*q!5(b-B99_h*Od7USV4`~L=dk^&%CnKLJt&L}IAp;TgGO2$&WB^63j zz?Mw81P~Qz04o%fN?<7&D{d|ETDlEv$v{1EWyD#m)7=GGy&LW~j2$mCh8N;czr23@ zb~rtDa#E5*Nb)f7EE3g)6Zgxx$5ZG1=M&4SG`}qJe$v{$6+;GCeIUARMJvPtRWgQc zO;;HUU`xh3Q){5#9X(J@BWX;n9_JW5z~vOQ%YInjM;Gi4^rD2eb#AX?i32f?UI&|JwabiVNt$FzDqMhOCJOqw@ab3T_)K+g+&x@cMI zg1{4kBK~fg_4GPjfDWI9NVvh%W0bXkO>*}p?vTb#Tra_;RL7mH4rbyiueB!}q$=z& z)d9tnrlX3x)ZokV@Wj4mpeU7O#zw zqSSB>8dZ8y8M+)tDuF4YRM7~35RC31gW08aXBBFJB;?F!EwYyzHYk=wWmi*_s^;}+ zsU%zzguB&Rc*|3#Sg^%F3Xnxh`Y_Gu|tj3N+qKhA>i{Y zD=K51q6Qg`9k}lt?oeZuEPh{x?^WO{#nYIsN*O%83a@X5Q;Xo3((Z(LEyWVD-mlYm z(D>UFT1_sbIcr;pG4})JwM%P^a~)&JX&C#K5x&;mjpVxcCV4o%^?0dNC{TdTMopgQkPx0X-&fV){TYpdn{QcB>{I z=6XY1)|8@IJ&lZBMvriwT90Wee#0}WG9;zagh&v`@Ae6T2zctsm#;Do%8wuE=sjmu zSx<#{NbNUVAvL#z6yOj1DZwbUk8)$^KcL1W!_l_Au8{_gwPJLiHXZK|0$AVw5n9_v zk9UkMAZDYT*1GsCikZ(dNqRCHcg_6Qt(RW~u}Hl)mY7 znB!6cms6&^wTVq#Er#nj0HyRM8b)lv&p2QUrDoKY&KA9o5e+w-(^f3=w7+Jshes5Z zzoEuwezqMrTmQkgQYz_{j*-5MY&~9^Fw7#?MAWk%tARRZ_27^t z?tS{=;a+@9yq?{^j#O@$!4U;BURd*!?6|8I0g?esS1sxwW5r&OS0CjgIGZ(ymjzqVA*I7pz0S;*k=g%O0|`^V3IFn!|Y0RzkS zMbFfDdZ%*&R`VV|b~H}@uutF3a6Q(%UDp91XZ?q?L3_L5AsbY(VOK_KjC2aVF?rK= zGV2q-vwYfSO+&3|y)9o1mB?5rrc+p8err7mN%zky@uNVSuIHqw<~6laIi0FG+HIb> z)snq2d8>@Us$BA3`Pi)7qgLv~yRGGgUuBRQnCMtU9J=@SaJpw8^Y?$l631c07|Q~7 z9wu#$uSrv=&>O1>V}MGlxgpPGdw$TlGbK7{oM{vA9SAAssn~8ebd$+x&&;<-FCV#1B}xpE7-@`qR=Sl!j?CHUL;{M zE4^7^;=C6o_X4oa@&W4#s7Opav+|>r(4cFE7#Dw!z)_p^_llr+HcV7xy|39wuBU-q zD2i>+a3BRfXHdPY+Kzj$^UdCDrigSuOYDTY}a$+^G#4MIm z;=bCCKP&u%6D+B^K0b><2x34H7PvvBvt~lW5idsVONDtpQ{-4Z*G#E=`Z&Mx{#=4Y z{>_{ciW^6EF{}(&>Rjn%>EFGq0(#>0a2XyBKPosDH9?j@yyvzw+lhFS+Se8@<&-$posEzth5 zedt!Eeua^vtpbx%iSPzgj-?D#PFYKD8Mf290w^yq`J}dZVYWEupsj;tkqFmo9!%GT z46$4o7_b^BUckcnz|$pD@^taC^mKs)m7@q6r|jlj z!B%JhW65a2<(E02)nC{ucq`bZu7PYydy-pcsN05aef+19H51-GzcCgqm}8bXmG;M+ zW>?UCf8KC7BV5JTnnJcx8_X-EHz{fFMAHT16j|5P-#S9g@r<#0K{F=J!d_G2L + + + + + + %sveltekit.head% + + +

%sveltekit.body%
+ + diff --git a/src/app.postcss b/src/app.postcss new file mode 100644 index 0000000..510ff1d --- /dev/null +++ b/src/app.postcss @@ -0,0 +1,4 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +@tailwind variants; diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/notif.ts b/src/lib/notif.ts new file mode 100644 index 0000000..61fe9e2 --- /dev/null +++ b/src/lib/notif.ts @@ -0,0 +1,6 @@ +export interface Notification { + id: number, + text: string, + date: Date, + status: { username: string, status: string }[], +} \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..35bc088 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..5dab7f5 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,29 @@ + + + + +
+
+

notification thing!

+
+
diff --git a/src/routes/notif/+server.ts b/src/routes/notif/+server.ts new file mode 100644 index 0000000..fbf8aee --- /dev/null +++ b/src/routes/notif/+server.ts @@ -0,0 +1,57 @@ +import { error } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import type { Notification } from '$lib/notif'; + +let notifications: Notification[] = [ + { id: 1, text: "This is a notification", date: new Date(), status: [{ username: "user1", status: "new" }, { username: "user2", status: "new" }] }, + { id: 2, text: "This is another notification", date: new Date(), status: [{ username: "user1", status: "new" }, { username: "user2", status: "new" }] }, + { id: 3, text: "This is a third notification", date: new Date(), status: [{ username: "user1", status: "new" }, { username: "user2", status: "new" }] }, +] + +// GET handler +// Returns JSON array of all notifications with "new" in the status dictionary for the current user +// Sets the status of all notifications to "old" + +export const GET: RequestHandler = ({ url }) => { + const { searchParams } = new URL(url); + const username = searchParams.get('username'); + if (!username) { + return error(400, 'username is required'); + } + const user_notifications = notifications.filter(notification => { + // return true; + const user_status = notification.status.find(status => status.username === username); + if (user_status?.status === "new") { + console.log("found one!") + user_status.status = "old"; + //@ts-ignore + // notifications.find(n => notification.id === n.id).status.find(status => status.username === username).status = "old"; + return true; + } + return false; + }); + return new Response(JSON.stringify(user_notifications), { headers: { 'content-type': 'application/json' } }); +}; + + + +// POST handler +// Creates a new notification +export const POST: RequestHandler = async ({ request }) => { + + const notification = await request.json(); + + notification.id = notifications.length + 1; + notification.date = new Date(); + notification.status = [{ username: "user1", status: "new" }, { username: "user2", status: "new" }]; + + notifications = [...notifications, notification]; + + return new Response(JSON.stringify(notification), { + status: 201, + headers: { + 'Content-Type': 'application/json' + } + }); + +}; diff --git a/src/sw.js b/src/sw.js new file mode 100644 index 0000000..106deed --- /dev/null +++ b/src/sw.js @@ -0,0 +1,53 @@ +// @ts-nocheck + + +// sw.js +// self.addEventListener('install', event => { +// event.waitUntil( +// caches.open('static-cache').then(cache => { +// // cache files +// }) +// ); +// }); + +self.addEventListener('activate', event => { + console.log('Service worker activating...'); + event.waitUntil(self.clients.claim()); +}); + +// self.addEventListener('fetch', event => { +// event.respondWith( +// caches.match(event.request).then(response => { +// return response || fetch(event.request); +// }) +// ); +// }); + +// Send notification after 5 seconds +function notif() { + console.log('Checking notifications...'); + fetch("/notif?username=user1").then((res) => { + res.json().then((data) => { + if (data.length) { + for (const d of data) { + console.log(d); + self.registration.showNotification('New Notification', { + body: d.text, + }); + console.log('Sent notification'); + } + } else { + console.log('No new notifications'); + } + }); + }); + // self.registration.showNotification('Test Notification', { + // body: 'This is a test notification sent by the service worker!', + // }); + setTimeout(() => { + notif(); + }, 5000); +} +setTimeout(() => { + notif(); +}, 5000); diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e3735c58901acc906145296267c98399e77e61 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..1eac3be --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,19 @@ +import adapter from '@sveltejs/adapter-auto'; +import { vitePreprocess } from '@sveltejs/kit/vite'; + + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + extensions: ['.svelte'], + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: [ vitePreprocess()], + + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter() + } +}; +export default config; \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..ecfb651 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,23 @@ +import { join } from 'path' +import type { Config } from 'tailwindcss' +import { skeleton } from '@skeletonlabs/tw-plugin' + +export default { + darkMode: 'class', + content: ['./src/**/*.{html,js,svelte,ts}', join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}')], + theme: { + extend: {}, + }, + plugins: [ + skeleton({ + themes: { + preset: [ + { + name: 'wintry', + enhancements: true, + }, + ], + }, + }), + ], +} satisfies Config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6ae0c8c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..eefe408 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { purgeCss } from 'vite-plugin-tailwind-purgecss'; +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [sveltekit(), purgeCss()] +});