import Ajv2020 from 'ajv/dist/2020.js'; import addFormats from 'ajv-formats'; import { readFile } from 'node:fs/promises'; const readJson = async (path) => JSON.parse(await readFile(path, 'utf8')); const ajv = new Ajv2020({ allErrors: true, strict: true }); addFormats(ajv); const [intakeSchema, sitesSchema, validIntake, invalidIntake, sites] = await Promise.all([ readJson('schemas/intake.v1.schema.json'), readJson('schemas/sites.schema.json'), readJson('fixtures/intake.v1.valid.json'), readJson('fixtures/intake.v1.invalid.json'), readJson('sites.json') ]); const validIntakeCheck = ajv.compile(intakeSchema); const sitesCheck = ajv.compile(sitesSchema); if (!validIntakeCheck(validIntake)) throw new Error(`Valid intake rejected: ${ajv.errorsText(validIntakeCheck.errors)}`); if (validIntakeCheck(invalidIntake)) throw new Error('Invalid intake fixture was accepted'); if (!sitesCheck(sites)) throw new Error(`Sites manifest rejected: ${ajv.errorsText(sitesCheck.errors)}`); console.log('Schema fixtures and sites manifest are valid.');