Need private packages and team management tools?Check out npm Teams »

joi-to-openapi-definition

0.1.1 • Public • Published

joi-to-openapi-definition

NPM version

Add Joi models to openAPI definition, using openapi-definition

Installation

$ npm install joi-to-openapi-definition

Usage

Example

const Joi = require('@hapi/joi');
const j2od = require('joi-to-openapi-definition');
 
let definition = {    //  Your OpenApi definition
  "openapi": "3.0.0",
  "info": {
    "title": "Sample API",
    "description": "Optional multiline or single-line description in [CommonMark](http://commonmark.org/help/) or HTML.",
    "version": "0.1.9"
  },
  "servers": [
    {
      "url": "http://api.example.com/v1",
      "description": "Optional server description, e.g. Main (production) server"
    },
    {
      "url": "http://staging-api.example.com",
      "description": "Optional server description, e.g. Internal staging server for testing"
    }
  ],
  "paths": {}
};
 
const schema = Joi.object().keys({
    username: Joi.string().alphanum().min(3).max(30).required(),
    password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
    access_token: [Joi.string(), Joi.number()],
    birthyear: Joi.number().integer().min(1900).max(2013),
    email: Joi.string().email({ minDomainSegments: 2 })
}).with('username', 'birthyear').without('password', 'access_token');
 
//  Add schema to OpenApi definition
j2od.add_joi_model(definition, 'schema', schema)
 
console.log(definition);

Output

{
  "openapi": "3.0.0",
  "info": {
    "title": "Sample API",
    "description": "Optional multiline or single-line description in [CommonMark](http://commonmark.org/help/) or HTML.",
    "version": "0.1.9"
  },
  "servers": [
    {
      "url": "http://api.example.com/v1",
      "description": "Optional server description, e.g. Main (production) server"
    },
    {
      "url": "http://staging-api.example.com",
      "description": "Optional server description, e.g. Internal staging server for testing"
    }
  ],
  "paths": {},
  "components": {
    "schemas": {
      "schema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 3,
            "maxLength": 30
          },
          "password": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9]{3,30}$"
          },
          "access_token": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "birthyear": {
            "type": "integer",
            "minimum": 1900,
            "maximum": 2013
          },
          "email": {
            "type": "string",
            "format": "email"
          }
        },
        "additionalProperties": false,
        "patterns": [],
        "required": [
          "username"
        ]
      }
    }
  }
}

Docs

const j2od = require('joi-to-openapi-definition');
 
//  Returns converted Joi model as json schema
j2od.convert(joiModel)
 
//  Add Joi model to OpenAPI Definition
j2od.add_joi_model(yourOpenApiDefinition, 'someKey', joiModel)
 
//  Add Joi models to OpenAPI Definition, using object keys as property names
j2od.add_joi_models(yourOpenApiDefinition, objectOfJoiModels)
 
//  Copy of openapi-definition package
//  See https://www.npmjs.com/package/openapi-definition for docs
j2od.openapi_definition
 

License

MIT

Install

npm i joi-to-openapi-definition

DownloadsWeekly Downloads

5

Version

0.1.1

License

MIT

Unpacked Size

13.4 kB

Total Files

12

Last publish

Collaborators

  • avatar