UNPKG

2.59 kBJavaScriptView Raw
1'use strict';
2
3/**
4 *
5 * Usage
6 *
7 * node app/scripts/validate-pattern-data.js
8 * or
9 * npm run lint:data
10 * or
11 * yarn lint:data
12 *
13 * example config in config/default.js
14 *
15 * "code": {
16 * "validation": {
17 * "jsonSchema": {
18 * "logMissingSchemaAsError": false,
19 * "logMissingSchemaAsWarning": true
20 * }
21 * }
22 * }
23 *
24 */
25const chalk = require('chalk');
26const fs = require('fs');
27const globby = require('globby');
28const Ajv = require('ajv');
29const config = require('config');
30const ajv = new Ajv({ schemaId: 'auto', allErrors: true });
31ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json'));
32const wildcard = '*';
33const patternBasePaths = Object.keys(config.get('nitro.patterns')).map((key) => {
34 return config.get(`nitro.patterns.${key}.path`);
35});
36const patternGlobs = patternBasePaths.map((patternBasePath) => {
37 return `${patternBasePath}/${wildcard}`;
38}).concat(
39 patternBasePaths.map((patternBasePath) => {
40 return `${patternBasePath}/${wildcard}/elements/${wildcard}`;
41 })
42);
43const logMissingSchemaAsError = config.has('code.validation.jsonSchema.logMissingSchemaAsError')
44 ? config.get('code.validation.jsonSchema.logMissingSchemaAsError') : false;
45const logMissingSchemaAsWarning = config.has('code.validation.jsonSchema.logMissingSchemaAsWarning')
46 ? config.get('code.validation.jsonSchema.logMissingSchemaAsWarning') : true;
47
48let errorCouter = 0;
49let patternCouter = 0;
50
51globby.sync(patternGlobs, {nodir: false}).forEach((patternPath) => {
52 const schemaFilePath = `${patternPath}/schema.json`;
53 patternCouter += 1;
54
55 if (!fs.existsSync(schemaFilePath)) {
56 if (logMissingSchemaAsError) {
57 console.log(`${chalk.red('Error')} (${patternPath}): no schema file found`);
58 errorCouter += 1;
59 return true;
60 }
61 if (logMissingSchemaAsWarning) {
62 console.log(`${chalk.yellow('Warn')} (${patternPath}): no schema file found`);
63 }
64 return true;
65 }
66
67 globby.sync([`${patternPath}/_data/${wildcard}.json`]).forEach((patternDataFilePath) => {
68 const patternData = JSON.parse(fs.readFileSync(patternDataFilePath, 'utf8'));
69 const schema = JSON.parse(fs.readFileSync(schemaFilePath, 'utf8'));
70
71 const valid = ajv.validate(schema, patternData);
72 if (!valid) {
73 errorCouter += 1;
74 console.log(`${chalk.red('Error')} (${patternDataFilePath}): ${ajv.errorsText()}`);
75 }
76 });
77});
78
79if (errorCouter <= 0) {
80 console.log(`${chalk.green('Success:')} all data from each of the ${patternCouter} patterns are valid!`);
81} else {
82 process.abort();
83}