UNPKG

list-dependents

Version:

Lists all dependents of a project, using npm or ecosyste.ms

62 lines (48 loc) 1.33 kB
import { typesafeIsArray } from './utils.js'; /** * @typedef JsonPagesOptions * @property {number|undefined} [maxPages] * @property {string|undefined} [pageQueryParam] * @property {number|undefined} [pageStart] * @property {number|undefined} [perPage] * @property {string|undefined} [perPageQueryParam] */ /** * @param {import('got').Got} client * @param {string} baseUrl * @param {JsonPagesOptions} options * @returns {AsyncGenerator<unknown, void, undefined>} */ export async function * fetchJsonPages (client, baseUrl, options = {}) { if (!baseUrl || typeof baseUrl !== 'string') throw new TypeError('Expected a non-empty string name'); const { maxPages, pageQueryParam = 'page', pageStart = 1, perPage = 36, perPageQueryParam = 'per_page', } = options; const url = new URL(baseUrl); url.searchParams.set(perPageQueryParam, perPage + ''); let page = pageStart; while (true) { if (maxPages && page - pageStart >= maxPages) { break; } url.searchParams.set(pageQueryParam, page + ''); /** @type {unknown} */ const list = await client(url, { timeout: { request: 60000, }, }).json(); if (!typesafeIsArray(list)) { break; } yield * list; if (list.length < perPage) { break; } page += 1; } }