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);
|
|
});
|