Launch Week Day 1: Socket for Jira Is Now Available.Learn More
Socket
Book a DemoSign in
Socket

genum-openapi

Package Overview
Dependencies
Maintainers
0
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

genum-openapi

Generate Typescript enums from openapi

latest
Source
npmnpm
Version
0.8.0-alpha.2
Version published
Weekly downloads
95
-12.04%
Maintainers
0
Weekly downloads
 
Created
Source

gEnum OpenAPI

ci npm npm

Tech used

About

genum-openapi is a simple Node.js CLI tool for creating TypeScript enums from OpenAPI document. This package is inspired by another tool named openapi-typescript. Toghether with mentioned package, developers should be able to generate TypeScript interfaces (using openapi-typescript) and enums (using genum-openapi) within their projects with the same YAML file as an input.

Features

  • Supports OpenAPI 3.x
  • Generate TypeScript enums
  • Load schemas from local YAML or JSON file
  • Native Node.js code used to write this tool

Usage

Generate local file with Typescript enums by running npx genum-openapi:

npx genum-openapi ./path/to/the/schema.yaml -o ./path/to/generated/enums.ts

:warning: Make sure that all your schemas are validated before using them with this tool.

Then you can import the enums from the generated file:

import { StatusEnum } from "./path/to/generated/enums";

export const App = () => {
  if (status === StatusEnum.SUCCESS) {
    console.log("Enum successfully generated and used");
  } else {
    console.log("Enum failed to generate");
  }
};

:gear: Options

Following flags are available for the CLI tool.

OptionAliasDefaultDescription
--help-hDisplay help for the command
--version-vOutput the current version
--output-o(stdout)Path of the output file
--exclude-eNames of enums from the OpenAPI document to exclude
--prefix-pAdd a prefix to the beginning of the enum name
--suffix-sEnumAdd a suffix to the end of the enum name if it does not already exist
--prenum_Add a specified prefix before the enum exported name that starts with a number (underscore by default if not provided)
--normalize-nfalseNormalize exported enum names and keys that are not valid (replace . with __ and - or / with _)
--normalize-keysfalseNormalize only enum keys that are not valid
--normalize-namesfalseNormalize only exported enum names that are not valid
--uppercase-ufalseConvert exported enum names and keys to uppercase (commonly used with the --normalize option)
--uppercase-keysfalseConvert only enum keys to uppercase
--uppercase-namesfalseConvert only exported enum names to uppercase
--custom-replacersCustom replacers applied during the normalization process, in JSON format, e.g., '[{"regExp":"[-/]","replaceWith":"_"}]'

:book: Examples

Let's say that our OpenAPI document looks like this:

openapi: 3.0.3
info:
  title: Example OpenApi description
  version: 0.0.0
components:
  schemas:
    Status:
      enum:
        - ACTIVE
        - INACTIVE
      type: string
    ColorsEnum:
      enum:
        - GREEN
        - RED
      type: string
    InvalidCase:
      enum:
        - SOME/WEIRD-Strings
        - another.weird.string
        - just(another)weird string
      type: string
    StartWithNumber:
      enum:
        - 250x330
        - 70x40
        - OTHER
      type: string
    WithCurlyBrackets:
      enum:
        - "{INSIDE_CURLY_BRACKETS}"
  • By providing [--exclude Status InvalidCase StartWithNumber WithCurlyBrackets] option, generated file should contain only ColorsEnum:
export enum ColorsEnum {
  GREEN = "GREEN",
  RED = "RED",
}
  • [--prefix I] option should add provided string at the beggining of the enums names:
export enum IStatus {
  [...]
}

export enum IColorsEnum {
  [...]
}

export enum IInvalidCase {
  [...]
}

export enum IStartWithNumber {
  [...]
}

export enum IWithCurlyBrackets {
  [...]
}
  • [--suffix] option should add provided string at the end of the enums names (when not provided Enum is used by default):
export enum StatusEnum {
  [...]
}

export enum ColorsEnum {
  [...]
}

export enum InvalidCaseEnum {
  [...]
}

export enum StartWithNumberEnum {
  [...]
}

export enum WithCurlyBracketsEnum {
  [...]
}
  • With [--normalize] and [--uppercase] options, generated file should contain parsed values of enum keys:
[...]
export enum INVALIDCASE {
  SOME_WEIRD_STRINGS = "SOME/WEIRD-Strings",
  ANOTHER__WEIRD__STRING = "another.weird.string"
  JUST_ANOTHER_WEIRD_STRING = "just(another)weird string"
}
[...]
  • With [--prenum $] option, keys of enums should be prefixed with a $ sign (by default enum keys that starts with a number are prefixed with an underscore):
[...]
export enum StartWithNumber {
  $250x330 = "250x330",
  $70x40 = "70x40",
  OTHER = "OTHER"
}
[...]
  • You can pass custom replacers to the cli with [--custom-replacers '[{ "regExp":"[{}]", "replaceWith": "empty" }]'] to replace any strings as you like. Keep in mind that in the provided example we want to replace {} with "", but due to JSON.parse used as the parsing method, we cannot simply pass "" as a replaceWith property, instead we pass "empty" to handle replacing {} with "".
[...]
export enum WithCurlyBrackets {
  INSIDE_CURLY_BRACKETS = "{INSIDE_CURLY_BRACKETS}"
}
[...]

:mega: Goals

  • Fetching schema from remote resource (with Auth header if needed)
  • Parsing multiple schemas at once (with globbing)

:couple_with_heart: Contributing

PRs are welcome!

Keywords

cli

FAQs

Package last updated on 05 Jul 2024

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