Skip to content

Commit

Permalink
refactor(util/range): Extract range generator util (#13532)
Browse files Browse the repository at this point in the history
  • Loading branch information
zharinov committed Jan 13, 2022
1 parent b0acc97 commit 1b65125
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 12 deletions.
8 changes: 1 addition & 7 deletions lib/datasource/adoptium-java/index.spec.ts
Expand Up @@ -2,6 +2,7 @@ import { getPkgReleases } from '..';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { range } from '../../util/range';
import { datasource, defaultRegistryUrl, pageSize } from './common';

const res1 = loadFixture('page.json');
Expand All @@ -10,13 +11,6 @@ const jre = loadFixture('jre.json');
function getPath(page: number, imageType = 'jdk'): string {
return `/v3/info/release_versions?page_size=${pageSize}&image_type=${imageType}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium&page=${page}`;
}
function* range(start: number, end: number): Generator<number, number, number> {
yield start;
if (start === end) {
return;
}
yield* range(start + 1, end);
}

const depName = 'java';

Expand Down
11 changes: 6 additions & 5 deletions lib/util/http/github.ts
Expand Up @@ -10,6 +10,7 @@ import {
import { logger } from '../../logger';
import { ExternalHostError } from '../../types/errors/external-host-error';
import { maskToken } from '../mask';
import { range } from '../range';
import { regEx } from '../regex';
import { parseLinkHeader } from '../url';
import { GotLegacyError } from './legacy';
Expand Down Expand Up @@ -217,17 +218,17 @@ export class GithubHttp extends Http<GithubHttpOptions, GithubHttpOptions> {
if (!process.env.RENOVATE_PAGINATE_ALL && opts.paginate !== 'all') {
lastPage = Math.min(pageLimit, lastPage);
}
const queue = Array.from(new Array(lastPage), (_, i) => `${i + 1}`)
.slice(1)
.map((pageNumber) => (): Promise<HttpResponse<T>> => {
const queue = [...range(2, lastPage)].map(
(pageNumber) => (): Promise<HttpResponse<T>> => {
const nextUrl = new URL(linkHeader.next.url, baseUrl);
nextUrl.searchParams.set('page', pageNumber);
nextUrl.searchParams.set('page', String(pageNumber));
return this.request<T>(
nextUrl,
{ ...opts, paginate: false },
okToRetry
);
});
}
);
const pages = await pAll(queue, { concurrency: 5 });
if (opts.paginationField && is.plainObject(result.body)) {
const paginatedResult = result.body[opts.paginationField];
Expand Down
26 changes: 26 additions & 0 deletions lib/util/range.spec.ts
@@ -0,0 +1,26 @@
import { range } from './range';

describe('util/range', () => {
test.each`
start | end | expected
${0} | ${0} | ${[0]}
${0} | ${1} | ${[0, 1]}
${0} | ${2} | ${[0, 1, 2]}
${0} | ${3} | ${[0, 1, 2, 3]}
${1} | ${0} | ${[]}
${1} | ${1} | ${[1]}
${2} | ${1} | ${[]}
${1} | ${2} | ${[1, 2]}
${2} | ${2} | ${[2]}
${3} | ${2} | ${[]}
${0} | ${3} | ${[0, 1, 2, 3]}
${1} | ${3} | ${[1, 2, 3]}
${2} | ${3} | ${[2, 3]}
${3} | ${3} | ${[3]}
${4} | ${3} | ${[]}
${-2} | ${2} | ${[-2, -1, 0, 1, 2]}
`('range($start, $end)', ({ start, end, expected }) => {
const res = range(start, end);
expect([...res]).toEqual(expected);
});
});
9 changes: 9 additions & 0 deletions lib/util/range.ts
@@ -0,0 +1,9 @@
export function* range(
start: number,
end: number
): Generator<number, void, void> {
for (let i = start; i <= end; i += 1) {
yield i;
}
return;
}

0 comments on commit 1b65125

Please sign in to comment.