1.2.0 • Published 4 years ago

openapi-json-schemextractor v1.2.0

Weekly downloads
10
License
MIT
Repository
github
Last release
4 years ago

openapi-json-schemextractor Build Status Coverage Status npm version

Extract any entities defined via a schema within OpenAPI (a.k.a. Swagger) schemas as standard JSON schemas:

Entity schemas are extracted from:

  • definitions section (OpenAPI 2),
  • both parameters and components.schemas sections (OpenAPI 3).

Input

Input OpenAPI schemas can be supplied as:

  • file paths,
  • URLs (http or https),
  • strings,
  • native JavaScript objects.

Furthermore:

Output

Extracted JSON schemas are:

  • plain schemas, i.e. no $ref or allOf elements,
  • returned as native JavaScript objects,
  • compliant with JSON schema Draft 04.

Known limitations

  • currently schemas split over several files are not supported

Installation

yarn add openapi-json-schemextractor

Code example

const SchemExtractor = require("openapi-json-schemextractor")

(async function () {

  let schFromFile = await SchemExtractor.fromFile("path/to/openapi.yaml")
  let schFromUrl = await SchemExtractor.fromFile("http://example.com/openapi.yaml")
  let schFromString = await SchemExtractor.fromString("...")
  let schFromObject = await SchemExtractor.fromObject({/* ... */})

})()

CLI example

node node_modules/openapi-json-schemextractor/bin/run.js \
     https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml
# or
node node_modules/openapi-json-schemextractor/bin/run.js path/to/openapi.yaml
{

  Pet: {
    type: "object",
    required: [ "id", "name" ],
    properties: {
      id: { type: "integer", format: "int64" },
      name: { type: "string" },
      tag: { type: "string" }
    },
    $schema: "http://json-schema.org/draft-04/schema#"
  },

  Pets: {
    type: "array",
    items: {
      type: "object",
      required: [ "id", "name" ],
      properties: {
        id: { type: "integer", format: "int64" },
        name: { type: "string" },
        tag: { type: "string" }
      }
    },
    $schema: "http://json-schema.org/draft-04/schema#"
  },

  Error: {
    type: "object",
    required: [ "code", "message" ],
    properties: {
      code: { type: "integer", format: "int32" },
      message: { type: "string" }
    },
    $schema: "http://json-schema.org/draft-04/schema#"
  },

  // Schemas related to parameters are given unique identifiers.
  "/pets/{petId}_get_petId": {
     $schema: "http://json-schema.org/draft-04/schema#",
     type: "string"
  },
  "/pets_get_limit": {
     $schema: "http://json-schema.org/draft-04/schema#",
     format: "int32",
     type: "integer"
  }

}

Test

yarn test

# or (Linux/Mac)
docker run --rm -v $(pwd):/app -w /app node:10 yarn test
docker run --rm -v $(pwd):/app -w /app node:12 yarn test
docker run --rm -v $(pwd):/app -w /app node:14 yarn test

# or (Windows)
docker run --rm -v %cd%:/app -w /app node:10 yarn test
docker run --rm -v %cd%:/app -w /app node:12 yarn test
docker run --rm -v %cd%:/app -w /app node:14 yarn test

Check code style

yarn run style:check