UNPKG

renovate

Version:

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

64 lines (63 loc) 2.08 kB
import { logger } from "../../../logger/index.js"; import { dequal } from "dequal"; import { DateTime } from "luxon"; //#region lib/modules/platform/github/api-cache.ts var ApiCache = class { cache; constructor(cache) { this.cache = cache; } getItems() { return Object.values(this.cache.items); } getItem(number) { return this.cache.items[number] ?? null; } /** * It intentionally doesn't alter `lastModified` cache field. * * The point is to allow cache modifications during run, but * force fetching and refreshing of modified items next run. */ updateItem(item) { this.cache.items[item.number] = item; } getLastModified() { return this.cache.lastModified; } updateLastModified(timestamp) { const current = this.cache.lastModified ? DateTime.fromISO(this.cache.lastModified) : null; const incoming = DateTime.fromISO(timestamp); if (!current || incoming > current) this.cache.lastModified = timestamp; } /** * Copies items from `page` to cache and updates the internal timestamp. * * @param page Items sorted by `updated_at` desc (most recent first). * @returns `true` when the next page is likely to contain fresh items. */ reconcile(page) { if (page.length === 0) return false; const { items } = this.cache; let { lastModified } = this.cache; let needNextPage = true; for (const newItem of page) { const number = newItem.number; const oldItem = items[number]; const itemNewTime = DateTime.fromISO(newItem.updated_at); const itemOldTime = oldItem?.updated_at ? DateTime.fromISO(oldItem.updated_at) : null; if (!dequal(oldItem, newItem)) { logger.trace(`PR cache: updating item ${number}`); items[number] = newItem; } needNextPage = itemOldTime ? itemOldTime < itemNewTime : true; const cacheOldTime = lastModified ? DateTime.fromISO(lastModified) : null; if (!cacheOldTime || itemNewTime > cacheOldTime) lastModified = newItem.updated_at; } this.cache.lastModified = lastModified; return needNextPage; } }; //#endregion export { ApiCache }; //# sourceMappingURL=api-cache.js.map