110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| #!/usr/bin/env node
 | |
| 
 | |
| /**
 | |
|  * Script to enrich all existing markdown files with standardized front-matter
 | |
|  * Usage: node scripts/enrich-all-notes.mjs [--dry-run]
 | |
|  */
 | |
| 
 | |
| import { enrichFrontmatterOnOpen } from '../server/ensureFrontmatter.mjs';
 | |
| import { VAULT_PATH as CFG_VAULT_PATH } from '../server/config.mjs';
 | |
| import fg from 'fast-glob';
 | |
| import path from 'path';
 | |
| import { fileURLToPath } from 'url';
 | |
| 
 | |
| const __filename = fileURLToPath(import.meta.url);
 | |
| const __dirname = path.dirname(__filename);
 | |
| 
 | |
| const isDryRun = process.argv.includes('--dry-run');
 | |
| 
 | |
| const VAULT_PATH = path.isAbsolute(CFG_VAULT_PATH)
 | |
|   ? CFG_VAULT_PATH
 | |
|   : path.resolve(__dirname, '..', CFG_VAULT_PATH);
 | |
| 
 | |
| async function enrichAllNotes() {
 | |
|   console.log('\n🔧 Front-matter Enrichment Script');
 | |
|   console.log('=====================================\n');
 | |
|   
 | |
|   if (isDryRun) {
 | |
|     console.log('⚠️  DRY RUN MODE - No files will be modified\n');
 | |
|   }
 | |
|   
 | |
|   console.log(`📁 Vault path: ${VAULT_PATH}\n`);
 | |
|   
 | |
|   // Find all markdown files
 | |
|   console.log('🔍 Scanning for markdown files...');
 | |
|   const files = await fg(['**/*.md'], {
 | |
|     cwd: VAULT_PATH,
 | |
|     absolute: true,
 | |
|     ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**']
 | |
|   });
 | |
|   
 | |
|   console.log(`✓ Found ${files.length} markdown files\n`);
 | |
|   
 | |
|   if (files.length === 0) {
 | |
|     console.log('No markdown files found. Exiting.\n');
 | |
|     return;
 | |
|   }
 | |
|   
 | |
|   // Process files
 | |
|   let enriched = 0;
 | |
|   let skipped = 0;
 | |
|   let errors = 0;
 | |
|   
 | |
|   console.log('📝 Processing files...\n');
 | |
|   
 | |
|   for (let i = 0; i < files.length; i++) {
 | |
|     const file = files[i];
 | |
|     const relativePath = path.relative(VAULT_PATH, file);
 | |
|     const progress = `[${i + 1}/${files.length}]`;
 | |
|     
 | |
|     try {
 | |
|       if (isDryRun) {
 | |
|         // In dry-run mode, just log what would happen
 | |
|         console.log(`${progress} Would process: ${relativePath}`);
 | |
|         skipped++;
 | |
|       } else {
 | |
|         const result = await enrichFrontmatterOnOpen(file);
 | |
|         
 | |
|         if (result.modified) {
 | |
|           console.log(`${progress} ✓ Enriched: ${relativePath}`);
 | |
|           enriched++;
 | |
|         } else {
 | |
|           console.log(`${progress} ○ Already compliant: ${relativePath}`);
 | |
|           skipped++;
 | |
|         }
 | |
|       }
 | |
|     } catch (error) {
 | |
|       console.error(`${progress} ✗ Error processing ${relativePath}:`, error.message);
 | |
|       errors++;
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   // Summary
 | |
|   console.log('\n=====================================');
 | |
|   console.log('📊 Summary\n');
 | |
|   console.log(`Total files:     ${files.length}`);
 | |
|   console.log(`Enriched:        ${enriched}`);
 | |
|   console.log(`Already OK:      ${skipped}`);
 | |
|   console.log(`Errors:          ${errors}`);
 | |
|   console.log('=====================================\n');
 | |
|   
 | |
|   if (isDryRun) {
 | |
|     console.log('💡 Run without --dry-run to apply changes\n');
 | |
|   } else if (enriched > 0) {
 | |
|     console.log('✨ Enrichment complete!');
 | |
|     console.log('💡 Remember to reindex Meilisearch: npm run meili:reindex\n');
 | |
|   } else {
 | |
|     console.log('✨ All files are already compliant!\n');
 | |
|   }
 | |
|   
 | |
|   if (errors > 0) {
 | |
|     process.exit(1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Execute
 | |
| enrichAllNotes().catch(err => {
 | |
|   console.error('\n❌ Fatal error:', err);
 | |
|   process.exit(1);
 | |
| });
 |