+ import { downloadCount } from './color-formatters.js'
+import { metric } from './text-formatters.js'
+
+/**
+ * Handles rendering concerns of badges that display
+ * download counts, with override/customization support
+ *
+ * @param {object} attrs Refer to individual attrs
+ * @param {number} attrs.downloads Number of downloads
+ * @param {string} [attrs.interval] Period or interval the downloads occurred
+ * (e.g. day, week, month). If provided then this Will be reflected
+ * in the badge message unless overridden by other message-related parameters
+ * @param {string} [attrs.version] Version or tag that was downloaded
+ * which will be reflected in the badge label (unless the label is overridden)
+ * @param {string} [attrs.labelOverride] If provided then the badge label is set to this
+ * value overriding any other label-related parameters
+ * @param {string} [attrs.colorOverride] If provided then the badge color is set to this
+ * value instead of the color being based on the count of downloads
+ * @param {string} [attrs.messageSuffixOverride] If provided then the badge message will
+ * will have this value added to the download count, separated with a space
+ * @returns {object} Badge
+ */
+function renderDownloadsBadge({
+ downloads,
+ interval,
+ version,
+ labelOverride,
+ colorOverride,
+ messageSuffixOverride,
+}) {
+ let messageSuffix = ''
+ if (messageSuffixOverride) {
+ messageSuffix = ` ${messageSuffixOverride}`
+ } else if (interval) {
+ messageSuffix = `/${interval}`
+ }
+
+ let label
+ if (labelOverride) {
+ label = labelOverride
+ } else if (version) {
+ label = `downloads@${version}`
+ }
+
+ return {
+ label,
+ color: colorOverride || downloadCount(downloads),
+ message: `${metric(downloads)}${messageSuffix}`,
+ }
+}
+
+export { renderDownloadsBadge }
+
+
+