Skip to content

Commit e43e500

Browse files
committed
UPdate from Fork and impleneht hooks
1 parent ef60921 commit e43e500

File tree

6 files changed

+111
-18
lines changed

6 files changed

+111
-18
lines changed

src/templates/core/ApiResult.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export interface ApiResult {
66
readonly status: number;
77
readonly statusText: string;
88
readonly body: any;
9+
readonly response?: any;
910
}

src/templates/core/OpenAPI.hbs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,26 @@
33
type Resolver<T> = () => Promise<T>;
44
type Headers = Record<string, string>;
55

6-
import { Result } from './Result';
6+
import { ApiResult } from './ApiResult';
7+
import { ApiRequestOptions } from './ApiRequestOptions';
78

89
export interface RequestHookParams {
910
url: string;
10-
request: RequestInit;
11+
request: ApiRequestOptions;
1112
responseHeader: string|undefined;
1213
}
1314

1415
export interface ResponseHookParams {
1516
url: string;
16-
result: Result;
17+
result: ApiResult;
1718
}
1819

1920
interface Config {
2021
BASE: string;
2122
VERSION: string;
2223
WITH_CREDENTIALS: boolean;
2324
REQUEST_HOOK?(params: RequestHookParams): Promise<RequestHookParams>;
24-
RESPONSE_HOOK?(result: ResponseHookParams): Promise<Result>
25+
RESPONSE_HOOK?(result: ResponseHookParams): Promise<ApiResult>
2526
TOKEN?: string | Resolver<string>;
2627
USERNAME?: string | Resolver<string>;
2728
PASSWORD?: string | Resolver<string>;

src/templates/core/fetch/request.hbs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,31 @@ import { OpenAPI } from './OpenAPI';
5555
*/
5656
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
5757
const url = getUrl(options);
58-
const response = await sendRequest(options, url);
58+
59+
// Pre-hook on request if a function is provided.
60+
const requestHookResult = OpenAPI.REQUEST_HOOK ?
61+
(await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) :
62+
{ url, options, responseHeader: options.responseHeader};
63+
64+
65+
const response = await sendRequest(requestHookResult.options, requestHookResult.url);
5966
const responseBody = await getResponseBody(response);
60-
const responseHeader = getResponseHeader(response, options.responseHeader);
67+
const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader);
68+
6169

62-
const result: ApiResult = {
70+
let result: ApiResult = {
6371
url,
6472
ok: response.ok,
6573
status: response.status,
6674
statusText: response.statusText,
6775
body: responseHeader || responseBody,
76+
response
6877
};
6978

79+
result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result;
80+
7081
catchErrors(options, result);
82+
83+
7184
return result;
7285
}

src/templates/core/node/request.hbs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,25 @@ import { OpenAPI } from './OpenAPI';
5959
*/
6060
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
6161
const url = getUrl(options);
62-
const response = await sendRequest(options, url);
62+
63+
// Pre-hook on request if a function is provided.
64+
const requestHookResult = OpenAPI.REQUEST_HOOK ?
65+
(await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) :
66+
{ url, options, responseHeader: options.responseHeader};
67+
68+
const response = await sendRequest(requestHookResult.options, requestHookResult.url);
6369
const responseBody = await getResponseBody(response);
64-
const responseHeader = getResponseHeader(response, options.responseHeader);
70+
const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader);
6571

6672
const result: ApiResult = {
6773
url,
6874
ok: response.ok,
6975
status: response.status,
7076
statusText: response.statusText,
7177
body: responseHeader || responseBody,
78+
response
7279
};
80+
result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result;
7381

7482
catchErrors(options, result);
7583
return result;

src/templates/core/xhr/request.hbs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,28 @@ import { OpenAPI } from './OpenAPI';
5858
*/
5959
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
6060
const url = getUrl(options);
61-
const response = await sendRequest(options, url);
62-
const responseBody = getResponseBody(response);
63-
const responseHeader = getResponseHeader(response, options.responseHeader);
61+
62+
// Pre-hook on request if a function is provided.
63+
const requestHookResult = OpenAPI.REQUEST_HOOK ?
64+
(await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) :
65+
{ url, options, responseHeader: options.responseHeader};
66+
67+
const response = await sendRequest(requestHookResult.options, requestHookResult.url);
68+
const responseBody = await getResponseBody(response);
69+
const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader);
70+
6471

6572
const result: ApiResult = {
6673
url,
6774
ok: isSuccess(response.status),
6875
status: response.status,
6976
statusText: response.statusText,
7077
body: responseHeader || responseBody,
78+
response
7179
};
7280

81+
result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result;
82+
7383
catchErrors(options, result);
7484
return result;
7585
}

test/__snapshots__/index.spec.js.snap

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface ApiResult {
5050
readonly status: number;
5151
readonly statusText: string;
5252
readonly body: any;
53+
readonly response?: any;
5354
}"
5455
`;
5556

@@ -60,10 +61,26 @@ exports[`v2 should generate: ./test/generated/v2/core/OpenAPI.ts 1`] = `
6061
type Resolver<T> = () => Promise<T>;
6162
type Headers = Record<string, string>;
6263

64+
import { ApiResult } from './ApiResult';
65+
import { ApiRequestOptions } from './ApiRequestOptions';
66+
67+
export interface RequestHookParams {
68+
url: string;
69+
request: ApiRequestOptions;
70+
responseHeader: string|undefined;
71+
}
72+
73+
export interface ResponseHookParams {
74+
url: string;
75+
result: ApiResult;
76+
}
77+
6378
interface Config {
6479
BASE: string;
6580
VERSION: string;
6681
WITH_CREDENTIALS: boolean;
82+
REQUEST_HOOK?(params: RequestHookParams): Promise<RequestHookParams>;
83+
RESPONSE_HOOK?(result: ResponseHookParams): Promise<ApiResult>
6784
TOKEN?: string | Resolver<string>;
6885
USERNAME?: string | Resolver<string>;
6986
PASSWORD?: string | Resolver<string>;
@@ -268,19 +285,32 @@ function catchErrors(options: ApiRequestOptions, result: ApiResult): void {
268285
*/
269286
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
270287
const url = getUrl(options);
271-
const response = await sendRequest(options, url);
288+
289+
// Pre-hook on request if a function is provided.
290+
const requestHookResult = OpenAPI.REQUEST_HOOK ?
291+
(await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) :
292+
{ url, options, responseHeader: options.responseHeader};
293+
294+
295+
const response = await sendRequest(requestHookResult.options, requestHookResult.url);
272296
const responseBody = await getResponseBody(response);
273-
const responseHeader = getResponseHeader(response, options.responseHeader);
297+
const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader);
298+
274299

275-
const result: ApiResult = {
300+
let result: ApiResult = {
276301
url,
277302
ok: response.ok,
278303
status: response.status,
279304
statusText: response.statusText,
280305
body: responseHeader || responseBody,
306+
response
281307
};
282308

309+
result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result;
310+
283311
catchErrors(options, result);
312+
313+
284314
return result;
285315
}
286316

@@ -2394,6 +2424,7 @@ export interface ApiResult {
23942424
readonly status: number;
23952425
readonly statusText: string;
23962426
readonly body: any;
2427+
readonly response?: any;
23972428
}"
23982429
`;
23992430

@@ -2404,10 +2435,26 @@ exports[`v3 should generate: ./test/generated/v3/core/OpenAPI.ts 1`] = `
24042435
type Resolver<T> = () => Promise<T>;
24052436
type Headers = Record<string, string>;
24062437

2438+
import { ApiResult } from './ApiResult';
2439+
import { ApiRequestOptions } from './ApiRequestOptions';
2440+
2441+
export interface RequestHookParams {
2442+
url: string;
2443+
request: ApiRequestOptions;
2444+
responseHeader: string|undefined;
2445+
}
2446+
2447+
export interface ResponseHookParams {
2448+
url: string;
2449+
result: ApiResult;
2450+
}
2451+
24072452
interface Config {
24082453
BASE: string;
24092454
VERSION: string;
24102455
WITH_CREDENTIALS: boolean;
2456+
REQUEST_HOOK?(params: RequestHookParams): Promise<RequestHookParams>;
2457+
RESPONSE_HOOK?(result: ResponseHookParams): Promise<ApiResult>
24112458
TOKEN?: string | Resolver<string>;
24122459
USERNAME?: string | Resolver<string>;
24132460
PASSWORD?: string | Resolver<string>;
@@ -2612,19 +2659,32 @@ function catchErrors(options: ApiRequestOptions, result: ApiResult): void {
26122659
*/
26132660
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
26142661
const url = getUrl(options);
2615-
const response = await sendRequest(options, url);
2662+
2663+
// Pre-hook on request if a function is provided.
2664+
const requestHookResult = OpenAPI.REQUEST_HOOK ?
2665+
(await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) :
2666+
{ url, options, responseHeader: options.responseHeader};
2667+
2668+
2669+
const response = await sendRequest(requestHookResult.options, requestHookResult.url);
26162670
const responseBody = await getResponseBody(response);
2617-
const responseHeader = getResponseHeader(response, options.responseHeader);
2671+
const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader);
2672+
26182673

2619-
const result: ApiResult = {
2674+
let result: ApiResult = {
26202675
url,
26212676
ok: response.ok,
26222677
status: response.status,
26232678
statusText: response.statusText,
26242679
body: responseHeader || responseBody,
2680+
response
26252681
};
26262682

2683+
result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result;
2684+
26272685
catchErrors(options, result);
2686+
2687+
26282688
return result;
26292689
}
26302690

0 commit comments

Comments
 (0)