Socket
Book a DemoInstallSign in
Socket

@unic/estatico-json-schema

Package Overview
Dependencies
Maintainers
5
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@unic/estatico-json-schema

Uses [`Ajv`](https://www.npmjs.com/package/ajv) to validate input files against a [`JSON schema`](http://json-schema.org).

latest
Source
npmnpm
Version
0.2.0
Version published
Maintainers
5
Created
Source

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

FAQs

Package last updated on 01 Nov 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts