diff --git a/helpers/ExerciceHelper.ts b/helpers/ExerciceHelper.ts new file mode 100644 index 0000000000000000000000000000000000000000..fccaefeab58aeb647c10312c6756d090548aca04 --- /dev/null +++ b/helpers/ExerciceHelper.ts @@ -0,0 +1,49 @@ +import Ajv, { ErrorObject, JTDSchemaType } from 'ajv/dist/jtd'; +import fs from 'fs-extra'; +import ExerciceResultsFile from '../types/Dojo/ExerciceResultsFile'; +import hjson from 'hjson'; + + +class ExerciceHelper { + validateResultFile(resultsFilePath: string): { + results: ExerciceResultsFile, isValid: boolean, errors: ErrorObject<string, Record<string, any>, unknown>[] | null | undefined + } { + const ajv = new Ajv(); + + const schema: JTDSchemaType<ExerciceResultsFile> = { + properties : { + success: { type: 'boolean' } + }, + optionalProperties : { + successfulTests: { type: 'uint32' }, + failedTests : { type: 'uint32' }, + + successfulTestsList: { + elements: { + type: 'string' + } + }, + failedTestsList : { + elements: { + type: 'string' + } + } + }, + additionalProperties: false + }; + + const validator = ajv.compile(schema); + + const results = hjson.parse(fs.readFileSync(resultsFilePath, 'utf8')); + const isValid = validator(results); + + return { + results: isValid ? results as ExerciceResultsFile : results as any, + isValid: isValid, + errors : validator.errors + }; + } +} + + +export default new ExerciceHelper(); \ No newline at end of file