mirror of
				https://github.com/KevinMidboe/infra-map.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| #!/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();
 |