From 4de42dc8505d136e1bf777470c1e238769cebd8c Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:06:02 -0500 Subject: [PATCH 1/5] Generate dynamic manifest file and icons This update also moves the main icon images from the public folder to the src folder and remove the ones that are going to be generated and optimized by Astro. --- README.md | 5 -- public/icon-192.png | Bin 4590 -> 0 bytes public/manifest.webmanifest | 35 ---------- public/maskable_icon_x512.png | Bin 13897 -> 0 bytes src/components/Meta.astro | 2 +- .../images/icon-maskable.png | Bin public/icon-512.png => src/images/icon.png | Bin src/pages/manifest.json.ts | 64 ++++++++++++++++++ 8 files changed, 65 insertions(+), 41 deletions(-) delete mode 100644 public/icon-192.png delete mode 100644 public/manifest.webmanifest delete mode 100644 public/maskable_icon_x512.png rename public/maskable_icon.png => src/images/icon-maskable.png (100%) rename public/icon-512.png => src/images/icon.png (100%) create mode 100644 src/pages/manifest.json.ts diff --git a/README.md b/README.md index e804335..c3508f8 100644 --- a/README.md +++ b/README.md @@ -193,12 +193,7 @@ Static files served directly to the browser are within the `public` directory at public/ ├── apple-touch-icon.png ├── favicon.ico -├── icon-192.png -├── icon-512.png ├── icon.svg -├── manifest.webmanifest -├── maskable_icon.png -├── maskable_icon_x512.png ├── scripts/ │ └── vendor/ │ ├── gsap/ # Animations powered by GSAP (GreenSock Animation Platform) diff --git a/public/icon-192.png b/public/icon-192.png deleted file mode 100644 index 7a83b88c0d34b8ffdabf3872fb2b230f18ae5e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4590 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 diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest deleted file mode 100644 index ac95964..0000000 --- a/public/manifest.webmanifest +++ /dev/null @@ -1,35 +0,0 @@ -{ - "short_name": "ScrewFast", - "name": "ScrewFast", - "icons": [ - { - "src": "/icon-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/icon-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/maskable_icon_x512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "/maskable_icon.png", - "sizes": "1000x1000", - "type": "image/png", - "purpose": "maskable" - } - ], - "display": "minimal-ui", - "id": "/", - "start_url": "/", - "theme_color": "#FFEDD5", - "background_color": "#262626" - } \ No newline at end of file diff --git a/public/maskable_icon_x512.png b/public/maskable_icon_x512.png deleted file mode 100644 index 0c37558c3ecead2d193cfb67ba926e9c76c104be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13897 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 diff --git a/src/components/Meta.astro b/src/components/Meta.astro index d642a37..0a905ef 100644 --- a/src/components/Meta.astro +++ b/src/components/Meta.astro @@ -73,7 +73,7 @@ const socialImage: string = `${Astro.site}/social.png`; // Set the path for the - + diff --git a/public/maskable_icon.png b/src/images/icon-maskable.png similarity index 100% rename from public/maskable_icon.png rename to src/images/icon-maskable.png diff --git a/public/icon-512.png b/src/images/icon.png similarity index 100% rename from public/icon-512.png rename to src/images/icon.png diff --git a/src/pages/manifest.json.ts b/src/pages/manifest.json.ts new file mode 100644 index 0000000..26fd13c --- /dev/null +++ b/src/pages/manifest.json.ts @@ -0,0 +1,64 @@ +import type { APIRoute, ImageMetadata } from "astro"; +import { getImage } from "astro:assets"; +import icon from "@/images/icon.png"; +import maskableIcon from "@/images/icon-maskable.png"; + +interface Favicon { + purpose: 'any' | 'maskable' | 'monochrome'; + src: ImageMetadata; + sizes: number[]; +} + +const sizes = [192, 512]; +const favicons: Favicon[] = [ + { + purpose: 'any', + src: icon, + sizes, + }, + { + purpose: 'maskable', + src: maskableIcon, + sizes, + }, +]; + +console.log(favicons); + +export const GET: APIRoute = async () => { + const icons = await Promise.all( + favicons.flatMap((favicon) => + favicon.sizes.map(async (size) => { + const image = await getImage({ + src: favicon.src, + width: size, + height: size, + format: "png", + }); + return { + src: image.src, + sizes: `${image.options.width}x${image.options.height}`, + type: `image/${image.options.format}`, + purpose: favicon.purpose, + }; + }), + ), + ); + + const manifest = { + short_name: "ScrewFast", + name: "ScrewFast", + icons, + display: "minimal-ui", + id: "some-unique-id", + start_url: "/", + theme_color: "#FFEDD5", + background_color: "#262626", + }; + + console.log( + JSON.stringify(manifest, null, 2), + ); + + return new Response(JSON.stringify(manifest)); +}; From c1bccf25d5340d0d438c3c155406cd2bf158f377 Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:19:13 -0500 Subject: [PATCH 2/5] Generate dynamic favicons --- README.md | 2 -- public/apple-touch-icon.png | Bin 4253 -> 0 bytes src/components/Meta.astro | 24 +++++++++++++++++++++--- {public => src/images}/icon.svg | 0 4 files changed, 21 insertions(+), 5 deletions(-) delete mode 100644 public/apple-touch-icon.png rename {public => src/images}/icon.svg (100%) diff --git a/README.md b/README.md index c3508f8..7c5810a 100644 --- a/README.md +++ b/README.md @@ -191,9 +191,7 @@ Static files served directly to the browser are within the `public` directory at ```md public/ -├── apple-touch-icon.png ├── favicon.ico -├── icon.svg ├── scripts/ │ └── vendor/ │ ├── gsap/ # Animations powered by GSAP (GreenSock Animation Platform) diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index 709d9456f22a005d8cfb878fea9c82140a53b953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4253 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 Lk#-frHsb#PR - + - - + + diff --git a/public/icon.svg b/src/images/icon.svg similarity index 100% rename from public/icon.svg rename to src/images/icon.svg From 3a4662a5b0ac059fb3b0792f6ba145e6f73ef17e Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:22:13 -0500 Subject: [PATCH 3/5] Remove console.log statements left in manifest.json.ts --- src/pages/manifest.json.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/pages/manifest.json.ts b/src/pages/manifest.json.ts index 26fd13c..bab70e0 100644 --- a/src/pages/manifest.json.ts +++ b/src/pages/manifest.json.ts @@ -23,8 +23,6 @@ const favicons: Favicon[] = [ }, ]; -console.log(favicons); - export const GET: APIRoute = async () => { const icons = await Promise.all( favicons.flatMap((favicon) => @@ -56,9 +54,5 @@ export const GET: APIRoute = async () => { background_color: "#262626", }; - console.log( - JSON.stringify(manifest, null, 2), - ); - return new Response(JSON.stringify(manifest)); }; From 59c53bf14f59275b4896c6cd59ef9b648d1d7bdb Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:36:57 -0500 Subject: [PATCH 4/5] Add new dependencies to generate ICO files --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index fce6831..06a0fd6 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,8 @@ "gsap": "^3.12.5", "html-minifier": "^4.0.0", "preline": "^2.0.3", + "sharp": "^0.33.3", + "sharp-ico": "^0.1.5", "tailwindcss": "^3.4.1" }, "devDependencies": { From 34768af68531d6e70db3ec9abd28cf8a5988fd8f Mon Sep 17 00:00:00 2001 From: Ricardo Tribaldos <579671+tribal2@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:39:49 -0500 Subject: [PATCH 5/5] Generate dynamic favicon ico file --- README.md | 1 - public/favicon.ico | Bin 1879 -> 0 bytes src/pages/favicon.ico.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) delete mode 100644 public/favicon.ico create mode 100644 src/pages/favicon.ico.ts diff --git a/README.md b/README.md index 7c5810a..d7ce089 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,6 @@ Static files served directly to the browser are within the `public` directory at ```md public/ -├── favicon.ico ├── scripts/ │ └── vendor/ │ ├── gsap/ # Animations powered by GSAP (GreenSock Animation Platform) diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 456b3a7ef2835240723d6e2451fc8de55195bcf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1879 zcmV-d2dMY}0096301yxW0000W07C)*044wc03aX$0000W0PX|;0BHgM0EtjeM-2)Z z3IG5A4M|8uQUCw|5C8xG5C{eU001BJ|6u?C0t!h)K~#90b(1@96HyR_zqz~X7n?W_ z8>0#VG`Uhm#J z6l;?N+f$D2oO{lhGXezG+D#F;qpDMYVR9*;BJx{RcUrC1V_CL#D=Y;MymP1mQap2h zGKz>GA~@&PWnt0wlAeh`WiXBi)MLfSL<|pzswUy-ldimaBVqV9ij*I}3{T!vNwcD> zIs#w@OyV#MU~bxD1UfwdfiQ%2N9d+Pt)fKXSP%e}#U-nqp5PUh7aWawkIRL6tOTLb z`W*0W*ANEdLBetgY89oM!lSz#E??}Eb_D036f0Y=Ydn8fWv;F`H^xwFtqye#!ScK? z(wIVubH!H7pm&79!D^tN!OuOzr87A%H`-_}M3GW1!I$rbTMwt$PvnT4@GzPP#8u_% zuHnV|DuKY>AHjPF4D>S@@#3F^!ys7>Nmoew!tHB4mQFaHy{(cvK?EwLgAqd!&x5@v zL;)P1QD&z-=WWi_3mH>2&vRQr1kG&F1|e2zFEzoe;NSrJ0bXFh8R} zK-zcP0${D(5Rr9Nou&A2>=_NR;d3YZ>h;yiN^9dU;>X;sB{|;~00000NkvXXu0mjf ziBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<^wMj%lRCt`VmrrP1RTRd5 z=id9?Op?i@mP!%p%J_n)h{aNiEkz3cK_Uo7+G2&0LItIQh+3%Gv|u-iE(LWVF4T=! zUARyX8x*OCf2yrBRMSPPP}`=NWF|B3y?b1|nMu;7X`Du*lXUY*=L0iKtu%Z{Q)N;cX(B)&59^Xs7@ga6=%Cb!g}uk zwm4Pts&Myh387QG$^sHf7SLE_;;dz|B7{L#NFXA8Zn`SG{B)IlyK2NUf>}g2a0`)^eUleas4acVBOl3d`_917Ot(BEGtA|vjO~?ky561(J{_MzyooT{B(;1p+v=*jj zgxB}g7=EG#m(10D(JE97TlNlc=A7xMJKW_LR3UIM{!74p>tiI&vI0$yX#VyJK>#QI zv`oziwnI@$6h(`2t~Z1mZ}5b{Tz%Uu+PcHQ`HO})%}CGJ&~k-&MFv{P=adUmf;MX| z0=2q;g0XWXoC6Uhsm}>ENuW2c?aXyVpj8UUL|UuE)_Y=}+g>AR#%~=YT08d&K?ui= zJKp@T=i1SiBG4j{F@Wl| zF0bTUHr!0Hkt~8&!3D}sCmj=iTXNyj!C?szUa?SMwjm@53+9CgG~(vGaG851NoGzf z(!k|Vg`Q9$$6OZ()EjW?&7OQ7&Rr0uYeJz1k~CXlO{R^j`NOgaK=zj^3Pdeo`14t+IEt%Es?P zzB(2xnt^4Da4`tk45`!v^_d9!dzD5EFFjS`ne8tT zB^zF=i^`f+%0NL$QWz*G+cq@7K!2a&J?t5tC2(BPmPS=)RzyM}O*1{DDL4z$RblwW z0iJ)Yz_AknMq$II2E&`{RH}lV+xDyh#!aS&gTMC!AQ4D=~Ic_mKps3y(@L7JwYm&@h%&B(}zEtktN}-U>D}ga`40w`BNP&M R|A7Di002ovPDHLkV1ibgTMhsK diff --git a/src/pages/favicon.ico.ts b/src/pages/favicon.ico.ts new file mode 100644 index 0000000..891b87c --- /dev/null +++ b/src/pages/favicon.ico.ts @@ -0,0 +1,28 @@ +import type { APIRoute } from "astro"; +import sharp from "sharp"; +import ico from "sharp-ico"; +import path from "node:path"; + +const faviconSrc = path.resolve("src/images/icon.png"); + +export const GET: APIRoute = async () => { + + // Resize the image to multiple sizes + const sizes = [16, 32, 48, 64, 128, 256]; + + const buffers = await Promise.all( + sizes.map(async (size) => { + return await sharp(faviconSrc) + .resize(size) + .toFormat("png") + .toBuffer(); + }) + ); + + // Convert the image to an ICO file + const icoBuffer = ico.encode(buffers); + + return new Response(icoBuffer, { + headers: { "Content-Type": "image/x-icon" }, + }); +};