diff --git a/.gitignore b/.gitignore index dcc4bad..76b5e93 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ node_modules # Build output dist stats.html + +# Favicon generation +public/favicons +*.generated.astro diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 53dafda..0000000 --- a/.prettierignore +++ /dev/null @@ -1,13 +0,0 @@ -# Dependencies -node_modules - -# OS -.DS_Store - -# Build output -dist -stats.html - -# Favicon generation output -**/favicons/** -*.auto-generated* diff --git a/package-lock.json b/package-lock.json index 9c032bb..26b807e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "devscard", "version": "0.0.1", + "hasInstallScript": true, "dependencies": { "@floating-ui/dom": "1.1.0", "iconify-icon": "1.0.2", diff --git a/package.json b/package.json index 7c5a3a1..6ab16cd 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,14 @@ "pnpm": "please-use-npm" }, "scripts": { + "postinstall": "npm run generate-favicons", "dev": "astro dev", - "build": "astro build", + "build": "npm run generate-favicons && astro build", "preview": "astro preview", "generate-pdf": "ts-node scripts/generate-pdf.ts", "generate-favicons": "ts-node scripts/generate-favicons.ts", - "prettier:check": "prettier --check .", - "prettier:write": "prettier --write .", + "prettier:check": "prettier --check . --ignore-path .gitignore", + "prettier:write": "prettier --write . --ignore-path .gitignore", "astro:check": "astro check", "ts:check": "tsc --jsx preserve --skipLibCheck", "check": "concurrently npm:*:check" diff --git a/public/favicons/android-chrome-192x192.png b/public/favicons/android-chrome-192x192.png deleted file mode 100644 index 5b8e6b6..0000000 Binary files a/public/favicons/android-chrome-192x192.png and /dev/null differ diff --git a/public/favicons/android-chrome-512x512.png b/public/favicons/android-chrome-512x512.png deleted file mode 100644 index 8b65072..0000000 Binary files a/public/favicons/android-chrome-512x512.png and /dev/null differ diff --git a/public/favicons/apple-touch-icon.png b/public/favicons/apple-touch-icon.png deleted file mode 100644 index 1098e52..0000000 Binary files a/public/favicons/apple-touch-icon.png and /dev/null differ diff --git a/public/favicons/favicon-16x16.png b/public/favicons/favicon-16x16.png deleted file mode 100644 index 9dbbf4a..0000000 Binary files a/public/favicons/favicon-16x16.png and /dev/null differ diff --git a/public/favicons/favicon-32x32.png b/public/favicons/favicon-32x32.png deleted file mode 100644 index 4d5433f..0000000 Binary files a/public/favicons/favicon-32x32.png and /dev/null differ diff --git a/public/favicons/favicon.ico b/public/favicons/favicon.ico deleted file mode 100644 index ded715d..0000000 Binary files a/public/favicons/favicon.ico and /dev/null differ diff --git a/public/favicons/manifest.webmanifest b/public/favicons/manifest.webmanifest deleted file mode 100644 index d0df906..0000000 --- a/public/favicons/manifest.webmanifest +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "Mark Freeman - Senior React Developer", - "short_name": "Mark Freeman - Senior React Developer", - "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sodales ac dui at vestibulum. In condimentum metus id dui tincidunt, in blandit mi vehicula.", - "dir": "auto", - "lang": "en-US", - "display": "standalone", - "orientation": "any", - "start_url": ".", - "background_color": "#fff", - "theme_color": "#fff", - "icons": [ - { - "src": "/favicons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/favicons/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "any" - } - ] -} \ No newline at end of file diff --git a/scripts/generate-favicons.ts b/scripts/generate-favicons.ts index dfc990e..e125039 100644 --- a/scripts/generate-favicons.ts +++ b/scripts/generate-favicons.ts @@ -3,17 +3,11 @@ import config from '../src/data/config'; import { mkdir, writeFile, rm } from 'fs/promises'; import { existsSync } from 'fs'; -const faviconsDirectory = './public/favicons'; +const FAVICONS_DIR = './public/favicons'; +const ASTRO_FILE_PATH = './src/web/head/favicons.generated.astro'; -const saveFile = async (file: FaviconFile | FaviconImage) => { - await writeFile(`${faviconsDirectory}/${file.name}`, file.contents); - console.log(`${file.name} has been created successfully`); -}; - -(async () => { - const { faviconPath } = config.meta; - - const response = await favicons(`.${faviconPath}`, { +const generateFavicons = () => + favicons(`.${config.meta.faviconPath}`, { ...faviconsConfig.defaults, path: '/favicons', appName: config.meta.title, @@ -31,23 +25,41 @@ const saveFile = async (file: FaviconFile | FaviconImage) => { }, }); - if (existsSync(faviconsDirectory)) { - await rm(faviconsDirectory, { recursive: true }); +const clearFaviconsDir = async () => { + if (existsSync(FAVICONS_DIR)) { + await rm(FAVICONS_DIR, { recursive: true }); } - await mkdir(faviconsDirectory); + await mkdir(FAVICONS_DIR); +}; - await Promise.all([...response.images, ...response.files].map(saveFile)); +const saveFaviconAsset = async (file: FaviconFile | FaviconImage) => { + await writeFile(`${FAVICONS_DIR}/${file.name}`, file.contents); + console.log(`${file.name} has been created successfully`); +}; + +const generateAstroFile = async (html: string[]) => { const comments = [ '\n', '\n', ]; - const formattedHtml = response.html.map((line) => line.replace('>', '/>')).join('\n'); + const formattedHtml = html.map((line) => line.replace('>', '/>')).join('\n'); - const pathToFaviconsFile = './src/web/head/favicons.auto-generated.astro'; + await writeFile(ASTRO_FILE_PATH, [...comments, formattedHtml, '\n']); - await writeFile(pathToFaviconsFile, [...comments, formattedHtml, '\n']); - console.log(`${pathToFaviconsFile} has been updated successfully`); -})(); + console.log(`${ASTRO_FILE_PATH} has been updated successfully`); +}; + +const main = async () => { + const { images, files, html } = await generateFavicons(); + + await clearFaviconsDir(); + + await Promise.all([...images, ...files].map(saveFaviconAsset)); + + await generateAstroFile(html); +}; + +main(); diff --git a/src/web/head/favicons.auto-generated.astro b/src/web/head/favicons.auto-generated.astro deleted file mode 100644 index 4f83c43..0000000 --- a/src/web/head/favicons.auto-generated.astro +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/web/head/head.astro b/src/web/head/head.astro index 695c7ea..6ef4c8d 100644 --- a/src/web/head/head.astro +++ b/src/web/head/head.astro @@ -1,7 +1,7 @@ --- import Fonts from '@/components/fonts.astro'; import type { MetaConfig } from '@/types/config/meta-config.types'; -import Favicons from './favicons.auto-generated.astro'; +import Favicons from './favicons.generated.astro'; import InitialTheme from './initial-theme.astro'; import Meta from './meta.astro';