From 2a57d2bde63b5b029a490acda621ae37de3c235a Mon Sep 17 00:00:00 2001 From: Mintu Date: Thu, 1 Feb 2024 17:39:42 +0530 Subject: [PATCH] remove some conflict and remove nested ternary operator --- scripts/validate-schemas.js | 97 ++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 55 deletions(-) diff --git a/scripts/validate-schemas.js b/scripts/validate-schemas.js index 91ec4c8d..37dafbfd 100644 --- a/scripts/validate-schemas.js +++ b/scripts/validate-schemas.js @@ -1,75 +1,63 @@ const fs = require('fs'); const path = require('path'); - const AjvDraft04 = require('ajv-draft-04'); const ajvDraft04 = new AjvDraft04(); - const Ajv = require('ajv'); const ajv = new Ajv(); -/* eslint-disable sonarjs/cognitive-complexity */ -function validation (excludedFiles) { - // Specify the path to the 'schemas' directory +function validateSchema(filePath, fileContent, schemaValidator) { + try { + const obj = JSON.parse(fileContent); + const validate = schemaValidator(obj); + const errors = validate ? [] : (obj.$schema === 'http://json-schema.org/draft-04/schema' && ajvDraft04.errors) || ajv.errors; + + return { filePath, validate, errors }; + } catch (error) { + return { + filePath, + validate: false, + errors: [{ message: `Error reading or parsing JSON Schema: ${error.message}` }], + }; + } +} + +function validation(excludedFiles) { const directoryPath = './schemas'; try { const files = fs.readdirSync(directoryPath); + const filteredFiles = files.filter(file => !excludedFiles.includes(file) && path.extname(file).toLowerCase() === '.json'); - // Filter files - const filteredFiles = files.filter(file => !excludedFiles.includes(file) && path.extname(file).toLowerCase() === '.json'); - - // Collect errors in an array const validationErrors = []; - - // Iterate through the filtered files + filteredFiles.forEach(file => { - // Construct the full path to the JSON schema file const filePath = path.join(directoryPath, file); - try { - // Read and parse the JSON schema - const fileContent = fs.readFileSync(filePath, 'utf8'); - const obj = JSON.parse(fileContent); - - let validate; - if (obj.$schema === 'http://json-schema.org/draft-04/schema') { - // Validate the schema - validate = ajvDraft04.validateSchema(obj); - if (validate) { - console.log(`\n${file}: JSON Schema is valid!`); - } - } else { - // Validate the schema - validate = ajv.validateSchema(obj); - if (validate) { - console.log(`\n${file}: JSON Schema is valid!`); - } - } - - // Check if the schema is not valid and collect errors - if (!validate) { - validationErrors.push({ - file, - errors: obj.$schema === 'http://json-schema.org/draft-04/schema' - ? ajvDraft04.errors - : ajv.errors - }); - } - } catch (error) { - validationErrors.push({ - file, - errors: [{ message: `\nError reading or parsing JSON Schema: ${error.message}` }] - }); - } - }); + const schemaValidator = (obj) => { + return (obj.$schema === 'http://json-schema.org/draft-04/schema') ? ajvDraft04.validateSchema(obj) : ajv.validateSchema(obj); + }; + + const validationResult = validateSchema(filePath, fs.readFileSync(filePath, 'utf8'), schemaValidator); - // Print errors after processing all files - validationErrors.forEach(({ file, errors }) => { - console.error(`\n${file}: JSON Schema is not valid:`, errors); + if (!validationResult.validate || validationResult.errors.length > 0) { + validationErrors.push(validationResult); + } }); - // Exit with an error code if there are validation errors if (validationErrors.length > 0) { + console.error('\nValidation errors:'); + validationErrors.forEach(({ filePath, validate, errors }) => { + console.error(`${filePath}: JSON Schema is not valid:`); + + if (validate) { + console.error('Detailed Error Information:'); + errors.forEach(error => { + console.error(JSON.stringify(error, null, 2)); + }); + } else { + console.error(errors); + } + }); process.exit(1); } } catch (error) { @@ -78,8 +66,7 @@ function validation (excludedFiles) { } } -const excludedFiles=['2.0.0-rc1.json', '2.0.0-rc1-without-$id.json']; // added temporarily to avoid validation failure due to these two files. The schemas version are incorrect in these and needs to be fixed. +const excludedFiles = ['2.0.0-rc1.json', '2.0.0-rc1-without-$id.json']; // added temporarily to avoid validation failure due to these two files. The schemas version are incorrect in these and needs to be fixed. validation(excludedFiles); - -console.log('\nValidation completed successfully.'); \ No newline at end of file +console.log('\nValidation completed successfully.');