@unic/estatico-json-schema

0.2.0 • Public • Published

@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.

Readme

Keywords

none

Package Sidebar

Install

npm i @unic/estatico-json-schema

Weekly Downloads

14

Version

0.2.0

License

Apache-2.0

Unpacked Size

16.2 kB

Total Files

15

Last publish

Collaborators

  • team-unic
  • backflip
  • oriol.tf
  • rbnlffl
  • lbsonley