UNPKG

chrome-devtools-frontend

Version:
45 lines (38 loc) 1.5 kB
// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. const fs = require('fs'); const path = require('path'); const FRONTEND_PATH = path.resolve(__dirname, '..', '..', 'front_end'); const modules = []; for (const dir of fs.readdirSync(FRONTEND_PATH)) { if (!fs.lstatSync(path.resolve(FRONTEND_PATH, dir)).isDirectory()) { continue; } if (fs.existsSync(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 (const 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);