(
evolutionOptions: EvolutionOptions,
packageCreatedIso: string | null,
)
| 288 | |
| 289 | export function useCharts() { |
| 290 | function resolveDateRange( |
| 291 | evolutionOptions: EvolutionOptions, |
| 292 | packageCreatedIso: string | null, |
| 293 | ): { start: Date; end: Date } { |
| 294 | const today = new Date() |
| 295 | const yesterday = new Date( |
| 296 | Date.UTC(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate() - 1), |
| 297 | ) |
| 298 | |
| 299 | const endDateOnly = toDateOnly(evolutionOptions.endDate) |
| 300 | const end = endDateOnly ? parseIsoDate(endDateOnly) : yesterday |
| 301 | |
| 302 | const startDateOnly = toDateOnly(evolutionOptions.startDate) |
| 303 | if (startDateOnly) { |
| 304 | const start = parseIsoDate(startDateOnly) |
| 305 | return { start, end } |
| 306 | } |
| 307 | |
| 308 | let start: Date |
| 309 | |
| 310 | if (evolutionOptions.granularity === 'year') { |
| 311 | if (packageCreatedIso) { |
| 312 | start = startOfUtcYear(new Date(packageCreatedIso)) |
| 313 | } else { |
| 314 | start = addDays(end, -(5 * 365) + 1) |
| 315 | } |
| 316 | } else if (evolutionOptions.granularity === 'month') { |
| 317 | const monthCount = evolutionOptions.months ?? 12 |
| 318 | const firstOfThisMonth = startOfUtcMonth(end) |
| 319 | start = new Date( |
| 320 | Date.UTC( |
| 321 | firstOfThisMonth.getUTCFullYear(), |
| 322 | firstOfThisMonth.getUTCMonth() - (monthCount - 1), |
| 323 | 1, |
| 324 | ), |
| 325 | ) |
| 326 | } else if (evolutionOptions.granularity === 'week') { |
| 327 | const weekCount = evolutionOptions.weeks ?? 52 |
| 328 | |
| 329 | // Full rolling weeks ending on `end` (yesterday by default) |
| 330 | // Range length is exactly weekCount * 7 days (inclusive) |
| 331 | start = addDays(end, -(weekCount * 7) + 1) |
| 332 | } else { |
| 333 | start = addDays(end, -30 + 1) |
| 334 | } |
| 335 | |
| 336 | return { start, end } |
| 337 | } |
| 338 | |
| 339 | async function fetchPackageDownloadEvolution( |
| 340 | packageName: MaybeRefOrGetter<string>, |
no test coverage detected