Skip to content

Commit

Permalink
Validator ajv6 (rjsf-team#2891)
Browse files Browse the repository at this point in the history
* Added new package for validator-ajv6
- Refactored `packages/core/src/validate.js` into this new package

* - Switched to the new `@rjsf/utils` library and types

* - Finished types conversion to @rjsf/utils
- Began adding tests

* - Completed conversion for validator class-based tests. Just need to get to 100%
1

* - Finished 100% test coverage and documentation of the `AJV6Validator`

* - Completed the documentation of the remaining methods and types for the library

* - Responded to self-review feedback and also fixed tests to hopefully get it to pass

* - Fixed the build (this time hopefully)

* - Switched to just passing `stack` instead of the whole empty object

* - Added hacky run of tests from within the utils directory

* - Fixed a few little things

* - Fixed bug in custom validation, including adding a test to detect it

* - Removed schema utils test for `stubExistingAdditionalPropertiesTest()` as it no longer exists

* - Fixed self-review feedback and the import in the `test/createAjvInstance.test.ts`
- Also bumped all the packages that made sense
  • Loading branch information
heath-freenome committed Aug 27, 2022
1 parent 67a828a commit 188e038
Show file tree
Hide file tree
Showing 19 changed files with 18,282 additions and 0 deletions.
29 changes: 29 additions & 0 deletions packages/validator-ajv6/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"parser": "@typescript-eslint/parser",
"rules": {
"curly": [2],
"linebreak-style": [2, "unix"],
"semi": [2, "always"],
"comma-dangle": [0],
"no-unused-vars": [2, {
"vars": "all",
"args": "none",
"ignoreRestSiblings": true
}],
"no-console": [0],
"object-curly-spacing": [2, "always"],
"keyword-spacing": ["error"],
"no-prototype-builtins": "warn",
"@typescript-eslint/no-empty-function": "warn",
"@typescript-eslint/no-var-requires": "warn"
},
"env": {
"es6": true,
"browser": true,
"node": true
},
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
"plugins": [
"@typescript-eslint"
]
}
1 change: 1 addition & 0 deletions packages/validator-ajv6/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.rts2_**
191 changes: 191 additions & 0 deletions packages/validator-ajv6/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
[![Build Status][build-shield]][build-url]
[![npm][npm-shield]][npm-url]
[![npm downloads][npm-dl-shield]][npm-dl-url]
[![Contributors][contributors-shield]][contributors-url]
[![Apache 2.0 License][license-shield]][license-url]

<!-- PROJECT LOGO -->
<br />
<p align="center">
<a href="https://github.com/rjsf-team/react-jsonschema-form">
<img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/validator-ajv6/logo.png" alt="Logo" width="120" height="120">
</a>

<h3 align="center">@rjsf/validator-ajv6</h3>

<p align="center">
AJV-6 based validator plugin for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>.
<br />
<a href="https://react-jsonschema-form.readthedocs.io/en/latest/"><strong>Explore the docs »</strong></a>
<br />
<br />
<a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a>
·
<a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a>
·
<a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a>
</p>
</p>

<!-- TABLE OF CONTENTS -->

## Table of Contents

- [About The Project](#about-the-project)
- [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Usage](#usage)
- [Roadmap](#roadmap)
- [Contributing](#contributing)
- [Contact](#contact)

<!-- ABOUT THE PROJECT -->

## About The Project

Exports `validator-ajv6` plugin for `react-jsonschema-form`.

### Built With

- [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/)
- [AJV](https://github.com/ajv-validator/ajv/)
- [TypeScript](https://www.typescriptlang.org/)

<!-- GETTING STARTED -->

## Getting Started

### Prerequisites

#### React JsonSchema Form Utils

- `@rjsf/utils >= 5.0.0`

```bash
yarn add @rjsf/core
```

### Installation

```bash
yarn add @rjsf/validator-ajv6
```

<!-- USAGE EXAMPLES -->

## Usage

```jsx
import Form from '@rjsf/core';
import validator from '@rjsf/validator-ajv6';

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

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

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

```jsx
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv6';

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

const validator = customizeValidator({
customFormats,
});

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

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

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

```jsx
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv6';

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

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

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

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

Finally, you can combine both additional meta schemas and custom formats.

```jsx
import Form from '@rjsf/core';
import { customizeValidator } from '@rjsf/validator-ajv6';

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

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

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

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

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

<!-- ROADMAP -->

## Roadmap

See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues).

<!-- CONTRIBUTING -->

## Contributing

Read our [contributors' guide](https://react-jsonschema-form.readthedocs.io/en/latest/contributing/) to get started.

<!-- CONTACT -->

## Contact

rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people)

GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form)

<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->

[build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg
[build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions
[contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg
[contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors
[license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square
[license-url]: https://choosealicense.com/licenses/apache-2.0/
[npm-shield]: https://img.shields.io/npm/v/@rjsf/material-ui/latest.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/@rjsf/material-ui
[npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/material-ui.svg?style=flat-square
[npm-dl-url]: https://www.npmjs.com/package/@rjsf/material-ui
[product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/e2e1181d1020f18cad0c80c661ddae28edb9794e/packages/material-ui/screenshot5.png
3 changes: 3 additions & 0 deletions packages/validator-ajv6/babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const defaultConfig = require('../../babel.config')

module.exports = defaultConfig
Binary file added packages/validator-ajv6/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 188e038

Please sign in to comment.