import { pbkdf2Sync } from 'node:crypto'; import { writeFile } from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; import { dirname, join, resolve } from 'node:path'; import { gzipSync } from 'node:zlib'; import { buildSeedOperations } from '../database.mjs'; import { createSeedDatabase } from '../src/data/seed.mjs'; const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); const outputPath = join(root, 'src', 'Eis.Infrastructure', 'Data', 'demo-seed-operations.json.gz'); const generatedAt = '2026-07-23T00:00:00.000Z'; const deterministicSalt = 'eis-dotnet-demo-seed'; const hashPassword = password => { const hash = pbkdf2Sync(password, deterministicSalt, 120000, 32, 'sha256').toString('hex'); return `${deterministicSalt}:${hash}`; }; const database = createSeedDatabase({ nowIso: () => generatedAt, hashPassword }); database.meta.version = 20; const operations = buildSeedOperations(database); const payload = { version: 1, schemaVersion: 20, generatedAt, summary: { schools: database.schools.length, users: database.users.length, candidates: database.candidateProfiles.length, registrations: database.registrations.length, results: database.results.length, admissionRecords: database.admissionRecords.length, firstRoundPreferences: database.admissionRecords.filter( item => item.kind === 'preference' && Number(item.payload?.round || 1) === 1 ).length, operations: operations.length }, operations }; const compressed = gzipSync(Buffer.from(JSON.stringify(payload)), { level: 9 }); await writeFile(outputPath, compressed); console.log(JSON.stringify({ outputPath, compressedBytes: compressed.length, ...payload.summary }));