From 01d745a3e5a423350a2a683197a369374d31ef78 Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Wed, 21 May 2025 13:02:58 +0530 Subject: [PATCH] add pwa in nextjs --- .changeset/plain-spies-smoke.md | 5 ++++ apps/cli/src/helpers/addons-setup.ts | 4 ++- apps/cli/src/helpers/template-manager.ts | 18 +++++++++--- apps/cli/src/index.ts | 7 +++-- apps/cli/src/prompts/addons.ts | 3 +- .../next/public/favicon/apple-touch-icon.png | Bin 0 -> 4655 bytes .../web/next/public/favicon/favicon-96x96.png | Bin 0 -> 1900 bytes .../apps/web/next/public/favicon/favicon.svg | 6 ++++ .../next/public/favicon/site.webmanifest.hbs | 21 ++++++++++++++ .../favicon/web-app-manifest-192x192.png | Bin 0 -> 5153 bytes .../favicon/web-app-manifest-512x512.png | Bin 0 -> 18981 bytes .../pwa/apps/web/next/src/app/manifest.ts.hbs | 26 ++++++++++++++++++ .../pwa/apps/web/{ => vite}/public/logo.png | Bin .../pwa-assets.config.ts.hbs} | 0 .../frontend/react/next/next.config.ts.hbs | 4 +-- 15 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 .changeset/plain-spies-smoke.md create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/apple-touch-icon.png create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/favicon-96x96.png create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/favicon.svg create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/site.webmanifest.hbs create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-192x192.png create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-512x512.png create mode 100644 apps/cli/templates/addons/pwa/apps/web/next/src/app/manifest.ts.hbs rename apps/cli/templates/addons/pwa/apps/web/{ => vite}/public/logo.png (100%) rename apps/cli/templates/addons/pwa/apps/web/{pwa-assets.config.ts => vite/pwa-assets.config.ts.hbs} (100%) diff --git a/.changeset/plain-spies-smoke.md b/.changeset/plain-spies-smoke.md new file mode 100644 index 0000000..f90b6ae --- /dev/null +++ b/.changeset/plain-spies-smoke.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": minor +--- + +add pwa support in nextjs diff --git a/apps/cli/src/helpers/addons-setup.ts b/apps/cli/src/helpers/addons-setup.ts index ff97c32..c538a1a 100644 --- a/apps/cli/src/helpers/addons-setup.ts +++ b/apps/cli/src/helpers/addons-setup.ts @@ -10,7 +10,9 @@ import type { ProjectConfig } from "../types"; export async function setupAddons(config: ProjectConfig) { const { addons, frontend, projectDir } = config; const hasReactWebFrontend = - frontend.includes("react-router") || frontend.includes("tanstack-router"); + frontend.includes("react-router") || + frontend.includes("tanstack-router") || + frontend.includes("next"); const hasNuxtFrontend = frontend.includes("nuxt"); const hasSvelteFrontend = frontend.includes("svelte"); const hasSolidFrontend = frontend.includes("solid"); diff --git a/apps/cli/src/helpers/template-manager.ts b/apps/cli/src/helpers/template-manager.ts index 8284647..c18d388 100644 --- a/apps/cli/src/helpers/template-manager.ts +++ b/apps/cli/src/helpers/template-manager.ts @@ -557,10 +557,20 @@ export async function setupAddonsTemplate( let addonDestDir = projectDir; if (addon === "pwa") { - addonSrcDir = path.join(PKG_ROOT, "templates/addons/pwa/apps/web"); - addonDestDir = path.join(projectDir, "apps/web"); - - if (!(await fs.pathExists(addonDestDir))) { + const webAppDir = path.join(projectDir, "apps/web"); + if (!(await fs.pathExists(webAppDir))) { + continue; + } + addonDestDir = webAppDir; + if (context.frontend.includes("next")) { + addonSrcDir = path.join(PKG_ROOT, "templates/addons/pwa/apps/web/next"); + } else if ( + context.frontend.some((f) => + ["tanstack-router", "react-router", "solid"].includes(f), + ) + ) { + addonSrcDir = path.join(PKG_ROOT, "templates/addons/pwa/apps/web/vite"); + } else { continue; } } diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 8707f29..b719eeb 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -800,7 +800,10 @@ function processAndValidateFlags( ); const hasCompatibleWebFrontend = effectiveFrontend?.some((f) => { const isPwaCompatible = - f === "tanstack-router" || f === "react-router" || f === "solid"; + f === "tanstack-router" || + f === "react-router" || + f === "solid" || + f === "next"; const isTauriCompatible = f === "tanstack-router" || f === "react-router" || @@ -828,7 +831,7 @@ function processAndValidateFlags( let incompatibleReason = "Selected frontend is not compatible."; if (config.addons.includes("pwa")) { incompatibleReason = - "PWA requires tanstack-router, react-router, or solid."; + "PWA requires tanstack-router, react-router, next, or solid."; } if (config.addons.includes("tauri")) { incompatibleReason = diff --git a/apps/cli/src/prompts/addons.ts b/apps/cli/src/prompts/addons.ts index 0c56608..4fe0abe 100644 --- a/apps/cli/src/prompts/addons.ts +++ b/apps/cli/src/prompts/addons.ts @@ -18,7 +18,8 @@ export async function getAddonsChoice( const hasCompatiblePwaFrontend = frontends?.includes("react-router") || frontends?.includes("tanstack-router") || - frontends?.includes("solid"); + frontends?.includes("solid") || + frontends?.includes("next"); const hasCompatibleTauriFrontend = frontends?.includes("react-router") || diff --git a/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/apple-touch-icon.png b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..751bd56c97dd7a5642e76ccf89ba1d1a2ad50714 GIT binary patch literal 4655 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/favicon-96x96.png b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..d2662e11ead5e73714e5d3fbc6e6db1ceb4dcd6b GIT binary patch literal 1900 zcmV-y2b1`TP)Px+CP_p=RCr$PooQ?pRTze!X-mPDmbHQ`ks_rM(^3|(#SKxGq8Otrjl{%=l*B|$ z{3YNL4We<2iN9Jzjfx5iVi1Y~Wl01S3RoagtP~1D7nYXN3f)FeZ>KXYz02G?y)*ar zOhO3dob#P|pYxr)^C`&3Rs|GWtxMxb05&%Q2|xm{Spl2POAiPa0BhH((Q!2-HaF5& zi3rcJMQuinh@z?{j*@xvlzJ=J1>^yFE7eq`nfa>13}Av46$+s;3KW%})d<#PE>a5p zt+!tQe#uqS8sQZMp77UjIOS7eT@);zo~;}<`(CC2}S18K}8*gWRh! zvz2Fkh2S%Qj^g)~@Jv^E7D@`?T3x&M^BICq06KO%1BO8IM2LzGPf^Xj zRbxFA9e|7H+Ifmk-H}%SV!&;JLt4>7{5vL_tz!2`e{4^C2$3+(+raD94=Ejj92s=`uHoS5y5o9fNH{C}aqp?rOIq^PWzxma1|P8rW0kgFchR=6X_!muPM zurCUn{R>XE^&1pqW-Aj-18CXXsiJM!F<~0S_VLBMOjBD81zU9;YWmXC-QJN~56D}k zCey@mt(g17ri0fZTZ-SJfC{_U8MKJx_RNJ!QD^G7m2^{%dRK%(%WxvL7cyo`am^^O zcOz)q7R@T@4=+}JGX-GtN;O?k*((84^!wZMExctArvRFpt@3H(z8=ZhgK3I-=ZuUOZgn0V+v6ow{4 zWRwNU1gQu|0}#R=+yX~;KvSb{iu8pTG`p64VRSuWW!-cbO`Y2ql1qmR)rnDso zN{{M=Onn+gwcaT8v<^_4;m9sf6iAs8U?qZ--Ekgp^)h^Im|l)Zh3SiQHRM99L(8yw z8hY*o{PeMIB>gc+eNX}j+Ic{60px$K3x59sNKTgkf(GEi8Cd_WVep*-8HUU4vJ2|s zE=bJxKYa;Q)nzEE2h3dtaRXfcmH@gKfGB>~YA7e{;;a~WDBOKoY%}w6L9d#$%GZ&(7@}AZyDI5(z6RF`El$Ai`sn*@lzun6x z#)}!*q2mo90l+A?HVYDCz}RU}eiBX{fu;sMRZJh4w-lmdoYKzS*CS*B7|(>OD`ER* zAl4AtBetW3Cpi5H3jjjox*AyXhJMdd{Orj$p?5!LBM2J+Lgt;T;e=uRkog=8A0q)+ zs(`1JaN%~?w?Q{|Zx)QX+fwtE7Zz3?ux~vS?$9-w{UY2l%5u#tEzofQ#Oan;-HJo@ z&K^%5u;G2EINh2{foDE&?Ik(+aU1}#==$|L*A{fz^cx3JcL0j_L;e@K)Jc=zfv21- zy{m4H1hD%XSLGri;kF4dA_aydxjdsI0I_R&Bp>!~($@lFF_!hJTnG5o{DcQ+0Q@T8 z|JjhZmNMFKh~sZL!N})052(2ahqr<_853I&W*%`}anhqOGR;gbd(%1&fF_5y;ZS}G z%8H??03NnD5K$={9+Q20;FXj7Dfzx228^Yt=-gJ}Ym25@LOoR=X?e1>3o2oqsh2J!J( zf4U@yPs?E3A$pz+W7Qr?mxi&@OvylQoqIx10=c<^Abu`G8QuWK=O}t2r|F<1GMJ}_ zF`=u2d1|I*INSCRf*Q`&Xj%qzwke=4l)# + + $_ + \ No newline at end of file diff --git a/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/site.webmanifest.hbs b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/site.webmanifest.hbs new file mode 100644 index 0000000..d48f6d9 --- /dev/null +++ b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/site.webmanifest.hbs @@ -0,0 +1,21 @@ +{ + "name": "{{projectName}}", + "short_name": "{{projectName}}", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-192x192.png b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7148b7997c8e65fad20a9c3ec124b4c271df1eff GIT binary patch literal 5153 zcmb7IcT^MKx}Ai8q4y$)29PE#2vVhkfDuHB5NSc0C<+=tia-KLl^-ZdFOed>i4*}L zbkxv9dPfXRnt*ij#(URY>-}@rdhd^!Icv_$K4=TB%TIRlXYZ=V(7DItu8jF<;f)rcIrsC3F zj=Yd}*&##OMz^?D#+R&wGivC58>kcp-_OV`<<)b|c4U+H5&7NUEpIgBmCH#LV*~`d8E0KweVezBPI?#9Hv;yivAt?^ z;@XG~n0fSsv=KKn5^!S4O~t_xLsK%b+>mY_gDVhL&7uZ-UKwb-Z2WzwAkO@0v%DP) z;fNT5=>mo8L2iw3%}&iC+DO23>g1a*EA9o}oLvkBA*JO-+!kNqU~qpPbXL!(IMJD} z>zhH3m{;*TWvYfN?rOPi_mj&M-dOW}(FV3%mt#0=@bjkBIe7LjjIS5i>G8I_w+Vh0 zZP|u{L#vg(v9q~fVMvdfvf_csQMv@qbk?_wrn@}C1P5E1%tyCLZprUb>$A^B(a&~> z?kJa*PC_O}IT;g^olzKLkv8VCM)ao)r|>A+*^UVBn^O^IKFrr#M+$mtv#AJLb7g3x>ErRBF$Q+UHg2E?KsyR(~A7)m@U&w58rtQQvMCbp&rnY7i~@|s#u z4PA*}rn%GL8?R!krzw6u2e4whsVpm0gb)X3V~u$pf25gN4*>dmC9XNAjw!xHfTe=1OTu&nndF9(nktZ+KjI0!`N#Y|BC%=JO2x zz>+w}Md9iQbUc>^kaCRW`wsGgp2_gY()j-=e!c$6=XD72bgIJT?730P_J;ZKy7MnP z1#vo%Isu`-n+#R^ZvEUD}al<6Ue*1wIa4%XD0H|3ErheypfpF zm1C#Z@`4t|o8pV=NK-Az<{(bRfHxKI?P!fsXB9WWL)W-cdN-0S5`mISI| zWpk{^oTD~-X{*7Y{-mKUiKCOuzHe^#@Qkdz>4jP$Q8T3+a*b@f0dFMTV~T%t+|0zG zHEVaMJ$Ub6``VXRg1B$5L%Wyt=sLM+uAox&ZC74Je`keu(3bcQ1&CLNcd%D|S~6l9B^ zEzD)bB>=qGLz>xT?OGT599A5MfXOB3H9$S!h3JUuketI06llfx{L&9 zTJKkw3`N|)Ms5_U@x34dDptH6@AOIp0X0aiYnS-{J_3u}n1b|8j+`$j;(d3F#1q*B z<3ZD8x#dO0s_7M;_Zu95bBrlSm6kyFj&uW25eC1AfWmb-rU)j$R1u~Kj!+rpxf%)F z#qlg?gVQWnRp*9WBsQ4<2?;YW+IH5Y^5FIt)GE!>C zE(gilF`S5l6BEs04cZU_g3rI!Eew`hBm??2G&Cmx!2NQhg(b4!L6^oyw(_|j^1Gwy z1AK`2S;Xlz&w|+kW9;zQV>RNr_5k zRB1EIS4VBNzcYnHypj8oJWmwNN9ufEs%U}OT47Li%2YXKNM?IxCr>goyshqY|53Z? zHNz|qR-9v2a3gEtG2gG#?g6|`wMGLq&1WqEriJ6;NZ_1jnH>}r*jMq?^B!6chM~O_ zmI6n>BpvUUZQGx^c?x5DrjITzS)?_OUD;Jhe3{gOKiND8Lf(w}^X%L&GZ+g=tmHZP zLZ#Zo9J)^@{U4vpWL_R`zaz?+WP}2Aw1Q2c1d5G*Ysm@;TarYXvEqcq92F?`vu)L< zoTP-bEi=M~xc3 z5eLsXi5ofhMk{!y?V#4fcsTKWm3DFzAn9;2FFX1>vw17mqXm;yMM|gc7nl^iK;963 z(VyF{uL;Anyx&D$-DURNkFVX@tVFJ_p8hk>g40XAJFf}$Le>&`HYasX!|fZ`jn7|# zR%oJqL9IOqJJJE)^ghe?9TtccK~j~S6{nY!{FABqfZ3yM<;U#14eqCcNt#^o z4c)pR&}r;7Uq^iH+aA>*UEn`Ar>}-TEA9RkvATh8(qr1@f>>#;3xYt@`^-V~GHO3P zl!7jO&k)@MxWvBpf+z#R4Ye(O7d92;`zSqEarQ6m0s3xRCqZZhj4~J;LX~yMM_D%K zA#Y0{pcP@0)GmSmYN`3y(l_{H^W(TC&nb=8$7-q*k$|MYQ+x`X$aeV0XfunMTTvl2 zn3UDFDXTvLlJ>7Y1Z=0{ruLw93nxt`ldEmIJ)cw1SzVxoRR0CkMaZ#hfWvy|Ci-On zUi&F|Ybi_Cx{u#ZZp$z)Pn_=TxTSr`R z`s^$aT^`n+td_Kxxv9K^p0&r^a^;>a78$ixo&2Ibr@DabPLto-TthRyx;%7DmBqEN zC?uwdCU~>!u|KE%Lr@j6anCcXF>9BR8)vHhhN2$&V$t%aF4hk!tAs(ygnwd2zA>mO z{G7SCHSwH@iLNO9lyiUO^-@r~j_P0i=DZy|>oDZGRei8WaX$h`N8#>Y3(Co^X?g8B znlKjTu57yymyjOD4%3ZpNYwi`NvLpd(1Vp`3mmK#4Y*Hl9B6yUMFS5(Uf?cxHu4fK+CpoZRfJ zdT&S5(>l(}m%NB!39;kdoc$UTE?SFEge_pzA)R6gGNBM@#{k>QsgIO394%wZXHzkDMU?X!j^xoyXVD0|yQgH+*E zRaaBNuFo?^S;~{2xQ}=DO3YYvF8sv`503%pRyp3eG4*Bc*V10Jp96{E;%{8ZJD%ea zqO`9S#>4`U_{Ol8EK$j|FT_ zExDp%3=!aOMF@&0KEdF36C<`aQ(M>+;U@!ii zUyDncMbvC85SZX^1!O~wLP;27@pieI?0jT#GI~0O_qWHJMAJLqpGe+M6;*DiA zVjr9;<&i@Vf`iJ9t~NbA9a!G_^gA?=nB*{<)IyRoFboF+52V*F;+OLU)c+2f2>{8I zd_iwd;(YdBdAjl}y)^-@x5$I6)?Q=)7rcpr%;z;Fc6Y9CMsjKBTrcInIb?YB=UuBtXr@8a-6*>lyYnk$?a{z{2^V=6Ov?4h;nVvx~G6am(KCIVzcF4`T; ztA;Rk55)3T!ODnji7HL%C2g*Nz*W$aoUHy^iB(V`i}A^~&{jS`9aw&OT@Q|Jq~t*P z*o;!bM70_naxt8@6I|qU#6-Awge)!mpm!`w|lLr-no7^|w6mjG}r>?l#A8bi)Pcmxbsp^w>-R5Ng5@x40tySG2FDZEPn z$UWb5iaGf{g~alnIWcBR3m>J&W1!^8a0_*vMm_BPHm_>&(XRts#!#d*FV>) zAmm^GP0MLhF#i=7_%}^H9Lii9waBulmX`A3B8H^f1W*xx$9YxE;>fg#B&_aBx`kqSTl68q&7bg>I5cX`E|+ouWq87)ECrw53|UriQn0wYp|M!xN3>U zD6wQ&f#RmsFA}dnUWUDgQg`iI8umzibZKV8d2om&^iF8XiCW#v;oAd04>BF}hvwERIovntU zIk{rqgV!-#5fv_l!K-p-ui5!k`K!`pb%Wo)-TO_hdS0Pim&BU07#o^-lASB=J$Ma6 zdE~pwsWdr{T`Tur5NTcpH>x%yKYE!J_3I6a`#_J?~QW9s6uc3O+Z-51Afqfd=gq(TTls_#?r|jSA{{~caqFXKWX|fPzKD-x#W>Xy>42vFKf(93ZwHE& z4R>9_2{ps2cCcb);)w)56?4VwU>Q3U)m49CyP(R=Vjy4bK;-_vE9J52QR>a#pXyg; z5nNPBoT%?4_H_T68;KobDP7qza-XZW_$iCW{No>TkGMMRgUVGnTvZ*pafa&$qTU;+ zZONtddU_c5p7&7@@BZKdNkUAOl_ybQ65yk(h1>ecU=9L(7u z$@}_2v^2ln`+u5r+4PvMjGGZGrFK>%RKIHPIHJ>1Gi;9j5Sub8wjDQwdzu*gNo!4S zR)3t5Jz^{`Lq1T$>t&^fu`Umsy&0YA@gI#}Kl#OiL}BhQ>!7MO&QB9N#UgjZMZ#`O8^vf%Sz?_i$DGoy05QYpL#D)foh|Z zFTZcKP#-JXJN)`NK*#4at!kcEV1}&VJap!`QmS(JZB3~qs(c=HnQp4ct(W+S(VE#U z)ngx-6oA9}!L8dD=pSp3R*QfCa{#PHuN`@ijq b9aA86Tp|X7`3nQ!o*!VSXRKSMjS2Z5K%!;F literal 0 HcmV?d00001 diff --git a/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-512x512.png b/apps/cli/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..804ed4ba75c074e2a176847d4ddab5e76361abdc GIT binary patch literal 18981 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 HEFS(JeWi%( literal 0 HcmV?d00001 diff --git a/apps/cli/templates/addons/pwa/apps/web/next/src/app/manifest.ts.hbs b/apps/cli/templates/addons/pwa/apps/web/next/src/app/manifest.ts.hbs new file mode 100644 index 0000000..a82f11b --- /dev/null +++ b/apps/cli/templates/addons/pwa/apps/web/next/src/app/manifest.ts.hbs @@ -0,0 +1,26 @@ +import type { MetadataRoute } from "next"; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "{{projectName}}", + short_name: "{{projectName}}", + description: + "my pwa app", + start_url: "/new", + display: "standalone", + background_color: "#ffffff", + theme_color: "#000000", + icons: [ + { + src: "/favicon/web-app-manifest-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "/favicon/web-app-manifest-512x512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/apps/cli/templates/addons/pwa/apps/web/public/logo.png b/apps/cli/templates/addons/pwa/apps/web/vite/public/logo.png similarity index 100% rename from apps/cli/templates/addons/pwa/apps/web/public/logo.png rename to apps/cli/templates/addons/pwa/apps/web/vite/public/logo.png diff --git a/apps/cli/templates/addons/pwa/apps/web/pwa-assets.config.ts b/apps/cli/templates/addons/pwa/apps/web/vite/pwa-assets.config.ts.hbs similarity index 100% rename from apps/cli/templates/addons/pwa/apps/web/pwa-assets.config.ts rename to apps/cli/templates/addons/pwa/apps/web/vite/pwa-assets.config.ts.hbs diff --git a/apps/cli/templates/frontend/react/next/next.config.ts.hbs b/apps/cli/templates/frontend/react/next/next.config.ts.hbs index 676fa21..cb651cd 100644 --- a/apps/cli/templates/frontend/react/next/next.config.ts.hbs +++ b/apps/cli/templates/frontend/react/next/next.config.ts.hbs @@ -1,7 +1,5 @@ import type { NextConfig } from "next"; -const nextConfig: NextConfig = { - output: "export" -}; +const nextConfig: NextConfig = {}; export default nextConfig;