@jstarstech/ajv-openapi
v3.0.4
Published
Ajv plugin to add OpenAPI v3 data type formats support
Readme
ajv-openapi
This package forked from touchifyapp/ajv-openapi to add support of Ajv v8
Ajv plugin that adds OpenAPI v3 data types (formats: int32, int64, float, double, byte) validation.
Installation
npm install ajv @jstarstech/ajv-openapiUsage
const Ajv = require("ajv");
const openApi = require("@jstarstech/ajv-openapi");
const ajv = openApi(new Ajv());Configuration for full OpenAPI compatibility
By default, the plugin only adds missing formats to Ajv validator.
If you want type coercion, set coerceTypes: true on your Ajv instance explicitly.
To configure Ajv to be fully OpenAPI v3 compliant, you should configure the plugin like this:
const Ajv = require("ajv");
const openApi = require("@jstarstech/ajv-openapi");
const ajvOptions = {
coerceTypes: true,
useDefaults: true
};
const openApiOptions = {
useDraft06: true
};
const ajv = openApi(
new Ajv(ajvOptions),
openApiOptions
);Examples
console.log(ajv.compile({ type: "integer", format: "int32" })(2147483648));
console.log(ajv.compile({ type: "integer", format: "int32" })(-2147483649));
console.log(ajv.compile({ type: "integer", format: "int32" })(1.23));
console.log(ajv.compile({ type: "integer", format: "int32" })(123));
> false
> false
> false
> true
console.log(ajv.compile({ type: "integer", format: "int64" })(Number.MAX_VALUE));
console.log(ajv.compile({ type: "integer", format: "int64" })(Number.MIN_VALUE));
console.log(ajv.compile({ type: "integer", format: "int64" })(1.23));
console.log(ajv.compile({ type: "integer", format: "int64" })(123));
> false
> false
> false
> true
console.log(ajv.compile({ type: "number", format: "float" })(Number.MAX_VALUE));
console.log(ajv.compile({ type: "number", format: "float" })(Number.MIN_VALUE));
console.log(ajv.compile({ type: "number", format: "float" })(1.23));
console.log(ajv.compile({ type: "number", format: "float" })(123));
> false
> true
> true
> true
console.log(ajv.compile({ type: "number", format: "double" })(Number.MAX_VALUE));
console.log(ajv.compile({ type: "number", format: "double" })(Number.MIN_VALUE));
console.log(ajv.compile({ type: "number", format: "double" })(1.23));
console.log(ajv.compile({ type: "number", format: "double" })(123));
> true
> true
> true
> true
console.log(ajv.compile({ type: "string", format: "byte" })("MTIz"));
console.log(ajv.compile({ type: "string", format: "byte" })("abc"));
console.log(ajv.compile({ type: "string", format: "byte" })(1));
console.log(ajv.compile({ type: "string", format: "byte" })("5L2g5aW95ZWK"));
> true
> false
> false
> true