welovecoding / swaxios

A Swagger API client generator based on axios and written in TypeScript. 🌊
https://www.npmjs.com/package/swaxios
17 stars 0 forks source link

Support for "x-enumNames" in enum definitions #111

Open bennycode opened 5 years ago

bennycode commented 5 years ago

I found this StackOverflow question which wants to create an interface for Color based on the following JSON input:

{
  // ...
  "definitions": {
    "Color": {
      "description": "",
      "enum": [
        0,
        1,
        2
      ],
      "type": "integer",
      "x-enumNames": [
        "RED",
        "GREEN",
        "BLUE"
      ]
    }
  }
}

The expected result is:

export enum Color {
    RED = 0,
    GREEN = 1,
    BLUE = 2,
}

But swaxios 0.1.2 generates:

/* tslint:disable */

/**
 * This file was automatically generated by "Swaxios".
 * It should not be modified by hand.
 */

export type Color = number;

Complete input file:

{
  "consumes": [
    "application/json"
  ],
  "definitions": {
    "Bar": {
      "additionalProperties": false,
      "properties": {
        "A": {
          "type": "string"
        },
        "B": {
          "format": "int32",
          "type": "integer"
        },
        "Baz": {
          "$ref": "#/definitions/Baz"
        },
        "C": {
          "format": "date-time",
          "type": "string"
        }
      },
      "required": [
        "B",
        "C"
      ],
      "type": "object"
    },
    "Baz": {
      "additionalProperties": false,
      "properties": {
        "Color": {
          "$ref": "#/definitions/Color"
        },
        "D": {
          "format": "decimal",
          "type": "number"
        }
      },
      "required": [
        "D",
        "Color"
      ],
      "type": "object"
    },
    "Color": {
      "description": "",
      "enum": [
        0,
        1,
        2
      ],
      "type": "integer",
      "x-enumNames": [
        "RED",
        "GREEN",
        "BLUE"
      ]
    }
  },
  "info": {
    "title": "",
    "version": ""
  },
  "parameters": {},
  "paths": {
    "/api/Foo/GetBar": {
      "get": {
        "operationId": "Foo_GetBar",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "id",
            "required": true,
            "type": "integer",
            "x-nullable": false
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/Bar"
            },
            "x-nullable": true
          }
        },
        "tags": [
          "Foo"
        ]
      }
    },
    "/api/Foo/GetBarDescriptions": {
      "get": {
        "operationId": "Foo_GetBarDescriptions",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "x-nullable": true
          }
        },
        "tags": [
          "Foo"
        ]
      }
    },
    "/api/Foo/SetBar": {
      "post": {
        "operationId": "Foo_SetBar",
        "parameters": [
          {
            "in": "body",
            "name": "value",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Bar"
            },
            "x-nullable": true
          }
        ],
        "responses": {
          "204": {
            "description": ""
          }
        },
        "tags": [
          "Foo"
        ]
      }
    }
  },
  "produces": [
    "application/json"
  ],
  "responses": {},
  "schemes": [],
  "securityDefinitions": {},
  "swagger": "2.0",
  "x-generator": "NSwag v11.14.0.0 (NJsonSchema v9.10.24.0 (Newtonsoft.Json v9.0.0.0))"
}

The x-enumNames property is a custom property (indicated by the leading x-) but it seems to be very popular because it has been asked for in many other projects before:

Doc on enum flag:

nknapp commented 4 years ago

I am sorry. I don't have time at the moment to care for this project too much. If you want to open PR for this issue, please had over to the bootprint-monorepo repository. It contains the latest versions of all bootprint projects.

nknapp commented 4 years ago

The issue in bootprint-openapi describes the location where to fix it.