mirror of
https://github.com/KevinMidboe/infra-map.git
synced 2025-10-29 17:40:28 +00:00
new icons & script for converting SVGs to svelte files
This commit is contained in:
53
scripts/icon-converter.js
Normal file
53
scripts/icon-converter.js
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Usage: node convert-svg-to-svelte.js [inputDir] [outputDir]
|
||||
* Defaults: ./svgs ./svelte
|
||||
*/
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
const INPUT_DIR = process.argv[2] || '../svgs';
|
||||
const OUTPUT_DIR = process.argv[3] || '../src/lib/icons';
|
||||
|
||||
if (!fs.existsSync(OUTPUT_DIR)) fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
||||
|
||||
function processSvg(svgContent) {
|
||||
// Strip XML/DOCTYPE
|
||||
let out = svgContent.replace(/<\?xml[\s\S]*?\?>\s*/i, '').replace(/<!DOCTYPE[\s\S]*?>\s*/i, '');
|
||||
|
||||
// Remove ALL comments
|
||||
out = out.replace(/<!--[\s\S]*?-->\s*/g, '');
|
||||
|
||||
// Remove <g id="icomoon-ignore"></g> with any whitespace between tags
|
||||
out = out.replace(/<g\s+id=(["'])icomoon-ignore\1\s*>\s*<\/g>\s*/gi, '');
|
||||
|
||||
// Ensure only width="100%" height="100%" on the <svg> tag
|
||||
out = out.replace(/<svg\b[^>]*>/i, (match) => {
|
||||
let tag = match
|
||||
.replace(/\s+(width|height)\s*=\s*"[^"]*"/gi, '')
|
||||
.replace(/\s+(width|height)\s*=\s*'[^']*'/gi, '');
|
||||
return tag.replace(/>$/, ' width="100%" height="100%">');
|
||||
});
|
||||
|
||||
// Prepend the single license comment
|
||||
out = '<!-- generated by icomoon.io - licensed Lindua icon -->\n' + out.replace(/^\s+/, '');
|
||||
return out;
|
||||
}
|
||||
|
||||
function convertSvgs(inputDir = INPUT_DIR, outputDir = OUTPUT_DIR) {
|
||||
if (!fs.existsSync(inputDir)) {
|
||||
console.warn(`Input directory not found: ${inputDir}`);
|
||||
return;
|
||||
}
|
||||
const files = fs.readdirSync(inputDir).filter((f) => f.toLowerCase().endsWith('.svg'));
|
||||
files.forEach((file) => {
|
||||
const src = path.join(inputDir, file);
|
||||
const dest = path.join(outputDir, file.replace(/\.svg$/i, '.svelte'));
|
||||
const svgContent = fs.readFileSync(src, 'utf8');
|
||||
const processed = processSvg(svgContent);
|
||||
fs.writeFileSync(dest, processed, 'utf8');
|
||||
console.log(`Converted: ${file} -> ${path.basename(dest)}`);
|
||||
});
|
||||
}
|
||||
|
||||
convertSvgs();
|
||||
Reference in New Issue
Block a user