GithubHelp home page GithubHelp logo

jirutka / ajv-cli Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ajv-validator/ajv-cli

1.0 0.0 0.0 518 KB

Command-line interface for Ajv JSON Validator

License: MIT License

JavaScript 11.81% TypeScript 88.19%
ajv json-schema validator json-schema-

ajv-cli's Introduction

Ajv CLI

Build Status npm Version

Command line interface for Ajv, a JSON Schema validator.

This is a fork of the original ajv-cli 5 with many improvements (see below).

Changes from ajv-cli 5

Notable changes from the original ajv-cli 5.

New features

  • A new human-friendly error format pretty that combines the source file location and JSON path of the invalid value, followed by a code span (a snippet of the validated file) with an in-place error message (see Pretty format in Examples).

  • A new error format line: <filepath>:<line>:<column> - <message> (see Line format in Examples).

  • Support for the Code Climate Issue format compatible with the Code Quality report in GitLab CI (see Code Climate format in Examples).

  • A validate option --merge-errors, enabled by default, to merge related errors per instance path instead of reporting individual schema errors as returned by Ajv (see JSON format without merging errors in Examples).

  • A validate option --errors-location to add the source location (filename, line and column number) of each invalid value to validation errors (see JSON format with location in Examples).

  • A compile option --code-esm to export the validate function(s) as ECMAScript Modules (ESM) instead of CommonJS (see code.esm in Ajv options).

  • Workaround to fix incorrect schemaPath in validation errors (see src/ajv-schema-path-workaround.ts and ajv-validator/ajv#512).

(Breaking) Changes

  • -d option has been replaced with positional arguments (ajv validate -s <schema> <data-file>…​).

  • --no-<option> no longer works, boolean options can be disabled as --<option>=false or --<option> false.

  • The validate command is no longer implicit, it must always be specified (e.g. ajv validate [options], not ajv [options]).

  • Limited glob support – The bloated Glob dependency has been replaced by picomatch and a custom implementation to traverse directories. However, it’s a simplified solution that does not support complex nested globs (e.g. alpha/beta/*.{yml,d/**/*.yml}).

  • The default error format has been changed from js to pretty.

  • The line format has been renamed to json-oneline.

  • The text format for errors has been replaced by the jsonpath format.

  • Only (structured) validation errors (see --errors) and changes (see --changes) are printed to stdout, all other messages are logged to stderr.

  • --strict-schema is disabled by default* (i.e. unknown keywords and formats are ignored) to comply with the JSON Schema specification.

  • ajv compile prints the generated code to stdout instead of nowhere if the -o option is not specified.

  • The default value of --inline-refs has been changed from true to 8 to speed up schema compilation (and validation).

  • If --spec is not provided, it’s determined by the $schema URI in the first passed schema (-s). It will only fallback to draft-07 if it’s not found.

  • ajv-cli is now transpiled to ECMAScript Modules (ESM) instead of CommonJS.

Removed features

  • The test command (use validate instead).

  • The migrate command.

  • Support for loading schema and data files via require and omitting the .json extension in file paths.

  • Support for loading custom keywords modules in TypeScript.

  • Loading schemas and data in the JSON5 format (CJSON is still supported).

Install

Using npm

npm install --global @jirutka/ajv-cli

Download from Releases

ajv-cli is also provided as a single JavaScript file with bundled dependencies, requiring only Node.js (version 20 or later) on the system.

curl -LO  https://github.com/jirutka/ajv-cli/releases/download/v6.0.0-beta.5/ajv.cjs
curl -fsSL https://github.com/jirutka/ajv-cli/releases/download/v6.0.0-beta.5/checksums.txt | sha256sum -c --ignore-missing
install -D -m755 ajv.cjs /usr/local/bin/ajv

Usage

Refer to ajv validate --help and ajv compile --help.

Examples

Pretty format

$ ajv validate -s schema.json data-invalid-1.yml
--> data-invalid-1.yml:6:10
    #/www.encom.com/CNAME

    |   A: 1.2.3.4
    | www.encom.com:
    |   owners: flynnsam
  6 |   CNAME: [ encom.com ]
    |          ^^^^^^^^^^^^^ must be string or object
    | tron.encom.com:
    |   owners: [ flynnkev, bradlala ]
    |   A: 1.2.3.5

Line format

$ ajv validate -s schema.json --errors=line data-invalid-1.yml
data-invalid-1.yml:6:10 - must be string or object

JSON format

$ ajv validate -s schema.json --errors=json data-invalid-1.yml
[
  {
    "message": "must be string or object",
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainObject/properties/CNAME/anyOf"
  }
]

JSON format with location

$ ajv validate -s schema.json --errors=json --errors-location data-invalid-1.yml
[
  {
    "message": "must be string or object",
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainObject/properties/CNAME/anyOf",
    "instanceLocation": {
      "filename": "data-invalid-1.yml",
      "start": {
        "line": 6,
        "col": 10
      },
      "end": {
        "line": 6,
        "col": 23
      }
    }
  }
]

JSON format verbose

$ ajv validate -s schema.json --errors=json --verbose data-invalid-1.yml
[
  {
    "message": "must be string or object",
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainObject/properties/CNAME/anyOf",
    "data": [
      "encom.com"
    ],
    "schema": [
      {
        "$ref": "#/$defs/DomainName"
      },
      {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rdata"
        ],
        "properties": {
          "rdata": {
            "$ref": "#/$defs/DomainName"
          },
          "ttl": {
            "type": "number"
          }
        }
      }
    ],
    "parentSchema": {
      "anyOf": [
        {
          "$ref": "#/$defs/DomainName"
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "rdata"
          ],
          "properties": {
            "rdata": {
              "$ref": "#/$defs/DomainName"
            },
            "ttl": {
              "type": "number"
            }
          }
        }
      ]
    }
  }
]

JSON format without merging errors

$ ajv validate -s schema.json --errors=json --merge-errors=false data-invalid-1.yml
[
  {
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainName/type",
    "keyword": "type",
    "params": {
      "type": "string"
    },
    "message": "must be string"
  },
  {
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainObject/properties/CNAME/anyOf/1/type",
    "keyword": "type",
    "params": {
      "type": "object"
    },
    "message": "must be object"
  },
  {
    "instancePath": "/www.encom.com/CNAME",
    "schemaPath": "#/$defs/DomainObject/properties/CNAME/anyOf",
    "keyword": "anyOf",
    "params": {},
    "message": "must match a schema in anyOf"
  }
]

Code Climate format

$ ajv validate -s schema.json --errors=code-climate data-invalid-1.yml
[
  {
    "description": "[schema] #/www.encom.com/CNAME must be string or object",
    "check_name": "json-schema",
    "fingerprint": "344ef8205ab8c5dea3b0ebd537519dfb005c5f5c",
    "severity": "major",
    "location": {
      "path": "data-invalid-1.yml",
      "positions": {
        "begin": {
          "line": 6,
          "column": 10
        },
        "end": {
          "line": 6,
          "column": 23
        }
      }
    }
  }
]

Credits

License

This project is licensed under MIT License.

ajv-cli's People

Contributors

agh42 avatar andreineculau avatar bauglir avatar cyplo avatar dependabot-preview[bot] avatar ehmicky avatar epoberezkin avatar fedorov avatar g-rath avatar jessedc avatar jirutka avatar kleewho avatar notjosh avatar ralfhandl avatar relequestual avatar rvanider avatar xmedeko avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.