mirror of
https://github.com/vercel/eve.git
synced 2026-09-20 05:35:39 +08:00
3705b848c6
Signed-off-by: John Pham <john.pham@vercel.com>
30 lines
850 B
TypeScript
30 lines
850 B
TypeScript
const FEED_BASELINE_TIMESTAMP = Date.parse("2026-06-17T00:00:00.000Z");
|
|
|
|
interface FeedPage {
|
|
data: object;
|
|
}
|
|
|
|
interface DatedFeedPage<Page extends FeedPage> {
|
|
lastModified: Date;
|
|
page: Page;
|
|
}
|
|
|
|
const getLastModified = (data: object): Date | undefined =>
|
|
"lastModified" in data && data.lastModified instanceof Date ? data.lastModified : undefined;
|
|
|
|
export const selectDatedFeedPages = <Page extends FeedPage>(
|
|
pages: readonly Page[],
|
|
): DatedFeedPage<Page>[] =>
|
|
pages.map((page) => ({
|
|
lastModified: getLastModified(page.data) ?? new Date(FEED_BASELINE_TIMESTAMP),
|
|
page,
|
|
}));
|
|
|
|
export const getFeedUpdatedAt = <Page extends FeedPage>(
|
|
pages: readonly DatedFeedPage<Page>[],
|
|
): Date =>
|
|
pages.reduce(
|
|
(latest, { lastModified }) => (lastModified > latest ? lastModified : latest),
|
|
new Date(FEED_BASELINE_TIMESTAMP),
|
|
);
|