@unic/estatico-json-schema
v0.2.0
Published
Uses [`Ajv`](https://www.npmjs.com/package/ajv) to validate input files against a [`JSON schema`](http://json-schema.org).
Downloads
21
Keywords
Readme
@unic/estatico-json-schema
Uses Ajv
to validate input files against a JSON schema
.
Installation
$ npm install --save-dev @unic/estatico-json-schema
Usage
Specify gulp task:
const gulp = require('gulp');
const env = require('minimist')(process.argv.slice(2));
/**
* Lint data file structure
* Uses Ajv to to validate against a JSON schema
*
* Using `--watch` (or manually setting `env` to `{ watch: true }`) starts file watcher
* When combined with `--skipBuild`, the task will not run immediately but only after changes
*/
gulp.task('data:lint', () => {
const task = require('../estatico-json-schema');
const estaticoWatch = require('@unic/estatico-watch');
const instance = task({
src: [
'./src/**/*.data.js',
],
srcBase: './src',
watch: {
src: [
'./src/**/*.data.js',
'./src/**/*.schema.json',
],
name: 'data:lint',
dependencyGraph: {
srcBase: './',
resolver: {
js: {
match: /(?:require\('(.*?\.data\.js)'\)|require\('(.*?\.schema\.json))/g,
resolve: (match, filePath) => {
if (!(match[1] || match[2])) {
return null;
}
return path.resolve(path.dirname(filePath), match[1] || match[2]);
},
},
json: {},
},
},
watcher: estaticoWatch,
},
}, env);
// Don't immediately run task when skipping build
if (env.watch && env.skipBuild) {
return instance;
}
return instance();
});
Run task (assuming the project's package.json
specifies "scripts": { "gulp": "gulp" }
):
$ npm run gulp data:lint
See possible flags specified above.
API
plugin(options, env)
=> taskFn
options
src (required)
Type: Array
or String
Default: null
Passed to gulp.src
.
srcBase (required)
Type: String
Default: null
Passed as base
option to gulp.src
.
watch
Type: Object
Default: null
Passed to file watcher when --watch
is used.
plugins
Type: Object
plugins.setup
Type: Object
Default:
{
// Which part of the input data to validate against the schema
// Both default data and variants will be validated
getData: (content /* , filePath */) => {
const defaultData = content.props;
const variants = content.variants ? Object.values(content.variants).map(v => v.props) : [];
return [defaultData].concat(variants);
},
// Where to find the schema
// eslint-disable-next-line arrow-body-style
getSchemaPath: (content /* , filePath */) => {
return content.meta ? content.meta.schema : null;
},
}
The result of setup.getSchemaPath
is passed to json-schema-ref-parser
.
plugins.ajv
Type: Object
Default:
{
allErrors: true,
}
Passed to Ajv
.
logger
Type: { info: Function, debug: Function, error: Function }
Default: Instance of estatico-utils
's Logger
utility.
Set of logger utility functions used within the task.
env
Type: Object
Default: {}
Result from parsing CLI arguments via minimist
, e.g. { dev: true, watch: true }
. Some defaults are affected by this, see above.
License
Apache 2.0.