Skip to content

Commit 1ee6314

Browse files
PE-2229 - rename OpenApi properties, remove config from http client, add config to request
1 parent 1af048c commit 1ee6314

31 files changed

+1104
-896
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@parsable/openapi-typescript-codegen",
3-
"version": "0.0.2-alpha-4",
3+
"version": "0.0.2-alpha-5",
44
"description": "Library that generates Typescript clients based on the OpenAPI specification.",
55
"author": "Ferdi Koomen",
66
"homepage": "https://github.com/ferdikoomen/openapi-typescript-codegen",

src/templates/core/ApiResult.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{{>header}}
22

3-
export type ApiResult = {
3+
export type ApiResult<T = any> = {
44
readonly url: string;
55
readonly ok: boolean;
66
readonly status: number;
77
readonly statusText: string;
8-
readonly body: any;
8+
readonly body: T;
99
}

src/templates/core/BaseHttpRequest.hbs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@ import type { ApiRequestOptions } from './ApiRequestOptions';
44
import type { ApiResult } from './ApiResult';
55
import type { OpenAPIConfig } from './OpenAPI';
66

7-
export class BaseHttpRequest {
8-
readonly openApiConfig: OpenAPIConfig;
9-
10-
constructor(openApiConfig: OpenAPIConfig) {
11-
this.openApiConfig = openApiConfig;
12-
}
13-
14-
async request(options: ApiRequestOptions): Promise<ApiResult> {
15-
throw new Error('Not Implemented');
16-
}
7+
export interface BaseHttpRequest {
8+
request(
9+
options: ApiRequestOptions,
10+
config: OpenAPIConfig,
11+
mergeConfig?: OpenAPIConfig
12+
): Promise<ApiResult>;
1713
}

src/templates/core/OpenAPI.hbs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
66
type Headers = Record<string, string>;
77

88
export type OpenAPIConfig = {
9-
BASE?: string;
10-
VERSION?: string;
11-
WITH_CREDENTIALS?: boolean;
12-
TOKEN?: string | Resolver<string>;
13-
USERNAME?: string | Resolver<string>;
14-
PASSWORD?: string | Resolver<string>;
15-
HEADERS?: Headers | Resolver<Headers>;
9+
baseUrl?: string;
10+
version?: string;
11+
withCredentials?: boolean;
12+
token?: string | Resolver<string>;
13+
username?: string | Resolver<string>;
14+
password?: string | Resolver<string>;
15+
headers?: Headers | Resolver<Headers>;
1616
}
1717
{{#unless @root.exportClient}}
1818
export const OpenAPI: OpenAPIConfig = {
19-
BASE: '{{{server}}}',
20-
VERSION: '{{{version}}}',
21-
WITH_CREDENTIALS: false,
22-
TOKEN: undefined,
23-
USERNAME: undefined,
24-
PASSWORD: undefined,
25-
HEADERS: undefined,
19+
baseUrl: '{{{server}}}',
20+
version: '{{{version}}}',
21+
withCredentials: false,
22+
token: undefined,
23+
username: undefined,
24+
password: undefined,
25+
headers: undefined,
2626
};
2727
{{/unless}}

src/templates/core/fetch/getHeaders.hbs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
async function getHeaders(options: ApiRequestOptions, config: OpenAPIConfig): Promise<Headers> {
2-
const token = await resolve(options, config.TOKEN);
3-
const username = await resolve(options, config.USERNAME);
4-
const password = await resolve(options, config.PASSWORD);
5-
const defaultHeaders = await resolve(options, config.HEADERS);
2+
const token = await resolve(options, config.token);
3+
const username = await resolve(options, config.username);
4+
const password = await resolve(options, config.password);
5+
const defaultHeaders = await resolve(options, config.headers);
66

77
const headers = new Headers({
88
Accept: 'application/json',

src/templates/core/fetch/request.hbs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { ApiRequestOptions } from './ApiRequestOptions';
55
import type { ApiResult } from './ApiResult';
66
import type { OpenAPIConfig } from './OpenAPI';
77
{{#if @root.exportClient}}
8-
import { BaseHttpRequest } from './BaseHttpRequest';
8+
import type { BaseHttpRequest } from './BaseHttpRequest';
99
{{else}}
1010
import { OpenAPI } from './OpenAPI';
1111
{{/if}}
@@ -16,6 +16,9 @@ import { OpenAPI } from './OpenAPI';
1616
{{>functions/isString}}
1717

1818

19+
{{>functions/deepAssign}}
20+
21+
1922
{{>functions/isStringWithValue}}
2023

2124

@@ -53,20 +56,19 @@ import { OpenAPI } from './OpenAPI';
5356

5457

5558
{{#if @root.exportClient}}
56-
export class FetchHttpRequest extends BaseHttpRequest {
57-
constructor(openApiConfig: OpenAPIConfig) {
58-
super(openApiConfig);
59-
}
60-
59+
export class FetchHttpRequest implements BaseHttpRequest {
6160
/**
6261
* Request using fetch client
6362
* @param options The request options from the the service
63+
* @param config The OpenAPI configuration
64+
* @param [mergeConfig] Additional optional OpenAPI configuration that will be merged with the first one
6465
* @returns ApiResult
6566
* @throws ApiError
6667
*/
67-
async request(options: ApiRequestOptions): Promise<ApiResult> {
68-
const url = getUrl(options, this.openApiConfig);
69-
const response = await sendRequest(options, this.openApiConfig, url);
68+
async request(options: ApiRequestOptions, config: OpenAPIConfig, mergeConfig?: OpenAPIConfig): Promise<ApiResult> {
69+
const conf = mergeConfig ? deepAssign(config, mergeConfig) : config;
70+
const url = getUrl(options, conf);
71+
const response = await sendRequest(options, conf, url);
7072
const responseBody = await getResponseBody(response);
7173
const responseHeader = getResponseHeader(response, options.responseHeader);
7274

src/templates/core/fetch/sendRequest.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ async function sendRequest(options: ApiRequestOptions, config: OpenAPIConfig, ur
44
headers: await getHeaders(options, config),
55
body: getRequestBody(options),
66
};
7-
if (config.WITH_CREDENTIALS) {
7+
if (config.withCredentials) {
88
request.credentials = 'include';
99
}
1010
return await fetch(url, request);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export function deepAssign(
2+
target: Record<string, unknown>,
3+
source: Record<string, unknown>,
4+
): Record<string, unknown> {
5+
const keys = Object.keys(source);
6+
for (const k of keys) {
7+
const sourceValue: unknown = source[k];
8+
const targetValue: unknown = target[k];
9+
if (Object(sourceValue) === sourceValue && Object(targetValue) === targetValue) {
10+
target[k] = deepAssign(
11+
targetValue as Record<string, unknown>,
12+
sourceValue as Record<string, unknown>,
13+
);
14+
} else {
15+
target[k] = source[k];
16+
}
17+
}
18+
return target;
19+
}

src/templates/core/functions/getUrl.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function getUrl(options: ApiRequestOptions, config: OpenAPIConfig): string {
22
const path = options.path.replace(/[:]/g, '_');
3-
const url = `${config.BASE}${path}`;
3+
const url = `${config.baseUrl}${path}`;
44

55
if (options.query) {
66
return `${url}${getQueryString(options.query)}`;

src/templates/core/index.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export { ApiError } from './ApiError';
44
export type { ApiRequestOptions } from './ApiRequestOptions';
55
export type { ApiResult } from './ApiResult';
66
{{#if @root.exportClient}}
7-
export { BaseHttpRequest } from './BaseHttpRequest';
7+
export type { BaseHttpRequest } from './BaseHttpRequest';
88
export { {{{httpRequestName}}} } from './{{{httpRequestName}}}';
99
export type { OpenAPIConfig } from './OpenAPI';
1010
{{else}}

0 commit comments

Comments
 (0)