Skip to content

Commit e7262ae

Browse files
committed
fix: Trim the trailing slash of baesUrl
1 parent 5b951e7 commit e7262ae

File tree

6 files changed

+70
-40
lines changed

6 files changed

+70
-40
lines changed

src/code-templates/api-client/ApiClientClass/MethodBody/PathParameter.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,15 @@ const generateUrlVariableStatement = (
2121
factory.VariableDeclaration.create({
2222
name: "url",
2323
initializer: factory.BinaryExpression.create({
24-
left: factory.PropertyAccessExpression.create({
25-
name: "baseUrl",
26-
expression: "this",
24+
left: factory.CallExpression.create({
25+
expression: factory.PropertyAccessExpression.create({
26+
expression: factory.PropertyAccessExpression.create({
27+
name: "baseUrl",
28+
expression: "this",
29+
}),
30+
name: "replace",
31+
}),
32+
argumentsArray: [factory.RegularExpressionLiteral.create({ text: "/\\\/$/" }), factory.StringLiteral.create({ text: "" })],
2733
}),
2834
operator: "+",
2935
right: Utils.generateTemplateExpression(factory, urlTemplate),
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ts from "typescript";
2+
3+
export interface Params$Create {
4+
text: string;
5+
}
6+
7+
export interface Factory {
8+
create: (params: Params$Create) => ts.RegularExpressionLiteral;
9+
}
10+
11+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
12+
params: Params$Create,
13+
): ts.RegularExpressionLiteral => {
14+
return factory.createRegularExpressionLiteral(params.text);
15+
};
16+
17+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
18+
return {
19+
create: create(context),
20+
};
21+
};

src/internal/TsGenerator/factory/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import * as ParameterDeclaration from "./ParameterDeclaration";
2121
import * as PropertyAccessExpression from "./PropertyAccessExpression";
2222
import * as PropertyAssignment from "./PropertyAssignment";
2323
import * as PropertySignature from "./PropertySignature";
24+
import * as RegularExpressionLiteral from "./RegularExpressionLiteral";
2425
import * as ReturnStatement from "./ReturnStatement";
2526
import * as StringLiteral from "./StringLiteral";
2627
import * as TemplateExpression from "./TemplateExpression";
@@ -49,6 +50,7 @@ export interface Type {
4950
TypeOperatorNode: TypeOperatorNode.Factory;
5051
Namespace: Namespace.Factory;
5152
PropertySignature: PropertySignature.Factory;
53+
RegularExpressionLiteral: RegularExpressionLiteral.Factory;
5254
TypeAliasDeclaration: TypeAliasDeclaration.Factory;
5355
TypeNode: TypeNode.Factory;
5456
LiteralTypeNode: LiteralTypeNode.Factory;
@@ -109,6 +111,7 @@ export const create = (): Type => {
109111
VariableStatement: VariableStatement.make(context),
110112
BinaryExpression: BinaryExpression.make(context),
111113
PropertyAccessExpression: PropertyAccessExpression.make(context),
114+
RegularExpressionLiteral: RegularExpressionLiteral.make(context),
112115
NoSubstitutionTemplateLiteral: NoSubstitutionTemplateLiteral.make(context),
113116
TemplateSpan: TemplateSpan.make(context),
114117
TemplateExpression: TemplateExpression.make(context),

test/__tests__/__snapshots__/spit-code-test.ts.snap

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ export interface ApiClient<RequestOption> {
105105
request: <T = SuccessResponses>(httpMethod: HttpMethod, url: string, headers: ObjectLike | any, requestBody: ObjectLike | any, queryParameters: QueryParameters | undefined, options?: RequestOption) => Promise<T>;
106106
}
107107
export class Client<RequestOption> {
108-
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
108+
constructor(private apiClient: ApiClient<RequestOption>, private serverUrl: string) { }
109109
/**
110110
* operationId: getIncludeLocalReference
111111
* Request URI: /get/IncludeLocalReference
112112
*/
113113
public async getIncludeLocalReference(params: Params$getIncludeLocalReference, option?: RequestOption): Promise<Response$getIncludeLocalReference$Status$200[\\"application/json\\"]> {
114-
const url = this.baseUrl + \`/get/IncludeLocalReference\`;
114+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeLocalReference\`;
115115
const headers = {
116116
Accept: \\"application/json\\"
117117
};
@@ -125,7 +125,7 @@ export class Client<RequestOption> {
125125
* Request URI: /get/IncludeRemoteReference
126126
*/
127127
public async getIncludeRemoteReference(params: Params$getIncludeRemoteReference, option?: RequestOption): Promise<void> {
128-
const url = this.baseUrl + \`/get/IncludeRemoteReference\`;
128+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeRemoteReference\`;
129129
const headers = {
130130
\\"Content-Type\\": \\"application/json\\"
131131
};
@@ -139,7 +139,7 @@ export class Client<RequestOption> {
139139
* Request URI: /FullRemoteReference
140140
*/
141141
public async getFullRemoteReference(params: Params$getFullRemoteReference, option?: RequestOption): Promise<Response$getFullRemoteReference$Status$200[\\"application/json\\"]> {
142-
const url = this.baseUrl + \`/FullRemoteReference\`;
142+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/FullRemoteReference\`;
143143
const headers = {
144144
Accept: \\"application/json\\"
145145
};
@@ -153,7 +153,7 @@ export class Client<RequestOption> {
153153
* Request URI: /get/reference/items
154154
*/
155155
public async getReferenceItems(option?: RequestOption): Promise<Response$getReferenceItems$Status$200[\\"application/json\\"]> {
156-
const url = this.baseUrl + \`/get/reference/items\`;
156+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/reference/items\`;
157157
const headers = {
158158
Accept: \\"application/json\\"
159159
};
@@ -164,7 +164,7 @@ export class Client<RequestOption> {
164164
* Request URI: /get/books/{id}
165165
*/
166166
public async getBookById(params: Params$getBookById, option?: RequestOption): Promise<Response$getBookById$Status$200[\\"application/json\\"]> {
167-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
167+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
168168
const headers = {
169169
Accept: \\"application/json\\"
170170
};
@@ -175,7 +175,7 @@ export class Client<RequestOption> {
175175
* Request URI: /get/books/{id}
176176
*/
177177
public async deleteBook(params: Params$deleteBook, option?: RequestOption): Promise<Response$deleteBook$Status$200[\\"application/json\\"]> {
178-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
178+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
179179
const headers = {
180180
Accept: \\"application/json\\"
181181
};

test/__tests__/__snapshots__/template-only-test.ts.snap

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ export interface ApiClient<RequestOption> {
5757
request: <T = SuccessResponses>(httpMethod: HttpMethod, url: string, headers: ObjectLike | any, requestBody: ObjectLike | any, queryParameters: QueryParameters | undefined, options?: RequestOption) => Promise<T>;
5858
}
5959
export class Client<RequestOption> {
60-
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
60+
constructor(private apiClient: ApiClient<RequestOption>, private serverUrl: string) { }
6161
public async getIncludeLocalReference(params: Params$getIncludeLocalReference, option?: RequestOption): Promise<Response$getIncludeLocalReference$Status$200[\\"application/json\\"]> {
62-
const url = this.baseUrl + \`/get/IncludeLocalReference\`;
62+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeLocalReference\`;
6363
const headers = {
6464
Accept: \\"application/json\\"
6565
};
@@ -69,7 +69,7 @@ export class Client<RequestOption> {
6969
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
7070
}
7171
public async getIncludeRemoteReference(params: Params$getIncludeRemoteReference, option?: RequestOption): Promise<void> {
72-
const url = this.baseUrl + \`/get/IncludeRemoteReference\`;
72+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeRemoteReference\`;
7373
const headers = {
7474
\\"Content-Type\\": \\"application/json\\"
7575
};
@@ -79,7 +79,7 @@ export class Client<RequestOption> {
7979
return this.apiClient.request(\\"GET\\", url, headers, params.requestBody, queryParameters, option);
8080
}
8181
public async getFullRemoteReference(params: Params$getFullRemoteReference, option?: RequestOption): Promise<Response$getFullRemoteReference$Status$200[\\"application/json\\"]> {
82-
const url = this.baseUrl + \`/FullRemoteReference\`;
82+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/FullRemoteReference\`;
8383
const headers = {
8484
Accept: \\"application/json\\"
8585
};
@@ -89,21 +89,21 @@ export class Client<RequestOption> {
8989
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
9090
}
9191
public async getReferenceItems(option?: RequestOption): Promise<Response$getReferenceItems$Status$200[\\"application/json\\"]> {
92-
const url = this.baseUrl + \`/get/reference/items\`;
92+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/reference/items\`;
9393
const headers = {
9494
Accept: \\"application/json\\"
9595
};
9696
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
9797
}
9898
public async getBookById(params: Params$getBookById, option?: RequestOption): Promise<Response$getBookById$Status$200[\\"application/json\\"]> {
99-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
99+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
100100
const headers = {
101101
Accept: \\"application/json\\"
102102
};
103103
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
104104
}
105105
public async deleteBook(params: Params$deleteBook, option?: RequestOption): Promise<Response$deleteBook$Status$200[\\"application/json\\"]> {
106-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
106+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
107107
const headers = {
108108
Accept: \\"application/json\\"
109109
};
@@ -170,9 +170,9 @@ export interface ApiClient<RequestOption> {
170170
request: <T = SuccessResponses>(httpMethod: HttpMethod, url: string, headers: ObjectLike | any, requestBody: ObjectLike | any, queryParameters: QueryParameters | undefined, options?: RequestOption) => T;
171171
}
172172
export class Client<RequestOption> {
173-
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
173+
constructor(private apiClient: ApiClient<RequestOption>, private serverUrl: string) { }
174174
public getIncludeLocalReference(params: Params$getIncludeLocalReference, option?: RequestOption): Response$getIncludeLocalReference$Status$200[\\"application/json\\"] {
175-
const url = this.baseUrl + \`/get/IncludeLocalReference\`;
175+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeLocalReference\`;
176176
const headers = {
177177
Accept: \\"application/json\\"
178178
};
@@ -182,7 +182,7 @@ export class Client<RequestOption> {
182182
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
183183
}
184184
public getIncludeRemoteReference(params: Params$getIncludeRemoteReference, option?: RequestOption): void {
185-
const url = this.baseUrl + \`/get/IncludeRemoteReference\`;
185+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeRemoteReference\`;
186186
const headers = {
187187
\\"Content-Type\\": \\"application/json\\"
188188
};
@@ -192,7 +192,7 @@ export class Client<RequestOption> {
192192
return this.apiClient.request(\\"GET\\", url, headers, params.requestBody, queryParameters, option);
193193
}
194194
public getFullRemoteReference(params: Params$getFullRemoteReference, option?: RequestOption): Response$getFullRemoteReference$Status$200[\\"application/json\\"] {
195-
const url = this.baseUrl + \`/FullRemoteReference\`;
195+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/FullRemoteReference\`;
196196
const headers = {
197197
Accept: \\"application/json\\"
198198
};
@@ -202,21 +202,21 @@ export class Client<RequestOption> {
202202
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
203203
}
204204
public getReferenceItems(option?: RequestOption): Response$getReferenceItems$Status$200[\\"application/json\\"] {
205-
const url = this.baseUrl + \`/get/reference/items\`;
205+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/reference/items\`;
206206
const headers = {
207207
Accept: \\"application/json\\"
208208
};
209209
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
210210
}
211211
public getBookById(params: Params$getBookById, option?: RequestOption): Response$getBookById$Status$200[\\"application/json\\"] {
212-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
212+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
213213
const headers = {
214214
Accept: \\"application/json\\"
215215
};
216216
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
217217
}
218218
public deleteBook(params: Params$deleteBook, option?: RequestOption): Response$deleteBook$Status$200[\\"application/json\\"] {
219-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
219+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
220220
const headers = {
221221
Accept: \\"application/json\\"
222222
};
@@ -254,7 +254,7 @@ export interface ApiClient<RequestOption> {
254254
request: <T = SuccessResponses>(httpMethod: HttpMethod, url: string, headers: ObjectLike | any, requestBody: ObjectLike | any, queryParameters: QueryParameters | undefined, options?: RequestOption) => T;
255255
}
256256
export class Client<RequestOption> {
257-
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
257+
constructor(private apiClient: ApiClient<RequestOption>, private serverUrl: string) { }
258258
}
259259
"
260260
`;

0 commit comments

Comments
 (0)