Files
dwroller/scripts/search-pdfs-for-name.js
Alex caf8a03553 feat: Add scripts for upserting and validating bestiary data
- Implemented `upsert-allewis-from-5001.js` to fetch and update Allewis data from API.
- Created `upsert-missing-movement-from-5001.js` to fill missing movement and wounds data from API.
- Developed `upsert-missing-movement-from-pdfs.js` to extract movement and wounds from PDF text.
- Added `upsert-missing-profiles-from-pdfs.js` to fill missing profiles from PDF data.
- Introduced `upsert-missing-wounds-from-pdfs.js` to update wounds data from PDF sources.
- Created `validate-bestiary.js` to validate the structure of the bestiary JSON.
- Updated `BestiaryTab.jsx` component to display bestiary data with improved structure and search functionality.
- Added tests for `BestiaryTab` to ensure proper rendering and functionality.
2025-08-17 16:21:00 +02:00

41 lines
1.4 KiB
JavaScript

const fs = require('fs').promises;
const path = require('path');
const pdf = require('pdf-parse');
async function findName(nameRegex) {
const dataDir = path.resolve(__dirname, '../data');
const outFile = path.resolve(__dirname, '../database/search-alexei.json');
const files = await fs.readdir(dataDir);
const pdfs = files.filter(f => f.toLowerCase().endsWith('.pdf'));
const results = [];
for (const pdfName of pdfs) {
const filePath = path.join(dataDir, pdfName);
try {
const dataBuffer = await fs.readFile(filePath);
const parsed = await pdf(dataBuffer);
const text = parsed.text || '';
const pages = text.split('\f');
pages.forEach((pageText, idx) => {
if (nameRegex.test(pageText)) {
results.push({
pdf: pdfName,
pageIndex: idx,
pageNumberApprox: idx + 1,
snippet: pageText.trim().slice(0, 800).replace(/\n+/g, ' ')
});
}
});
} catch (err) {
console.error('failed', pdfName, err.message);
}
}
const out = { generatedAt: new Date().toISOString(), query: nameRegex.toString(), matches: results };
await fs.writeFile(outFile, JSON.stringify(out, null, 2));
console.log('Wrote', outFile, 'matches:', results.length);
}
const nameRegex = /alexei\s+drahj/i;
findName(nameRegex).catch(err => { console.error(err); process.exit(2); });