UNPKG

2.37 kBJavaScriptView Raw
1import { assertValidPackageName } from '../utils/assert-valid-package-name.esm.js';
2import { fetchDownloadsFromRegistry } from '../utils/fetch-downloads-from-registry.esm.js';
3import { normalizeRawDownloadPeriod } from '../utils/normalize-download-period.esm.js';
4
5/**
6 * `getDailyPackageDownloads` returns the number of downloads for a package
7 * for each day in a given time period.
8 *
9 * @param name - package name
10 * @param period - time period in which downloads happened (default: `last-week`)
11 * @param registryDownloadsAPI - URL of the registry's downloads API (default: npm registry)
12 * @param cached - accept cached responses (default: `true`)
13 *
14 * @example
15 * Get the day by day weekly downloads for package `query-registry` from the npm registry:
16 *
17 * ```typescript
18 * import { getDailyPackageDownloads } from 'query-registry';
19 *
20 * (async () => {
21 * const downloads = await getDailyPackageDownloads({ name: 'query-registry' });
22 *
23 * // Output: 'query-registry'
24 * console.log(downloads.package);
25 *
26 * // Output: 'number'
27 * console.log(typeof downloads.downloads[0].downloads);
28 * })();
29 * ```
30 *
31 * @example
32 * Get the day by day monthly downloads for package `query-registry` from the npm registry:
33 *
34 * ```typescript
35 * import { getDailyPackageDownloads } from 'query-registry';
36 *
37 * (async () => {
38 * const downloads = await getDailyPackageDownloads({ name: 'query-registry', period: 'last-month' });
39 *
40 * // Output: 'query-registry'
41 * console.log(downloads.package);
42 *
43 * // Output: 'number'
44 * console.log(typeof downloads.downloads[0].downloads);
45 * })();
46 * ```
47 *
48 * @see {@link DailyPackageDownloads}
49 * @see {@link DownloadPeriod}
50 * @see {@link npmRegistryDownloadsAPI}
51 * @see {@link https://github.com/npm/registry/blob/master/docs/download-counts.md#ranges}
52 */
53
54async function getDailyPackageDownloads({
55 name,
56 period: rawDownloadPeriod,
57 registryDownloadsAPI,
58 cached
59}) {
60 assertValidPackageName({
61 name
62 });
63 const period = normalizeRawDownloadPeriod({
64 rawDownloadPeriod
65 });
66 const endpoint = `/downloads/range/${period}/${name}`;
67 return fetchDownloadsFromRegistry({
68 endpoint,
69 registryDownloadsAPI,
70 cached
71 });
72}
73
74export { getDailyPackageDownloads };
75//# sourceMappingURL=get-daily-package-downloads.esm.js.map