@fox-hound-tools/refine-library
Version:
Refine sdk library
21 lines (20 loc) • 2.65 kB
TypeScript
import { AdditionalDataHolder, RequestConfiguration } from '@microsoft/kiota-abstractions';
import { SetNonNullable } from 'type-fest';
/**
* BodyやResponseで使用されるAdditionalDataHolderを継承した型から、additionalData以外を必須とした型を取得する
*/
export type RequiredDeepWithoutAdditionalData<T extends AdditionalDataHolder> = T extends AdditionalDataHolder ? RequiredObjectDeep<SetNonNullable<Required<Omit<T, 'additionalData'>>>> & Pick<T, 'additionalData'> : never;
type RequiredObjectDeep<ObjectType extends object> = {
[KeyType in keyof ObjectType]-?: ObjectType[KeyType] extends AdditionalDataHolder ? RequiredDeepWithoutAdditionalData<ObjectType[KeyType]> : ObjectType[KeyType] extends Array<infer ArrayType> ? ArrayType extends AdditionalDataHolder ? RequiredDeepWithoutAdditionalData<ArrayType>[] : ArrayType[] : ObjectType[KeyType];
};
export type NonBodyApiFunction = (requestConfiguration?: RequestConfiguration<object>) => Promise<AdditionalDataHolder | undefined>;
export type NonBodyFunctionRequest<T extends NonBodyApiFunction> = T extends (requestConfiguration: RequestConfiguration<infer U>) => Promise<object | undefined> ? U : never;
export type NonBodyFunctionResponse<T extends NonBodyApiFunction> = T extends (requestConfiguration: RequestConfiguration<object>) => Promise<infer U | undefined> ? U : never;
export type ApiFunction = (body: AdditionalDataHolder, requestConfiguration?: RequestConfiguration<object>) => Promise<AdditionalDataHolder | undefined>;
export type ApiFunctionBody<T extends ApiFunction> = T extends (body: infer U, requestConfiguration: RequestConfiguration<object>) => Promise<AdditionalDataHolder | undefined> ? U : never;
export type ApiFunctionRequest<T extends ApiFunction> = T extends (body: AdditionalDataHolder, requestConfiguration: RequestConfiguration<infer U>) => Promise<AdditionalDataHolder | undefined> ? U : never;
export type ApiFunctionResponse<T extends ApiFunction> = T extends (body: AdditionalDataHolder, requestConfiguration: RequestConfiguration<object>) => Promise<infer U | undefined> ? U : never;
export type ResponseVoidApiFunction = (body: AdditionalDataHolder, requestConfiguration?: RequestConfiguration<object>) => Promise<void>;
export type ResponseVoidApiFunctionBody<T extends ResponseVoidApiFunction> = T extends (body: infer U, requestConfiguration: RequestConfiguration<object>) => Promise<void> ? U : never;
export type ResponseVoidApiFunctionRequest<T extends ResponseVoidApiFunction> = T extends (body: AdditionalDataHolder, requestConfiguration: RequestConfiguration<infer U>) => Promise<void> ? U : never;
export {};