Skip to content

Commit 73801c3

Browse files
authored
fix: Trim the trailing slash of baesUrl (#55)
1 parent 5b951e7 commit 73801c3

File tree

6 files changed

+63
-33
lines changed

6 files changed

+63
-33
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: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class Client<RequestOption> {
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: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export interface ApiClient<RequestOption> {
5959
export class Client<RequestOption> {
6060
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: 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
};
@@ -172,7 +172,7 @@ export interface ApiClient<RequestOption> {
172172
export class Client<RequestOption> {
173173
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: 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
};

test/__tests__/__snapshots__/typedef-with-template-test.ts.snap

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ export interface ApiClient<RequestOption> {
383383
export class Client<RequestOption> {
384384
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
385385
public async getIncludeLocalReference(params: Params$getIncludeLocalReference, option?: RequestOption): Promise<Response$getIncludeLocalReference$Status$200[\\"application/json\\"]> {
386-
const url = this.baseUrl + \`/get/IncludeLocalReference\`;
386+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeLocalReference\`;
387387
const headers = {
388388
Accept: \\"application/json\\"
389389
};
@@ -393,7 +393,7 @@ export class Client<RequestOption> {
393393
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
394394
}
395395
public async getIncludeRemoteReference(params: Params$getIncludeRemoteReference, option?: RequestOption): Promise<void> {
396-
const url = this.baseUrl + \`/get/IncludeRemoteReference\`;
396+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeRemoteReference\`;
397397
const headers = {
398398
\\"Content-Type\\": \\"application/json\\"
399399
};
@@ -403,7 +403,7 @@ export class Client<RequestOption> {
403403
return this.apiClient.request(\\"GET\\", url, headers, params.requestBody, queryParameters, option);
404404
}
405405
public async getFullRemoteReference(params: Params$getFullRemoteReference, option?: RequestOption): Promise<Response$getFullRemoteReference$Status$200[\\"application/json\\"]> {
406-
const url = this.baseUrl + \`/FullRemoteReference\`;
406+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/FullRemoteReference\`;
407407
const headers = {
408408
Accept: \\"application/json\\"
409409
};
@@ -413,21 +413,21 @@ export class Client<RequestOption> {
413413
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
414414
}
415415
public async getReferenceItems(option?: RequestOption): Promise<Response$getReferenceItems$Status$200[\\"application/json\\"]> {
416-
const url = this.baseUrl + \`/get/reference/items\`;
416+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/reference/items\`;
417417
const headers = {
418418
Accept: \\"application/json\\"
419419
};
420420
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
421421
}
422422
public async getBookById(params: Params$getBookById, option?: RequestOption): Promise<Response$getBookById$Status$200[\\"application/json\\"]> {
423-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
423+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
424424
const headers = {
425425
Accept: \\"application/json\\"
426426
};
427427
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
428428
}
429429
public async deleteBook(params: Params$deleteBook, option?: RequestOption): Promise<Response$deleteBook$Status$200[\\"application/json\\"]> {
430-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
430+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
431431
const headers = {
432432
Accept: \\"application/json\\"
433433
};
@@ -820,7 +820,7 @@ export interface ApiClient<RequestOption> {
820820
export class Client<RequestOption> {
821821
constructor(private apiClient: ApiClient<RequestOption>, private baseUrl: string) { }
822822
public getIncludeLocalReference(params: Params$getIncludeLocalReference, option?: RequestOption): Response$getIncludeLocalReference$Status$200[\\"application/json\\"] {
823-
const url = this.baseUrl + \`/get/IncludeLocalReference\`;
823+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeLocalReference\`;
824824
const headers = {
825825
Accept: \\"application/json\\"
826826
};
@@ -830,7 +830,7 @@ export class Client<RequestOption> {
830830
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
831831
}
832832
public getIncludeRemoteReference(params: Params$getIncludeRemoteReference, option?: RequestOption): void {
833-
const url = this.baseUrl + \`/get/IncludeRemoteReference\`;
833+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/IncludeRemoteReference\`;
834834
const headers = {
835835
\\"Content-Type\\": \\"application/json\\"
836836
};
@@ -840,7 +840,7 @@ export class Client<RequestOption> {
840840
return this.apiClient.request(\\"GET\\", url, headers, params.requestBody, queryParameters, option);
841841
}
842842
public getFullRemoteReference(params: Params$getFullRemoteReference, option?: RequestOption): Response$getFullRemoteReference$Status$200[\\"application/json\\"] {
843-
const url = this.baseUrl + \`/FullRemoteReference\`;
843+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/FullRemoteReference\`;
844844
const headers = {
845845
Accept: \\"application/json\\"
846846
};
@@ -850,21 +850,21 @@ export class Client<RequestOption> {
850850
return this.apiClient.request(\\"GET\\", url, headers, undefined, queryParameters, option);
851851
}
852852
public getReferenceItems(option?: RequestOption): Response$getReferenceItems$Status$200[\\"application/json\\"] {
853-
const url = this.baseUrl + \`/get/reference/items\`;
853+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/reference/items\`;
854854
const headers = {
855855
Accept: \\"application/json\\"
856856
};
857857
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
858858
}
859859
public getBookById(params: Params$getBookById, option?: RequestOption): Response$getBookById$Status$200[\\"application/json\\"] {
860-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
860+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
861861
const headers = {
862862
Accept: \\"application/json\\"
863863
};
864864
return this.apiClient.request(\\"GET\\", url, headers, undefined, undefined, option);
865865
}
866866
public deleteBook(params: Params$deleteBook, option?: RequestOption): Response$deleteBook$Status$200[\\"application/json\\"] {
867-
const url = this.baseUrl + \`/get/books/\${params.parameter.id}\`;
867+
const url = this.baseUrl.replace(/\\\\/$/, \\"\\") + \`/get/books/\${params.parameter.id}\`;
868868
const headers = {
869869
Accept: \\"application/json\\"
870870
};

0 commit comments

Comments
 (0)