Socket
Socket
Sign inDemoInstall

@rjsf/validator-ajv8

Package Overview
Dependencies
4
Maintainers
2
Versions
69
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rjsf/validator-ajv8


Version published
Maintainers
2
Created

Package description

What is @rjsf/validator-ajv8?

@rjsf/validator-ajv8 is a validation package for React JSON Schema Form (RJSF) that uses AJV version 8 for JSON schema validation. It allows you to validate form data against a JSON schema, ensuring that the data conforms to the specified structure and constraints.

What are @rjsf/validator-ajv8's main functionalities?

Schema Validation

This feature allows you to validate data against a JSON schema. The code sample demonstrates how to compile a schema and validate data using AJV.

const Ajv = require('ajv');
const ajv = new Ajv();
const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' }
  },
  required: ['name', 'age']
};
const validate = ajv.compile(schema);
const data = { name: 'John', age: 30 };
const valid = validate(data);
if (!valid) console.log(validate.errors);

Custom Keywords

This feature allows you to add custom validation keywords to your schema. The code sample shows how to add a custom keyword 'isPositive' and use it in a schema.

const Ajv = require('ajv');
const ajv = new Ajv();
ajv.addKeyword('isPositive', {
  type: 'number',
  validate: (schema, data) => data > 0
});
const schema = {
  type: 'object',
  properties: {
    positiveNumber: { type: 'number', isPositive: true }
  }
};
const validate = ajv.compile(schema);
const data = { positiveNumber: 10 };
const valid = validate(data);
if (!valid) console.log(validate.errors);

Error Messages

This feature provides detailed error messages when validation fails. The code sample demonstrates how to enable all error messages and validate data that does not meet the schema requirements.

const Ajv = require('ajv');
const ajv = new Ajv({ allErrors: true });
const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer', minimum: 18 }
  },
  required: ['name', 'age']
};
const validate = ajv.compile(schema);
const data = { name: 'John', age: 16 };
const valid = validate(data);
if (!valid) console.log(validate.errors);

Other packages similar to @rjsf/validator-ajv8

Changelog

Source

5.0.0-beta.17

@rjsf/antd

  • Enable searching in the SelectWidget by the label that the user sees rather than by the value
  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/bootstrap-4

  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/chakra-ui

  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/core

  • Updated SchemaField to handle the new style prop in the uiSchema similarly to classNames, passing it to the FieldTemplate and removing it from being passed down to children.
    • Also, added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper
    • This partially fixes #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/fluent-ui

  • Added support for new style prop on FieldTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/material-ui

  • Updated SelectWidget to support additional TextFieldProps in a manner similar to how BaseInputTemplate does
  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/mui

  • Updated SelectWidget to support additional TextFieldProps in a manner similar to how BaseInputTemplate does
  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/semantic-ui

  • Added support for new style prop on FieldTemplate and WrapIfAdditionalTemplate rendering them on the outermost wrapper, partially fixing #1200
  • Updated CheckboxesWidget to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing #2141
  • Updated all the user "input" controls to have an aria-describedby value built using the ariaDescribedByIds() function, partially fixing #959
    • Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions

@rjsf/utils

  • Updated the FieldTemplateProps, WrapIfAdditionalTemplateProps and UIOptionsBaseType types to add style?: StyleHTMLAttributes<any>, partially fixing #1200
  • Added enumOptionsDeselectValue() and enumOptionsSelectValue() as a loose refactor of the duplicated functions in the various CheckboxesWidget implementations
  • Updated the FieldTemplateProps, WrapIfAdditionalTemplateProps and UIOptionsBaseType types to add style?: StyleHTMLAttributes<any>, partially fixing #1200
  • Added new ariaDescribedByIds(), descriptionId(), errorId(), examplesId(), helpId() optionId() and titleId() id generator functions

@rjsf/validator-ajv8

  • Remove alias for ajv -> ajv8 in package.json. This fixes #3215.
  • Updated AJV8Validator#transformRJSFValidationErrors to return more human-readable error messages. The ajv8 ErrorObject message is enhanced by replacing the error message field with either the uiSchema's ui:title field if one exists or the parentSchema title if one exists. Fixes #3246

Dev / docs / playground

  • In the playground, change Vite preserveSymlinks to true, which provides an alternative fix for #3228 since the prior fix caused #3215.
  • Updated the custom-templates.md and uiSchema.md to document the new style prop
  • Updated the validation.md documentation to describe the new uiSchema parameter passed to the customValidate() and transformError() functions
  • Updated the utility-functions documentation to add the new enumOptionsDeselectValue() and enumOptionsSelectValue() functions and to describe the new id generator functions
  • Updated the 5.x migration guide documentation to describe potential breaking id changes

Readme

Source

Build Status npm npm downloads Contributors Apache 2.0 License


Logo

@rjsf/validator-ajv8

AJV-8 based validator plugin for react-jsonschema-form.
Explore the docs »

View Playground · Report Bug · Request Feature

Table of Contents

About The Project

Exports validator-ajv8 plugin for react-jsonschema-form.

Built With

Getting Started

Prerequisites

React JsonSchema Form Utils
  • @rjsf/utils >= 5.0.0
yarn add @rjsf/core

Installation

yarn add @rjsf/validator-ajv8

Usage

import {RJSFSchema} from "packages/utils/dist/index";
import Form from 'packages/core/dist/index';
import validator from '@rjsf/validator-ajv8';

const schema: RJSFSchema = {
    type: 'string',
};

<Form schema={schema} validator={validator}/>

or, using a more complex example using custom validator with custom formats

import { RJSFSchema } from "@rjsf/utils";
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv8';

const customFormats = {
  'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/
};

const validator = customizeValidator({
  customFormats,
});

const schema: RJSFSchema = {
  type: 'string',
  format: 'phone-us'
};

<Form schema={schema} validator={validator} />

or, using a more complex example using a custom with additional meta schema

import { RJSFSchema } from "@rjsf/utils";
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv8';

const metaSchemaDraft06 = require("ajv/lib/refs/json-schema-draft-06.json");

const validator = customizeValidator({
  additionalMetaSchemas: [metaSchemaDraft06],
});

const schema: RJSFSchema = {
  "$schema": "http://json-schema.org/draft-06/schema#",
  type: 'string',
};

<Form schema={schema} validator={validator} />

or, using a more complex example using custom validator config override options

import { RJSFSchema } from "@rjsf/utils";
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv8';

const validator = customizeValidator({
  ajvOptionsOverrides: {
    $data: true,
    verbose: true,
  }
});

const schema: RJSFSchema = {
  type: 'string',
};

<Form schema={schema} validator={validator} />

or, using a more complex example using ajv-formats custom format options.

import { RJSFSchema } from "@rjsf/utils";
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv8';

const validator = customizeValidator({
  ajvFormatOptions: {
    keywords: true,
    formats: ["date", "time"]
  }
});

const schema: RJSFSchema = {
  type: 'string',
};

<Form schema={schema} validator={validator} />

Finally, you can combine both additional meta schemas, custom formats, custom validator config override options and ajv-formats custom format options.

import { RJSFSchema } from "@rjsf/utils";
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv8';

const metaSchemaDraft06 = require("ajv/lib/refs/json-schema-draft-06.json");

const customFormats = {
  'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/
};

const validator = customizeValidator({
  additionalMetaSchemas: [metaSchemaDraft06],
  customFormats,
  ajvOptionsOverrides: {
    $data: true,
    verbose: true,
  },
  ajvFormatOptions: {
    keywords: true,
    formats: ["date", "time"]
  }
});

const schema: RJSFSchema = {
  "$schema": "http://json-schema.org/draft-06/schema#",
  type: 'string',
  format: 'phone-us'
};

<Form schema={schema} validator={validator} />

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Read our contributors' guide to get started.

Contact

rjsf team: https://github.com/orgs/rjsf-team/people

GitHub repository: https://github.com/rjsf-team/react-jsonschema-form

Keywords

FAQs

Last updated on 18 Jan 2023

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc