mfdoc
Version:
Auto generate JS SDK and HTTP API documentation
178 lines (177 loc) • 12.5 kB
TypeScript
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 {};