New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@salus-js/openapi

Package Overview
Dependencies
Maintainers
3
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@salus-js/openapi

A library for converting Salus codecs and HTTP operations into OpenAPI specifications.

latest
Source
npmnpm
Version
0.16.0
Version published
Maintainers
3
Created
Source

Intro

A library for converting Salus codecs and HTTP operations into OpenAPI specifications.

Usage

The @salus-js/openapi package is intended to be used alongside @salus-js/codec and @salus-js/http to turn your codecs and operations into an OpenAPI schema. Let's take a look at a simple example:

import { t } from '@salus-js/codec'
import { http } from '@salus-js/http'
import { toOpenApi } from '@salus-js/openapi'

const getUser = http.get('/v1/users/:id', {
  summary: 'Retrieve a user',
  description: 'Fetches the user associated with the given ID',
  params: t.object({
    id: t.string.document({
      description: 'Unique ID for the user to retrieve'
    })
  }),
  response: t.object({
    id: t.string.document({
      description: 'Unique ID for the user'
    }),
    name: t.string.document({
      description: 'Name for the user'
    })
  })
})

toOpenApi({
  info: {
    version: '1.0.0',
    title: 'Salus API'
  },
  operations: [
    getUser
  ]
})

The operations above will yield the following OpenAPI 3.0 schema:

openapi: 3.0.0
info:
  version: '1.0.0'
  title: Salus API
servers: []
security: []
tags: []
paths:
  "/v1/users/{id}":
    get:
      description: Fetches the user associated with the given ID
      parameters:
      - in: path
        style: simple
        explode: true
        name: id
        schema:
          type: string
          description: Unique ID for the user to retrieve
        required: true
        description: Unique ID for the user to retrieve
      responses:
        default:
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Unique ID for the user
                  name:
                    type: string
                    description: Name for the user
                required:
                - id
                - name

Custom Codecs

The Salus OpenAPI module includes out-of-the-box support for all built-in codecs. If you create a custom codec, however, you'll also have to define a converter that is able to map between your custom codecs and their OpenAPI equivalent. The Salus OpenAPI builder accepts a list of schema converters that will be executed in order.

Let's look at a sample converter that always returns a string schema.

import { SchemaConverter, SchemaVisitor, SchemaObject } from '@salus-js/openapi'

class MyCustomConverter implements SchemaConverter {

  public convert(codec: Codec<any, any>, visitor: SchemaVisitor, next: () => SchemaObject): SchemaObject {
    return {
      type: 'string'
    }
  }

}

You can use your custom converter when mapping to OpenAPI:

import { toOpenApi, SchemaConverters } from '@salus-js/openapi'

toOpenApi({
  converters: SchemaConverters.create()
    .append(new MyCustomConverter())
})

If you'd like to completely replace the Salus built-in converters, pass false to SchemaConverters.create(). This will create a new instance of SchemaConverters without including the built-ins.

FAQs

Package last updated on 14 Nov 2022

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