diff --git a/convert-images.cjs b/convert-images.cjs new file mode 100644 index 0000000..80b9801 --- /dev/null +++ b/convert-images.cjs @@ -0,0 +1,31 @@ +const fs = require('fs').promises; +const path = require('path'); +const sharp = require('sharp'); + +const publicDir = path.join(__dirname, 'public'); + +async function convertJpgToWebp(directory) { + try { + const entries = await fs.readdir(directory, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(directory, entry.name); + + if (entry.isDirectory()) { + await convertJpgToWebp(fullPath); + } else if (entry.isFile() && path.extname(entry.name).toLowerCase() === '.jpg') { + const webpName = path.join(directory, `${path.parse(entry.name).name}.webp`); + + await sharp(fullPath).webp().toFile(webpName); + + console.log(`Converted: ${fullPath} -> ${webpName}`); + } + } + } catch (error) { + console.error(`Error processing directory ${directory}:`, error); + } +} + +convertJpgToWebp(publicDir) + .then(() => console.log('Conversion complete')) + .catch((error) => console.error('Conversion failed:', error)); diff --git a/package.json b/package.json index 6a173ad..d922f26 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,9 @@ "preview": "astro preview", "og:generate": "node og-generate.cjs", "icons:generate": "node icons-generate.cjs", + "webp": "node convert-images.cjs", "plop": "plop", - "astro": "astro", - "cspell": "cspell --words-only --unique 'src' | sort --ignore-case >> .cspell/dictionary.txt" + "astro": "astro" }, "dependencies": { "@astro-community/astro-embed-youtube": "^0.5.2",