UNPKG

@v19i/openapi-enum-arrays

Version:

A @hey-api/openapi-ts plugin that generates typed enum arrays with intelligent conflict resolution

88 lines (66 loc) 2.8 kB
# @v19i/openapi-enum-arrays A @hey-api/openapi-ts plugin that generates typed enum arrays with intelligent conflict resolution. ## Features - 🎯 **Zero numbered fallbacks** - No more `accountType2Values`, `accountType3Values` - 🧠 **Intelligent merging** - Automatically merges duplicate enum arrays - 🔄 **Context-aware naming** - Generates meaningful names like `queryTypes`, `requestTypes` - 📦 **Universal compatibility** - Works with any OpenAPI specification - 🚀 **Significant reduction** - Up to 78% reduction in generated code ## Installation ```bash npm install @v19i/openapi-enum-arrays ``` ## Usage Add the plugin to your `openapi-ts.config.js`: ```javascript import { defineConfig } from '@hey-api/openapi-ts' import { enumArraysPlugin } from '@v19i/openapi-enum-arrays' export default defineConfig({ client: '@hey-api/client-axios', input: 'path/to/openapi.json', output: 'src/client', plugins: [ enumArraysPlugin({ arrayPrefix: '', // Optional prefix for generated arrays }), ], }) ``` ## Generated Output ### Before ```typescript // Multiple duplicate enums with numbered fallbacks export const getUsersResponseTypes = ['json', 'xml', 'csv'] as const export const postUsersDataBodyTypes = ['json', 'xml', 'csv'] as const export const putUsersDataBodyTypes = ['json', 'xml', 'csv'] as const export const userStatus2Values = ['active', 'inactive', 'pending'] as const export const userStatus3Values = ['active', 'inactive', 'pending'] as const export const userStatus4Values = ['active', 'inactive', 'pending'] as const // ... 50+ more arrays ``` ### After ```typescript // Clean, merged enums with contextual naming export const responseTypes = ['json', 'xml', 'csv'] as const export const userStatuses = ['active', 'inactive', 'pending'] as const export const queryFormats = ['compact', 'detailed', 'summary'] as const export const requestMethods = ['GET', 'POST', 'PUT', 'DELETE'] as const // ... only 12 arrays total ``` ## Configuration ```typescript interface PluginOptions { arrayPrefix?: string // Prefix for generated array names (default: '') } ``` ## How It Works 1. **Name Conflict Resolution**: Handles enums with same names but different values using OpenAPI path context 2. **Value-Based Merging**: Merges enums with identical values to eliminate redundancy 3. **Context-Aware Naming**: Extracts meaningful context from OpenAPI paths (`query`, `request`, `response`) 4. **Intelligent Fallbacks**: Uses full path names when context extraction fails ## Examples See the `examples/` directory for working implementations with different OpenAPI specifications. ## Contributing Contributions welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository. ## License MIT © v19i