UNPKG

typescript-swagger

Version:

Generate Swagger files from a decorator library like typescript-rest or a @decorators/express.

252 lines (197 loc) 6.86 kB
import {Property} from "../metadataGenerator"; export namespace Resolver { export type TypeStringLiteral = | 'string' | 'boolean' | 'double' | 'float' | 'file' | 'integer' | 'long' | 'enum' | 'array' | 'datetime' | 'date' | 'binary' | 'buffer' | 'byte' | 'void' | 'object' | 'any' | 'refEnum' | 'refObject' | 'refAlias' | 'nestedObjectLiteral' | 'union' | 'intersection'; export type RefTypeLiteral = 'refObject' | 'refEnum' | 'refAlias'; export type PrimitiveTypeLiteral = Exclude<TypeStringLiteral, RefTypeLiteral | 'enum' | 'array' | 'void' | 'nestedObjectLiteral' | 'union' | 'intersection'>; export type Type = | PrimitiveType | ObjectsNoPropsType | EnumType | ArrayType | FileType | DateTimeType | DateType | BinaryType | BufferType | ByteType | AnyType | RefEnumType | RefObjectType | RefAliasType | NestedObjectLiteralType | UnionType | IntersectionType; // ------------------------------------------- export interface BaseType { typeName: TypeStringLiteral; typeArgument?: BaseType; } // ------------------------------------------- // Primitive Type(s) // ------------------------------------------- export type PrimitiveType = StringType | BooleanType | DoubleType | FloatType | IntegerType | LongType | VoidType; export interface AnyType extends BaseType { typeName: 'any'; } export function isAnyType(param: BaseType) : param is AnyType { return param.typeName === 'any'; } export interface StringType extends BaseType { typeName: 'string'; } export interface BooleanType extends BaseType { typeName: 'boolean'; } export interface DoubleType extends BaseType { typeName: 'double'; } export interface FloatType extends BaseType { typeName: 'float'; } export interface IntegerType extends BaseType { typeName: 'integer'; } export interface LongType extends BaseType { typeName: 'long'; } export interface VoidType extends BaseType { typeName: 'void'; } export function isVoidType(param: BaseType) : param is VoidType { return typeof param === 'undefined' || param.typeName === 'void'; } // ------------------------------------------- // Simple Type(s) // ------------------------------------------- export interface DateType extends BaseType { typeName: 'date'; } export interface FileType extends BaseType { typeName: 'file'; } export interface DateTimeType extends BaseType { typeName: 'datetime'; } export interface BinaryType extends BaseType { typeName: 'binary'; } export interface BufferType extends BaseType { typeName: 'buffer'; } export interface ByteType extends BaseType { typeName: 'byte'; } export interface AnyType extends BaseType { typeName: 'any'; } export interface ObjectsNoPropsType extends BaseType { typeName: 'object'; } // ------------------------------------------- // Complex Type(s) // ------------------------------------------- export interface EnumType extends BaseType { members: Array<string | number | boolean | null>; typeName: 'enum'; } export function isEnumType(param: BaseType) : param is EnumType { return param.typeName === 'enum'; } // ------------------------------------------- export interface ArrayType extends BaseType { elementType: BaseType; typeName: 'array'; } export function isArrayType(param: BaseType) : param is ArrayType { return param.typeName === 'array'; } // ------------------------------------------- export interface NestedObjectLiteralType extends BaseType { typeName: 'nestedObjectLiteral'; properties: Array<Property>; additionalProperties?: Type; } export function isNestedObjectLiteralType(param: BaseType) : param is NestedObjectLiteralType { return param.typeName === 'nestedObjectLiteral'; } // ------------------------------------------- export interface IntersectionType extends BaseType { typeName: 'intersection'; members: Array<Type>; } export function isIntersectionType(param: BaseType) : param is IntersectionType { return param.typeName === 'intersection'; } // ------------------------------------------- export interface UnionType extends BaseType { typeName: 'union'; members: Array<Type>; } export function isUnionType(param: BaseType) : param is UnionType { return param.typeName === 'union'; } // ------------------------------------------- // Reference Type(s) // ------------------------------------------- export type ReferenceType = RefEnumType | RefObjectType | RefAliasType; export interface ReferenceTypeBase extends BaseType { description?: string; typeName: RefTypeLiteral; refName: string; example?: unknown; } export interface RefEnumType extends ReferenceTypeBase { typeName: 'refEnum'; members: Array<string | number>; memberNames?: Array<string>; } export function isRefEnumType(param: BaseType) : param is RefEnumType { return param.typeName === 'refEnum'; } export interface RefObjectType extends ReferenceTypeBase { typeName: 'refObject'; properties: Array<Property>; additionalProperties?: Type; } export function isRefObjectType(param: BaseType) : param is RefObjectType { return param.typeName === 'refObject'; } export interface RefAliasType extends Omit<Property, 'name' | 'required'>, ReferenceTypeBase { typeName: 'refAlias'; } export function isRefAliasType(param: BaseType) : param is RefAliasType { return param.typeName === 'refAlias'; } export function isReferenceType(param: BaseType) : param is ReferenceType { return param.typeName === 'refEnum' || param.typeName === 'refAlias' || param.typeName === 'refObject'; } } export type PickUtilityType = 'Pick'; export type OmitUtilityType = 'Omit'; export type RequiredUtilityType = 'Required'; export type PartialUtilityType = 'Partial'; export type ReadonlyUtilityType = 'Readonly'; export type UtilityType = PickUtilityType | OmitUtilityType | PartialUtilityType | RequiredUtilityType | ReadonlyUtilityType;