Skip to content

Commit

Permalink
reduced the complexity
Browse files Browse the repository at this point in the history
  • Loading branch information
Gmin2 committed Jan 13, 2024
1 parent 287ed28 commit 00a132d
Showing 1 changed file with 40 additions and 70 deletions.
110 changes: 40 additions & 70 deletions scripts/validate-schemas.js
Original file line number Diff line number Diff line change
@@ -1,90 +1,60 @@
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();

function validation (excludedFiles){

// Specify the path to the 'schemas' directory
const directoryPath = './schemas';

try{
function validateSchema(filePath, fileContent, schemaValidator) {
try {
const obj = JSON.parse(fileContent);
const validate = schemaValidator(obj);

const files = fs.readdirSync(directoryPath);
if (validate) {
console.log(`\n${filePath}: JSON Schema is valid!`);
} else {
console.error(`\n${filePath}: JSON Schema is not valid:`, schemaValidator.errors);
}

// Filter files
const filteredFiles = files.filter(file => !excludedFiles.includes(file) && path.extname(file).toLowerCase() === '.json');
return validate;
} catch (error) {
console.error(`\n${filePath}: Error reading or parsing JSON Schema: ${error.message}`);
return false;
}
}

function validation(excludedFiles) {
const directoryPath = './schemas';

// Collect errors in an array
const validationErrors = [];
try {
const files = fs.readdirSync(directoryPath);
const filteredFiles = files.filter(file => !excludedFiles.includes(file) && path.extname(file).toLowerCase() === '.json');

// Iterate through the filtered files
const validationErrors = [];

filteredFiles.forEach(file => {
// Construct the full path to the JSON schema file
const filePath = path.join(directoryPath, 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);
};

// Print errors after processing all files
validationErrors.forEach(({ file, errors }) => {
console.error(`\n${file}: JSON Schema is not valid:`, errors);
});
if (!validateSchema(filePath, fs.readFileSync(filePath, 'utf8'), schemaValidator)) {
validationErrors.push({ file });
}
});

// Exit with an error code if there are validation errors
if (validationErrors.length > 0) {
process.exit(1);
}

} catch (error) {
console.error('\nError during validation:', error.message);
process.exit(1);
if (validationErrors.length > 0) {
console.error('\nValidation errors:');
validationErrors.forEach(({ file }) => console.error(file));
process.exit(1);
}
} catch (error) {
console.error('\nError during validation:', error.message);
process.exit(1);
}
}


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'];
validation(excludedFiles);

console.log('\nValidation completed successfully.');
console.log('\nValidation completed successfully.');

0 comments on commit 00a132d

Please sign in to comment.