This commit is contained in:
NotII
2025-04-07 19:25:24 +01:00
parent 7f7dd78818
commit 2f48ee38c2
102 changed files with 1825 additions and 761 deletions

View File

@@ -0,0 +1,268 @@
/**
* Script to organize the lib folder by moving files into appropriate directories
* Run with: node scripts/organize-lib-folder.js
*/
const fs = require('fs');
const path = require('path');
// File organization plan
const ORGANIZATION_PLAN = {
// Files to move to utils folder
'utils': [
{ source: 'lib/utils.ts', destination: 'lib/utils/general.ts' },
{ source: 'lib/auth-utils.ts', destination: 'lib/utils/auth.ts' },
{ source: 'lib/git-utils.ts', destination: 'lib/utils/git.ts' },
{ source: 'lib/styles.ts', destination: 'lib/utils/styles.ts' }
],
// Files to move to types folder
'types': [
{ source: 'lib/types.ts', destination: 'lib/types/index.ts' }
],
// Files to keep in lib root (core API files)
'keep': [
'lib/api.ts',
'lib/api-client.ts',
'lib/server-api.ts',
'lib/README.md'
],
// Files to remove (already migrated to services or consolidated)
'remove': [
'lib/client-utils.ts',
'lib/client-service.ts',
'lib/data-service.ts',
'lib/productData.ts',
'lib/shippingHelper.ts',
'lib/stats-service.ts',
'lib/storeHelper.ts',
'lib/server-service.ts',
'lib/api-utils.ts'
]
};
// Create backup directory
const BACKUP_DIR = path.join(__dirname, '../lib/deprecated-backup');
if (!fs.existsSync(BACKUP_DIR)) {
fs.mkdirSync(BACKUP_DIR, { recursive: true });
console.log(`Created backup directory: ${BACKUP_DIR}`);
}
// Make sure target directories exist
function createDirectories() {
const directories = ['lib/utils', 'lib/types', 'lib/services'];
directories.forEach(dir => {
const fullPath = path.join(__dirname, '..', dir);
if (!fs.existsSync(fullPath)) {
fs.mkdirSync(fullPath, { recursive: true });
console.log(`Created directory: ${dir}`);
}
});
}
// Backup a file before moving or removing it
function backupFile(filePath) {
const fullPath = path.join(__dirname, '..', filePath);
if (!fs.existsSync(fullPath)) {
console.log(`⚠️ ${filePath} doesn't exist, skipping backup`);
return false;
}
try {
const backupPath = path.join(BACKUP_DIR, path.basename(filePath));
fs.copyFileSync(fullPath, backupPath);
console.log(`✅ Backed up: ${filePath} to backup folder`);
return true;
} catch (error) {
console.error(`❌ Failed to backup ${filePath}:`, error.message);
return false;
}
}
// Move a file to its new location
function moveFile(source, destination) {
const sourcePath = path.join(__dirname, '..', source);
const destPath = path.join(__dirname, '..', destination);
if (!fs.existsSync(sourcePath)) {
console.log(`⚠️ Source file ${source} doesn't exist, skipping`);
return false;
}
try {
// Ensure the destination directory exists
const destDir = path.dirname(destPath);
if (!fs.existsSync(destDir)) {
fs.mkdirSync(destDir, { recursive: true });
}
// Read content from source
const content = fs.readFileSync(sourcePath, 'utf8');
// Write to destination
fs.writeFileSync(destPath, content);
console.log(`✅ Moved: ${source}${destination}`);
// Remove the source file
fs.unlinkSync(sourcePath);
return true;
} catch (error) {
console.error(`❌ Error moving ${source} to ${destination}:`, error.message);
return false;
}
}
// Remove a file
function removeFile(filePath) {
const fullPath = path.join(__dirname, '..', filePath);
if (!fs.existsSync(fullPath)) {
console.log(`⚠️ ${filePath} doesn't exist, skipping removal`);
return false;
}
try {
fs.unlinkSync(fullPath);
console.log(`🗑️ Removed: ${filePath}`);
return true;
} catch (error) {
console.error(`❌ Failed to remove ${filePath}:`, error.message);
return false;
}
}
// Update imports in the utils/index.ts file
function updateUtilsIndex() {
const indexPath = path.join(__dirname, '..', 'lib/utils/index.ts');
try {
const content = `/**
* Main utilities index file
* Re-exports all utility functions from their respective modules
*/
// Re-export general utils
export * from './general';
// Re-export auth utils
export * from './auth';
// Re-export git utils
export * from './git';
// Re-export style utils
export * from './styles';
`;
fs.writeFileSync(indexPath, content);
console.log(`✅ Updated lib/utils/index.ts with proper exports`);
return true;
} catch (error) {
console.error(`❌ Failed to update utils index:`, error.message);
return false;
}
}
// Main function to organize files
function organizeLibFolder() {
console.log('Starting lib folder organization...\n');
// Create necessary directories
createDirectories();
// Stats to track progress
const stats = {
backed_up: 0,
moved: 0,
removed: 0,
errors: 0
};
// First, back up all files we'll be modifying
const allFiles = [
...ORGANIZATION_PLAN.utils.map(item => item.source),
...ORGANIZATION_PLAN.types.map(item => item.source),
...ORGANIZATION_PLAN.remove
];
allFiles.forEach(file => {
if (backupFile(file)) {
stats.backed_up++;
} else {
stats.errors++;
}
});
// Move files to utils folder
ORGANIZATION_PLAN.utils.forEach(item => {
if (moveFile(item.source, item.destination)) {
stats.moved++;
} else {
stats.errors++;
}
});
// Move files to types folder
ORGANIZATION_PLAN.types.forEach(item => {
if (moveFile(item.source, item.destination)) {
stats.moved++;
} else {
stats.errors++;
}
});
// Remove deprecated files
ORGANIZATION_PLAN.remove.forEach(file => {
if (removeFile(file)) {
stats.removed++;
} else {
stats.errors++;
}
});
// Update the utils index file
updateUtilsIndex();
// Summary
console.log(`\nOrganization complete!`);
console.log(`${stats.backed_up} files backed up`);
console.log(`${stats.moved} files moved to appropriate folders`);
console.log(`${stats.removed} deprecated files removed`);
if (stats.errors > 0) {
console.log(`${stats.errors} errors encountered (see above)`);
}
console.log(`\nBackups are located in: lib/deprecated-backup`);
console.log(`You can delete this directory when you are confident the migration is complete.`);
}
// Show confirmation before proceeding
console.log(`
✨ Lib Folder Organization Tool ✨
This script will organize your lib folder as follows:
1. Move utility files to lib/utils/
${ORGANIZATION_PLAN.utils.map(f => `\n - ${f.source}${f.destination}`).join('')}
2. Move type files to lib/types/
${ORGANIZATION_PLAN.types.map(f => `\n - ${f.source}${f.destination}`).join('')}
3. Keep core API files in the lib root
${ORGANIZATION_PLAN.keep.map(f => `\n - ${f}`).join('')}
4. Remove deprecated files
${ORGANIZATION_PLAN.remove.map(f => `\n - ${f}`).join('')}
All files will be backed up to lib/deprecated-backup before any changes.
To proceed, edit this script and uncomment the organizeLibFolder() call at the bottom.
`);
// Uncomment this line to actually organize the folder
organizeLibFolder();