Skip to content

Commit bf176de

Browse files
committed
use search params instead of strings
1 parent eacc9b0 commit bf176de

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

components/server/src/bitbucket-server/bitbucket-server-api.ts

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { inject, injectable } from "inversify";
1010
import { AuthProviderParams } from "../auth/auth-provider";
1111
import { BitbucketServerTokenHelper } from "./bitbucket-server-token-handler";
1212
import { CancellationToken } from "vscode-jsonrpc";
13+
import { URLSearchParams } from "url";
1314

1415
@injectable()
1516
export class BitbucketServerApi {
@@ -311,24 +312,36 @@ export class BitbucketServerApi {
311312
if (isCancelled()) {
312313
return [];
313314
}
314-
const cap = (query?.cap || 0) > 0 ? query.cap! : 10;
315-
let requestsLeft = cap;
316-
const limit = `limit=${(query?.limit || 0) > 0 ? query.limit! : 1000}&`;
317-
const permission = query.permission ? `permission=${query.permission}&` : "";
318-
const runQuery = async (params: string) => {
315+
316+
const fetchRepos = async (params: { [key: string]: string } = {}) => {
319317
if (isCancelled()) {
320318
return [];
321319
}
320+
// Ensure we only load as many pages as requested
321+
let requestsLeft = query?.cap ?? 10;
322+
322323
const result: BitbucketServer.Repository[] = [];
323324
let isLastPage = false;
324325
let start = 0;
325326
while (!isLastPage && requestsLeft > 0) {
326327
if (isCancelled()) {
327328
return [];
328329
}
330+
331+
const requestParams = new URLSearchParams({
332+
// Apply default params
333+
limit: `${query?.limit ?? 1000}`,
334+
permission: query.permission ?? "REPO_READ",
335+
start: `${start}`,
336+
});
337+
// Merge params from argument in
338+
Object.keys(params).forEach((key) => {
339+
requestParams.set(key, params[key]);
340+
});
341+
329342
const pageResult = await this.runQuery<BitbucketServer.Paginated<BitbucketServer.Repository>>(
330343
userOrToken,
331-
`/repos?${permission}${limit}start=${start}&${params}`,
344+
`/repos?${requestParams.toString()}`,
332345
);
333346
requestsLeft = requestsLeft - 1;
334347
if (pageResult.values) {
@@ -349,24 +362,16 @@ export class BitbucketServerApi {
349362

350363
// Query by name & projectname in parrallel
351364
const [nameResults, projectResults] = await Promise.all([
352-
runQuery(`name=${query.searchString}`),
353-
runQuery(`projectname=${query.searchString}`),
365+
fetchRepos({ name: query.searchString }),
366+
fetchRepos({ projectname: query.searchString }),
354367
]);
355368
for (const repo of [...nameResults, ...projectResults]) {
356369
results.set(repo.id, repo);
357370
}
358371

359372
return Array.from(results.values());
360-
} else if (query.searchString?.trim() === "" && (query.limit || query.cap)) {
361-
// Empty search w/ limit/cap set - just grab latest repos
362-
const { values = [] } = await this.runQuery<BitbucketServer.Paginated<BitbucketServer.Repository>>(
363-
userOrToken,
364-
`/profile/recent/repos?${permission}${limit}`,
365-
);
366-
367-
return values;
368373
} else {
369-
return await runQuery(`limit=1000`);
374+
return await fetchRepos();
370375
}
371376
}
372377

0 commit comments

Comments
 (0)