Assessor_2.0/server/regulatory/regulatory-prepare-iso.ts

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