export type Pet = NewPet & { id : number ; } ; export interface NewPet { name : string ; tag ? : string ; } export interface Error { format code : number ; message : string ; } export interface PageTemplateResponseDto { content ? : any [ ] ; empty ? : boolean ; first ? : boolean ; last ? : boolean ; format number ? : number ; format numberOfElements ? : number ; pageable ? : any ; format size ? : number ; sort ? : any ; format totalElements ? : number ; format totalPages ? : number ; } export type QueryParamsType = Record < string | number , any > ; export type ResponseFormat = keyof Omit < Body , "body" | "bodyUsed" > ; export interface FullRequestParams extends Omit < RequestInit , "body" > { /** set parameter to `true` for call `securityWorker` for this request */ secure ? : boolean ; /** request path */ path : string ; /** content type of request body */ type ? : ContentType ; /** query params */ query ? : QueryParamsType ; /** format of response (i.e. response.json() -> format: "json") */ format ? : ResponseFormat ; /** request body */ body ? : unknown ; /** base url */ baseUrl ? : string ; /** request cancellation token */ cancelToken ? : CancelToken ; } export type RequestParams = Omit < FullRequestParams , "body" | "method" | "query" | "path" > ; export interface ApiConfig < SecurityDataType = unknown > { baseUrl ? : string ; baseApiParams ? : Omit < RequestParams , "baseUrl" | "cancelToken" | "signal" > ; securityWorker ? : ( securityData : SecurityDataType | null ) => Promise < RequestParams | void > | RequestParams | void ; customFetch ? : typeof fetch ; } export interface HttpResponse < D extends unknown , E extends unknown = unknown > extends Response { data : D ; error : E ; } type CancelToken = Symbol | string | number ; export enum ContentType { Json = "application/json" , FormData = "multipart/form-data" , UrlEncoded = "application/x-www-form-urlencoded" } export class HttpClient < SecurityDataType = unknown > { public baseUrl : string = "http://petstore.swagger.io/api" ; private securityData : SecurityDataType | null = null ; private securityWorker ? : ApiConfig < SecurityDataType > [ "securityWorker" ] ; private abortControllers = new Map < CancelToken , AbortController > ( ) ; private customFetch = ( ... fetchParams ) => fetch ( ... fetchParams ) ; private baseApiParams : RequestParams = { credentials : "same-origin" , headers : { } , redirect : "follow" , referrerPolicy : "no-referrer" , } ; constructor ( apiConfig = { } ) { Object . assign ( this , apiConfig ) ; } public setSecurityData = ( data ) => { this . securityData = data ; } ; private encodeQueryParam ( key , value ) { const encodedKey = encodeURIComponent ( key ) ; return `${ encodedKey }=${ encodeURIComponent ( typeof value === "number" ? value : `${ value }` ) }` ; } private addQueryParam ( query , key ) { return this . encodeQueryParam ( key , query [ key ] ) ; } private addArrayQueryParam ( query , key ) { const value = query [ key ] ; return value . map ( ( v ) => this . encodeQueryParam ( key , v ) ) . join ( "&" ) ; } protected toQueryString ( rawQuery ? ) { const query = rawQuery || { } ; const keys = Object . keys ( query ) . filter ( ( key ) => "undefined" !== typeof query [ key ] ) ; return keys . map ( ( key ) => ( Array . isArray ( query [ key ] ) ? this . addArrayQueryParam ( query , key ) : this . addQueryParam ( query , key ) ) ) . join ( "&" ) ; } protected addQueryParams ( rawQuery ? ) { const queryString = this . toQueryString ( rawQuery ) ; return queryString ? `?${ queryString }` : "" ; } private contentFormatters : Record < ContentType , ( input : any ) => any > = { [ ContentType . Json ] : ( input ) => input !== null && ( typeof input === "object" || typeof input === "string" ) ? JSON . stringify ( input ) : input , [ ContentType . FormData ] : ( input ) => Object . keys ( input || { } ) . reduce ( ( formData , key ) => { const property = input [ key ] ; formData . append ( key , property instanceof Blob ? property : typeof property === "object" && property !== null ? JSON . stringify ( property ) : `${ property }` ) ; return formData ; } , new FormData ( ) ) , [ ContentType . UrlEncoded ] : ( input ) => this . toQueryString ( input ) , } ; private mergeRequestParams ( params1 , params2 ? ) { return { ... this . baseApiParams , ... params1 , ... ( params2 || { } ) , headers : { ... ( this . baseApiParams . headers || { } ) , ... ( params1 . headers || { } ) , ... ( ( params2 && params2 . headers ) || { } ) , } , } ; } private createAbortSignal = ( cancelToken ) : AbortSignal | undefined => { if ( this . abortControllers . has ( cancelToken ) ) { const abortController = this . abortControllers . get ( cancelToken ) ; if ( abortController ) { return abortController . signal ; } return void 0 ; } const abortController = new AbortController ( ) ; this . abortControllers . set ( cancelToken , abortController ) ; return abortController . signal ; } ; public abortRequest = ( cancelToken ) => { const abortController = this . abortControllers . get ( cancelToken ) ; if ( abortController ) { abortController . abort ( ) ; this . abortControllers . delete ( cancelToken ) ; } } ; public request = async < T = any , E = any > ( { body , secure , path , type , query , format , baseUrl , cancelToken , ... params } ) : Promise < HttpResponse < T , E > > => { const secureParams = ( ( typeof secure === "boolean" ? secure : this . baseApiParams . secure ) && this . securityWorker && ( await this . securityWorker ( this . securityData ) ) ) || { } ; const requestParams = this . mergeRequestParams ( params , secureParams ) ; const queryString = query && this . toQueryString ( query ) ; const payloadFormatter = this . contentFormatters [ type || ContentType . Json ] ; const responseFormat = format || requestParams . format ; return this . customFetch ( `${ baseUrl || this . baseUrl || "" }${ path }${ queryString ? `?${ queryString }` : "" }` , { ... requestParams , headers : { ... ( type && type !== ContentType . FormData ? { "Content-Type" : type } : { } ) , ... ( requestParams . headers || { } ) , } , signal : cancelToken ? this . createAbortSignal ( cancelToken ) : void 0 , body : typeof body === "undefined" || body === null ? null : payloadFormatter ( body ) , } ) . then ( async ( response ) => { const r = response as HttpResponse < T , E > ; r . data = ( null as unknown ) as T ; r . error = ( null as unknown ) as E ; const data = ! responseFormat ? r : await response [ responseFormat ] ( ) . then ( ( data ) => { if ( r . ok ) { r . data = data ; } else { r . error = data ; } return r ; } ) . catch ( ( e ) => { r . error = e ; return r ; } ) ; if ( cancelToken ) { this . abortControllers . delete ( cancelToken ) ; } if ( ! response . ok ) throw data ; return data ; } ) ; } ; } title version license termsOfService baseUrl contact export class Api < SecurityDataType extends unknown > extends HttpClient < SecurityDataType > { pathParams = { name request pathParamFooBarBazList : ( pathParam , fooBarBaz , params = { } ) => this . request < any , void > ( { path : `/path-params/${ pathParam }/${ fooBarBaz }` , method : "GET" , ... params , } ) , } ; pets = { description name request findPets : ( query ? , params = { } ) => this . request < Pet [ ] , Error > ( { path : `/pets` , method : "GET" , query : query , format : "json" , ... params , } ) , description name request addPet : ( pet , params = { } ) => this . request < Pet , Error > ( { path : `/pets` , method : "POST" , body : pet , type : ContentType . Json , format : "json" , ... params , } ) , description name request findPetById : ( id , params = { } ) => this . request < Pet , Error > ( { path : `/pets/${ id }` , method : "GET" , format : "json" , ... params , } ) , description name request deletePet : ( id , params = { } ) => this . request < void , Error > ( { path : `/pets/${ id }` , method : "DELETE" , ... params , } ) , } ; }