Skip to content

Commit 1a8eedf

Browse files
committed
Refactor Hooks
1 parent 271ff5b commit 1a8eedf

File tree

5 files changed

+24
-12
lines changed

5 files changed

+24
-12
lines changed

src/templates/core/OpenAPI.hbs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,25 @@
44

55
import { Result } from './Result';
66

7+
export interface RequestHookParams {
8+
url: string;
9+
request: RequestInit;
10+
responseHeader: string|undefined;
11+
}
12+
13+
export interface ResponseHookParams {
14+
url: string;
15+
result: Result;
16+
}
17+
718
interface Config {
819
BASE: string;
920
VERSION: string;
1021
CLIENT: 'fetch' | 'xhr';
1122
WITH_CREDENTIALS: boolean;
1223
TOKEN: string;
13-
REQUEST_HOOK?(request: RequestInit): Promise<RequestInit>;
14-
RESPONSE_HOOK?(result: Result): Promise<Result>
24+
REQUEST_HOOK?(params: RequestHookParams): Promise<RequestHookParams>;
25+
RESPONSE_HOOK?(result: ResponseHookParams): Promise<Result>
1526
}
1627

1728
export const OpenAPI: Config = {

src/templates/core/Result.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ export interface Result {
88
status: number;
99
statusText: string;
1010
body: any;
11+
response?: Response|XMLHttpRequest;
1112
}

src/templates/core/request.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import { getFormData } from './getFormData';
66
import { getQueryString } from './getQueryString';
7-
import { OpenAPI } from './OpenAPI';
7+
import { OpenAPI, RequestHookParams, ResponseHookParams } from './OpenAPI';
88
import { RequestOptions } from './RequestOptions';
99
import { requestUsingFetch } from './requestUsingFetch';
1010
import { requestUsingXHR } from './requestUsingXHR';
@@ -73,18 +73,16 @@ export async function request(options: Readonly<RequestOptions>): Promise<Result
7373

7474

7575
// Pre-hook on request if a function is provided.
76-
const requestToSend = OpenAPI.REQUEST_HOOK ? (await OpenAPI.REQUEST_HOOK(request)) : request;
77-
76+
const requestHookResult = OpenAPI.REQUEST_HOOK ? (await OpenAPI.REQUEST_HOOK({ url, request, responseHeader: options.responseHeader})) : { url, request, responseHeader: options.responseHeader};
7877
try {
79-
let response: Result;
78+
let result: Result;
8079
switch (OpenAPI.CLIENT) {
8180
case 'xhr':
82-
response = await requestUsingXHR(url, request, options.responseHeader);
81+
result = await requestUsingXHR(requestHookResult.url, requestHookResult.request, requestHookResult.responseHeader, !!OpenAPI.RESPONSE_HOOK);
8382
default:
84-
response = await requestUsingFetch(url, request, options.responseHeader);
83+
result = await requestUsingFetch(requestHookResult.url, requestHookResult.request, requestHookResult.responseHeader, !!OpenAPI.RESPONSE_HOOK);
8584
}
86-
// If there is a response hook, call it
87-
return OpenAPI.RESPONSE_HOOK ? OpenAPI.RESPONSE_HOOK(response) : response;
85+
return OpenAPI.RESPONSE_HOOK ? OpenAPI.RESPONSE_HOOK({url, result}) : result;
8886
} catch (error) {
8987
return {
9088
url,

src/templates/core/requestUsingFetch.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function parseHeader(response: Response, responseHeader?: string): string | null
5252
* @param request The request object, containing method, headers, body, etc.
5353
* @param responseHeader The header we want to parse.
5454
*/
55-
export async function requestUsingFetch(url: string, request: Readonly<RequestInit>, responseHeader?: string): Promise<Result> {
55+
export async function requestUsingFetch(url: string, request: Readonly<RequestInit>, responseHeader?: string, includeResponse?: boolean): Promise<Result> {
5656

5757
// Fetch response using fetch API.
5858
const response = await fetch(url, request);
@@ -68,5 +68,6 @@ export async function requestUsingFetch(url: string, request: Readonly<RequestIn
6868
status: response.status,
6969
statusText: response.statusText,
7070
body: contentHeader || contentBody,
71+
response: includeResponse ? response : undefined
7172
};
7273
}

src/templates/core/requestUsingXHR.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ function parseHeader(xhr: XMLHttpRequest, responseHeader?: string): string | nul
5454
* @param request The request object, containing method, headers, body, etc.
5555
* @param responseHeader The header we want to parse.
5656
*/
57-
export async function requestUsingXHR(url: string, request: Readonly<RequestInit>, responseHeader?: string): Promise<Result> {
57+
export async function requestUsingXHR(url: string, request: Readonly<RequestInit>, responseHeader?: string, includeResponse?: boolean): Promise<Result> {
5858
return new Promise(resolve => {
5959
const xhr = new XMLHttpRequest();
6060

@@ -88,6 +88,7 @@ export async function requestUsingXHR(url: string, request: Readonly<RequestInit
8888
status: xhr.status,
8989
statusText: xhr.statusText,
9090
body: contentHeader || contentBody,
91+
response: includeResponse ? xhr : undefined
9192
};
9293

9394
// Done!

0 commit comments

Comments
 (0)