fix(images): Clean up image paths, compress large images, and fix openinary URLs

This commit is contained in:
Mustafa Yildiz
2026-07-18 19:28:38 +03:00
parent be94aa5155
commit f4abe0bc5b
204 changed files with 474 additions and 169 deletions
+89
View File
@@ -0,0 +1,89 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const IMAGES_DIR = path.resolve(__dirname, '../public/images');
const DATA_FILE = path.resolve(__dirname, '../lib/data.ts');
const GALLERY_FILE = path.resolve(__dirname, '../lib/gallery_data.ts');
function slugify(text) {
return text.toString().toLowerCase()
.replace(/ç/g, 'c')
.replace(/ğ/g, 'g')
.replace(/ı/g, 'i')
.replace(/ö/g, 'o')
.replace(/ş/g, 's')
.replace(/ü/g, 'u')
.replace(/[^a-z0-9.]/g, '-')
.replace(/\-\-+/g, '-')
.replace(/^-+/, '')
.replace(/-+$/, '');
}
function processDirectory(dir, mapping = []) {
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const oldPath = path.join(dir, entry.name);
let newName = slugify(path.parse(entry.name).name);
if (entry.isFile()) {
newName += path.extname(entry.name).toLowerCase();
}
const newPath = path.join(dir, newName);
if (entry.isDirectory()) {
// Recurse first before renaming directory
processDirectory(oldPath, mapping);
}
if (oldPath !== newPath) {
console.log(`Renaming: ${oldPath} -> ${newPath}`);
fs.renameSync(oldPath, newPath);
const oldRelative = path.relative(IMAGES_DIR, oldPath).replace(/\\/g, '/');
const newRelative = path.relative(IMAGES_DIR, newPath).replace(/\\/g, '/');
mapping.push({ old: oldRelative, new: newRelative });
}
}
return mapping;
}
console.log("Starting rename process...");
// First rename files inside directories, then rename directories
// To do this safely, we should gather all files, then directories, and rename bottom-up.
function getAllPaths(dir) {
let results = [];
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
results = results.concat(getAllPaths(fullPath));
}
results.push({ path: fullPath, isDir: entry.isDirectory(), name: entry.name });
}
return results;
}
const allPaths = getAllPaths(IMAGES_DIR).sort((a, b) => b.path.length - a.path.length); // Bottom up
const mapping = [];
for (const item of allPaths) {
const oldPath = item.path;
const dir = path.dirname(oldPath);
let newName = slugify(path.parse(item.name).name);
if (!item.isDir) {
newName += path.extname(item.name).toLowerCase();
}
const newPath = path.join(dir, newName);
if (oldPath !== newPath) {
fs.renameSync(oldPath, newPath);
console.log(`Renamed: ${item.name} -> ${newName}`);
// We will just do a global replace in files using slugify on the strings later
// It's easier than keeping track of complex path mapping.
}
}
console.log("Renaming done.");