Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@scalar/openapi-types

scalar1.1mMIT0.2.1TypeScript support: included

Modern OpenAPI types

openapi, scalar, swagger, typescript

readme

Scalar OpenAPI Types

CI Contributors GitHub License Discord

Modern OpenAPI parser written in TypeScript, with support for Swagger 2.0, OpenAPI 3.0 and OpenAPI 3.1

Installation

npm add @scalar/openapi-types

Usage

import type { OpenAPI } from '@scalar/openapi-types'

const file: OpenAPI.Document = {
  openapi: '3.1.0',
  info: {
    title: 'Hello World',
    version: '1.0.0',
  },
  paths: {},
}

Zod Schemas

Experimental: This package exposes OpenAPI-compliant Zod schemas for all OpenAPI object types. You can use them to parse user input safely with Zod.

import { OpenApiObjectSchema } from '@scalar/openapi-types/schemas/3.1/unprocessed'

OpenApiObjectSchema.parse({
  // This will be omitted:
  invalidAttribute: 123,
  // Those will pass:
  openapi: '3.1.1',
  info: {
    title: 'Example API',
    version: '1.0'
  },
  paths: {
    '/example': {
      get: {
        description: 'My example operation',
      }
    }
  },
})

What’s “unprocessed”? It’s for the content of a “raw” OpenAPI document, that might still contain $refs (references).

We also provide Zod schemas for processed OpenAPI documents, where the $refs are resolved already:

// Impport the Zod Schema without the $ref property:
import { OpenApiObjectSchema } from '@scalar/openapi-types/schemas/3.1/processed'

OpenApiObjectSchema.parse({
  // …
})

Extend the Zod schemas

While you can absolutely use the Zod schemas directly, you can also extend and compose them.

Here is a basic example to add an extension on the top level:

import { OpenApiObjectSchema } from '@scalar/openapi-types/schemas/3.1/unprocessed'
import { XScalarIconSchema } from '@scalar/openapi-types/schemas/extensions'

const MyCustomSchema = OpenApiObjectSchema
  // Add the `x-scalar-icon` OpenAPI extension
  .merge(
    XScalarIconSchema
  )
  // Add a custom property
  .extend({
    'x-customProperty': z.boolean().optional(),
  })

This will get a little bit more complex when you want to add a property to something that’s deeply nested:

import { OpenApiObjectSchema } from '@scalar/openapi-types/schemas/3.1/unprocessed'
import { XScalarIconSchema } from '@scalar/openapi-types/schemas/extensions'

const MyCustomSchema = OpenApiObjectSchema
  .extend({
    // Overwrite the Schema
    'info': InfoObjectSchema.extend({
      // Add a custom property
      'x-customProperty': z.boolean().optional(),
    }),
  })

Community

We are API nerds. You too? Let’s chat on Discord: https://discord.gg/scalar

License

The source code in this repository is licensed under MIT.

changelog

@scalar/openapi-types

0.2.1

Patch Changes

  • fa8ed84: feat: custom OpenAPI extension to add SDK setup instructions

0.2.0

Minor Changes

  • e62e677: feat: OpenAPI-compliant Zod Schemas

Patch Changes

  • 82f16a5: feat: add more Zod schemas for OpenAPI extensions

0.1.9

Patch Changes

  • c10bbf5: chore: code style

0.1.8

Patch Changes

  • e350f23: chore: code style

0.1.7

Patch Changes

  • f9bf5f1: feat(api-reference): implement rendering of patternProperties

0.1.6

Patch Changes

  • 13333e6: feat: add http methods

0.1.5

Patch Changes

  • a607115: feat: add openapi 3.0.4 and openapi 3.1.1

0.1.4

Patch Changes

  • 2b540b9: Include 3.0.3 in allowed OpenApiV3 versions

0.1.3

Patch Changes

  • 8759e7f: chore: use build tooling scripts

0.1.2

Patch Changes

  • e911047: Add default exports

0.1.1

Patch Changes

  • dc9aff2: feat: expose HeadersObject

0.1.0

Minor Changes

  • b4f9f97: feat: new @scalar/openapi-types package

0.0.1

Patch Changes

  • a8db3b0: feat(openapi-types): add openapi-types package with temporary old parser types