types.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import type {
  2. Alova,
  3. AlovaDefaultCacheAdapter,
  4. AlovaGenerics,
  5. AlovaGlobalCacheAdapter,
  6. AlovaMethodCommonConfig,
  7. AlovaMethodCreateConfig,
  8. AlovaOptions,
  9. AlovaRequestAdapter,
  10. Method,
  11. RequestBody,
  12. RespondedAlovaGenerics,
  13. RespondedHandler,
  14. RespondedHandlerRecord,
  15. ResponseCompleteHandler,
  16. ResponseErrorHandler,
  17. StatesExport,
  18. StatesHook,
  19. } from 'alova';
  20. import type { TokenAuthenticationResult } from 'alova/client';
  21. import type { FetchRequestInit } from 'alova/fetch';
  22. import type { VueHookExportType } from 'alova/vue';
  23. export type AlovaFetchRequestGenerics<
  24. Responded = unknown,
  25. Transformed = unknown,
  26. > = AlovaGenerics<
  27. Responded,
  28. Transformed,
  29. FetchRequestInit,
  30. Response,
  31. Headers,
  32. AlovaDefaultCacheAdapter,
  33. AlovaDefaultCacheAdapter,
  34. VueHookExportType<unknown>
  35. >;
  36. export type RequestedHandler<AG extends AlovaGenerics> = (
  37. method: Method<AG>,
  38. ) => Promise<void> | void;
  39. /* eslint-disable perfectionist/sort-interfaces */
  40. export interface AlovaClient<AG extends AlovaGenerics> extends Alova<AG> {
  41. request<Responded = unknown, Transformed = unknown>(
  42. config: AlovaMethodCommonConfig<AG, Responded, Transformed>,
  43. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  44. get<Responded = unknown, Transformed = unknown>(
  45. url: string,
  46. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  47. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  48. post<Responded = unknown, Transformed = unknown>(
  49. url: string,
  50. data?: RequestBody,
  51. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  52. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  53. put<Responded = unknown, Transformed = unknown>(
  54. url: string,
  55. data?: RequestBody,
  56. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  57. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  58. delete<Responded = unknown, Transformed = unknown>(
  59. url: string,
  60. data?: RequestBody,
  61. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  62. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  63. head<Responded = unknown, Transformed = unknown>(
  64. url: string,
  65. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  66. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  67. _options<Responded = unknown, Transformed = unknown>(
  68. url: string,
  69. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  70. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  71. patch<Responded = unknown, Transformed = unknown>(
  72. url: string,
  73. data?: RequestBody,
  74. config?: AlovaMethodCreateConfig<AG, Responded, Transformed>,
  75. ): Method<RespondedAlovaGenerics<AG, Responded, Transformed>>;
  76. interceptor(type: 'request', fn: RequestedHandler<AG>): () => void;
  77. interceptor(type: 'success', fn: RespondedHandler<AG>): () => void;
  78. interceptor(type: 'error', fn: ResponseErrorHandler<AG>): () => void;
  79. interceptor(type: 'complete', fn: ResponseCompleteHandler<AG>): () => void;
  80. }
  81. export interface ResponseBodyData<D = unknown> {
  82. code: number;
  83. data?: D;
  84. message?: string;
  85. }
  86. export type SimpleAlovaOptions<
  87. AG extends AlovaGenerics = AlovaFetchRequestGenerics,
  88. > = Pick<AlovaOptions<any>, 'baseURL' | 'id'> & {
  89. interceptor?: RespondedHandlerRecord<AG>;
  90. tokenStore?: {
  91. accessToken?: null | string;
  92. loginExpired?: boolean;
  93. refreshToken?: null | string;
  94. };
  95. transform?: <Responded = unknown, Transformed = unknown>(
  96. data: Record<string, any>,
  97. method: Method<RespondedAlovaGenerics<AG, Responded, Transformed>>,
  98. ) => ResponseBodyData<Responded>;
  99. };
  100. export interface CreateAlovaClient {
  101. <
  102. RequestConfig,
  103. Response,
  104. ResponseHeader,
  105. L1Cache extends AlovaGlobalCacheAdapter = AlovaDefaultCacheAdapter,
  106. L2Cache extends AlovaGlobalCacheAdapter = AlovaDefaultCacheAdapter,
  107. SE extends StatesExport<any> = StatesExport<any>,
  108. >(
  109. options: Partial<
  110. Omit<
  111. AlovaOptions<
  112. AlovaGenerics<
  113. any,
  114. any,
  115. RequestConfig,
  116. Response,
  117. ResponseHeader,
  118. L1Cache,
  119. L2Cache,
  120. SE
  121. >
  122. >,
  123. 'beforeRequest' | 'responded'
  124. > & {
  125. tokenAuthentication: TokenAuthenticationResult<
  126. StatesHook<SE>,
  127. AlovaRequestAdapter<RequestConfig, Response, ResponseHeader>
  128. >;
  129. }
  130. >,
  131. ): AlovaClient<
  132. AlovaGenerics<
  133. any,
  134. any,
  135. RequestConfig,
  136. Response,
  137. ResponseHeader,
  138. L1Cache,
  139. L2Cache,
  140. SE
  141. >
  142. >;
  143. }