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';