26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
import { mkdir, writeFile } from 'node:fs/promises';
|
|
import { dirname, resolve } from 'node:path';
|
|
import { buildIsoPdfCorpus } from './iso-pdf-corpus';
|
|
|
|
async function main(): Promise<void> {
|
|
const [iso27001Path, iso27002Path, outputPath, corpusVersion] = process.argv.slice(2);
|
|
if (!iso27001Path || !iso27002Path || !outputPath) {
|
|
throw new Error('Usage: npm run rag:prepare-iso -- <iso27001.pdf> <iso27002.pdf> <output.json> [corpus-version]');
|
|
}
|
|
const target = resolve(outputPath);
|
|
const corpus = await buildIsoPdfCorpus({
|
|
iso27001Path: resolve(iso27001Path),
|
|
iso27002Path: resolve(iso27002Path),
|
|
...(corpusVersion?.trim() ? { corpusVersion: corpusVersion.trim() } : {})
|
|
});
|
|
await mkdir(dirname(target), { recursive: true });
|
|
await writeFile(target, `${JSON.stringify(corpus, null, 2)}\n`, { encoding: 'utf8', flag: 'wx' });
|
|
const controlCount = new Set(corpus.documents.map(document => document.controlId)).size;
|
|
console.log(`Prepared corpus ${corpus.corpusId}@${corpus.corpusVersion}: ${controlCount} controls, ${corpus.documents.length} section documents.`);
|
|
}
|
|
|
|
void main().catch(error => {
|
|
console.error(error instanceof Error ? error.message : 'ISO corpus preparation failed.');
|
|
process.exitCode = 1;
|
|
});
|