forked from mswjs/interceptors
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
11ba9b5
commit 0db6518
Showing
42 changed files
with
634 additions
and
665 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
import { IncomingMessage } from 'http' | ||
import { Headers, HeadersObject } from 'headers-utils' | ||
import { StrictEventEmitter } from 'strict-event-emitter' | ||
|
||
export type Interceptor = ( | ||
observer: Observer, | ||
resolver: Resolver | ||
) => InterceptorCleanupFn | ||
|
||
export type Observer = StrictEventEmitter<InterceptorEventsMap> | ||
|
||
/** | ||
* A side-effect function to restore all the patched modules. | ||
*/ | ||
export type InterceptorCleanupFn = () => void | ||
|
||
export interface IsomoprhicRequest { | ||
url: URL | ||
method: string | ||
headers: HeadersObject | ||
body?: string | ||
} | ||
|
||
export interface IsomoprhicResponse { | ||
status: number | ||
statusText: string | ||
headers: Headers | ||
body?: string | ||
} | ||
|
||
export interface MockedResponse | ||
extends Omit<Partial<IsomoprhicResponse>, 'headers'> { | ||
headers?: HeadersObject | ||
} | ||
|
||
interface InterceptorEventsMap { | ||
request(request: IsomoprhicRequest): void | ||
response(request: IsomoprhicRequest, response: IsomoprhicResponse): void | ||
} | ||
|
||
export type Resolver = ( | ||
request: IsomoprhicRequest, | ||
ref: IncomingMessage | XMLHttpRequest | ||
) => MockedResponse | Promise<MockedResponse | void> | void | ||
|
||
export interface InterceptorOptions { | ||
modules: Interceptor[] | ||
resolver: Resolver | ||
} | ||
|
||
export interface InterceptorApi { | ||
/** | ||
* Apply necessary module patches to provision the interception of requests. | ||
*/ | ||
apply(): void | ||
on<Event extends keyof InterceptorEventsMap>( | ||
event: Event, | ||
listener: InterceptorEventsMap[Event] | ||
): void | ||
/** | ||
* Restore all applied module patches and disable the interception. | ||
*/ | ||
restore(): void | ||
} | ||
|
||
export function createInterceptor(options: InterceptorOptions): InterceptorApi { | ||
const observer = new StrictEventEmitter<InterceptorEventsMap>() | ||
let cleanupFns: InterceptorCleanupFn[] = [] | ||
|
||
return { | ||
apply() { | ||
cleanupFns = options.modules.map((interceptor) => { | ||
return interceptor(observer, options.resolver) | ||
}) | ||
}, | ||
on(event, listener) { | ||
observer.addListener(event, listener) | ||
}, | ||
restore() { | ||
observer.removeAllListeners() | ||
|
||
if (cleanupFns.length === 0) { | ||
throw new Error( | ||
`Failed to restore patched modules: no patches found. Did you forget to run ".apply()"?` | ||
) | ||
} | ||
|
||
cleanupFns.forEach((restore) => restore()) | ||
}, | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,4 @@ | ||
/* Classes */ | ||
export { RequestInterceptor } from './RequestInterceptor' | ||
export * from './createInterceptor' | ||
|
||
/* Utils */ | ||
export { getCleanUrl } from './utils/getCleanUrl' | ||
|
||
/* Typings */ | ||
export { | ||
Interceptor, | ||
RequestInterceptorContext, | ||
RequestInterceptorEventsMap, | ||
RequestMiddleware, | ||
InterceptedRequest, | ||
MockedResponse, | ||
ReturnedResponse, | ||
} from './glossary' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import { IncomingMessage } from 'http' | ||
|
||
// Request instance constructed by the `request` library | ||
// has a `self` property that has a `uri` field. This is | ||
// reproducible by performing a `XMLHttpRequest` request (jsdom). | ||
export interface RequestSelf { | ||
uri?: URL | ||
} | ||
|
||
export type HttpRequestCallback = (response: IncomingMessage) => void |
Oops, something went wrong.