Files
openapi-types/README.md
2025-10-01 19:33:18 +00:00

12 KiB

OpenAPI Types

Comprehensive TypeScript definitions for all OpenAPI specification versions with detailed JSDoc documentation and version-specific implementations.

Installation

npm install oas-types
# or
yarn add oas-types
# or
bun add oas-types

Architecture

This library provides comprehensive TypeScript type definitions for all OpenAPI specification versions with:

  • Version-specific implementations - Each OpenAPI version has its own dedicated folder with complete type definitions
  • Modular organization - Types are organized by OpenAPI object (e.g., info.ts, paths.ts, schema.ts)
  • Comprehensive JSDoc - Every type includes detailed documentation with links to official specifications
  • Type safety - Strict typing that follows OpenAPI specifications exactly
  • Discriminated unions - Advanced TypeScript patterns for schema definitions

Build Process

This package includes a comprehensive build system that generates JSON schemas from the TypeScript definitions:

Quick Start

# Generate all schemas
bun run build

# Clean and rebuild
bun run schemas:clean && bun run build

Generated Schemas

The build process creates JSON schemas for:

  • Main specifications - Complete OpenAPI document validation
  • Component schemas - Individual component validation
  • TypeScript exports - Easy importing and type safety

Usage

// Import schemas for a specific version
import { schemas } from "oas-types/schemas/3.0";

// Import all schemas
import { allSchemas } from "oas-types/schemas";

// Use with JSON Schema validators
import Ajv from "ajv";
const ajv = new Ajv();
const validator = ajv.compile(schemas.specification);

Usage

Import Version-Specific Types

// OpenAPI 3.2.0 (latest)
import { Specification, Info, Paths, Schema, Components } from "oas-types/3.2";

// OpenAPI 3.1.x
import { Specification, Info, Paths, Schema, Components } from "oas-types/3.1";

// OpenAPI 3.0.x
import { Specification, Info, Paths, Schema, Components } from "oas-types/3.0";

// Swagger 2.0
import { Swagger, Info, Paths, Schema, Definitions } from "oas-types/2.0";

Import Specific OpenAPI Objects

// Import specific objects from any version
import { Info, Contact, License } from "oas-types/3.1/info";
import { Paths, Operation, Parameter } from "oas-types/3.1/paths";
import { Schema, StringSchema, ObjectSchema } from "oas-types/3.1/schema";
import { SecurityScheme, OAuthFlows } from "oas-types/3.1/security";

Import Schema Data Types

// Import specific schema types for any version
import {
  StringSchema,
  NumberSchema,
  IntegerSchema,
  BooleanSchema,
  ArraySchema,
  ObjectSchema,
  CompositionSchema,
  ReferenceSchema,
} from "oas-types/3.1/data-types";

Project Structure

openapi-types/
├── 2.0/                         # Swagger 2.0 types
│   ├── data-types/              # Schema data types
│   ├── info.ts                  # Info Object
│   ├── paths.ts                 # Paths and Operations
│   ├── schema.ts                # Schema definitions
│   ├── security.ts              # Security schemes
│   ├── spec.ts                  # Main Swagger object
│   └── index.ts                 # Version exports
│
├── 3.0/                         # OpenAPI 3.0.x types
│   ├── data-types/              # Schema data types
│   ├── info.ts                  # Info Object
│   ├── paths.ts                 # Paths and Operations
│   ├── schema.ts                # Schema definitions
│   ├── security.ts              # Security schemes
│   ├── spec.ts                  # Main OpenAPI object
│   ├── components.ts            # Components object
│   ├── servers.ts               # Server objects
│   └── index.ts                 # Version exports
│
├── 3.1/                         # OpenAPI 3.1.x types
│   ├── data-types/              # Individual schema types
│   ├── info.ts                  # Info Object
│   ├── paths.ts                 # Paths and Operations
│   ├── schema.ts                # Main Schema union type
│   ├── security.ts              # Security schemes
│   ├── spec.ts                  # Main OpenAPI object
│   ├── components.ts            # Components object
│   ├── servers.ts               # Server objects
│   ├── webhooks.ts              # Webhook definitions
│   └── index.ts                 # Version exports
│
├── 3.2/                         # OpenAPI 3.2.0 types
│   ├── data-types/              # Schema data types
│   ├── info.ts                  # Info Object
│   ├── paths.ts                 # Paths and Operations
│   ├── schema.ts                # Schema definitions
│   ├── security.ts              # Security schemes
│   ├── spec.ts                  # Main OpenAPI object
│   ├── components.ts            # Components object
│   ├── servers.ts               # Server objects
│   ├── webhooks.ts              # Webhook definitions
│   ├── oauth.ts                 # OAuth flow definitions
│   └── index.ts                 # Version exports
│
├── schemas/                     # Generated JSON schemas
│   ├── 2.0/                     # Swagger 2.0 schemas
│   ├── 3.0/                     # OpenAPI 3.0 schemas
│   ├── 3.1/                     # OpenAPI 3.1 schemas
│   └── 3.2/                     # OpenAPI 3.2 schemas
│
├── License.ts                   # SPDX license definitions
├── SPDXLicenseList.ts           # Complete SPDX license list
└── index.ts                     # Main entry point

Philosophy

Version-Specific Implementations

Each OpenAPI version has its own complete implementation that accurately reflects the specification for that version. This ensures:

  • Type accuracy - Types match the exact specification requirements
  • Version compatibility - No confusion between different OpenAPI versions
  • Future-proofing - Easy to add new versions without breaking existing ones

Modular Organization

Types are organized by OpenAPI object type, making it easy to:

  • Import only what you need
  • Understand the structure of OpenAPI specifications
  • Maintain and update specific object types

Comprehensive Documentation

Every type includes:

  • JSDoc comments with detailed descriptions
  • Links to official specifications for each OpenAPI version
  • Usage examples showing practical implementations
  • Property documentation with example values and constraints

Supported Versions

  • Swagger 2.0 (OpenAPI Specification v2.0) - Complete implementation
  • OpenAPI 3.0.x - Complete implementation with all 3.0.x variants
  • OpenAPI 3.1.x - Complete implementation with JSON Schema 2020-12 alignment
  • OpenAPI 3.2.0 - Complete implementation

Examples

Basic OpenAPI 3.1.x Usage

import { Specification, Info, Paths, Schema } from "oas-types/3.1";

const openApiSpec: Specification = {
  openapi: "3.1.0",
  info: {
    title: "My API",
    version: "1.0.0",
    description: "A sample API",
    contact: {
      name: "API Support",
      email: "support@example.com",
    },
    license: {
      name: "MIT",
      identifier: "MIT",
    },
  } as Info,
  paths: {
    "/users": {
      get: {
        summary: "List users",
        responses: {
          "200": {
            description: "A list of users",
            content: {
              "application/json": {
                schema: {
                  type: "array",
                  items: { $ref: "#/components/schemas/User" },
                },
              },
            },
          },
        },
      },
    },
  } as Paths,
};

Schema Definitions (OpenAPI 3.1.x)

import { StringSchema, ObjectSchema, ArraySchema, Schema } from "oas-types/3.1";

// String schema with validation
const nameSchema: StringSchema = {
  type: "string",
  minLength: 1,
  maxLength: 100,
  pattern: "^[a-zA-Z\\s]+$",
  description: "User's full name",
};

// Object schema with properties
const userSchema: ObjectSchema = {
  type: "object",
  properties: {
    id: { type: "integer" },
    name: nameSchema,
    email: {
      type: "string",
      format: "email",
    },
  },
  required: ["id", "name", "email"],
  description: "User object",
};

// Array schema
const usersSchema: ArraySchema = {
  type: "array",
  items: userSchema,
  minItems: 1,
  description: "Array of users",
};

Swagger 2.0 Usage

import { Swagger, Info, Paths } from "oas-types/2.0";

const swaggerSpec: Swagger = {
  swagger: "2.0",
  info: {
    title: "My API",
    version: "1.0.0",
    description: "A sample API",
  } as Info,
  paths: {
    "/users": {
      get: {
        summary: "List users",
        responses: {
          "200": {
            description: "A list of users",
            schema: {
              type: "array",
              items: { $ref: "#/definitions/User" },
            },
          },
        },
      },
    },
  } as Paths,
  definitions: {
    User: {
      type: "object",
      properties: {
        id: { type: "integer" },
        name: { type: "string" },
      },
      required: ["id", "name"],
    },
  },
};

Security Schemes

import { SecurityScheme, OAuthFlows } from "oas-types/3.1/security";

const apiKeyAuth: SecurityScheme = {
  type: "apiKey",
  in: "header",
  name: "X-API-Key",
  description: "API key authentication",
};

const oauth2Auth: SecurityScheme = {
  type: "oauth2",
  flows: {
    authorizationCode: {
      authorizationUrl: "https://example.com/oauth/authorize",
      tokenUrl: "https://example.com/oauth/token",
      scopes: {
        "read:users": "Read user information",
        "write:users": "Modify user information",
      },
    },
  } as OAuthFlows,
};

Type Safety Features

  • Strict typing - All types follow OpenAPI specifications exactly
  • Version awareness - Type-safe version-specific features
  • Discriminated unions - Advanced schema type discrimination
  • Comprehensive validation - Property constraints and validation rules
  • JSDoc documentation - Complete documentation with spec links

Documentation

Each type includes comprehensive JSDoc documentation with:

  • Official specification links for each OpenAPI version
  • Usage examples with practical implementations
  • Property documentation with example values and constraints
  • Version compatibility notes where applicable
  • Mutual exclusion rules for conflicting properties

Key Features

OpenAPI 3.2.0 Specific Features

  • Latest OpenAPI specification - Full support for OpenAPI 3.2.0 features
  • Enhanced OAuth flows - Support for all OAuth 2.0 flow types
  • Advanced webhook support - Comprehensive webhook definitions

OpenAPI 3.1.x Specific Features

  • JSON Schema 2020-12 alignment - Full support for latest JSON Schema features
  • Discriminated schema unions - Type-safe schema type discrimination
  • Composition schemas - Support for allOf, anyOf, oneOf, not, if/then/else
  • Enhanced validation - Support for const, examples, and advanced validation keywords

OpenAPI 3.0.x Features

  • Nullable schemas - Support for nullable property
  • Discriminator objects - Support for schema discrimination
  • Callback objects - Support for webhook definitions

Swagger 2.0 Features

  • Definitions object - Support for schema definitions
  • Security definitions - Support for security schemes
  • Response definitions - Support for reusable response definitions

Contributing

Contributions are welcome! Please ensure that:

  • All types follow the OpenAPI specification exactly
  • JSDoc documentation is complete and accurate
  • Version compatibility is maintained
  • Tests are added for new features

License

MIT License - see LICENSE file for details.