UNPKG

mfdoc

Version:

Auto generate JS SDK and HTTP API documentation

178 lines (177 loc) 12.5 kB
import { AnyFn, AnyObject, IsBoolean, IsStringEnum, IsUnion, Not, OmitFrom } from 'softkave-js-utils'; import { Readable } from 'stream'; import { IsNever, OptionalKeysOf, ValueOf } from 'type-fest'; import { HttpEndpointResponseHeaders_ContentType_ContentLength } from './headers.js'; import { BaseEndpointResult } from './types.js'; export declare const kMfdocFieldTypes: { readonly Base: "FieldBase"; readonly String: "FieldString"; readonly ObjectField: "FieldObjectField"; readonly Number: "FieldNumber"; readonly Boolean: "FieldBoolean"; readonly Null: "FieldNull"; readonly Undefined: "FieldUndefined"; readonly Date: "FieldDate"; readonly Array: "FieldArray"; readonly Object: "FieldObject"; readonly OrCombination: "FieldOrCombination"; readonly Binary: "FieldBinary"; readonly SdkParamsBody: "SdkParamsBody"; readonly HttpEndpointMultipartFormdata: "HttpEndpointMultipartFormdata"; readonly HttpEndpointDefinition: "HttpEndpointDefinition"; }; export type MfdocFieldType = ValueOf<typeof kMfdocFieldTypes>; export interface MfdocFieldIdPrimitive { __id: string; } export interface MfdocFieldBaseTypePrimitive extends MfdocFieldIdPrimitive { description?: string; } export interface MfdocFieldStringTypePrimitive extends MfdocFieldIdPrimitive { example?: string; valid?: string[]; min?: number; max?: number; enumName?: string; description?: string; } export interface MfdocFieldNumberTypePrimitive extends MfdocFieldIdPrimitive { example?: number; integer?: boolean; min?: number; max?: number; description?: string; } export interface MfdocFieldBooleanTypePrimitive extends MfdocFieldIdPrimitive { example?: boolean; description?: string; } export interface MfdocFieldNullTypePrimitive extends MfdocFieldIdPrimitive { description?: string; } export interface MfdocFieldUndefinedTypePrimitive extends MfdocFieldIdPrimitive { description?: string; } export interface MfdocFieldDateTypePrimitive extends MfdocFieldIdPrimitive { example?: string; description?: string; } export interface MfdocFieldArrayTypePrimitive<T> extends MfdocFieldIdPrimitive { type?: ConvertToMfdocType<T>; min?: number; max?: number; description?: string; } export interface MfdocFieldObjectFieldTypePrimitive<T, TRequired extends boolean = any> extends MfdocFieldIdPrimitive { required: TRequired; data: ConvertToMfdocType<T>; description?: string; } export type ConvertToMfdocType<T = any, TAllowOrCombination extends boolean = true> = IsNever<IsUnion<Exclude<T, undefined>> & TAllowOrCombination & Not<IsStringEnum<Exclude<T, undefined>>> & Not<IsBoolean<Exclude<T, undefined>>>> extends false ? MfdocFieldOrCombinationTypePrimitive<Array<ConvertToMfdocType<T, false>>> : T extends string ? MfdocFieldStringTypePrimitive : T extends number ? MfdocFieldNumberTypePrimitive : T extends boolean ? MfdocFieldBooleanTypePrimitive : T extends Array<infer InferedType> ? MfdocFieldArrayTypePrimitive<InferedType> : T extends Buffer ? MfdocFieldBinaryTypePrimitive : T extends Readable ? MfdocFieldBinaryTypePrimitive : T extends null ? MfdocFieldNullTypePrimitive : T extends Date ? MfdocFieldStringTypePrimitive : T extends AnyObject ? MfdocFieldObjectTypePrimitive<Exclude<T, undefined>> : MfdocFieldBaseTypePrimitive; export type MfdocFieldObjectFieldsMap<T extends object> = Required<{ [K in keyof T]: K extends OptionalKeysOf<T> ? MfdocFieldObjectFieldTypePrimitive<Exclude<T[K], undefined>, false> : MfdocFieldObjectFieldTypePrimitive<Exclude<T[K], undefined>, true>; }>; export interface MfdocFieldObjectTypePrimitive<T extends object> extends MfdocFieldIdPrimitive { name: string; fields?: MfdocFieldObjectFieldsMap<T>; description?: string; } export interface MfdocFieldOrCombinationTypePrimitive<T extends MfdocFieldBaseTypePrimitive[] = MfdocFieldBaseTypePrimitive[]> extends MfdocFieldIdPrimitive { types: T; description?: string; } export interface MfdocFieldBinaryTypePrimitive extends MfdocFieldIdPrimitive { min?: number; max?: number; description?: string; } export type MfdocMappingFn<TSdkParams, TRequestHeaders, TPathParameters, TQuery, TRequestBody> = AnyFn<[ keyof TSdkParams ], ['header', keyof TRequestHeaders] | ['path', keyof TPathParameters] | ['query', keyof TQuery] | ['body', keyof TRequestBody] | undefined>; export type MfdocSdkParamsToRequestArtifactsMapping<TSdkParams, TRequestHeaders, TPathParameters, TQuery, TRequestBody> = AnyFn<[ keyof TSdkParams ], Array<['header', keyof TRequestHeaders] | ['path', keyof TPathParameters] | ['query', keyof TQuery] | ['body', keyof TRequestBody]>>; export interface MfdocSdkParamsBodyTypePrimitive<T extends object = any, TRequestHeaders extends object = any, TPathParameters extends object = any, TQuery extends object = any, TRequestBody extends object = any> extends MfdocFieldIdPrimitive { def?: MfdocFieldObjectTypePrimitive<T>; mappings: MfdocMappingFn<T, TRequestHeaders, TPathParameters, TQuery, TRequestBody>; serializeAs?: 'json' | 'formdata'; } export interface MfdocHttpEndpointMultipartFormdataTypePrimitive<T extends object = any> extends MfdocFieldIdPrimitive { items?: MfdocFieldObjectTypePrimitive<T>; description?: string; } export interface MfdocHttpEndpointDefinitionTypePrimitive<TRequestHeaders extends AnyObject = AnyObject, TPathParameters extends AnyObject = AnyObject, TQuery extends AnyObject = AnyObject, TRequestBody extends AnyObject = AnyObject, TResponseHeaders extends AnyObject = AnyObject, TResponseBody extends AnyObject = AnyObject, TSdkParams extends AnyObject = TRequestBody> extends MfdocFieldIdPrimitive { basePathname: string; method: MfdocHttpEndpointMethod; pathParamaters?: MfdocFieldObjectTypePrimitive<TPathParameters>; query?: MfdocFieldObjectTypePrimitive<TQuery>; requestHeaders?: MfdocFieldObjectTypePrimitive<TRequestHeaders>; requestBody?: MfdocFieldObjectTypePrimitive<TRequestBody> | MfdocHttpEndpointMultipartFormdataTypePrimitive<TRequestBody>; responseHeaders?: MfdocFieldObjectTypePrimitive<TResponseHeaders>; responseBody?: TResponseBody extends MfdocFieldBinaryTypePrimitive ? MfdocFieldBinaryTypePrimitive : MfdocFieldObjectTypePrimitive<TResponseBody>; sdkParamsBody?: MfdocSdkParamsBodyTypePrimitive<TSdkParams, TRequestHeaders, TPathParameters, TQuery, TRequestBody>; name: string; description?: string; tags?: string[]; errorResponseHeaders?: MfdocFieldObjectTypePrimitive<HttpEndpointResponseHeaders_ContentType_ContentLength>; errorResponseBody?: MfdocFieldObjectTypePrimitive<BaseEndpointResult>; } export type InferMfdocFieldObjectType<T, TDefault = never> = T extends MfdocFieldObjectTypePrimitive<infer TObjectType> ? TObjectType : TDefault; export type InferMfdocFieldObjectOrMultipartType<T> = T extends MfdocFieldObjectTypePrimitive<infer TObjectType> ? TObjectType : T extends MfdocHttpEndpointMultipartFormdataTypePrimitive<infer TMultipartObjectType> ? TMultipartObjectType : never; export type InferMfdocSdkParamsType<T> = T extends MfdocSdkParamsBodyTypePrimitive<infer TObjectType> ? TObjectType : never; export declare enum MfdocHttpEndpointMethod { Get = "get", Post = "post", Delete = "delete", Options = "options", Put = "put", Patch = "patch" } declare function constructBase(params: OmitFrom<MfdocFieldBaseTypePrimitive, '__id'>): MfdocFieldBaseTypePrimitive; declare function constructString(params: OmitFrom<MfdocFieldStringTypePrimitive, '__id'>): MfdocFieldStringTypePrimitive; declare function constructNumber(params: OmitFrom<MfdocFieldNumberTypePrimitive, '__id'>): MfdocFieldNumberTypePrimitive; declare function constructBoolean(params: OmitFrom<MfdocFieldBooleanTypePrimitive, '__id'>): MfdocFieldBooleanTypePrimitive; declare function constructNull(params: OmitFrom<MfdocFieldNullTypePrimitive, '__id'>): MfdocFieldNullTypePrimitive; declare function constructUndefined(params: OmitFrom<MfdocFieldUndefinedTypePrimitive, '__id'>): MfdocFieldUndefinedTypePrimitive; declare function constructDate(params: OmitFrom<MfdocFieldDateTypePrimitive, '__id'>): MfdocFieldDateTypePrimitive; declare function constructArray<T>(params: OmitFrom<MfdocFieldArrayTypePrimitive<T>, '__id'>): MfdocFieldArrayTypePrimitive<T>; declare function constructObjectField<T, TRequired extends boolean = false>(params: OmitFrom<MfdocFieldObjectFieldTypePrimitive<T, TRequired>, '__id'>): MfdocFieldObjectFieldTypePrimitive<T, TRequired>; declare function constructObject<T extends object>(params: OmitFrom<MfdocFieldObjectTypePrimitive<T>, '__id'>): MfdocFieldObjectTypePrimitive<T>; declare function constructSdkParamsBody(params: OmitFrom<MfdocSdkParamsBodyTypePrimitive, '__id'>): MfdocSdkParamsBodyTypePrimitive; declare function constructOrCombination<T extends MfdocFieldBaseTypePrimitive[]>(params: OmitFrom<MfdocFieldOrCombinationTypePrimitive<T>, '__id'>): MfdocFieldOrCombinationTypePrimitive<T>; declare function constructBinary(params: OmitFrom<MfdocFieldBinaryTypePrimitive, '__id'>): MfdocFieldBinaryTypePrimitive; declare function constructHttpEndpointMultipartFormdata<T extends object>(params: OmitFrom<MfdocHttpEndpointMultipartFormdataTypePrimitive<T>, '__id'>): MfdocHttpEndpointMultipartFormdataTypePrimitive<T>; declare function constructHttpEndpointDefinition<TRequestHeaders extends AnyObject = AnyObject, TPathParameters extends AnyObject = AnyObject, TQuery extends AnyObject = AnyObject, TRequestBody extends AnyObject = AnyObject, TResponseHeaders extends AnyObject = AnyObject, TResponseBody extends AnyObject = AnyObject, TSdkParams extends AnyObject = TRequestBody>(params: Omit<MfdocHttpEndpointDefinitionTypePrimitive<TRequestHeaders, TPathParameters, TQuery, TRequestBody, TResponseHeaders, TResponseBody, TSdkParams>, '__id'>): MfdocHttpEndpointDefinitionTypePrimitive<TRequestHeaders, TPathParameters, TQuery, TRequestBody, TResponseHeaders, TResponseBody, TSdkParams>; export declare const mfdocConstruct: { constructBase: typeof constructBase; constructString: typeof constructString; constructNumber: typeof constructNumber; constructBoolean: typeof constructBoolean; constructNull: typeof constructNull; constructUndefined: typeof constructUndefined; constructDate: typeof constructDate; constructArray: typeof constructArray; constructObjectField: typeof constructObjectField; constructObject: typeof constructObject; constructSdkParamsBody: typeof constructSdkParamsBody; constructOrCombination: typeof constructOrCombination; constructBinary: typeof constructBinary; constructHttpEndpointMultipartFormdata: typeof constructHttpEndpointMultipartFormdata; constructHttpEndpointDefinition: typeof constructHttpEndpointDefinition; }; export declare function objectHasRequiredFields(item: MfdocFieldObjectTypePrimitive<any> | MfdocFieldObjectTypePrimitive<AnyObject>): boolean; export declare function isMfdocFieldBase(data: any): data is MfdocFieldBaseTypePrimitive; export declare function isMfdocFieldString(data: any): data is MfdocFieldStringTypePrimitive; export declare function isMfdocFieldNumber(data: any): data is MfdocFieldNumberTypePrimitive; export declare function isMfdocFieldBoolean(data: any): data is MfdocFieldBooleanTypePrimitive; export declare function isMfdocFieldNull(data: any): data is MfdocFieldNullTypePrimitive; export declare function isMfdocFieldUndefined(data: any): data is MfdocFieldUndefinedTypePrimitive; export declare function isMfdocFieldDate(data: any): data is MfdocFieldDateTypePrimitive; export declare function isMfdocFieldArray(data: any): data is MfdocFieldArrayTypePrimitive<any>; export declare function isMfdocFieldObject(data: any): data is MfdocFieldObjectTypePrimitive<any>; export declare function isMfdocFieldOrCombination(data: any): data is MfdocFieldOrCombinationTypePrimitive<any>; export declare function isMfdocFieldBinary(data: any): data is MfdocFieldBinaryTypePrimitive; export declare function isMfdocMultipartFormdata(data: any): data is MfdocHttpEndpointMultipartFormdataTypePrimitive<any>; export declare function isMfdocEndpoint(data: any): data is MfdocHttpEndpointDefinitionTypePrimitive<any, any, any, any, any, any, any>; export declare function isMfdocSdkParamsBody(data: any): data is MfdocSdkParamsBodyTypePrimitive<any, any, any, any, any>; export {};