| const fs = require('fs'); |
| const path = require('path'); |
| |
| const utils = require('../utils'); |
| |
| const FRONTEND_PATH = path.resolve(__dirname, '..', '..', 'front_end'); |
| |
| const modules = []; |
| for (let dir of fs.readdirSync(FRONTEND_PATH)) { |
| if (!utils.isDir(path.resolve(FRONTEND_PATH, dir))) |
| continue; |
| let module = path.resolve(dir, 'module.json'); |
| if (utils.isFile(path.resolve(FRONTEND_PATH, dir, 'module.json'))) |
| modules.push(dir); |
| } |
| |
| const Ajv = require('ajv'); |
| const ajv = new Ajv({schemaId: 'id'}); |
| // This seems to be the most widely supported version of the schema. |
| ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json')); |
| |
| const schema = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'module.schema.json'))); |
| const validate = ajv.compile(schema); |
| |
| let totalErrors = 0; |
| for (let module of modules) { |
| const moduleObject = JSON.parse(fs.readFileSync(path.resolve(FRONTEND_PATH, module, 'module.json'))); |
| const valid = validate(moduleObject); |
| if (!valid) { |
| console.log('Issue with ./front_end/' + module + '/module.json:'); |
| totalErrors++; |
| validate.errors.sort((a, b) => b.dataPath.length - a.dataPath.length); |
| const error = validate.errors[0]; |
| console.log(' ', error.dataPath, error.message, error.params); |
| console.log(''); |
| } |
| } |
| if (totalErrors) |
| console.log('module.json errors:', totalErrors); |
| process.exit(totalErrors); |