This commit is contained in:
Tickbase
2025-05-18 16:09:24 +02:00
parent 07384e30cc
commit 4b70cec6e9
62 changed files with 3597 additions and 211 deletions

131
scripts/optimize-svg.js Normal file
View File

@@ -0,0 +1,131 @@
#!/usr/bin/env node
/**
* SVG Optimizer for Creamlinux
*
* This script optimizes SVG files for use in the icon system.
* Run it with `node optimize-svg.js path/to/svg`
*/
import fs from 'fs'
import path from 'path'
import optimize from 'svgo'
// Check if a file path is provided
if (process.argv.length < 3) {
console.error('Please provide a path to an SVG file or directory')
process.exit(1)
}
const inputPath = process.argv[2]
// SVGO configuration
const svgoConfig = {
plugins: [
{
name: 'preset-default',
params: {
overrides: {
// Keep viewBox attribute
removeViewBox: false,
// Don't remove IDs
cleanupIDs: false,
// Don't minify colors
convertColors: false,
},
},
},
// Add currentColor for path fill if not specified
{
name: 'addAttributesToSVGElement',
params: {
attributes: [
{
fill: 'currentColor',
},
],
},
},
// Remove width and height
{
name: 'removeAttrs',
params: {
attrs: ['width', 'height'],
},
},
// Make sure viewBox is 0 0 24 24 for consistent sizing
{
name: 'addAttributesToSVGElement',
params: {
attributes: [
{
viewBox: '0 0 24 24',
},
],
},
},
],
}
// Function to optimize a single SVG file
function optimizeSVG(filePath) {
try {
const svg = fs.readFileSync(filePath, 'utf8')
const result = optimize(svg, svgoConfig)
// Write the optimized SVG back to the file
fs.writeFileSync(filePath, result.data)
console.log(`✅ Optimized: ${filePath}`)
return true
} catch (error) {
console.error(`❌ Error optimizing ${filePath}:`, error)
return false
}
}
// Function to process a directory of SVG files
function processDirectory(dirPath) {
try {
const files = fs.readdirSync(dirPath)
let optimizedCount = 0
for (const file of files) {
const filePath = path.join(dirPath, file)
const stat = fs.statSync(filePath)
if (stat.isDirectory()) {
// Recursively process subdirectories
optimizedCount += processDirectory(filePath)
} else if (path.extname(file).toLowerCase() === '.svg') {
// Process SVG files
if (optimizeSVG(filePath)) {
optimizedCount++
}
}
}
return optimizedCount
} catch (error) {
console.error(`Error processing directory ${dirPath}:`, error)
return 0
}
}
// Main execution
try {
const stat = fs.statSync(inputPath)
if (stat.isDirectory()) {
const count = processDirectory(inputPath)
console.log(`\nOptimized ${count} SVG files in ${inputPath}`)
} else if (path.extname(inputPath).toLowerCase() === '.svg') {
optimizeSVG(inputPath)
} else {
console.error('The provided path is not an SVG file or directory')
process.exit(1)
}
} catch (error) {
console.error('Error:', error)
process.exit(1)
}