c13179e60d1660062aec93394efc9619fb142e5cb2782f974371b892ea2a5caac8163a953a67d1698181dcc40141fd14bcbcc06c09a91ce5c4361443e77bb9 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { IncomingHttpHeaders } from './header'
  2. import Dispatcher from './dispatcher'
  3. import { BodyInit, Headers } from './fetch'
  4. /** The scope associated with a mock dispatch. */
  5. declare class MockScope<TData extends object = object> {
  6. constructor (mockDispatch: MockInterceptor.MockDispatch<TData>)
  7. /** Delay a reply by a set amount of time in ms. */
  8. delay (waitInMs: number): MockScope<TData>
  9. /** Persist the defined mock data for the associated reply. It will return the defined mock data indefinitely. */
  10. persist (): MockScope<TData>
  11. /** Define a reply for a set amount of matching requests. */
  12. times (repeatTimes: number): MockScope<TData>
  13. }
  14. /** The interceptor for a Mock. */
  15. declare class MockInterceptor {
  16. constructor (options: MockInterceptor.Options, mockDispatches: MockInterceptor.MockDispatch[])
  17. /** Mock an undici request with the defined reply. */
  18. reply<TData extends object = object>(replyOptionsCallback: MockInterceptor.MockReplyOptionsCallback<TData>): MockScope<TData>
  19. reply<TData extends object = object>(
  20. statusCode: number,
  21. data?: TData | Buffer | string | MockInterceptor.MockResponseDataHandler<TData>,
  22. responseOptions?: MockInterceptor.MockResponseOptions
  23. ): MockScope<TData>
  24. /** Mock an undici request by throwing the defined reply error. */
  25. replyWithError<TError extends Error = Error>(error: TError): MockScope
  26. /** Set default reply headers on the interceptor for subsequent mocked replies. */
  27. defaultReplyHeaders (headers: IncomingHttpHeaders): MockInterceptor
  28. /** Set default reply trailers on the interceptor for subsequent mocked replies. */
  29. defaultReplyTrailers (trailers: Record<string, string>): MockInterceptor
  30. /** Set automatically calculated content-length header on subsequent mocked replies. */
  31. replyContentLength (): MockInterceptor
  32. }
  33. declare namespace MockInterceptor {
  34. /** MockInterceptor options. */
  35. export interface Options {
  36. /** Path to intercept on. */
  37. path: string | RegExp | ((path: string) => boolean);
  38. /** Method to intercept on. Defaults to GET. */
  39. method?: string | RegExp | ((method: string) => boolean);
  40. /** Body to intercept on. */
  41. body?: string | RegExp | ((body: string) => boolean);
  42. /** Headers to intercept on. */
  43. headers?: Record<string, string | RegExp | ((body: string) => boolean)> | ((headers: Record<string, string>) => boolean);
  44. /** Query params to intercept on */
  45. query?: Record<string, any>;
  46. }
  47. export interface MockDispatch<TData extends object = object, TError extends Error = Error> extends Options {
  48. times: number | null;
  49. persist: boolean;
  50. consumed: boolean;
  51. data: MockDispatchData<TData, TError>;
  52. }
  53. export interface MockDispatchData<TData extends object = object, TError extends Error = Error> extends MockResponseOptions {
  54. error: TError | null;
  55. statusCode?: number;
  56. data?: TData | string;
  57. }
  58. export interface MockResponseOptions {
  59. headers?: IncomingHttpHeaders;
  60. trailers?: Record<string, string>;
  61. }
  62. export interface MockResponseCallbackOptions {
  63. path: string;
  64. method: string;
  65. headers?: Headers | Record<string, string>;
  66. origin?: string;
  67. body?: BodyInit | Dispatcher.DispatchOptions['body'] | null;
  68. maxRedirections?: number;
  69. }
  70. export type MockResponseDataHandler<TData extends object = object> = (
  71. opts: MockResponseCallbackOptions
  72. ) => TData | Buffer | string
  73. export type MockReplyOptionsCallback<TData extends object = object> = (
  74. opts: MockResponseCallbackOptions
  75. ) => { statusCode: number, data?: TData | Buffer | string, responseOptions?: MockResponseOptions }
  76. }
  77. interface Interceptable extends Dispatcher {
  78. /** Intercepts any matching requests that use the same origin as this mock client. */
  79. intercept(options: MockInterceptor.Options): MockInterceptor;
  80. /** Clean up all the prepared mocks. */
  81. cleanMocks (): void
  82. }
  83. export {
  84. Interceptable,
  85. MockInterceptor,
  86. MockScope
  87. }