UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

72 lines (71 loc) 2 kB
import { logger } from "../../../logger/index.js"; import { isNotNullOrUndefined } from "../../../util/array.js"; import { MaybeTimestamp } from "../../../util/timestamp.js"; import { PagedResponse } from "./schema/prefix-dev.js"; //#region lib/modules/datasource/conda/prefix-dev.ts const MAX_PREFIX_DEV_GRAPHQL_PAGE = 100; const query = ` query search($channel: String!, $package: String!, $page: Int = 0) { package(channelName: $channel, name: $package) { variants(limit: 500, page: $page) { pages page { createdAt version yankedReason urls { url kind } } } } } `; async function getReleases(http, channel, packageName) { logger.debug({ channel, packageName }, "lookup package from prefix.dev graphql API"); const files = await getPagedResponse(http, query, { channel, package: packageName }); if (!files.length) return null; let homepage = void 0; let sourceUrl = void 0; const releases = {}; for (const file of files) { const version = file.version; homepage ??= file.urls.HOME; sourceUrl ??= file.urls.DEV; releases[version] ??= { version }; releases[version].releaseTimestamp = releases[version].releaseTimestamp ?? MaybeTimestamp.parse(file.createdAt); releases[version].isDeprecated ??= isNotNullOrUndefined(file.yankedReason); } return { homepage, sourceUrl, releases: Object.values(releases) }; } async function getPagedResponse(http, query, data) { const result = []; for (let page = 0; page <= MAX_PREFIX_DEV_GRAPHQL_PAGE; page++) { const currentPage = (await http.postJson("https://prefix.dev/api/graphql", { body: { operationName: "search", query, variables: { ...data, page } } }, PagedResponse)).body.data.package?.variants; if (!currentPage) break; result.push(...currentPage.page); if (page >= currentPage.pages - 1) break; } return result; } //#endregion export { getReleases }; //# sourceMappingURL=prefix-dev.js.map