Files

90 lines
3.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.");