Giter VIP home page Giter VIP logo

Comments (3)

rottmann avatar rottmann commented on September 20, 2024 7

Same with Union and Literal.

from elysia-swagger.

Nmans01 avatar Nmans01 commented on September 20, 2024 5

+1, I've just noticed the same.
image

from elysia-swagger.

nxht avatar nxht commented on September 20, 2024

As it seems Typebox won't implement OpenAPI compatible schema, I think it'd be good to have custom Typebox schema for enum in elysia, or elysia-swagger.

For example, here's the way I'm currently handling enums.

import type { StringOptions, TSchema } from '@sinclair/typebox';
import { Kind, TypeGuard, TypeRegistry } from '@sinclair/typebox';

export type StringEnumOption = StringOptions;

export type TStringEnum = TSchema &
  StringOptions & {
    [Kind]: 'StringEnum';
    static: string;
    type: 'string';
    enum: string[];
  };

export const tStringEnum = (
  enumStrings: string[],
  options: StringEnumOption = {},
): TStringEnum => {
  const { ...stringOptions } = options;

  return {
    ...stringOptions,
    enum: enumStrings,
    [Kind]: 'StringEnum',
    type: 'string',
    error: `Invalid enum value. Expected: ['${enumStrings.join("','")}']`,
  } as TStringEnum;
};

TypeRegistry.Set<TStringEnum>('StringEnum', (schema, value) => {
  if (typeof value !== 'string') return false;

  if (schema.enum.includes(value)) {
    return true;
  }
  return false;
});

Usage example

const YN = tStringEnum(['Y', 'N'], { maxLength: 1 })

And the result schema

{
  "YN": {
    "maxLength": 1,
    "enum": [
      "Y",
      "N"
    ],
    "type": "string"
  }
}

from elysia-swagger.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.