Files
P4RS3LT0NGV3/build/build-index.js
T
Dustin Farley dc10a90851 refactor: migrate to modular tool-based architecture
- Implement tool registry system with individual tool modules
- Reorganize transformers into categorized source modules
- Remove emojiLibrary.js, consolidate into EmojiUtils and emojiData
- Fix mobile close button and tooltip functionality
- Add build system for transforms and emoji data
- Migrate from Python backend to pure JavaScript
- Add comprehensive documentation and testing
- Improve code organization and maintainability
- Ignore generated files (transforms-bundle.js, emojiData.js)
2025-12-02 20:26:32 -08:00

72 lines
2.1 KiB
JavaScript

#!/usr/bin/env node
/**
* Build Script for Transformers Index
* Dynamically generates index.js with all transformer imports
*/
const fs = require('fs');
const path = require('path');
const transformersDir = path.join(__dirname, '..', 'src', 'transformers');
const outputPath = path.join(transformersDir, 'index.js');
// Files to skip
const skipFiles = ['BaseTransformer.js', 'index.js', 'loader.js', 'loader-node.js', 'README.md'];
// Get all category directories
const categoryDirs = fs.readdirSync(transformersDir, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name)
.sort();
let imports = [];
let transformNames = [];
// Discover transforms from each category directory
for (const categoryDir of categoryDirs) {
const categoryPath = path.join(transformersDir, categoryDir);
const files = fs.readdirSync(categoryPath)
.filter(file => file.endsWith('.js') && !skipFiles.includes(file))
.sort();
for (const file of files) {
// Convert filename to transform name (kebab-case to snake_case)
const transformName = file.replace('.js', '').replace(/-/g, '_');
const filePath = `./${categoryDir}/${file}`;
imports.push(`import ${transformName} from '${filePath}';`);
transformNames.push(transformName);
}
}
// Generate the index.js content
const output = `// Transformers Index - Auto-generated
// This file is automatically generated by build/build-index.js
// Do not edit manually - run 'npm run build:index' to regenerate
${imports.join('\n')}
// Combine all transforms
const transforms = {
${transformNames.map(name => ` ${name}`).join(',\n')}
};
// Export for both ES6 modules and browser global
export default transforms;
// Also expose as window.transforms for backward compatibility
if (typeof window !== 'undefined') {
window.transforms = transforms;
window.encoders = transforms; // alias
}
`;
// Write the file
fs.writeFileSync(outputPath, output, 'utf8');
console.log(`✨ Generated: ${outputPath}`);
console.log(`📦 Total transforms: ${transformNames.length}`);
console.log(`📁 Categories: ${categoryDirs.join(', ')}`);